0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動(dòng)操作寄存器

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-26 16:34 ? 次閱讀

首先在設(shè)備樹(shù)里定義一個(gè)節(jié)點(diǎn),例如:

uart0:serial@10010000{

compatible="sifive,uart0";

reg=<0x0?0x10010000?0x0?0x1000>;

status="okay";

}

@符號(hào)后面是寄存器的基地址,然后填寫(xiě)compatiblereg屬性,status屬性設(shè)置為okay。

reg屬性中,第二參數(shù)寄存器基址,與@符號(hào)后面的地址對(duì)應(yīng),第四個(gè)參數(shù)是映射的大小。

驅(qū)動(dòng)中操作:

#defineOFFSET0x60//某個(gè)寄存器的偏移地址

staticintmy_probe(structplatform_device*pdev)

{

structresource*res;

void__iomem*base;

u32regval;

res=platform_get_resource(pdev,IORESOURCE_MEM,0);

base=devm_ioremap_resource(&pdev->dev,res);

//寄存器讀寫(xiě)

regval=readl(base+OFFSET);//讀寄存器

regval|=(1<

writel(regval,base+OFFSET);//寫(xiě)寄存器

return0;

}

先調(diào)用platform_get_resource獲取IORESOURCE_MEM資源,就是獲取了設(shè)備樹(shù)中的reg屬性,返回的resource結(jié)構(gòu)體中包含了起始地址和結(jié)束地址。然后調(diào)用devm_ioremap_resource映射這個(gè)資源,就能得到一個(gè)虛擬地址。后續(xù)對(duì)該虛擬地址的操作,就等同于對(duì)寄存器物理地址的操作。

讀寫(xiě)寄存器,可以調(diào)用readlwritel函數(shù)。先讀取寄存器的值放到臨時(shí)變量中,賦值后,再一次性寫(xiě)入。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120385
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1840

    瀏覽量

    85296
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209542
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    寄存器是什么?怎么操作寄存器點(diǎn)亮LED燈?

    寄存器,是集成電路中非常重要的一種存儲(chǔ)單元,通常由觸發(fā)組成。在集成電路設(shè)計(jì)中,寄存器可分為電路內(nèi)部使用的寄存器和充當(dāng)內(nèi)外部接口的寄存器這兩
    的頭像 發(fā)表于 07-21 16:59 ?4044次閱讀
    <b class='flag-5'>寄存器</b>是什么?怎么<b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>點(diǎn)亮LED燈?

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內(nèi)的組成部分。寄存器是有限存貯容量
    發(fā)表于 03-08 14:26 ?2.2w次閱讀

    寄存器操作方法_對(duì)寄存器操作的通用方法總結(jié)

    本文主要詳解寄存器操作方法以及對(duì)寄存器操作的通用方法總結(jié),具體的跟隨小編來(lái)了解一下。
    的頭像 發(fā)表于 05-22 15:53 ?2.3w次閱讀

    寄存器變量

    C語(yǔ)言中使用關(guān)鍵字register來(lái)聲明局部變量為寄存器變量。寄存器變量的值會(huì)被存放在CPU的寄存器中,每當(dāng)需要使用它們時(shí),CPU就可以直接使用,而無(wú)須再通過(guò)控制從內(nèi)存中獲取。由于
    發(fā)表于 06-03 10:13 ?2383次閱讀

    ATMEL SAMC21的ADC驅(qū)動(dòng)寄存器操作寄存器程序合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是ATMEL SAMC21的ADC驅(qū)動(dòng)寄存器操作寄存器程序合集免費(fèi)下載。
    發(fā)表于 06-20 08:00 ?32次下載
    ATMEL SAMC21的ADC<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>和<b class='flag-5'>寄存器</b>程序合集免費(fèi)下載

    ATMEL SAMC21的DAC驅(qū)動(dòng)寄存器操作寄存器代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是ATMEL SAMC21的DAC驅(qū)動(dòng)寄存器操作寄存器代碼免費(fèi)下載。
    發(fā)表于 06-20 08:00 ?24次下載
    ATMEL SAMC21的DAC<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>和<b class='flag-5'>寄存器</b>代碼免費(fèi)下載

    Atmel SAMC21的I2C驅(qū)動(dòng)寄存器操作寄存器代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Atmel SAMC21的I2C驅(qū)動(dòng)寄存器操作寄存器代碼免費(fèi)下載。
    發(fā)表于 06-20 08:00 ?19次下載

    使用寄存器的邏輯操作指令是什么?

    操作系統(tǒng)中硬件相關(guān)的部分集中體現(xiàn)在匯編指令和對(duì)寄存器操作中,因此我們對(duì)ARM體系結(jié)構(gòu)的介紹也圍繞ARMv8-A的匯編指令和寄存器來(lái)展開(kāi)。
    的頭像 發(fā)表于 06-18 15:49 ?3699次閱讀

    C語(yǔ)言:寄存器操作

    C語(yǔ)言:寄存器操作
    發(fā)表于 01-13 12:56 ?6次下載
    C語(yǔ)言:<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32單片機(jī)編程時(shí)一般都用ST給的庫(kù)函數(shù)編程,庫(kù)函數(shù)編程的底層就是對(duì)單片機(jī)寄存器操作,庫(kù)函數(shù)就是一系列寄存器
    發(fā)表于 01-13 15:43 ?19次下載
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    RAL寄存器模型操作圖鑒

    寄存器模型操作,指的是通過(guò)寄存器模型對(duì)RTL中寄存器進(jìn)行讀寫(xiě)訪問(wèn),或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 05-17 09:01 ?942次閱讀
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>圖鑒

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通過(guò)寄存器模型對(duì)RTL中寄存器進(jìn)行讀寫(xiě)訪問(wèn),或者同步寄存器模型與RTL中寄存器
    的頭像 發(fā)表于 07-12 09:37 ?1091次閱讀
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南

    Linux應(yīng)用層操作寄存器

    應(yīng)用層操作寄存器 驅(qū)動(dòng)操作寄存器,需要先進(jìn)行映射將物理地址轉(zhuǎn)為虛擬地址。 但如果想在應(yīng)用層中操作
    的頭像 發(fā)表于 09-26 16:37 ?968次閱讀

    如何在shell中操作寄存器

    shell 中操作寄存器可以使用 devmem 命令. devmem 命令其實(shí)就是上述應(yīng)用層操作寄存器生成的可執(zhí)行文件,只不過(guò)busybox已經(jīng)幫我們實(shí)現(xiàn)了。 devmem 命令格式:
    的頭像 發(fā)表于 09-26 16:39 ?1060次閱讀

    Linux應(yīng)用層操作寄存器

    --- > [*] /dev/mem virtual device support Linux應(yīng)用層操作寄存器 除了直接使用devmem,我們也可以在Linux應(yīng)用層自己實(shí)現(xiàn)一個(gè)de
    的頭像 發(fā)表于 10-08 15:16 ?1226次閱讀
    <b class='flag-5'>Linux</b>應(yīng)用層<b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>