1 硬件電路 TMS320F206(簡(jiǎn)稱F206)有1個(gè)通用輸入引腳BIOS和1個(gè)通用輸出引腳XF,此外還有IO0、IO1、IO2和IO3引腳,分別對(duì)應(yīng) I/O狀態(tài)寄存器的IO0~I(xiàn)O3。這4個(gè)引腳通過(guò)異步串行口寄存器(ASPCR)和I/O狀態(tài)寄存器(IOSR)實(shí)現(xiàn)軟件可控,可被單獨(dú)配置成輸入或輸出。本文中使用IO0作為CPU卡(江蘇意源公司iCos/Mil v1.0)的復(fù)位引腳,IO2作為CPU卡的I/O(輸入/輸出)引腳,電路圖如圖1所示。 2 軟件實(shí)現(xiàn) 異步串行通信,傳輸協(xié)議bit流為:1位寬的低電平為起始位,8位寬的數(shù)據(jù)位,1位校驗(yàn)位,以及1位高電平的停止位。軟件實(shí)現(xiàn)時(shí),通過(guò)配置異步串行口寄存器(AS-PCR)和I/O狀態(tài)寄存器(IOSR),并使用定時(shí)器功能,完成F206與CPU卡之間數(shù)據(jù)的發(fā)送與接收。 2.1 數(shù)據(jù)發(fā)送 F206發(fā)送數(shù)據(jù)時(shí),將IO2配置成輸出狀態(tài),然后啟動(dòng)定時(shí)器,按照設(shè)置的波特率,分別將發(fā)送的數(shù)據(jù)按字節(jié)(8位)加上起始位、校驗(yàn)位和停止位發(fā)送給CPU卡的IO2口。 數(shù)據(jù)發(fā)送子程序?yàn)椋?br /> 2.2 數(shù)據(jù)接收 接收數(shù)據(jù)一般采用軟件輪詢的方式實(shí)現(xiàn)。數(shù)據(jù)接收子程序?yàn)椋?br /> 2.3 定時(shí)器設(shè)置 定時(shí)器中斷頻率由TDDR(定時(shí)器divide-down寄存器,定時(shí)計(jì)數(shù)寄存器TIM的低4位)和定時(shí)周期寄存器PRD共同確定。當(dāng)兩者都為0 時(shí),定時(shí)器中斷頻率為(CLKOUT1rate)/2;兩者不全為0時(shí),由如下公式確定: 舉例:為了實(shí)現(xiàn)9 600 bps的有效傳輸速率,實(shí)際傳輸速率(額外增加1位起始位、1位校驗(yàn)位、1位停止位)應(yīng)該為: 9 600 bps÷8×(8+1+1+1)=13 200 bps 故在晶振頻率為20 MHz的條件下,PRD=20×106/13200-1=1514。 此時(shí),將PRD設(shè)置為1514,每?jī)纱味〞r(shí)器中斷的時(shí)間間隔即為1位數(shù)據(jù)的保持時(shí)問(wèn)。一般來(lái)說(shuō),讀取的時(shí)機(jī)靠近位寬的中間位置,讀取的數(shù)據(jù)比較可靠和穩(wěn)定,如圖2所示。 3 軟件改進(jìn) 圖2中,如果讀取的起始位的位置正好處在起始位的開(kāi)始,此時(shí)就會(huì)出現(xiàn)將起始位的末尾誤判為第1位;或者讀取的起始位的位置處在起始位的末尾,將可能丟失數(shù)據(jù)的第1位,都會(huì)導(dǎo)致讀取數(shù)據(jù)出錯(cuò),如圖3所示。 為了降低讀取數(shù)據(jù)出錯(cuò)的概率,將起始位的判斷周期定為位寬的1/3,并在檢測(cè)到起始位后,繼續(xù)等待1/3位寬(再等待一個(gè)定時(shí)中斷),對(duì)起始位進(jìn)行確認(rèn)(讀取的值為0)。此時(shí)才認(rèn)定是一個(gè)正常的起始位,將定時(shí)周期修改為正常的位寬。此后每個(gè)定時(shí)器中斷可以正確讀取1位的數(shù)據(jù),且保證了讀取的時(shí)機(jī)處在 1/3~2/3位寬的中間部分,如圖4所示。 此時(shí),圖3中出錯(cuò)的問(wèn)題也得到解決,如圖5所示。 此外,還解決了毛刺引起的起始位誤判的問(wèn)題。因?yàn)橐粋(gè)毛刺的持續(xù)時(shí)間不會(huì)延續(xù)1/3位寬的時(shí)間,否則該應(yīng)用將因穩(wěn)定性太差而不能得到實(shí)用。 4 硬件改進(jìn) 除了單純使用定時(shí)器實(shí)現(xiàn)外,還可以結(jié)合INT2中斷實(shí)現(xiàn)起始位的確認(rèn),電路如圖6所示。 此時(shí),建議延后1/3或者1/2個(gè)位寬時(shí)間,再讀取起始位的狀態(tài)。若還是為低電平,則作為一個(gè)有效的起始位,關(guān)閉INT2中斷,然后按照一個(gè)完整位寬的時(shí)問(wèn)啟動(dòng)定時(shí)器,每次讀取1位,完成接收1字節(jié)后,關(guān)閉定時(shí)器,開(kāi)啟INT2中斷,啟動(dòng)下一個(gè)字節(jié)的接收流程。 參考文獻(xiàn) 1. 北京聞亭科技發(fā)展有限公司.TMS320C2XX高速數(shù)字信號(hào)處理器原理與應(yīng)用[OL]. (1998-04).http://www.DSPChina.com. 2. TI 公司.TMS320C1x/C2x/c2xx/C5x Assembly Language Tools User's Guide,1995. 作者:江南計(jì)算技術(shù)研究所 李德兵 李德勇 尹戰(zhàn)文 來(lái)源:單片機(jī)與嵌入式系統(tǒng)應(yīng)用 2009(10) |