使用C語言操作DSP的寄存器_第1頁
使用C語言操作DSP的寄存器_第2頁
使用C語言操作DSP的寄存器_第3頁
使用C語言操作DSP的寄存器_第4頁
使用C語言操作DSP的寄存器_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第6章使用C語言操作DSP的寄存器 北京航空航天大學(xué)出版社作者 顧衛(wèi)鋼 北京航空航天大學(xué)出版社作者 顧衛(wèi)鋼 電信學(xué)院 張蕾 DSP原理及應(yīng)用 6 1寄存器的C語言訪問 特殊的存儲(chǔ)單元 具有特殊的功能 具體的含義DSP通過對寄存器的操作能夠?qū)崿F(xiàn)對系統(tǒng)和外設(shè)功能的配置與控制 在DSP的開發(fā)過程中 對于寄存器的操作是極為重要的 也是很頻繁的 對寄存器的操作是否方便會(huì)直接影響到DSP的開發(fā)是否方便 F2812為大家提供了位定義和寄存器結(jié)構(gòu)體的方式 能夠很方便的實(shí)現(xiàn)對DSP內(nèi)部寄存器的訪問和控制 6 1 1了解SCI的寄存器 6 1 1了解SCI的寄存器 寄存器地址缺少0 x00007058 0 x0000705D 0 x0000705E 6 1 1了解SCI的寄存器 寄存器地址缺少0 x00007758 0 x0000775D 0 x0000775E 這些寄存器位于F2812存儲(chǔ)器空間的外設(shè)幀2內(nèi) 是在物理上實(shí)際存在的存儲(chǔ)器單元 外設(shè)幀 PeripheralFrames0 1 2三個(gè)外設(shè)幀映射空間及其包含的相關(guān)寄存器如下 6 1 2使用位定義的方法定義寄存器 所謂 位域 也稱位段 就是把一個(gè)字節(jié)中的二進(jìn)制位劃分為幾個(gè)不同的區(qū)域 并說明每個(gè)區(qū)域的位數(shù) 每個(gè)域都有一個(gè)域名 允許在程序中按域名進(jìn)行操作 位域的定義和位域變量的說明同結(jié)構(gòu)體定義和其成員說明類似 其語法格式為 Struct位域結(jié)構(gòu)名 類型說明符位域名1 位域長度類型說明符位域名2 位域長度 類型說明符位域名n 位域長度 例6 1位域定義 structbs 定義位域bs inta 8 intb 2 intc 6 structbsbs1 定義bs型變量bs1 位域也是C語言的一種數(shù)據(jù)結(jié)構(gòu) 需要遵循先聲明后使用的原則 例如聲明完了 structbsbs1 才能用bs型變量bs1位域的定義必須從右往左的順序 也就是從最低位開始定義一個(gè)位域必須存儲(chǔ)在同一個(gè)字節(jié)中 不能跨兩個(gè)字節(jié) 即 如果一個(gè)字節(jié)所??臻g不夠放另一個(gè)域時(shí) 應(yīng)該從下一個(gè)單元起存放該域 structbs 定義位域bs inta 4 int 0 空域intb 5 從第二個(gè)字節(jié)開始存放intc 3 位域的長度不能大于一個(gè)字節(jié)的長度 即 一個(gè)位域不能超過8位 位域可以無位域名 此時(shí) 只用作填充或調(diào)整位置 無名位域不能使用 structbs 定義位域bs inta 4 int 2 這兩位不能使用intb 2 intc 5 intd 3 以SCIA的通信控制寄存器SCICCR為例來說明C語言用位域方法來定義寄存器 STOPBITS R W 0 R W 0 R W 0 R W 0 R W 0 R W 0 R W 0 R W 0 EVEN ODDPARITY PARITYENABLE LOOPBACKENA ADDR IDLEMODE SCICHAR2 SCICHAR1 SCICHAR0 D7 D0 SCIA的所有寄存器都是8位的 當(dāng)一個(gè)寄存器被訪問時(shí) 寄存器數(shù)據(jù)位于低8位 高8位為0 D0 D2字符長度控制位 3位D3SCI多處理模式控制位 1位D4回送測試模式使能位 1位D5SCI奇偶校驗(yàn)使能位 1位D6奇偶校驗(yàn)位選擇 1位D7SCI結(jié)束位的個(gè)數(shù) 1位D8 D15保留位 8位 例6 2用位域定義SCICCR structSCICCR BITS Uint16SCICHAR 3 D2 D0字符長度控制位Uint16ADDRIDLE MODE 1 D3多處理器模式控制位Uint16LOOPBKENA 1 D4回送測試模式使能位Uint16PARITYENA 1 D5極性使能位Uint16PARITY 1 D6奇 偶極性選擇位Uint16STOPBITS 1 D7停止位個(gè)數(shù)Uint16rsvd1 8 D15 D8保留 必須定義 但不會(huì)被調(diào)用 structSCICCR BITSbit 聲明SCICCR BITS型變量bitbit SCICHAR 7 SCI字符長度控制位為8位 與傳統(tǒng) define方法比較 C代碼訪問寄存器的傳統(tǒng)方法是使用 define宏為每一個(gè)寄存器分配一個(gè)地址 例如 同樣的 define方法將在每個(gè)外設(shè)寄存器上不斷重復(fù) 甚至對于諸如SCI A和SCI B這樣完全相同的外設(shè) 每個(gè)寄存器都必須被一一分配地址 傳統(tǒng) define方法有以下顯著弊端 1 不容易訪問寄存器中的位域部分 2 不容易在CCS觀察窗內(nèi)顯示位域的值 3 不能利用CCS的自動(dòng)完成功能 4 對于重復(fù)的外設(shè) 頭文件開發(fā)者不能獲得重復(fù)使用的便利 注意以下幾點(diǎn) 1 寄存器名出現(xiàn)的順序必須與它們在內(nèi)存中被安排的順序相同 2 在結(jié)構(gòu)體中 通過使用保留變量 rsvd1 rsvd2等 來預(yù)留內(nèi)存中的保留位置 這種保留結(jié)構(gòu)僅僅用以預(yù)留內(nèi)存中的空間 3 Uint16和Uint32分別是無符號16位或者32位數(shù)的類型定義 在DSP281x中 則用來定義無符號整型和無符號長整型 這樣使用起來就方便一些 相應(yīng)的類型定義聲明由DSP281x Device h文件建立 2 聲明可訪問寄存器的變量寄存器結(jié)構(gòu)體類型可被用于聲明一個(gè)可訪問寄存器的變量 對器件的每個(gè)外設(shè)都采用這一相同的做法 同一種外設(shè)的復(fù)用外設(shè)可以采用同樣的結(jié)構(gòu)體類型定義 例如 如果一個(gè)器件上有3個(gè)CPU Timers 可以創(chuàng)建如下所示的3個(gè)具有 structCPUTIMER REGS 結(jié)構(gòu)體類型的變量 例6 3SCICCR的共同體定義 結(jié)構(gòu)體變量不能作為一個(gè)整體進(jìn)行輸入 輸出 如果需要對整個(gè)寄存器進(jìn)行操作 位域操作就過于復(fù)雜 這時(shí)考慮到共同體 可以進(jìn)行整體操作和位操作二選一的方式 共同體 公用體 把幾種不同類型的變量放在同一段內(nèi)存單元中 變量在內(nèi)存中所占字節(jié)數(shù)不同 但都從同一地址開始存放 也就是采用覆蓋技術(shù) 幾個(gè)變量相互覆蓋 共同體類型變量定義形式 union共同體名 成員表列 例6 3SCICCR的共同體定義 unionSCICCR REG Uint16all 可實(shí)現(xiàn)對寄存器整體操作structSCICCR BITSbit 可實(shí)現(xiàn)位操作 unionSCICCR REGSCICCR 聲明一個(gè)共同體SCICCRSCICCR all 0 x007F SCICCR bit SCICHAR 5 structSCI REGS unionSCICCR REGSCICCR 通信控制寄存器unionSCICTL1 REGSCICTL1 控制寄存器1Uint16SCIHBAUD 波特率寄存器 高字節(jié) Uint16SCILBAUD 波特率寄存器 低字節(jié) unionSCICTL2 REGSCICTL2 控制寄存器2unionSCIRXST REGSCIRXST 接收狀態(tài)寄存器Uint16SCIRXEMU 接收仿真緩沖寄存器unionSCIRXBUF REGSCIRXBUF 接收數(shù)據(jù)寄存器Uint16rsvd1 保留Uint16SCITXBUF 發(fā)送數(shù)據(jù)緩沖寄存器unionSCIFFTX REGSCIFFTX FIFO發(fā)送寄存器unionSCIFFRX REGSCIFFRX FIFO接收寄存器unionSCIFFCT REGSCIFFCT FIFO控制寄存器Uint16rsvd2 保留Uint16rsvd3 保留unionSCIPRI REGSCIPRI FIFO優(yōu)先級控制寄存器 externvolatilestructSCI REGSSciaRegs externvolatilestructSCI REGSScibRegs 例6 4創(chuàng)建SCI寄存器的結(jié)構(gòu)體文件 文件名 DSP28 Sci h 功能 2812SCI模塊寄存器的定義 ifndefDSP28 SCI H defineDSP28 SCI HstructSCICCR BITS bitdescriptionUint16SCICHAR 3 2 0CharacterlengthcontrolUint16ADDRIDLE MODE 1 3ADDR IDLEModecontrolUint16LOOPBKENA 1 4LoopBackenableUint16PARITYENA 1 5ParityenableUint16PARITY 1 6EvenorOddParityUint16STOPBITS 1 7NumberofStopBitsUint16rsvd1 8 15 8reserved unionSCICCR REG Uint16all structSCICCR BITSbit 位域方式定義SCICCR寄存器 定義共同體SCICCR寄存器 structSCICTL1 BITS bitdescriptionUint16RXENA 1 0SCIreceiverenableUint16TXENA 1 1SCItransmitterenableUint16SLEEP 1 2SCIsleepUint16TXWAKE 1 3TransmitterwakeupmethodUint16rsvd 1 4reservedUint16SWRESET 1 5SoftwareresetUint16RXERRINTENA 1 6RecieveinterruptenableUint16rsvd1 9 15 7reserved unionSCICTL1 REG Uint16all structSCICTL1 BITSbit 定義共同體SCICTL1寄存器 structSCICTL2 BITS bitdescriptionUint16TXINTENA 1 0TransmitinterruptenableUint16RXBKINTENA 1 1Receiver bufferbreakenableUint16rsvd 4 5 2reservedUint16TXEMPTY 1 6TransmitteremptyflagUint16TXRDY 1 7TransmitterreadyflagUint16rsvd1 8 15 8reserved unionSCICTL2 REG Uint16all structSCICTL2 BITSbit 定義共同體SCICTL1寄存器 structSCIRXST BITS bitdescriptionUint16rsvd 1 0reservedUint16RXWAKE 1 1ReceiverwakeupdetectflagUint16PE 1 2ParityerrorflagUint16OE 1 3OverrunerrorflagUint16FE 1 4FramingerrorflagUint16BRKDT 1 5Break detectflagUint16RXRDY 1 6ReceiverreadyflagUint16RXERR 1 7Receivererrorflag unionSCIRXST REG Uint16all structSCIRXST BITSbit 定義共同體SCICTL1寄存器 structSCIRXBUF BITS bitsdescriptionUint16RXDT 8 7 0ReceivewordUint16rsvd 6 13 8reservedUint16SCIFFPE 1 14SCIPEerrorinFIFOmodeUint16SCIFFFE 1 15SCIFEerrorinFIFOmode unionSCIRXBUF REG Uint16all structSCIRXBUF BITSbit 定義共同體SCIRXBUF寄存器 structSCIPRI BITS bitdescriptionUint16rsvd 3 2 0reservedUint16FREE 1 3FreeemulationsuspendmodeUint16SOFT 1 4SoftemulationsuspendmodeUint16rsvd1 3 7 5reserved unionSCIPRI REG Uint16all structSCIPRI BITSbit 定義共同體SCIPRI寄存器 structSCIFFTX BITS bitdescriptionUint16TXFFILIL 5 4 0InterruptlevelUint16TXFFIENA 1 5InterruptenableUint16TXINTCLR 1 6ClearINTflagUint16TXFFINT 1 7INTflagUint16TXFFST 5 12 8FIFOstatusUint16TXFIFOXRESET 1 13FIFOresetUint16SCIFFENA 1 14EnhancementenableUint16resvd 1 15reserved unionSCIFFTX REG Uint16all structSCIFFTX BITSbit 定義共同體SCIFFTX寄存器 structSCIFFRX BITS bitsdescriptionUint16RXFFIL 5 4 0InterruptlevelUint16RXFFIENA 1 5InterruptenableUint16RXFFINTCLR 1 6ClearINTflagUint16RXFFINT 1 7INTflagUint16RXFIFST 5 12 8FIFOstatusUint16RXFIFORESET 1 13FIFOresetUint16RXOVF CLR 1 14ClearoverflowUint16RXFFOVF 1 15FIFOoverflow unionSCIFFRX REG Uint16all structSCIFFRX BITSbit 定義共同體SCIFFRX寄存器 structSCIFFCT BITS bitsdescriptionUint16FFTXDLY 8 7 0FIFOtransmitdelayUint16rsvd 5 12 8reservedUint16CDC 1 13AutobaudmodeenableUint16ABDCLR 1 14AutobaudclearUint16ABD 1 15Autobauddetect unionSCIFFCT REG Uint16all structSCIFFCT BITSbit 定義共同體SCIFFCT寄存器 structSCI REGS unionSCICCR REGSCICCR CommunicationscontrolregisterunionSCICTL1 REGSCICTL1 Controlregister1Uint16SCIHBAUD Baudrate high registerUint16SCILBAUD Baudrate low registerunionSCICTL2 REGSCICTL2 Controlregister2unionSCIRXST REGSCIRXST RecievestatusregisterUint16SCIRXEMU RecieveemulationbufferregisterunionSCIRXBUF REGSCIRXBUF RecievedatabufferUint16rsvd1 reservedUint16SCITXBUF TransmitdatabufferunionSCIFFTX REGSCIFFTX FIFOtransmitregisterunionSCIFFRX REGSCIFFRX FIFOrecieveregisterunionSCIFFCT REGSCIFFCT FIFOcontrolregisterUint16rsvd2 reservedUint16rsvd3 reservedunionSCIPRI REGSCIPRI FIFOPrioritycontrol externvolatilestructSCI REGSSciaRegs externvolatilestructSCI REGSScibRegs endif Nomore 例6 5對SCICCR按位進(jìn)行操作 SciaRegs SCICCR bit STOPBITS 0 1位停止位SciaRegs SCICCR bit PARITYENA 0 禁止極性校驗(yàn)功能SciaRegs SCICCR bit LOOPBKENA 0 禁止回送測試模式功能SciaRegs SCICCR bit ADDRIDLE MODE 0 空閑線模式SciaRegs SCICCR bit SCICHAR 7 8位數(shù)據(jù)位 操作方法1 例6 6對SCICCR整體進(jìn)行操作 SciaRegs SCICCR all 0 x0007 操作方法2 例6 7對SCIHBAUD和SCILBAUD進(jìn)行操作 SciaRegs SCIHBAUD 0 SciaRegs SCILBAUD 0 xF3 SCIHBAUD和SCILBAUD在結(jié)構(gòu)體中定義是Unit16型的 即無符號整型的 只能直接給寄存器整體進(jìn)行賦值用C語言對他們進(jìn)行操作 操作方法3 DSP包含了很多寄存器 每個(gè)寄存器又有若干位域組成 每個(gè)位域也有自己的名字和功能 如何方便的操作寄存器呢 CCS3 3為我們提供幫助 寫語句時(shí)如要配置停止位個(gè)數(shù)為1 需要書寫語句 SciaRegs SCICCR bit STOPBITS 0 先在CCS中輸入 SciaRegs 然后輸入 就會(huì)彈出下拉列表框 將SCIA所有的寄存器列了出來 單擊選擇需要操作的寄存器 SCICCR 然后在彈出來的變量下拉列表中選擇 bit 繼續(xù)輸入 這時(shí)又彈出下拉列表 把位域選擇好 STOP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論