|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
用tl16c752擴展串口遇到的問題 |
| 作者:hexiaobo 欄目:通信技術(shù) |
采用TMS320LF2407主控芯片,擴展一片TL16C752b,采用中斷方式。通訊調(diào)試始終有問題: 1、關(guān)閉TL16C752的fifo,只打開接收中斷或發(fā)送中斷,接收或發(fā)送工作正常; 2、當(dāng)同時打開接收、發(fā)送中斷時,發(fā)送接收中斷均不能正常進入; 3、打開fifo,關(guān)閉流控制,trigger level設(shè)為16byte,只打開接收中斷時,接收數(shù)據(jù)基本正常,但每次time_out中斷會多進入一次; 4、打開fifo時,發(fā)送始終不能正常工作。當(dāng)連續(xù)往thr中存入多個數(shù)據(jù)時,tx腳不能發(fā)送數(shù)據(jù);當(dāng)僅往thr中存入一個數(shù)據(jù)時,數(shù)據(jù)可以發(fā)送出來,但其后程序再也不能進入中斷處理程序。 請高手指點,調(diào)了一個星期,網(wǎng)上查了一大通,找不出毛病。另外流控制是否一定需要(包括硬件流、軟件流)?多謝了! |
| 2樓: | >>參與討論 |
| 作者: chunyang 于 2007/1/8 21:44:00 發(fā)布:
你應(yīng)該仔細看器件手冊,操作時序是決定性的 流控不是必要,只是為了提高效率,但會使編程時序復(fù)雜化,先期不要開啟。 |
|
| 3樓: | >>參與討論 |
| 作者: daguang72 于 2007/1/9 11:45:00 發(fā)布:
流控制統(tǒng)統(tǒng)關(guān)閉 我一直在用SC16C2550B,并口擴展2個串口,查詢方式,5V系統(tǒng),沒問題,原來是3.3V系統(tǒng),芯片不能正常工作,后換得5V系統(tǒng)才正常,問周理工技術(shù)支持這是怎么回事兒,他們也解釋不了,你的系統(tǒng)是幾伏的?
|
|
| 4樓: | >>參與討論 |
| 作者: hexiaobo 于 2007/1/9 17:22:00 發(fā)布:
3.3V系統(tǒng) TL16C752數(shù)據(jù)手冊上寫的是3.3V電源沒問題。SC16C2550B是5V芯片嗎?l16c752有64byteFIFO,其實用不到,價格還比較貴(40RMB)。而且在不使用FIFO時,芯片還有BUG(讀數(shù)據(jù)時必須加延時),現(xiàn)在還沒搞定,苦惱! |
|
| 5樓: | >>參與討論 |
| 作者: daguang72 于 2007/1/11 17:47:00 發(fā)布:
哈哈 SC16C550說是2.5~5V均可用,實際我測試結(jié)果是只能用在5V 我相信芯片輕易不會出問題,估計還是你軟件的問題,強烈建議用FIFO方式,這樣能節(jié)省CPU大量處理時間,另外在每次查詢到FIFO中有錯誤的時候要重新初始化一下這個芯片,這一點很重要
|
|
| 6樓: | >>參與討論 |
| 作者: hexiaobo 于 2007/1/24 10:05:00 發(fā)布:
新的進展 停了兩個星期,現(xiàn)在重新調(diào),有了新的進展。 1、增加了對TL16C752讀寫指令周期,每次讀寫TL16C752寄存器額外再加2us延時,只開接收中斷時(IER設(shè)0x01),接收數(shù)據(jù)正常,沒有了原來time_out中斷會多進入一次的問題; 2、每次初始化TL16C752后,一開發(fā)送中斷(IER設(shè)0x02),芯片立刻提起中斷,INT腳轉(zhuǎn)為高電平(此時實際并未發(fā)送數(shù)據(jù)),此時讀IIR寄存器,偶爾可以復(fù)位中斷(INT腳轉(zhuǎn)為低電平),多數(shù)情況下INT腳一直保持高電平,導(dǎo)致無法正常進入中斷服務(wù)程序; 3、在主程序中如果直接循環(huán)發(fā)送數(shù)據(jù),數(shù)據(jù)可以正常發(fā)出。 |
|
| 7樓: | >>參與討論 |
| 作者: hexiaobo 于 2007/1/24 10:20:00 發(fā)布:
源程序 //中斷服務(wù)程序 void interrupt INT6(void) { WORD ax,i; *XINT1CR|=0x8000; ax=IIR_FCR_EFR_A&0x3f; //RHR interrupt if(ax==0x04) { for(i=0;i<8;i++) { RecvBuffer[PtrRecv++]=RHR_THR_DLL_A; Delay(1); } } //RHR timeout interrupt else if(ax==0x0c) { do { RecvBuffer[PtrRecv++]=RHR_THR_DLL_A; Delay(1); }while(LSR_A&0x01); } //THR interrupt else if(ax==0x02) { //RHR_THR_DLL_A=0x5a; } else IIR_FCR_EFR_A=0x06; //Clear FIFO } //初始化 TL16C752 void InitializeCom(void) { UWORD i; *PFDATDIR|=0x0002; //RESET TL16C752 Delay(100); *PFDATDIR&=0xfffd; MCR_A=0x08; //Enable INT Delay(2); IIR_FCR_EFR_A=0x07; //Enable FIFO;Clear FIFO;8 byte FIFO Delay(2); LCR_A=0x80; //Set Baudrate Delay(2); if(System.Baudrate2>7)i=5; else i=System.Baudrate2; RHR_THR_DLL_A=LBaudrateTableCom[i]; Delay(2); IER_DLH_A=HBaudrateTableCom[i]; Delay(2); LCR_A=0x03; //8 data bit;1 stop bit;0 parity bit Delay(2); IER_DLH_A=0x02; //Enable RHR/THR interrupt } 從示波器上看,初始化程序最后一條指令一執(zhí)行,INTA腳立刻變?yōu)楦唠娖剑M入中斷服務(wù)程序后執(zhí)行ax=IIR_FCR_EFR_A&0x3f(讀IIR),大多數(shù)情況下INTA腳不能轉(zhuǎn)為低電平,中段不能被復(fù)位,現(xiàn)在問題的癥結(jié)就在這里了。 各位大佬一起幫忙分析一下,多謝! |
|
| 8樓: | >>參與討論 |
| 作者: hexiaobo 于 2007/1/25 9:41:00 發(fā)布:
新進展 昨天又仔細看了芯片手冊,發(fā)現(xiàn)讀寫的有效脈寬必須大于2倍輸入時鐘周期。現(xiàn)有的震蕩器頻率為3.072M,這樣需要的讀寫寬度必須大于670ns,問題就在這里!dsp的主頻40M,在增加了7個讀寫指令周期后,讀寫寬度也只到100ns,遠遠達不到芯片的要求。在換了10M的震蕩器后,讀IIR寄存器可以清除發(fā)送中斷了,F(xiàn)在A口的發(fā)送接收均已正常,B口仍然不能正常操作。其實10M也沒達到手冊的要求時序,由于手頭上沒有更高頻率的震蕩器,因此還要再等等。 |
|
| 9樓: | >>參與討論 |
| 作者: jake 于 2008/12/19 12:04:56 發(fā)布:
我們有比TL16C752性價更好的---XR16M752,我們的Data rate(3.3V)可以達到16M,請跟我聯(lián)系:jakelei@baite-group.com 13723775328 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |