Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263718
  • 博文数量: 107
  • 博客积分: 535
  • 博客等级: 下士
  • 技术积分: 1030
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-27 14:13
文章分类

全部博文(107)

文章存档

2024年(1)

2021年(10)

2020年(4)

2019年(2)

2018年(5)

2017年(6)

2016年(10)

2015年(15)

2014年(16)

2013年(25)

2012年(9)

2010年(4)

我的朋友

分类: 其他平台

2020-12-22 10:06:45

在处理4G AT指令收发时,发现nrf52832会再发送数据AT+QISEND时,丢掉数据。
经测试发现,
nrf52832内部有4个字节的硬件fifo,软件中使用easydma进行uart数据的收发操作,nrf52832对于uart和easydma只有接收完成中断,没有类似stm32的接收超时中断,这里驱动文件中将每次dma操作仅仅一个字节。这样dma接收完成后,触发一次中断,
也就是说完成一次dma接收操作之后,需要及时将数据读取,并重新初始化easy dma,准备接收下一个字节。这个读取和重新接收的操作时间不能太久,我这里就是因为接收数据后,进入了at parser里面,导致处理时间过长,easydma准备好的时候,前面已经有数据overrun了。
uarte数据接收函数调用路径,这些函数调用,均在中断上下文中进行(其中耗时步骤为readline,这里将AT发送数据部分skip data处理,就可以正常接收了):
UART0_IRQHandler() -->  uarte_irq_handler -->uart_event_handler --> my_uart_event_handle -->karl_uart_event_handle --> readline()
阅读(3931) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~