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
9 _) A; C7 f% {' \' C$ t
2 t: |9 W' s0 [& D1 X. X[attach]3093[/attach]
作者: kevin    時間: 2008-3-5 04:50 PM
我覺得好像是接收端或發射端產生"buffer overflow",應為你的RDR只有一個,而且只有TSR,沒有THR(transmitter holding register),應該可以在發射端多加一個或2個"transmitter holding register".( l# Q/ u! j8 x
[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
您好/ i" h7 R. U$ Z3 A: ]1 @9 e1 j) U+ X4 \
1." ~$ c5 ^$ a8 W( ]' K6 L
關於傳送資料覆蓋問題,可以研究一下8250或16450的data sheet裡
9 t$ a" s  ], h: y8 mtx部分
5 Y/ J8 w* B' r" ^( y
8 K+ w: U6 P0 ]3 j9 ^2.
! J  e6 e3 h# m" _/ c如果想搭配FIFO,請參考16550 data sheet,裡面寫的很清楚4 O# [5 |1 k( w9 U+ }

( f. T" u1 `8 v0 n0 P6 D0 Z要設計uart功能,16450,16550是很好的參考資料
. {7 q! |7 ~+ O0 l2 a在設計時有些設計上技巧或沒想到的問題,都可從data sheet$ \7 l8 M5 o' C$ `
上找到很好的啟發9 I+ y2 R/ N. U
  c- S; {: g+ \8 h6 \9 `2 K
建議好好的k一下吧




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