CH438外接22.1184晶振,内部倍频后,波特率设置到1.3824M,测量引脚上数据还是正确的,但是读取寄存器的时候就出现部分数据最高位 被置1了。是怎么回事啊。麻烦指导
while(1){
if( 0x02 == (0x02 & ReadCH438Data(REG_LSR1_ADDR)) )
{/*CH438 FIFO OVERR*/
WriteCH438Data(REG_FCR1_ADDR,0xC7); /* 清空FIFO中的数据,允许FIFO,设置FIFO 阈值 112字节 */
}
test_tmp = ReadCH438Data(REG_LSR1_ADDR);
if( 0x01 == (0x01 & test_tmp) ){
*p_sdram_staddr = ReadCH438Data(REG_RBR1_ADDR);
p_sdram_staddr++;
}
if(p_sdram_staddr == (Uint32*)(0xC00004FC)){
p_sdram_staddr = (Uint32*)(SDRAM_STADDR);
}
}
你目前波特率多少,所需带宽需要多大,建议降低FIFO触发字节到最小试下,触发数据可用中断
目前设置的1.3824M
没有用触发模式,用的直接读取DRADY位
读下LSR的值,看下是否有出现相应错误,你代码里只有438的处理吗,数据带宽过高,如果不用中断,可能读取不及时
其他代码都屏蔽了。只有438的读取。不是所有数据出错或者掉数据。而是部分数据的最高位偶发性错误。比如 应该收 55的收成了D5,也不是每次都是D5,有时候是55有时候是D5
把波特率改成921600,就没有出错了。但是高波特率就不行
您可以量一下对端高波特率时是否误差过大,导致接收时出现错误,或者将438调至高波特试下自收发,排除下本身的FIFO接收问题
线缆限制,线缆高于1M误码率就高了