本帖最后由 waitReply^-^ 于 2026-2-3 18:22 编辑
请问下
问题是: ble stack和uart dma同时初始化之后,在irq_handler中,大概率他们的时间冲突,
现象: 导致在广播和连接的时候,这边串口dma概率收不到数据或者掉数据;或者串口只是初始化且开了中断,ble stack就会广播几秒后就停了;
1 请问推荐解决办法是咋样的?
ps:已实测排除了单独dma uart中断开启时,dma uart工作正常不会掉数据或丢包;单独ble stack 初始化时广播连接正常,不会断联;
2 另外请问下 ble stack运行过程中如何主动关闭或者复位ble stack?然后等需要的时候再重新初始化ble stack;
3 另外请问下,dma的收发不是硬件行为吗?为什么dma的中断会丢失呢?是因为在闭源的ble stack中清全部中断的时候把dma的中断也清了吗?
_attribute_ram_code_ void irq_uart_upgrade_handler(void){
if(reg_uart_status1(UART_MODULE_SEL) & FLD_UART_TX_DONE){
FW_UPDATE_PHY_TxIrqHandler();
uart_clr_tx_done(UART_MODULE_SEL);
irq_clr_src();
}
if(dma_chn_irq_status_get(FLD_DMA_CHN_UART_RX)){
FW_UPDATE_PHY_RxIrqHandler();
dma_chn_irq_status_clr(FLD_DMA_CHN_UART_RX);
irq_clr_src();
}
//when stop bit error or parity error.
if(uart_is_parity_error(UART_MODULE_SEL)){
uart_clear_parity_error(UART_MODULE_SEL);
irq_clr_src();
}
}
_attribute_ram_code_ void irq_handler(void)
{
//下面这两个中断都开就会有问题,单独开一个就没问题;咋解决呢?
blc_sdk_irq_handler();
irq_uart_upgrade_handler();
}
|