我跟踪代码发现是DMA开始的时候发出来的?
难道是FIFO里面的随机数?
但是为什么每次都一样呢?
百思不得其解!!!!寻求帮忙~
解答:
下面我们来跟踪下串口发送程序:
1、首先看看SimpleApp.c文件的函数zb_ReceiveDataIndication()最后一句话为向串口发数据的。
2、debug_str
这里我比较关心结构
这个结构有三个参数:事件句柄、长度、数据指针
3、osal_msg_send( MT_TaskID, (uint8 *)msg );
这个函数就是发送事件,这里不做讨论,因为这涉及到OS的内容,比较麻烦!
只要知道这个时间发送到MT去了,然后只需要去看看MT的处理事件函数就可以了。
4、MTEL.C
5、MT_ProcessCommand( (mtOSALSerialData_t *)msg_ptr );
这里的事件句柄为:CMD_DEBUG_STR;
6、MT_ProcessDebugStr( (mtDebugStr_t *)msg );
7、MT_BuildSPIMsg
这里可以看到MSG第一个字节为:SOP_VALUE
#define SOP_VALUE 0x02
第二、三个字节为:SPI_RESPONSE_BIT | SPI_SYS_STRING_MSG,
#define SPI_RESPONSE_BIT 0x1000
#define SPI_SYS_STRING_MSG 0x0015
最后结果为:0x1015
第四个字节为:*msg++ = dataLen;数据长度
最后一个字节为*msg = SPIMgr_CalcFCS( msgPtr, (byte)(3 + dataLen) );
校验!!!!!!
8、HalUARTWrite
发送数据到串口!!!
文章评论(0条评论)
登录后参与讨论