最近在用这块芯片,也遇到很多奇奇怪怪的问题.这里列举一二, 高手轻喷...<br />
<br />
大多数教程选择使用轮询irq引脚或者轮询STATUS寄存器来判断发 收的完成, 但是相当耗时, 在比较顺利的情况下, Nrf固定32B的发送耗时实测400us, 不顺利的话会上ms, 相对于72M主频的机器已经是非常大的占用.<br />
所以我选择中断接收和发送. 这里需要关注几个寄存器, STATUS CONFIG <br />
首先必须开nrf的中断事件, 在CONFIG寄存器里面将mask位置0即可, 对应的会在TX_DS MAX_RT RX_DR这三件事出现后改变STATUS并自动拉低irq引脚.<br />
<br />
然后,各种配置完成以后, 开始发数据. 发完数据无论成功还是超时, 均会成功进入中断. 这时我做了一件危险的事情, 就是在中断中直接发下一帧, 我希望通过这种方式减少CPU占用率,在中断中直接链式的发送.<br />
后来调了两天,才发现原来对方根本没来得及读走FIFO . 注意, 虽然对方的FIFO收到数据后会ACK, 但是对方什么时候读走FIFO是CPU的事情, 做完并不会通知发送方.<br />
所以后来我发送的间隔加大为3ms, 就没啥问题了.<br />
<br />
另外由于我们的周边wifi 频道的干扰比较多,所以会涉及到跳频的问题. 跳频主要就是要控制好时间序列, 具体以后会补充一下. <br />
<br />
现在存在的问题是 接收中断. <br />
调试时可以在受到数据后进去irq, 并且我已经在Irq中清掉了status寄存器. 这个时候, 在主程序中, status莫名其妙的出现了RX_DR置位, Irq也同时被置低 . <br />
有人遇到过类似的事情吗?<br /> |