CPLD UART問題....thx |
答題得分者是:aki
|
ghoustchieh
一般會員 發表:16 回覆:12 積分:5 註冊:2007-11-30 發送簡訊給我 |
小弟為初學,目前使用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 發送簡訊給我 |
我目前也在作類似的應用:
(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 發送簡訊給我 |
您好:
(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 發送簡訊給我 |
>您好: >(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 發送簡訊給我 |
>如果你確認 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 發送簡訊給我 |
>>如果你確認 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 發送簡訊給我 |
|
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
>請問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)完全相同. 我是這麼來作驗證測試的. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |