微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > TI的工程师 你好 想询问下 z-stack 下485的应用(大神们求解)

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

时间:10-02 整理:3721RD 点击:

你好

     先开始   我在  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的收发。

不要在程序里面做等待,do()while(1).

当完成的时候直接产生中断,在中断里面把标志位清楚掉。

什么时候完成中断?

 do
{
asm("NOP");
} while (!HAL_DMA_CH_ARMED(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;   我在这添加了485控制引脚为接受但是不行  我的 数据发送不成功

你的设置和IO口的输出正常么?

正常的 用示波器打过高低电平控制完全正常

怎么一个星期都没有人回我问题了?能出来一个人解答下吗

http://e2e.ti.com/support/wireless_connectivity/f/158/t/85122.aspx 希望对你有帮助

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top