全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3406
推到 Plurk!
推到 Facebook!

CPLD UART問題....thx

答題得分者是:aki
ghoustchieh
一般會員


發表:16
回覆:12
積分:5
註冊:2007-11-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-04 15:20:06 IP:60.250.xxx.xxx 訂閱
小弟為初學,目前使用CPLD做個UART收發,使用PC端TELIX軟體由Keyboard送出按鍵ASCII碼,經由CPLD收到後回傳至PC端,但目前單鍵送出都正常,但同一鍵按著不放,卻發生CPLD送出時掉資料了,(如PC端送出20筆資料,CPLD收到20筆,送出時卻只送15筆,PC端收到也只有15筆),小弟將程式碼附上,懇請各位可以幫我看看嗎?提供些意見,或者範例碼等等....感激!...thx
------
Shih Chieh
附加檔案:47ccf826b858c_PC_CPLD.rar
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-05 07:30:03 IP:61.217.xxx.xxx 訂閱
我目前也在作類似的應用:
(1)請問你用什麼廠牌 CPLD,我用 Actel or Lattice 的 FPGA 來作.
(2)用 VHDL 寫嗎?
(3)為什不用 PC 的 HyperTerminal 呢?
(4)我參考這本書也有案例:
VHDL 數位電路實習與專題設計
作者 陳慶逸、林柏辰
廠商 文魁圖書
(5) 我是 PC(Hyperterminal) TX send -> RS232 -> RS232 -> CPLD/FPGS[as a UART] -> 8051(RX)
-> 8051(echo) TX-> CPLD/FPGA -> RS232 -> PC(HyperTerminal)
(6)有沒有可能 Baud rate 不準?

===================引 用 ghoustchieh 文 章===================
小弟為初學,目前使用CPLD做個UART收發,使用PC端TELIX軟體由Keyboard送出按鍵ASCII碼,經由CPLD收到後回傳至PC端,但目前單鍵送出都正常,但同一鍵按著不放,卻發生CPLD送出時掉資料了,(如PC端送出20筆資料,CPLD收到20筆,送出時卻只送15筆,PC端收到也只有15筆),小弟將程式碼附上,懇請各位可以幫我看看嗎?提供些意見,或者範例碼等等....感激!...thx
編輯記錄
aki 重新編輯於 2008-03-05 07:31:59, 註解 無‧
ghoustchieh
一般會員


發表:16
回覆:12
積分:5
註冊:2007-11-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-05 13:38:12 IP:60.250.xxx.xxx 訂閱
您好:
(1)使用的是Altera CPLD MAXII EPM1270
(2)用VHDL寫
(3)朋友見意我使用TELIX來測試,它可在純DOS下來做RS232收發的接收,在DOS下做,較單純,請問您覺得HyperTerminal 來測試有較好的優點
嗎?
(4)感謝您見意的這本書,我會參考看看
(5)我是 PC(TELIX) TX send -> RS232 -> RX CPLD[as a UART] TX -> RS232 -> PC(TELIX)
(6)Baud rate 方面,我在CPLD收PC資料端做過測試,收到資料的次數,都是正確的,當CPLD收下後再發出資料到PC時,發出的資料次數便不正確,由於CPLD收方面資料都正確,所以我目前認為Baud rate應該是正常的

感覺起來您和我做的很雷同,可請問您的VHDL程式碼,可讓我參考嗎?或者您有其他見意呢?感謝..

===================引 用 aki 文 章===================
我目前也在作類似的應用:
(1)請問你用什麼廠牌 CPLD,我用 Actel or Lattice 的 FPGA 來作.
(2)用 VHDL 寫嗎?
(3)為什不用 PC 的 HyperTerminal 呢?
(4)我參考這本書也有案例:
VHDL 數位電路實習與專題設計
作者 陳慶逸、林柏辰
廠商 文魁圖書
(5) 我是 PC(Hyperterminal) TX send -> RS232 -> RS232 -> CPLD/FPGS[as a UART] -> 8051(RX)
-> 8051(echo) TX-> CPLD/FPGA -> RS232 -> PC(HyperTerminal)
(6)有沒有可能 Baud rate 不準?

===================引 用 ghoustchieh 文 章===================
小弟為初學,目前使用CPLD做個UART收發,使用PC端TELIX軟體由Keyboard送出按鍵ASCII碼,經由CPLD收到後回傳至PC端,但目前單鍵送出都正常,但同一鍵按著不放,卻發生CPLD送出時掉資料了,(如PC端送出20筆資料,CPLD收到20筆,送出時卻只送15筆,PC端收到也只有15筆),小弟將程式碼附上,懇請各位可以幫我看看嗎?提供些意見,或者範例碼等等....感激!...thx
------
Shih Chieh
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-03-05 15:26:48 IP:61.66.xxx.xxx 訂閱
 
>您好:
>(1)使用的是Altera CPLD MAXII EPM1270
>(2)用VHDL寫
>(3)朋友見意我使用TELIX來測試,它可在純DOS下來做RS232收發的接收,在DOS下做,較單純,請問您覺得HyperTerminal 來測試
>有較好的優點嗎?
沒有啦! 基本上現在 PC 都是 XP, 這個軟體在 XP 能用嗎?我不知道,
在 XP 我都用這個來測自已寫 MCU 的 UART 是否正確!

>(4)感謝您見意的這本書,我會參考看看
你參考看看我也是無意中看到此書,

>(5)我是 PC(TELIX) TX send -> RS232 -> RX CPLD[as a UART] TX -> RS232 -> PC(TELIX)
那你的 CPLD 還要把收到的 data 再 echo 回去給 PC,
我的作法只把 CPLD/FPGA 當成 UART or 16C550 來看,只是不是做完整的 UART,
簡易的 UART 吧!
>(6)Baud rate 方面,我在CPLD收PC資料端做過測試,收到資料的次數,都是正確的,
>當CPLD收下後再發出資料到PC時,發出的資料次數便不正確,由於CPLD收方面資料都正確,
>所以我目前認為Baud rate應該是正常的

如果你確認 CPLD 的接收正確,那請問你如何來作確認?
我自己也有類似此問題,所以改用 8051 來收 data, 再利用 8051 來確認收到的是正確嗎?

>感覺起來您和我做的很雷同,可請問您的VHDL程式碼,可讓我參考嗎?
>或者您有其他見意呢?感謝..

基本上和這本書寫的差不多啦! 這本書寫的比我說的詳細喔!
網上也有 Free ID 有寫 UART 的,也可以參考啦! 但是要自己來驗證.
ghoustchieh
一般會員


發表:16
回覆:12
積分:5
註冊:2007-11-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-03-05 16:27:47 IP:60.250.xxx.xxx 訂閱
>如果你確認 CPLD 的接收正確,那請問你如何來作確認?
>我自己也有類似此問題,所以改用 8051 來收 data, 再利用 8051 來確認收到的是正確嗎?

在確認方面,我是使用收完一筆資料後計數加一,再經由計數的次數來比對,PC發送資料的次數.

>基本上和這本書寫的差不多啦! 這本書寫的比我說的詳細喔!
>網上也有 Free ID 有寫 UART 的,也可以參考啦! 但是要自己來驗證.

網上的資料我也收尋過許多,但大多UART做法都是收到一筆串列資料後,放入8bit buffer內,再從buffer內取出,送出一串列資料,再這過程中並沒有使用到FIFO機制,這樣的做法感覺送單筆都沒問題,但連續送很快時,也許會因為buffer不夠,而掉資料,我自己也有將QuartusII內FIFO模組加入.但問題依然存在,目前是將FIFO先拿掉,考慮是否是收與送之間的機制沒完善,使得收到的資料次數是正確,送出去時就發生錯誤了.

請問您,您TR與TX的機制是為何呢?


------
Shih Chieh
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-03-05 17:57:02 IP:61.66.xxx.xxx 訂閱


>>如果你確認 CPLD 的接收正確,那請問你如何來作確認?
>>我自己也有類似此問題,所以改用 8051 來收 data, 再利用 8051 來確認收到的是正確嗎?
>
>在確認方面,我是使用收完一筆資料後計數加一,再經由計數的次數來比對,PC發送資料的次數.

>>基本上和這本書寫的差不多啦! 這本書寫的比我說的詳細喔!
>>網上也有 Free ID 有寫 UART 的,也可以參考啦! 但是要自己來驗證.
>
> 網上的資料我也收尋過許多,但大多UART做法都是收到一筆串列資料後,放入8bit buffer內,再從buffer內取出,
>送出一串列資料,再這過程中並沒有使用到FIFO機制,這樣的做法感覺送單筆都沒問題,但連續送很快時,
>也許會因為buffer不夠,而掉資料,我自己也有將QuartusII內FIFO模組加入.但問題依然存在,目前是將FIFO先拿掉,
>考慮是否是收與送之間的機制沒完善,使得收到的資料次數是正確,送出去時就發生錯誤了.
>
我考慮在接收時有 FIFO,收滿了發出 interrupt, 類似 8051 的 UART
軟體要檢查 interrupt, 有時才收.

>請問您,您TR與TX的機制是為何呢?
基本上和那本書一樣, 學來的.



ghoustchieh
一般會員


發表:16
回覆:12
積分:5
註冊:2007-11-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-03-05 18:54:51 IP:60.250.xxx.xxx 訂閱
請問aki:
您的8051有去檢查PC端方面的動作嗎?如PC端送完筆資料後,8051要回傳給PC端做Check的動作呢?還是單純只收UART 9Pin內的TX而已,收下後,再經由8051又送至UART 9Pin的RX,回傳至PC呢?感謝...
------
Shih Chieh
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-03-05 19:39:26 IP:61.66.xxx.xxx 訂閱
 
>請問aki:
>您的 8051 有去檢查 PC 端方面的動作嗎?如 PC 端送完筆資料後, 8051 要回傳給 PC 端做 Check 的動作呢?
我不明白你的問題?為什麼 8051 去檢查 PC 端?

>還是單純只收UART 9Pin內的TX而已,收下後,再經由8051又送至UART 9Pin的RX,回傳至PC呢?感謝...
上述也看不太明白!

(1)總而言之是 如果用 HyperTerminal 在 Keyboard 上按 "A" 則等一下 echo 回來是"A" 就表是 TX & RX 都 ok!
當然其它文字也相同!

所以 PC(HyperTerminal RS-232) -> RS-232 -> FPGA(as a UART) -> 8051(RX)
然後再 8051 用 C 寫個簡單的小程式,程式上寫收到東西就回傳給 PC,
即 TX = RX;
信號流程為如下:
8051(TX) -> FPGA -> RS232 -> PC(HyperTerminal RS-232)

就是如此, FPGA 上每個 UART 只有 TX, RX, GND 三線.
因此如果在 HyperTerminal 按 "A" 如果 echo 回來的不是 "A" ,就表示,不是 TX path 就是 RX path 有問題!

PS: (A)8051 build-in 的 UART 都沒有用喔!
(B)8051 我是用 ADI ADuC812/831.當然其它的 8051 也可以換湯不換藥啦!
(C)上面說的 C 語言用 Keil C 來寫,其時 ADI 的網上有 samples Code.
我也是拿來改的啦!

(2)如果只要測 TX path 呢?
PC1(HyperTerminal RS-232) -> RS-232_1 -> FPGA(as a UART) -> 8051(RX) -> RS-232_2 -> PC2(HyperTerminal)

也就是在 PC1 的 HyperTerminal 上按 "A" ,則 PC2 上的 Hyperterminal 要看到 "A" ,
就表示 TX path 是對的.

PS: 這裏傳給 PC2 的是用 8051 build-in 的 UART 喔!

(3)如果只要測 RX path 呢?
與(2) 相反向,改從 PC2 按 "A" 在 PC1 上看到 "A" 就對了!
條件和 (2)完全相同.

我是這麼來作驗證測試的.
編輯記錄
aki 重新編輯於 2008-03-05 19:42:04, 註解 無‧
aki 重新編輯於 2008-03-05 19:59:36, 註解 無‧
系統時間:2024-05-13 22:40:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!