注:下面描述以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 第乙個是暫存器位址,傻瓜式呼叫,總...