小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))
目錄
?
1 c語言與匯編語言器
2 配置SCI寄存器
2.1 了解SCI寄存器
2.2 使用位定義的方法定義寄存器
2.2.1 位域
2.2.2 聲明共同體
2.2.3 結構體
2.2.4 查看寄存器的值
2.3 寄存器文件空間分配
本節內容看懂之后主要是頭文件程序的解析。
?
1 c語言與匯編語言器
一些對時間要求特別高的時候需要嵌入一些匯編語言,其他時候使用c語言通過位定義和寄存器結構體的方式來實現對dsp寄存器進行訪問和控制。
2 配置SCI寄存器
2.1 了解SCI寄存器
前面我們講過2812有兩個SCI寄存器(SCIA和SCIB),可以做成兩個串口(2RS232/2RS484/RS232+RS485)
- 首先我們查看寄存器的寄存器文件
以SCIA為例,第一列表示他有13個寄存器可以操作,并且都以SCI開頭進行命名;第二列表示地址,即該寄存器所在的位置;后面的占用空間表示這個地址內的數據寬度,通過更改這些寄存器的數據就可以改變相應寄存器的功能。注意寄存器地址非連續,有缺失值。
2.2 使用位定義的方法定義寄存器
2.2.1 位域
定義:一個字節中的二進制位劃分為幾個不同的區域,并說明每個區域的位數。
語法結構如下所示
注意:語法最后有分號。
注意:
1 位域聲明順序從右到左
2 位域的定義不能橫跨字節
若例6-1,中a長度為5,b為3,則定義錯誤,在此情況下b要橫跨兩個字節
3 位域不能大于8個字節,否則與前面第二條沖突
4 可以沒有域名,此時的作用是調整字節的順序。如下所示
注意:保留位也需要定義。
具體位域分區如下所述:
2.2.2 聲明共同體
作用:有時候需要對整個寄存器進行操作,這時通過聲明共同體來進行操作;既可以對整體進行操作,也可以按位進行操作。
定義:
結構體和共同體的區別:
結構體分配空間按所有成員占據的總和來分配;
共同體的空間是共用的,如例6-3中:unit16與bit共用的是一段空間,在一個時間只有一個共同體使用。
2.2.3 結構體
SCI中包含了很多寄存器,為了方便管理,在dsp中通過結構體的方法來實現。
注意:
結構體當中有很多union共同體,既可以整體對寄存器進行操作,也可以對寄存器進行位操作;但unit16類型的只能進行寄存器操作。
保留項也被定義了,用rsvd代替,但沒有用處。
在定義結構體之后,需要聲明SciaRegs和ScibRegs,表示scia與scib寄存器;關鍵字extern代表全局變量;volatile表示寄存器的值易變,可以被外部硬件和外部代碼改變,但如果沒有這個關鍵字,則該寄存器的值只能被程序代碼改變。
函數調用:
代碼分析:
SciaRegs.SCICCR.bit.STOPBITS
首先SciaRegs.SCICCR這一段代碼是結構體定義的,
找SCICCR的聲明
下一位SciaRegs.SCICCR.bit,從函數聲明處得知函數原來應該是SCICCR_REG,在共同體中存在的下一位bit,他是位域定義,找他的聲明處
順藤摸瓜也就找到了SciaRegs.SCICCR.bit.STOPBITS寄存器
union共同體,既可以整體對寄存器進行操作(.all),也可以對寄存器進行位操作(.bit);但unit16類型的只能進行寄存器操作,如下所示:
2.2.4 查看寄存器的值
2.3 寄存器文件空間分配
why:代表寄存器的變量如何與物理寄存器結合起來的?
總結
以上是生活随笔為你收集整理的小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: skyline软件_正射影像、倾斜摄影测
- 下一篇: 逆滤波和维纳滤波