最近在利用CC2540 和 BLE协议栈做一个小程序,用SimpleBLEPeripheral程序的话,串口实验没有问题。
但是自己做串口实验,其他程序自己写,同时使用了BLE协议栈的DMA和UART部分(感觉写的很好),然后配置也和SimpleBLEPeripheral一样。
最后做实验的时候发现死活发送不成功,比如发送"Hello",用串口助手查看,接收到的就只有0x00(16进制查看)。
然后我就仔细查看了_hal_uart_dma.c源代码,发现BLE是使用ISR发送程序,最后在UART0的中断程序中看到,
UxDBUF 的赋值。
单步调试,发现缓冲区里面数据是对的,但是UxDBUF 的值就是不改变,而且串口助手也收不到数据。。。。
请问大家有相同的疑问吗?- HAL_ISR_FUNCTION( halUart0TxIsr, UTX0_VECTOR )
- {
- HAL_ENTER_ISR();
- if (dmaCfg.txHead == dmaCfg.txTail)
- {
- IEN2 &= ~UTXxIE;
- dmaCfg.txMT = 1;
- }
- else
- {
- UTXxIF = 0;
- UxDBUF = dmaCfg.txBuf[dmaCfg.txHead++];
- if ((HAL_UART_DMA_TX_MAX != 256) && (dmaCfg.txHead >= HAL_UART_DMA_TX_MAX))
- {
- dmaCfg.txHead = 0;
- }
- }
- HAL_EXIT_ISR();
- }
复制代码
一周热门 更多>