女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] 1、前言IO端口與IO內(nèi)存的概念:外設(shè)中的寄存器稱為是IO端口,外設(shè)中的內(nèi)存稱為是IO內(nèi)存。二者統(tǒng)稱為IO空間。Linux內(nèi)核是通過虛擬地址訪問外設(shè)的。所以需要先將虛擬地址映射到相應(yīng)外設(shè)的物理地址上,lin

1、前言

IO端口與IO內(nèi)存的概念:外設(shè)中的寄存器稱為是IO端口,外設(shè)中的內(nèi)存稱為是IO內(nèi)存。二者統(tǒng)稱為IO空間。Linux內(nèi)核是通過虛擬地址訪問外設(shè)的。所以需要先將虛擬地址映射到相應(yīng)外設(shè)的物理地址上,linux的映射方式有兩種:靜態(tài)映射(map_desc)和動態(tài)映射(ioremap),其實也是內(nèi)核訪問外設(shè)資源的方式。

2、靜態(tài)映射基本過程:

在驅(qū)動中配置寄存器,可以調(diào)用類似于s3c_gpio_cfgpin、s3c_gpio_setpull、gpio_direction_output等直接配置IO寄存器的函數(shù)。這些函數(shù)訪問的虛擬地址,這些虛擬地址都是已經(jīng)在啟動啟動的時候通過靜態(tài)映射方式映射到IO寄存器的物理地址上。

靜態(tài)映射概念:所謂的靜態(tài)映射是指,虛擬地址到物理地址的轉(zhuǎn)換所需要的頁表在操作系統(tǒng)啟動時已經(jīng)配置好,不需要用戶進行配置,虛擬地址到物理地址的查表轉(zhuǎn)換可直接完成(fromnet)。

以s5pv210為例講述:

MACHINE_START(SMDKV210,"SMDKV210")

/* Maintainer: Kukjin Kim */

.boot_params =S5P_PA_SDRAM + 0x100,

.init_irq =s5pv210_init_irq,

.map_io = smdkv210_map_io,

.init_machine = smdkv210_machine_init,

#ifdefCONFIG_S5P_HIGH_RES_TIMERS

.timer = &s5p_systimer,

#else

.timer =&s5p_timer,

#endif

MACHINE_END

其中IO映射函數(shù)是smdkv210_map_io實現(xiàn):

staticvoid __init smdkv210_map_io(void)

{

s5p_init_io(NULL,0, S5P_VA_CHIPID);

s3c24xx_init_clocks(24000000);

s5pv210_gpiolib_init();

s3c24xx_init_uarts(smdkv210_uartcfgs,

ARRAY_SIZE(smdkv210_uartcfgs));

#ifndefCONFIG_S5P_HIGH_RES_TIMERS

s5p_set_timer_source(S5P_PWM2, S5P_PWM4);

#endif

s5p_reserve_bootmem(s5pv210_media_devs,

ARRAY_SIZE(s5pv210_media_devs),

S5P_RANGE_MFC);

}

該函數(shù)中調(diào)用s5p_init_io進行地址的映射,

/*read cpu identification code */

void__inits5p_init_io(struct map_desc*mach_desc,

int size, void __iomem *cpuid_addr)

{

unsigned long idcode;

/* initialize the io descriptors we need forinitialization */

iotable_init(s5p_iodesc, ARRAY_SIZE(s5p_iodesc));

if (mach_desc)

iotable_init(mach_desc, size);

idcode = __raw_readl(cpuid_addr);

s3c_init_cpu(idcode,cpu_ids, ARRAY_SIZE(cpu_ids));

}

其中最重要是struct map_desc s5p_iodesc[]結(jié)構(gòu)體 和 staticstruct map_desc s5pv210_iodesc[]:

structmap_desc{

unsigned long virtual; // IO空間映射后的虛擬地址

unsigned long pfn; // IO空間的物理地址所在的頁幀號

unsigned long length; // IO空間的長度

unsigned int type; // IO空間的類型

};

/*minimal IO mapping這部分是最小系統(tǒng)層次的映射*/

staticstruct map_desc s5p_iodesc[] __initdata = {

{

.virtual =(unsigned long)S5P_VA_CHIPID,

.pfn =__phys_to_pfn(S5P_PA_CHIPID),

.length =SZ_4K,

.type =MT_DEVICE,

}, {

.virtual = (unsigned long)S3C_VA_SYS,

.pfn = __phys_to_pfn(S5P_PA_SYSCON),

.length = SZ_64K,

.type = MT_DEVICE,

},{

.virtual =(unsigned long)S3C_VA_TIMER,

.pfn =__phys_to_pfn(S5P_PA_TIMER),

.length =SZ_16K,

.type =MT_DEVICE,

},{

.virtual =(unsigned long)S3C_VA_WATCHDOG,

.pfn =__phys_to_pfn(S3C_PA_WDT),

.length =SZ_4K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)S5P_VA_SROMC,

.pfn =__phys_to_pfn(S5P_PA_SROMC),

.length =SZ_4K,

.type =MT_DEVICE,

},

};

/*Initial IO mappings*/

staticstruct map_desc s5pv210_iodesc[] __initdata = {

{

.virtual =(unsigned long)S5P_VA_SYSTIMER,

.pfn =__phys_to_pfn(S5PV210_PA_SYSTIMER),

.length =SZ_4K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)S5P_VA_GPIO,

.pfn =__phys_to_pfn(S5PV210_PA_GPIO),

.length =SZ_4K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)VA_VIC0,

