|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
用過TL16C752B或類似芯片的請進(jìn) |
| 作者:hjkjlm 欄目:DSP技術(shù) |
各位,請教一個問題,最近在調(diào)試一塊板,TMS320VC33+FPGA+TL16C752B(擴(kuò)展異步串口),TL16C752B采用的是FIFO查詢方式,TXRDY,RXRDY,INT都懸空,直接判斷LSR的值來接收發(fā)送數(shù)據(jù),大概調(diào)試程序如下: 初始化 void init_UARTB(void) { int i; UARTB_FCR=0x07; /*使能FIFO,并清空RHR和THR*/ delay_10us(); UARTB_LCR=0x80; delay_10us(); UARTB_DLL=0x06; /*波特率為115200*/ delay_10us(); UARTB_DLH=0x00; delay_10us(); UARTB_LCR=0x03; /*8位,1位停止,無校驗*/ delay_10us(); UARTB_IER=0x00; /*屏蔽中斷*/ delay_10us(); 測試程序: void main(void) { int i,j; int a[10]; init_UARTB(); for(i=0;i<10;i++) a[i]=0; while(1) { if((UARTB_LSR&0x60) == 0x60) /*判斷THR和TSR是否為空*/ { UARTB_THR=0x77; /*發(fā)送一個字節(jié)*/ delay_10us(); } i=0; while((UARTB_LSR&0x01) == 0x01) /*判斷RHR是否有數(shù)據(jù)*/ { a[i++]=UARTB_RHR; /*保存10個數(shù)據(jù)*/ delay_10us(); } } } 接收都很正常,但發(fā)送就總出問題,PC接收到的數(shù)據(jù)全部錯誤.并且每64個錯誤字節(jié)循環(huán)一次,無論怎么修改發(fā)送數(shù)據(jù),和修改波特率,初始化,PC接收到同樣的循環(huán)錯誤數(shù)據(jù),后來又做了一塊板,問題依舊,搞了很長時間了,都沒有辦法解決,還望各位大蝦指點! |
| 2樓: | >>參與討論 |
| 作者: ivan81 于 2006/6/14 21:40:00 發(fā)布:
試試 將 /*判斷THR和TSR是否為空*/ 改為只判斷其中之一為空, 試試 |
|
| 3樓: | >>參與討論 |
| 作者: hjkjlm 于 2006/6/22 20:32:00 發(fā)布:
問題解決 問題解決了,是FPGA提供的時序出了問題,從TL16C752B的讀寫時序可以看出,通道選擇信號和讀信號之間沒有延遲,但通道選擇信號與寫信號之間有10ns的延時,FPGA給的這兩個信號同時到達(dá)TL16C752B,就是這10ns的延時,導(dǎo)致上述錯誤. |
|
| 4樓: | >>參與討論 |
| 作者: f702p 于 2006/6/23 9:38:00 發(fā)布:
時序太吻了, 這么夸張,10ns,一條指令的時間都不到呀, |
|
| 5樓: | >>參與討論 |
| 作者: MSCI 于 2010/7/21 15:37:22 發(fā)布:
我問個問題,如果是10ns的寫延時造成的問題,那么前面初始化對于TL16C752B的所有寫操作應(yīng)該都是無效的吧,TL16C752B根本就沒有被正確配置,又怎么會正確接收呢? |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |