CH438速度快了数据出错

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误码率就高了


只有登录才能回复,可以选择微信账号登录