CH438外接22.1184晶振,內(nèi)部倍頻后,波特率設(shè)置到1.3824M,測(cè)量引腳上數(shù)據(jù)還是正確的,但是讀取寄存器的時(shí)候就出現(xiàn)部分?jǐn)?shù)據(jù)最高位 被置1了。是怎么回事啊。麻煩指導(dǎo)
? ? ? ?while(1){
????? ? ? ?if( 0x02 == (0x02 & ReadCH438Data(REG_LSR1_ADDR)) )
????? ? ? ?{/*CH438 FIFO OVERR*/
????? ? ? ? ? ?WriteCH438Data(REG_FCR1_ADDR,0xC7);? /* 清空FIFO中的數(shù)據(jù),允許FIFO,設(shè)置FIFO 閾值 112字節(jié) */
????? ? ? ?}
? ? ? ?????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觸發(fā)字節(jié)到最小試下,觸發(fā)數(shù)據(jù)可用中斷
目前設(shè)置的1.3824M
沒有用觸發(fā)模式,用的直接讀取DRADY位
讀下LSR的值,看下是否有出現(xiàn)相應(yīng)錯(cuò)誤,你代碼里只有438的處理嗎,數(shù)據(jù)帶寬過高,如果不用中斷,可能讀取不及時(shí)
其他代碼都屏蔽了。只有438的讀取。不是所有數(shù)據(jù)出錯(cuò)或者掉數(shù)據(jù)。而是部分?jǐn)?shù)據(jù)的最高位偶發(fā)性錯(cuò)誤。比如 應(yīng)該收 55的收成了D5,也不是每次都是D5,有時(shí)候是55有時(shí)候是D5
把波特率改成921600,就沒有出錯(cuò)了。但是高波特率就不行
您可以量一下對(duì)端高波特率時(shí)是否誤差過大,導(dǎo)致接收時(shí)出現(xiàn)錯(cuò)誤,或者將438調(diào)至高波特試下自收發(fā),排除下本身的FIFO接收問題
線纜限制,線纜高于1M誤碼率就高了