arduino笔记39:nrf4l01的中断详解

 

前面章节中,中断相关的内容时不时提到,这节详细说一下。
因为前面有过铺垫,所以就不按部就班的啰嗦前戏了,直接进入正题吧。
 
nrf24l01一共3种中断: TX_DS / RX_DR / MAX_RT
  • TX_DS : (TX data sent)通知本端主控,我方的数据已经发出去了。
  • RX_DR : (RX data received/ready)通知本端主控,我收到了新的数据,你要不要看看?
  • MAX_RT: (max for re-transmition)上节详细提过,不赘述了。
 
当任意一个或多个中断发生时,IRQ管脚都会被【nrf24l01主动】拉低,即IRQ管脚低电平触发。
程序知道了IRQ脚变成低电平,只能知道有中断发生了,但并不知道到底是哪个或哪些中断,所以nrf24l01通过STATUS寄存器记录了具体的中断源:
 
 
 

 

如上图,标出的每个bit表示对应的中断,bit=0表示当前没有此中断,bit=1表示当前此中断已经触发。
当IRQ拉低之后,程序读取这个寄存器,就能知道到底是哪个或哪些中断被触发了。
IRQ管脚被拉低之后,即使我们程序读取了STATUS,管脚【也不会自动地】回归高电平,即nrf24l01不会主动清理中断。

清理中断的工作必须由我们的程序亲自来操作,做法是:
【往STATUS寄存器对应bit位上写1】(不要觉得奇怪,这里我没写错,就是写1而不是写0)
只有当前【所有】被触发的中断【都】被清理了,IRQ管脚才会回归高电平。
除此之外,程序可以通过配置寄存器的方式来【分别禁用/屏蔽】这些中断:
 
 

 

如上图,nrf24l01将中断屏蔽位整合到了CONFIG寄存器中,给bit位写1则屏蔽对应中断,写0保持开启。
个人认为,这个屏蔽设计有些轻微脑残,我实在想不出需要把中断屏蔽掉的理由。
之所以在这儿添上这些内容,是为了提醒大家不要【误操作】:
在修改CONFIG其他bit位的时候,不要将中断屏蔽位给误写了,不然程序就再也收不到对应的中断通知了。
 
本节上面的描述中,暗含了一个意思:
IRQ管脚拉低时,可能是某中断单独发生,也可能是多个中断同时发生。
在【Enha
  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值