Zhangyubiao 发表于 2024-5-28 15:29:49

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: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 是否正常工作。

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 中断函数名怎么写?

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);

编译通过,中断程序不执行,请·高手看看哪里出问题?
页: [1]
查看完整版本: T113-i Timer 函数如何使用?