筆記三 嵌入式板子讀寫暫存器的方法

2021-08-09 19:50:03 字數 2363 閱讀 2756

注:下面描述以s5pv210(a8)板子為例。

功能:點亮乙個led燈(gph0_3)。

分為控制暫存器和資料暫存器:分別佔4個位元組。

如led燈

--->板子原理圖(底板原理圖--->到核心板原理圖)

--->找到對應器件i/o口

--->查詢晶元資料i/o口對應的暫存器位置。

方法一:

首先在boot終端:用mw命令直接操作暫存器。

mw 實體地址 配置值

mw 0xe0200c00 0x1111:(對應控制暫存器設定輸出)

mw 0xe0200c04 0xf:(對應資料暫存器設為1,則led點亮)

方法二:應用ioremap函式操作暫存器。

1.包含標頭檔案:

#include

#include

2.使用i/o記憶體必須要先申請:

request_mem_region(phy_start, size, name);

例:struct resource *gph_res = null;

gph_res = request_mem_region(0xe0200c00, 0x80, "demo_gph");

static void __iomem *gph_base = null;

gph_base = ioremap(0xe0200c00, 0x80);

4.各暫存器虛擬位址

對映後的暫存器位址排列順序和間隔同對映前一直,因此 虛擬首位址+偏移量即可得到具體暫存器位址

5.讀寫暫存器,用readl/writel。

《1》直接操作暫存器位址

writel(0x1111, gph_base);//寫控制暫存器

writel(0xf, (gph_base +4));//寫資料暫存器

unsigned int reg = readl((gph_base +4) );//讀資料暫存器

《2》使用核心已對映完成的暫存器虛擬位址

--包含標頭檔案:

#include

#include

--s5pv210_gph0_base為gph0組io暫存器集合的 起始位址,加上偏移量後即可訪問具體暫存器

--readl/writel讀寫

unsigned int tmp;

tmp = readl(s5pv210_gph0_base+4);

writel(tmp,s5pv210_gph0_base+4);

6.釋放:

iounmap(gph_base);

release_mem_region(0xe0200c00,0x80);

方法三:使用核心提供介面操作。

以s5pv210晶元為例:不同的晶元可能提供函式介面不一樣!

1、 bit的讀、寫

gpio_set_value(s5pv210_gph0(i), 0);     //代替  以前的  s3c2410_setpin()

gpio_get_value(s5pv210_gph0(i));

2、配置輸入、輸出、其他功能

s3c_gpio_cfgpin(s5pv210_gph0(0),s3c_gpio_output);         //s3c_gpio_input

3、上拉

s3c_gpio_setpull(s5pv210_gph2(3),s3c_gpio_pull_up);

4、驅動能力

s5p_gpio_set_drvstr(s5pv210_gph3(0), 2);                //驅動能力 0-3

5、中斷

ret = set_irq_type(irq_eint(19),irq_type_edge_falling);

ret = request_irq(irq_eint(23),buttons_interrupt, 0,"key6", (void *)6);

6、任意中斷 (前提這個管腳有中斷功能) (gpio_to_irq)

.start = s5pv210_gpj2(7),//irq_eint_group(20, 7), //j2_7

s3c_gpio_cfgpin(wiegand.r0->start, s3c_gpio_sfn(15));

status = request_irq(gpio_to_irq(wiegand.r0->start), eint_irq, wiegand.r0->flags & irqf_trigger_mask, "wiegand0", (void*)0);

方法四:使用sysfs檔案系統操作。

通過sys檔案系統操作gpio:

cd /sys/class/gpio/

暫存器以及嵌入式彙編語法及使用

一 嵌入式彙編語法 1 格式 1 asm 彙編語句 之前用asm 或 asm 意為 的內容是彙編語句 2 輸出暫存器 3 輸入暫存器 4 會被修改的暫存器 除第一行以外,後面帶冒號的行若不使用就都可一省略。輸入暫存器 表示在開始執行彙編 時,這裡指定的一些暫存器中應存放的輸入值,它們也分別對應著一c...

嵌入式系統 儲存器對映與暫存器對映原理

圖1 儲存器對映 儲存器在產家製作完成後是一片沒有任何資訊的物理儲存器,而cpu要進行訪存就涉及到記憶體位址的概念,因此儲存器對映就是為物理記憶體按一定編碼規則分配位址的行為。值得注意,儲存器對映一般是由產家規定,使用者不能隨意更改。圖2 stm32晶元儲存器對映 注1stm32中,i code b...

三菱PLC連線的那些事 暫存器讀 寫

前一篇講過,如何利用mx componet元件與三菱plc連線,下乙個問題就涉及到讀寫,你跑不掉的 有了官方元件,直接呼叫不就行了,對不對?對不對?對!前提是不踩坑 首先,有這個方法getdevice string szdevice,out int lpldata 第乙個是暫存器位址,傻瓜式呼叫,總...