本文來(lái)源電子發(fā)燒友社區(qū),作者:II, 帖子地址:https://bbs.elecfans.com/jishu_2293222_1_1.html
試用CSM32RV20開(kāi)發(fā)板時(shí),想做個(gè)計(jì)時(shí)器顯示時(shí)分秒,看了手冊(cè)和論壇里前輩的帖子,rtc似乎不太適用,便想采用timer,可是折騰半天也沒(méi)成功。
首先main中設(shè)置timer1計(jì)數(shù)方式,使能中斷:
Timer1_UpCounting_Mode_Init();//向上計(jì)數(shù)Interrupt_Enable(TIMER1_updata_int_ID);//CLIC使能中斷
SYS_Interrupt_Enable();//CLIC開(kāi)總中斷
修改timer.c中的Timer1_Update_IRQhandler函數(shù):
volatile uint8_t timer_fg = 0;
volatile uint16_t irq_cnt = 0;
void Timer1_Update_IRQhandler(void)
{
if(TIMER1->SR&0x1)
{
TIMER1->SR &= ~0x1;
}
irq_cnt ++;
//ee_printf("in Timer1_Update_IRQhandlerrn");
if(irq_cnt == 1000) {
Interrupt_Disable(TIMER1_updata_int_ID);
//ee_printf("timer cnt 1000rn");
irq_cnt = 0;
timer_fg = 1;
}
}
這里的irq_cnt++到5次應(yīng)用就停止了,打印了一堆亂碼。需要注意的是,不要在中斷函數(shù)中打印debug信息,一方面打印頻率會(huì)非常高,并且printf過(guò)程中會(huì)被中斷打斷,導(dǎo)致亂碼。CSM32RV20開(kāi)發(fā)板如果串口打印非常頻繁,會(huì)影響新程序的下載,下載時(shí)按復(fù)位沒(méi)反應(yīng)。剛開(kāi)始出現(xiàn)無(wú)法下載現(xiàn)象時(shí)我很慌亂,意為這板子被我玩壞了,后來(lái)按其他板子的經(jīng)驗(yàn),按住復(fù)位重新加電,待出現(xiàn)下載串口時(shí)立刻點(diǎn)下載,才又下載成功了。:(
中斷函數(shù)中的Interrupt_Disable(TIMER1_updata_int_ID)似乎沒(méi)有起作用,中斷沒(méi)有停下來(lái)。
修改分頻和預(yù)裝載值,也沒(méi)有達(dá)到預(yù)期效果。分頻數(shù)改大后,索性沒(méi)有中斷了。我曾在Timer1_UpCounting_Mode_Init中試了幾個(gè)值。
而且使能中斷后,串口打印信息總是出現(xiàn)亂碼。
看來(lái)timer方式暫時(shí)不行了,用笨辦法簡(jiǎn)單實(shí)現(xiàn)一個(gè)試用demo吧。代碼如下,獻(xiàn)丑了。待有空時(shí)好好研究CSM32RV20的timer和rtc。
-
南京中科微
+關(guān)注
關(guān)注
0文章
60瀏覽量
772
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論