.pfn =__phys_to_pfn(S5PV210_PA_VIC0),

.length =SZ_16K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)VA_VIC1,

.pfn =__phys_to_pfn(S5PV210_PA_VIC1),

.length =SZ_16K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)VA_VIC2,

.pfn =__phys_to_pfn(S5PV210_PA_VIC2),

.length =SZ_16K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)VA_VIC3,

.pfn =__phys_to_pfn(S5PV210_PA_VIC3),

.length =SZ_16K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)S3C_VA_UART,

.pfn =__phys_to_pfn(S3C_PA_UART),

.length =SZ_512K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)S5P_VA_DMC0,

.pfn =__phys_to_pfn(S5PV210_PA_DMC0),

.length =SZ_4K,

.type =MT_DEVICE,

}, {

.virtual =(unsigned long)S5P_VA_DMC1,

.pfn =__phys_to_pfn(S5PV210_PA_DMC1),

.length =SZ_4K,

.type =MT_DEVICE,

},{

.virtual = (unsigned long)S5P_VA_BUS_AXI_DSYS,

.pfn = __phys_to_pfn(S5PV210_PA_BUS_AXI_DSYS),

.length= SZ_4K,

.type = MT_DEVICE,

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

量子計算是一種遵循量子力學(xué)規(guī)律調(diào)控量子信息單元進行計算的新型計算模式。對照于傳統(tǒng)的通用計算機,其理論模型是通用圖靈機;通用的量子計算機,其理論模型是用量子力學(xué)規(guī)律重新詮釋的通用圖靈機。

關(guān)鍵字: 空間 密度 超冷三原子

買車,空間是一個十分重要的要素,因為一輛車的空間大小決定了裝載能力,同時也在一定程度上影響著駕乘舒適性,尤其是長途駕駛或者自駕游,寬敞的空間更能帶來滿滿的幸福感。據(jù)統(tǒng)計,除了首要考慮的價格因素外,近83%的國內(nèi)消費者在初...

關(guān)鍵字: 空間 自駕游 北汽紳寶X35

進程是程序的執(zhí)行過程。程序是靜態(tài)的,是存在于外存之中的,電腦關(guān)機后依然存在。進程是動態(tài)的,是存在于內(nèi)存之中的,是程序的執(zhí)行過程,電腦關(guān)機后就不存在進程了。進程的內(nèi)容來源于程序,進程的啟動過程就是把程序從外存加載到內(nèi)存的過...

關(guān)鍵字: 程序 靜態(tài) 操作系統(tǒng)

ARP緩存中包含一個或多個表,它們用于存儲IP地址及其經(jīng)過解析的MAC地址。ARP命令用于查詢本機ARP緩存中IP地址-->MAC地址的對應(yīng)關(guān)系、添加或刪除靜態(tài)對應(yīng)關(guān)系等。如果在沒有參數(shù)的情況下使用,ARP命令將顯示幫助...

關(guān)鍵字: ARP MAC 靜態(tài)

現(xiàn)在大街上隨處可見的LED顯示屏,還有裝飾用的LED彩燈以及LED車燈,處處可見LED燈的身影,LED已經(jīng)融入到生活中的每一個角落。LED顯示屏靜態(tài)與動態(tài)掃描是相對應(yīng)的,一般來說,實像素LED顯示屏就是指構(gòu)成顯示屏的紅綠...

關(guān)鍵字: led顯示屏 靜態(tài) 掃描

2020年8月10日,隨著企業(yè)、政府和機構(gòu)組織逐步復(fù)工,新冠疫情已經(jīng)永久改變了未來的工作圖景。如今,能夠在任意地點開展的純遠程方式成為辦公環(huán)境新常態(tài)。為此,VMware(NYSE:VMW)宣布推出全新

關(guān)鍵字: 全新 工作 測試版 空間 解決方案

什么是Hirose IX Industrial系列I/O連接器?它有什么作用?最新半導(dǎo)體和電子元件的全球授權(quán)分銷商貿(mào)澤電子即日起開始備貨Hirose Electric Company的IX Industrial系列I/O...

關(guān)鍵字: io 貿(mào)澤 連接器

皮爾磁:PSS4000為客戶實現(xiàn)卓越的衛(wèi)生設(shè)備生產(chǎn)性能 ? 在中國智能制造2025計劃的影響下,隨著技術(shù)能力的不斷提升,越來越多的中國公司成功憑借高質(zhì)量、可靠性較高的設(shè)備獲得了國際市

關(guān)鍵字: io plc pss

你接觸過大幅縮小電路板空間的自適應(yīng)降壓-升壓轉(zhuǎn)換器系列嗎?它有什特點?2019年10月8日,北京訊 —— 德州儀器(TI)今日推出了全新的降壓-升壓轉(zhuǎn)換器系列,包括四款高效、低靜態(tài)電流(IQ)的降壓-升壓轉(zhuǎn)換器,其優(yōu)勢在...

關(guān)鍵字: 空間 轉(zhuǎn)換器

在這篇文章中,小編將為大家?guī)砦⑿荕EG Z490 GODLIKE主板的背部I/O接口進行介紹,一起來了解下吧。

關(guān)鍵字: io z490 微星
關(guān)閉