日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))

發(fā)布時(shí)間:2023/12/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明)) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

?

1 c語(yǔ)言與匯編語(yǔ)言器

2 配置SCI寄存器

2.1 了解SCI寄存器

2.2 使用位定義的方法定義寄存器

2.2.1 位域

2.2.2 聲明共同體

2.2.3 結(jié)構(gòu)體

2.2.4 查看寄存器的值

2.3 寄存器文件空間分配


本節(jié)內(nèi)容看懂之后主要是頭文件程序的解析。

?

1 c語(yǔ)言與匯編語(yǔ)言器

一些對(duì)時(shí)間要求特別高的時(shí)候需要嵌入一些匯編語(yǔ)言,其他時(shí)候使用c語(yǔ)言通過位定義和寄存器結(jié)構(gòu)體的方式來(lái)實(shí)現(xiàn)對(duì)dsp寄存器進(jìn)行訪問和控制。

2 配置SCI寄存器

2.1 了解SCI寄存器

前面我們講過2812有兩個(gè)SCI寄存器(SCIA和SCIB),可以做成兩個(gè)串口(2RS232/2RS484/RS232+RS485)

  • 首先我們查看寄存器的寄存器文件

以SCIA為例,第一列表示他有13個(gè)寄存器可以操作,并且都以SCI開頭進(jìn)行命名;第二列表示地址,即該寄存器所在的位置;后面的占用空間表示這個(gè)地址內(nèi)的數(shù)據(jù)寬度,通過更改這些寄存器的數(shù)據(jù)就可以改變相應(yīng)寄存器的功能。注意寄存器地址非連續(xù),有缺失值。

2.2 使用位定義的方法定義寄存器

2.2.1 位域

定義:一個(gè)字節(jié)中的二進(jìn)制位劃分為幾個(gè)不同的區(qū)域,并說明每個(gè)區(qū)域的位數(shù)。

語(yǔ)法結(jié)構(gòu)如下所示

注意:語(yǔ)法最后有分號(hào)。

注意:

1 位域聲明順序從右到左

2 位域的定義不能橫跨字節(jié)

若例6-1,中a長(zhǎng)度為5,b為3,則定義錯(cuò)誤,在此情況下b要橫跨兩個(gè)字節(jié)

3 位域不能大于8個(gè)字節(jié),否則與前面第二條沖突

4 可以沒有域名,此時(shí)的作用是調(diào)整字節(jié)的順序。如下所示

注意:保留位也需要定義。

具體位域分區(qū)如下所述:

2.2.2 聲明共同體

作用:有時(shí)候需要對(duì)整個(gè)寄存器進(jìn)行操作,這時(shí)通過聲明共同體來(lái)進(jìn)行操作;既可以對(duì)整體進(jìn)行操作,也可以按位進(jìn)行操作。

定義:

結(jié)構(gòu)體和共同體的區(qū)別:

結(jié)構(gòu)體分配空間按所有成員占據(jù)的總和來(lái)分配;

共同體的空間是共用的,如例6-3中:unit16與bit共用的是一段空間,在一個(gè)時(shí)間只有一個(gè)共同體使用。

2.2.3 結(jié)構(gòu)體

SCI中包含了很多寄存器,為了方便管理,在dsp中通過結(jié)構(gòu)體的方法來(lái)實(shí)現(xiàn)。

注意:

結(jié)構(gòu)體當(dāng)中有很多union共同體,既可以整體對(duì)寄存器進(jìn)行操作,也可以對(duì)寄存器進(jìn)行位操作;但unit16類型的只能進(jìn)行寄存器操作。

保留項(xiàng)也被定義了,用rsvd代替,但沒有用處。

在定義結(jié)構(gòu)體之后,需要聲明SciaRegsScibRegs,表示scia與scib寄存器;關(guān)鍵字extern代表全局變量;volatile表示寄存器的值易變,可以被外部硬件和外部代碼改變,但如果沒有這個(gè)關(guān)鍵字,則該寄存器的值只能被程序代碼改變。

函數(shù)調(diào)用:

代碼分析:

SciaRegs.SCICCR.bit.STOPBITS

首先SciaRegs.SCICCR這一段代碼是結(jié)構(gòu)體定義的,

找SCICCR的聲明

下一位SciaRegs.SCICCR.bit,從函數(shù)聲明處得知函數(shù)原來(lái)應(yīng)該是SCICCR_REG,在共同體中存在的下一位bit,他是位域定義,找他的聲明處

順藤摸瓜也就找到了SciaRegs.SCICCR.bit.STOPBITS寄存器

union共同體,既可以整體對(duì)寄存器進(jìn)行操作(.all),也可以對(duì)寄存器進(jìn)行位操作(.bit);但unit16類型的只能進(jìn)行寄存器操作,如下所示:

2.2.4 查看寄存器的值

2.3 寄存器文件空間分配

why:代表寄存器的變量如何與物理寄存器結(jié)合起來(lái)的?

總結(jié)

以上是生活随笔為你收集整理的小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 使用c语言操作dsp寄存器(以SCI为例进行说明))的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。