NodeMCU NO_OS SDK 开发——硬件中断定时器

硬件中断定时器说明

硬件中断定时器接口位于 /ESP8266_NONOS_SDK/examples/driver_lib/hw_timer.c

注意:

  • 如果使用 NMI 中断源,且为自动填装的定时器,调用 hw_timer_arm 时参数 val 必须大于 100。
  • 如果使用 NMI 中断源,那么该定时器将为最高优先级,可打断其他ISR。
  • 如果使用 FRC1 中断源,那么该定时器无法打断其他 ISR。
  • hw_timer.c 的接口不能跟 PWM 驱动接口函数同时使用,因为二者共用了同一个硬件定时器。
  • 硬件中断定时器的回调函数定义,请勿添加 ICACHE_FLASH_ATTR 宏。
  • 使用 hw_timer.c 的接口,请勿调用 wifi_set_sleep_type(LIGHT_SLEEP); 将自动睡眠模式设置为 Light-sleep。因为 Light-sleep 在睡眠期间会停 CPU,停 CPU 期间不能响应 NMI 中断。

硬件中断定时器初始化

void hw_timer_init (
			FRC1_TIMER_SOURCE_TYPE source_type,	
			u8	req)
  • FRC1_TIMER_SOURCE_TYPE source_type:定时器的 ISR 源
  • FRC1_SOURCE:使用 FRC1 中断源
  • NMI_SOURCE:使用 NMI 中断源
  • u8 req
    • 0:不自动填装;
    • 1:自动填装

硬件中断定时器使能

void	hw_timer_arm	(uint32 val)
  • uint32 val:定时时间

自动填装模式:

  • 使用 FRC1 中断源 FRC1_SOURCE,取值范围: 50 ~ 0x199999μs(1677721);
  • 使用 NMI 中断源 NMI_SOURCE,取值范围 : 100 ~ 0x199999μs(1677721):
    非自动填装模式,取值范围: 10 ~ 0x199999μs

设置硬件中断定时器回调函数

注意
回调函数前不能添加 ICACHE_FLASH_ATTR 宏定义,中断响应不能存放在 Flash 中。

void	hw_timer_set_func	(void (* user_hw_timer_cb_set)(void) )
  • void (* user_hw_timer_cb_set)(void):定时器回调函数,函数定义时请勿添加ICACHE_FLASH_ATTR 宏。

硬件定时器示例

  1. 在C:\Users\用户.platformio\packages\framework-esp8266-nonos-sdk\driver_lib\driver文件夹路径下,复制hw_timer.c 文件到工程lib文件夹下,在user_main.c中添加如下代码:
uint8_t flag = 0;
void hw_tmr_callback(void)
{
    if (flag == 0)
    {
        flag = 1;
        gpio_set_l(GPIO_ID_PIN(2));
    }
    else
    {
        flag = 0;
        gpio_set_h(GPIO_ID_PIN(2));
    }
}

void ICACHE_FLASH_ATTR hw_tmr_user_init(void)
{
    //hw_timer_init(FRC1_SOURCE, 1); 编译不通过,使用下一条
    hw_timer_init(0, 1);	 //设置为FRC1_SOURCE中断源,重复定时
    hw_timer_set_func(hw_tmr_callback); //设置中断回调函数
    hw_timer_arm(1000000); 	//启动硬件定时器1000000us = 1s
}

可以看到开发板上的灯间隔1s闪烁

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值