modify pic32mz usart library in 9bits transmitter
在使用库函数PLIB_USART_Transmitter9BitsSend(USART_MODULE_ID index, int8_t data, bool Bit9th)进行9位模式发送数据时,若参数data的bit7位为1,即使Bit9th的值为false,但TX引脚上观测到的时序显示bit9位为1,而且接收端也确实接收到该地址位为1。将形参data对应的实参数据类型定义为unsigned char 或signed char ,问题依然存在;经过单步运行未发现程序逻辑存在问题。
为了解决问题,索性直接修改了其调用函数
PLIB_TEMPLATE void USART_Transmitter9BitsSend_InDataOnly( USART_MODULE_ID index , int8_t data , bool Bit9th )
{
SFR_TYPE temp;
if (Bit9th == 0)
{
//_SFR_WRITE(_USART_TRANSMITTER_DATA_ONLY_VREG(index), data);
temp = data;
temp = temp&0x0ff;
_SFR_WRITE(_USART_TRANSMITTER_DATA_ONLY_VREG(index),temp);
}
else
{
temp = data;
temp = (temp|(Bit9th<<8));
_SFR_WRITE(_USART_TRANSMITTER_DATA_ONLY_VREG(index),temp);
}
}
经上述修改后问题得到解决。因不太清楚该芯片的汇编指令,未查看原库函数编译后的汇编代码。