目录
- 简介
- 初始化
- 代码
- 测试
- API补充
简介
定时中断。
初始化
开启定时器,最多支持8个硬件定时器
定时周期1ms
增加一个GPIO输出口PRG0_PRU1_GPO15/M4 ,我们会在定时中断中每隔1ms翻转该引脚,理想情况下应该在该引脚上测得2ms周期500Hz的矩形波。
代码
注意:下面的函数名timer_interrupt要和sysconfig中的一致。
注意:定时中断相关标志位会在用户自定义的定时中断函数之后,被sysconfig生成的代码清除,用户无需手动清除标志位。
void timer_interrupt(void *args)
{uint32_t baseAddr = (uint32_t) AddrTranslateP_getLocalAddr(CONFIG_GPIO0_BASE_ADDR);static uint8_t i = 0;i = (i + 1)%2;if(i)GPIO_pinWriteHigh(baseAddr, CONFIG_GPIO0_PIN);elseGPIO_pinWriteLow(baseAddr, CONFIG_GPIO0_PIN);
}
测试
API补充
参考<kernel/dpl/TimerP.h>,截取了可能会用到的部分。
//启动,如果在sysconfig中没有勾选初始化之后启动,用户需要自行在合适的地方启动定时器
void TimerP_start(uint32_t baseAddr);
//停止
void TimerP_stop(uint32_t baseAddr);
//获取当前计数值
uint32_t TimerP_getCount(uint32_t baseAddr);
//获取重载值
uint32_t TimerP_getReloadCount(uint32_t baseAddr);
上述baseAddr参数,可以通如下方式获得, 其中的CONFIG_TIMER0是配置的timer名称
gTimerBaseAddr[CONFIG_TIMER0]TimerP_start(gTimerBaseAddr[CONFIG_TIMER0]);
couunt = TimerP_getCount(gTimerBaseAddr[CONFIG_TIMER0])