This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TI的工程师 你好 想询问下 z-stack 下485的应用(大神们求解)

你好

     先开始   我在  z-stack 預設使用DMA 方式,baudRate 设置为9600  应用P1_2 做485的控制线 串口线 还是 P0_2 P0_3 

   在发生数据的时候调用HalUARTWrite()函数  前设置 P1_2 = 1; 启动一个任务osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT6,100);延迟一定时间后设置 P1_2 = 0 能完成 485的收发控制 但是这样就得要求485的另一端 在接受都数据后延迟一定的时候后发送出来的数据才能收到 ;


后来我想  在DMA发送完成后设置 P1_2 = 0; 但是485就是不通   

static void HalUARTPollDMA(void)

{

  .....................

if (dmaCfg.txDMAPending && !dmaCfg.txShdwValid)
{
// UART TX DMA is expected to be fired and enough time has lapsed since last DMA ISR
// to know that DBUF can be overwritten
halDMADesc_t *ch = HAL_DMA_GET_DESC1234(HAL_DMA_CH_TX);
halIntState_t intState;

// Clear the DMA pending flag
dmaCfg.txDMAPending = FALSE;
HAL_DMA_SET_SOURCE(ch, dmaCfg.txBuf[dmaCfg.txSel]);
HAL_DMA_SET_LEN(ch, dmaCfg.txIdx[dmaCfg.txSel]);
dmaCfg.txSel ^= 1;
HAL_ENTER_CRITICAL_SECTION(intState);
HAL_DMA_ARM_CH(HAL_DMA_CH_TX);
do
{
asm("NOP");
} while (!HAL_DMA_CH_ARMED(HAL_DMA_CH_TX));
HAL_DMA_CLEAR_IRQ(HAL_DMA_CH_TX);
HAL_DMA_MAN_TRIGGER(HAL_DMA_CH_TX);
HAL_EXIT_CRITICAL_SECTION(intState);
P1DIR |= 0x04;P1_2 = 0;
}

...............

}

在这里判断的DMA发生完成 不知道对不对? 是不是这个地方判断? 如果不是在这里判断 DMA 发生完成的请告诉下我在哪里设置P1_2 = 0来控制485为接受的时候才能控制好485的收发。