我在编译选项中,定义ZTOOL_P1和ZAPP_P2。默认串口0使用DMA方式,串口1使用中断方式。但发现有两个函数根本就没有实现,查遍了整个工程文件也没有找到。这两个函数分别是_hal_uart.c中的HalUARTInitISR(void)函数和HalUARTPoll(void)。我个人认为这个协议栈默认根本就没有实现这两个函数。也就是说串口不能使用中断法,只能用DMA法。如果要同时使用两个串口的话必须解决两个问题:1)自己实现上面两个函数;2)为第二个串口再分配一对接收缓冲区。
而且还有两个问题:1)MT_UART_DEFAULT_PORT永远只有一个,如果要同时使用两个串口。这里要作出相应的更改;2)能不能同时都使用ZTOOL方式,即同时定义ZTOOL_P1和ZTOOL_P2。如果不行的话,那么只能分别使用不同的回调函数。一个使用MT_UartProcessZToolData ( uint8 port, uint8 event ),而另一个使用MT_UartProcessZAppData ( uint8 port, uint8 event )函数。2)这里对有人提过了关于串口使用问题提出点自己不同的意见,如果只有一个端口需要接收串口数据。那么MT_UartInit(); MT_UartRegisterTaskID(task_id);能够在某个任务初始化函数被调用。如果有多个任务要接收串口消息,那么不能这样做。除非用其中一个任务做中介,转发串口数据。初学ZIGBEE的一点想法,请大侠们提出宝贵意见。现在同时使用两个串口的问题并没有解决,期待高手出现!