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筆),小弟將程式碼附上,懇請各位可以幫我看看嗎?提供些意見,或者範例碼等等....感激!...thx3 K/ t; A* G3 Z  }0 i
' `3 W* a8 \6 A0 W" G! e
[attach]3093[/attach]
作者: kevin    時間: 2008-3-5 04:50 PM
我覺得好像是接收端或發射端產生"buffer overflow",應為你的RDR只有一個,而且只有TSR,沒有THR(transmitter holding register),應該可以在發射端多加一個或2個"transmitter holding register".
* s/ H2 L* O- f" s3 L4 t+ A[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
您好
* p% I5 t4 F$ b4 v. S$ @( U# A" S1.3 {1 C; \# ?7 m: `$ n
關於傳送資料覆蓋問題,可以研究一下8250或16450的data sheet裡
+ B: l. n- E. Atx部分
7 x& I& l6 q8 ]% ^9 S1 Q0 U9 w
  V' e8 s+ ]5 I$ m* j9 m' K2 T2.
8 Q# ~$ N1 _. Z/ W2 ?$ n如果想搭配FIFO,請參考16550 data sheet,裡面寫的很清楚
: p; O9 i: q4 t: Z- T, Y* v0 [( C8 ]6 P1 D( g+ Y% b3 I  |! ^
要設計uart功能,16450,16550是很好的參考資料
; g' j: X) ^: A* ]4 p( a在設計時有些設計上技巧或沒想到的問題,都可從data sheet
: K' ?) h7 U& y上找到很好的啟發0 x; d6 @4 `, S
: @' y' }4 H+ E, i( r
建議好好的k一下吧




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