本文來源電子發燒友社區,作者:II, 帖子地址:https://bbs.elecfans.com/jishu_2293222_1_1.html
試用CSM32RV20開發板時,想做個計時器顯示時分秒,看了手冊和論壇里前輩的帖子,rtc似乎不太適用,便想采用timer,可是折騰半天也沒成功。
首先main中設置timer1計數方式,使能中斷:
Timer1_UpCounting_Mode_Init();//向上計數Interrupt_Enable(TIMER1_updata_int_ID);//CLIC使能中斷
SYS_Interrupt_Enable();//CLIC開總中斷
修改timer.c中的Timer1_Update_IRQhandler函數:
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次應用就停止了,打印了一堆亂碼。需要注意的是,不要在中斷函數中打印debug信息,一方面打印頻率會非常高,并且printf過程中會被中斷打斷,導致亂碼。CSM32RV20開發板如果串口打印非常頻繁,會影響新程序的下載,下載時按復位沒反應。剛開始出現無法下載現象時我很慌亂,意為這板子被我玩壞了,后來按其他板子的經驗,按住復位重新加電,待出現下載串口時立刻點下載,才又下載成功了。:(
中斷函數中的Interrupt_Disable(TIMER1_updata_int_ID)似乎沒有起作用,中斷沒有停下來。
修改分頻和預裝載值,也沒有達到預期效果。分頻數改大后,索性沒有中斷了。我曾在Timer1_UpCounting_Mode_Init中試了幾個值。
而且使能中斷后,串口打印信息總是出現亂碼。
看來timer方式暫時不行了,用笨辦法簡單實現一個試用demo吧。代碼如下,獻丑了。待有空時好好研究CSM32RV20的timer和rtc。
-
南京中科微
+關注
關注
0文章
60瀏覽量
782
發布評論請先 登錄
相關推薦
評論