设为首页收藏本站
查看: 318|回复: 3

T113-i Timer 函数如何使用?

[复制链接]

21

主题

34

回帖

283

积分

中级会员

积分
283
Zhangyubiao 发表于 2024-5-28 15:29:49 | 显示全部楼层 |阅读模式



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 个高速定时器。

回复

使用道具 举报

0

主题

2

回帖

8

积分

新手上路

积分
8
0346 发表于 2024-5-28 17:55:52 | 显示全部楼层
本帖最后由 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 是否正常工作。
回复 支持 反对

使用道具 举报

21

主题

34

回帖

283

积分

中级会员

积分
283
 楼主| Zhangyubiao 发表于 2024-5-28 23:06:50 | 显示全部楼层
如果开启  SUNXI_TMR0 周期中断,该怎么写?
hal_timer_init(SUNXI_TMR0);
hal_timer_set_periodic(SUNXI_TMR0, 1000000, hal_timer_irq_callback, NULL);   <----   这句怎么写?

TMR0 中断函数名怎么写?
回复 支持 反对

使用道具 举报

21

主题

34

回帖

283

积分

中级会员

积分
283
 楼主| Zhangyubiao 发表于 2024-5-30 10:30:06 | 显示全部楼层
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);

编译通过,中断程序不执行,请·高手看看哪里出问题?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-10-11 18:54 , Processed in 0.046190 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表