RISC-V技术论坛
直播中

ll

7年用户 10经验值
擅长:可编程逻辑
私信 关注
[经验]

【南京中科微CSM32RV20开发板试用体验】+定时器时钟试验暂未成功

试用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_IRQhandler\r\n");
    
    if(irq_cnt == 1000) {
        Interrupt_Disable(TIMER1_updata_int_ID);
        //ee_printf("timer cnt 1000\r\n");
        irq_cnt = 0;
        timer_fg = 1;
    }
}

这里的irq_cnt++到5次应用就停止了,打印了一堆乱码。需要注意的是,不要在中断函数中打印debug信息,一方面打印频率会非常高,并且printf过程中会被中断打断,导致乱码。CSM32RV20开发板如果串口打印非常频繁,会影响新程序的下载,下载时按复位没反应。刚开始出现无法下载现象时我很慌乱,意为这板子被我玩坏了,后来按其他板子的经验,按住复位重新加电,待出现下载串口时立刻点下载,才又下载成功了。:(

中断函数中的Interrupt_Disable(TIMER1_updata_int_ID)似乎没有起作用,中断没有停下来。

修改分频和预装载值,也没有达到预期效果。分频数改大后,索性没有中断了。我曾在Timer1_UpCounting_Mode_Init中试了几个值。
image.png

而且使能中断后,串口打印信息总是出现乱码。

看来timer方式暂时不行了,用笨办法简单实现一个试用demo吧。代码如下,献丑了。待有空时好好研究CSM32RV20的timer和rtc。

image.png

VID_20220713_223101

回帖(1)

dianzi

2022-7-14 10:04:28
demo 能跑, 自己写的会跑乱码?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分