T113-i Timer 函数如何使用?
typedef enum
{
SUNXI_TMR0 = 0,
SUNXI_TMR1,
SUNXI_TMR2,
SUNXI_TMR3,
SUNXI_TMR4,
SUNXI_TMR_NUM,
}hal_timer_id_t;
void hal_timer_init(hal_timer_id_t timer);
void hal_timer_uninit(hal_timer_id_t timer);
void hal_timer_stop(hal_timer_id_t timer);
void hal_timer_start(hal_timer_id_t timer, bool periodic);
hal_timer_status_t hal_timer_set_oneshot(hal_timer_id_t timer, uint32_t delay_us, timer_callback callback, void *callback_param);
hal_timer_status_t hal_timer_set_periodic(hal_timer_id_t timer, uint32_t delay_us, timer_callback callback, void *callback_param);
T113 有 5 个 Timer 吗?手册上写 有 2 个 32 位定时器,2 个高速定时器。
本帖最后由 0346 于 2024-5-28 17:58 编辑
3.2 接口使用说明
3.2.1 Timer 初始化接口
• 原型:void hal_timer_init(hal_timer_id_t timer)
• 功能:Timer 模块初始化,主要初始化一些工作模式,时钟等等
• 参数:timer,要操作的 timer 序号 • 返回值:无
3.2.2 Timer 失能接口
• 原型:void hal_timer_uninit(hal_timer_id_t timer)
• 功能:Timer 模块失能,主要失能一些工作模式,时钟等等
• 参数:timer,要操作的 timer 序号
• 返回值:无
3.2.3 Timer 开启计数接口
• 原型:void hal_timer_start(hal_timer_id_t timer, bool periodic)
• 功能:Timer 模块开启计数
• 参数:timer,要操作的 timer 序号;periodic,计数周期
• 返回值:无
3.2.4 Timer 关闭计数接口
• 原型:void hal_timer_stop(hal_timer_id_t timer, bool periodic)
• 功能:Timer 模块关闭计数
• 参数:timer,要操作的 timer 序号
• 返回值:无
3.2.5 Timer 周期性定时功能
• 原型:hal_timer_status_t hal_timer_set_periodic(hal_timer_id_t timer, uint32_t delay_us, timer_callback callback, void *callback_param);
• 功能:设置定时功能,延时 delay_us us 后响应中断,周期性触发
• 参数:
• hal_timer_id_t timer:timer 的 id 值,表示使用哪个 timer
• uint32_t delay_us:延时时间,us
• timer_callback callback:中断回调函数
• void *callback_param:中断函数传入的参数
• 返回值:HAL_TIMER_STATUS_OK:设置成功;HAL_TIMER_STATUS_ERROR 设置失败
3.2.6 Timer 单次定时功能
• 原型:hal_timer_status_t hal_timer_set_oneshot(hal_timer_id_t timer, uint32_t delay_us, timer_callback callback, void *callback_param);
• 功能:设置定时功能,延时 delay_us us 后响应中断,只触发一次
• 参数:
• hal_timer_id_t timer:timer 的 id 值,表示使用哪个 timer
• uint32_t delay_us:延时时间,us
• timer_callback callback:中断回调函数
• void *callback_param:中断函数传入的参数
• 返回值:HAL_TIMER_STATUS_OK:设置成功;HAL_TIMER_STATUS_ERROR 设置失败
模块使用范例
hal_timer_init(timer);//初始化某个
timer hal_timer_set_oneshot(timer, delay_ms * 1000, hal_timer_irq_callback, NULL);//设置timer的单次触发模式,并填写回调 函数
调试方法
首先开启测试宏定义 HAL_TEST_TIMER,路径:Drivers Options > soc related device drivers > TIMER Devices。
可在命令行输入 “hal_timer x” 查看当前 timer 是否正常工作。
如果开启SUNXI_TMR0 周期中断,该怎么写?
hal_timer_init(SUNXI_TMR0);
hal_timer_set_periodic(SUNXI_TMR0, 1000000, hal_timer_irq_callback, NULL); <---- 这句怎么写?
TMR0 中断函数名怎么写?
static void SUNXI_TMR0_callback(void *param)
{
if(test1==0)
{
/* Set gpio output low level */
hal_gpio_set_data(GPIO_LED, GPIO_DATA_LOW);
test1 = 1;
}
else
{
/* Set gpio output high level */
hal_gpio_set_data(GPIO_LED, GPIO_DATA_HIGH);
test1 = 0;
}
}
static void User_Program_task(void *pdata)
{
//const char *name = "User_Program";
printf( "DSP USER PROGRAM START running---\n" );
hal_timer_init(SUNXI_TMR0);
hal_timer_set_periodic(SUNXI_TMR0, 1000000, (timer_callback)SUNXI_TMR0_callback, NULL);
hal_timer_start(SUNXI_TMR0, 1);
编译通过,中断程序不执行,请·高手看看哪里出问题?
页:
[1]