当前位置:首页 > 单片机 > 单片机
[导读] 1、前言IO端口与IO内存的概念:外设中的寄存器称为是IO端口,外设中的内存称为是IO内存。二者统称为IO空间。Linux内核是通过虚拟地址访问外设的。所以需要先将虚拟地址映射到相应外设的物理地址上,lin

1、前言

IO端口与IO内存的概念:外设中的寄存器称为是IO端口,外设中的内存称为是IO内存。二者统称为IO空间。Linux内核是通过虚拟地址访问外设的。所以需要先将虚拟地址映射到相应外设的物理地址上,linux的映射方式有两种:静态映射(map_desc)和动态映射(ioremap),其实也是内核访问外设资源的方式。

2、静态映射基本过程:

在驱动中配置寄存器,可以调用类似于s3c_gpio_cfgpin、s3c_gpio_setpull、gpio_direction_output等直接配置IO寄存器的函数。这些函数访问的虚拟地址,这些虚拟地址都是已经在启动启动的时候通过静态映射方式映射到IO寄存器的物理地址上。

静态映射概念:所谓的静态映射是指,虚拟地址到物理地址的转换所需要的页表在操作系统启动时已经配置好,不需要用户进行配置,虚拟地址到物理地址的查表转换可直接完成(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映射函数是smdkv210_map_io实现:

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);

}

该函数中调用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[]结构体 和 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这部分是最小系统层次的映射*/

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,

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

量子计算是一种遵循量子力学规律调控量子信息单元进行计算的新型计算模式。对照于传统的通用计算机,其理论模型是通用图灵机;通用的量子计算机,其理论模型是用量子力学规律重新诠释的通用图灵机。

关键字: 空间 密度 超冷三原子

买车,空间是一个十分重要的要素,因为一辆车的空间大小决定了装载能力,同时也在一定程度上影响着驾乘舒适性,尤其是长途驾驶或者自驾游,宽敞的空间更能带来满满的幸福感。据统计,除了首要考虑的价格因素外,近83%的国内消费者在初...

关键字: 空间 自驾游 北汽绅宝X35

进程是程序的执行过程。程序是静态的,是存在于外存之中的,电脑关机后依然存在。进程是动态的,是存在于内存之中的,是程序的执行过程,电脑关机后就不存在进程了。进程的内容来源于程序,进程的启动过程就是把程序从外存加载到内存的过...

关键字: 程序 静态 操作系统

ARP缓存中包含一个或多个表,它们用于存储IP地址及其经过解析的MAC地址。ARP命令用于查询本机ARP缓存中IP地址-->MAC地址的对应关系、添加或删除静态对应关系等。如果在没有参数的情况下使用,ARP命令将显示帮助...

关键字: ARP MAC 静态

现在大街上随处可见的LED显示屏,还有装饰用的LED彩灯以及LED车灯,处处可见LED灯的身影,LED已经融入到生活中的每一个角落。LED显示屏静态与动态扫描是相对应的,一般来说,实像素LED显示屏就是指构成显示屏的红绿...

关键字: led显示屏 静态 扫描

2020年8月10日,随着企业、政府和机构组织逐步复工,新冠疫情已经永久改变了未来的工作图景。如今,能够在任意地点开展的纯远程方式成为办公环境新常态。为此,VMware(NYSE:VMW)宣布推出全新

关键字: 全新 工作 测试版 空间 解决方案

什么是Hirose IX Industrial系列I/O连接器?它有什么作用?最新半导体和电子元件的全球授权分销商贸泽电子即日起开始备货Hirose Electric Company的IX Industrial系列I/O...

关键字: io 贸泽 连接器

皮尔磁:PSS4000为客户实现卓越的卫生设备生产性能   在中国智能制造2025计划的影响下,随着技术能力的不断提升,越来越多的中国公司成功凭借高质量、可靠性较高的设备获得了国际市

关键字: io plc pss

你接触过大幅缩小电路板空间的自适应降压-升压转换器系列吗?它有什特点?2019年10月8日,北京讯 —— 德州仪器(TI)今日推出了全新的降压-升压转换器系列,包括四款高效、低静态电流(IQ)的降压-升压转换器,其优势在...

关键字: 空间 转换器

在这篇文章中,小编将为大家带来微星MEG Z490 GODLIKE主板的背部I/O接口进行介绍,一起来了解下吧。

关键字: io z490 微星
关闭