Chip123 科技應用創新平台

標題: CPLD UART問題....thx [打印本頁]

作者: ghoustchieh    時間: 2008-3-4 03:34 PM
標題: CPLD UART問題....thx
小弟為初學,目前使用CPLD做個UART收發,使用PC端TELIX軟體由Keyboard送出按鍵ASCII碼,經由CPLD收到後回傳至PC端,但目前單鍵送出都正常,但同一鍵按著不放,卻發生CPLD送出時掉資料了,(如PC端送出20筆資料,CPLD收到20筆,送出時卻只送15筆,PC端收到也只有15筆),小弟將程式碼附上,懇請各位可以幫我看看嗎?提供些意見,或者範例碼等等....感激!...thx
" l+ [: I6 K1 z( [$ P& t2 O+ o* K7 y# {$ m* F, ~* C  z) q4 |
[attach]3093[/attach]
作者: kevin    時間: 2008-3-5 04:50 PM
我覺得好像是接收端或發射端產生"buffer overflow",應為你的RDR只有一個,而且只有TSR,沒有THR(transmitter holding register),應該可以在發射端多加一個或2個"transmitter holding register".
* m+ Q2 S9 A/ \% p2 n  @7 t[attach]3102[/attach]
作者: ghoustchieh    時間: 2008-3-5 04:53 PM
標題: 如有看到程式的前輩們...請幫忙
如有看到小弟放的程式前輩們,可否給些意見呢?如需加FIFO之類的,或是收與發機制不夠完善導致此問題,小弟我有自行加入QuartusII FIFO模組,但此問題仍然存在,所以先不考慮是否buffer不夠,目前排除方向為,收到資料時,與發送資料時,之間的機制不夠完善,懇請大家給些意見或範例等等,感激!謝謝..
作者: ghoustchieh    時間: 2008-3-5 05:04 PM
標題: 回復 2# 的帖子
您好!請問您,如果我8bit資料一進來發射端時,該如何把它hold呢?是否有個機制,比如hold等到上一筆資料從發射端送出時,在從THR丟至TSR,再送出下一筆資料,可否請您敘述一下,感謝您...
作者: kevin    時間: 2008-3-5 08:31 PM
好像可以利用txd_doneH 來產生一個 loadTSR 把資料從THR--->TSR 並在下一個clock STATE 產生一個 pulse 通知CPU 或 接收端把下一筆DATA 再餵入THR.每次餵DATA,除了看txd_startH(代表有沒有資料待傳),還要等pulse 通知.
作者: addn    時間: 2008-3-6 11:28 AM
您好1 D" M& O( l" Z* W5 ]2 A7 S& Y
1.
5 M9 o1 B: R- |' J* n關於傳送資料覆蓋問題,可以研究一下8250或16450的data sheet裡
$ {6 o' _0 z& S1 D* itx部分
, R0 B+ P% o! h6 ]& U- I
3 R5 I) O4 J1 R+ p1 U2.
1 b# ~6 C- q# m. k' y如果想搭配FIFO,請參考16550 data sheet,裡面寫的很清楚
1 f6 m7 ]3 c6 g/ v" W5 A
0 N  s5 T& z- ^1 ?4 z, U要設計uart功能,16450,16550是很好的參考資料) Z; O$ T- D3 @+ F* [! ?! }* B
在設計時有些設計上技巧或沒想到的問題,都可從data sheet
9 j# l  u' `4 j  R上找到很好的啟發
: t2 n8 h; T6 I* G1 Q
: x* [9 G% p% B* Z! `9 Z) p建議好好的k一下吧




歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/) Powered by Discuz! X3.2