AB1601继电器干扰问题

来源:互联网 发布:java代码大全 下载 编辑:程序博客网 时间:2024/05/16 18:49

当给继电器线圈供电时,控制蜂鸣器的io口有时候无法正确开关。不给继电器线圈供电,就没问题。


进一步测试发现不是干扰问题,是程序方面的问题。1601的所有gpio口共用同一个输出控制寄存器,在中断中有写gpio口的操作,sdk的接口函数也没有做任何针对性处理,导致

写寄存器冲突。在gpio口接口函数中加入临界区保护机制,问题解决。

代码如下:

void DRV_Gpio_ValSet(uint32_t pins_mask, bool is_one)
{
ndis_enter_critical();//临界区保护机制
    if(is_one)
IOMUX.GPIO.reg |= pins_mask;
else
IOMUX.GPIO.reg &= ~pins_mask;
    ndis_exit_critical();
}