历史上的今天
今天是:2025年06月05日(星期四)
2018年06月05日 | linux中S3C2440的物理地址映射到虚拟地址详解
2018-06-05 来源:eefocus
linux-2.6.30.4\arch\arm\plat-s3c\include\plat\ map-base.h
#defineS3C_ADDR_BASE (0xF4000000)
#ifndef __ASSEMBLY__
#define S3C_ADDR(x) ((void__iomem __force *)S3C_ADDR_BASE+ (x))
#else
#defineS3C_ADDR(x) (S3C_ADDR_BASE+ (x))
#endif
#define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */
#define S3C_VA_SYS S3C_ADDR(0x00100000) /* system control Clock and Power management*/
#define S3C_VA_MEM S3C_ADDR(0x00200000) /* system control memoery*/
#define S3C_VA_TIMER S3C_ADDR(0x00300000) /* timer block --PWM Timer*/
#define S3C_VA_WATCHDOG S3C_ADDR(0x00400000) /* watchdog */
#define S3C_VA_UART S3C_ADDR(0x01000000) /*UART */
linux-2.6.30.4\arch\arm\plat-s3c24xx\include\plat\ map.h
/* UARTs */
#defineS3C24XX_VA_UART S3C_VA_UART
#define S3C2410_PA_UART (0x50000000)
#define S3C24XX_SZ_UART SZ_1M
#define S3C_UART_OFFSET (0x4000)
UART映射后的虚拟地址是0xF4000000+0x01000000
linux-2.6.30.4\arch\arm\plat-s3c24xx\include\plat\ map.h
/* GPIO ports */
#define S3C2410_PA_GPIO (0x56000000)
#defineS3C24XX_VA_GPIO ((S3C24XX_PA_GPIO- S3C24XX_PA_UART) + S3C24XX_VA_UART)//GPIO的虚拟地址
#define S3C24XX_SZ_GPIO SZ_1M
[html] view plain copy
linux-2.6.30.4\arch\arm\plat-s3c\include\plat\ map-base.h
#defineS3C_ADDR_BASE (0xF4000000)
#ifndef __ASSEMBLY__
#define S3C_ADDR(x) ((void__iomem __force *)S3C_ADDR_BASE+ (x))
#else
#defineS3C_ADDR(x) (S3C_ADDR_BASE+ (x))
#endif
#define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */
#define S3C_VA_SYS S3C_ADDR(0x00100000) /* system control Clock and Power management*/
#define S3C_VA_MEM S3C_ADDR(0x00200000) /* system control memoery*/
#define S3C_VA_TIMER S3C_ADDR(0x00300000) /* timer block --PWM Timer*/
#define S3C_VA_WATCHDOG S3C_ADDR(0x00400000) /* watchdog */
#define S3C_VA_UART S3C_ADDR(0x01000000) /*UART */
linux-2.6.30.4\arch\arm\plat-s3c24xx\include\plat\ map.h
/* UARTs */
#defineS3C24XX_VA_UART S3C_VA_UART
#define S3C2410_PA_UART (0x50000000)
#define S3C24XX_SZ_UART SZ_1M
#define S3C_UART_OFFSET (0x4000)
UART映射后的虚拟地址是0xF4000000+0x01000000
linux-2.6.30.4\arch\arm\plat-s3c24xx\include\plat\ map.h
/* GPIO ports */
#define S3C2410_PA_GPIO (0x56000000)
#defineS3C24XX_VA_GPIO ((S3C24XX_PA_GPIO- S3C24XX_PA_UART) + S3C24XX_VA_UART)//GPIO的虚拟地址
#define S3C24XX_SZ_GPIO SZ_1M
在Linux内核中,只能访问虚拟地址空间,所以访问硬件寄存器,常常需要采用物理地址映射为虚拟地址的方式。
在定时器中寄存器访问,采用如下方式
#define S3C_TIMERREG(x) (S3C_VA_TIMER + (x))
#define S3C_TIMERREG2(tmr,reg) S3C_TIMERREG((reg)+0x0c+((tmr)*0x0c))
#define S3C2410_TCFG0 S3C_TIMERREG(0x00)
#define S3C2410_TCFG1 S3C_TIMERREG(0x04)
#define S3C2410_TCON S3C_TIMERREG(0x08)
#define S3C64XX_TINT_CSTAT S3C_TIMERREG(0x44)
#define S3C2410_TCFG_PRESCALER0_MASK (255<<0)
#define S3C2410_TCFG_PRESCALER1_MASK (255<<8)
[html] view plain copy
#define S3C_TIMERREG(x) (S3C_VA_TIMER + (x))
#define S3C_TIMERREG2(tmr,reg) S3C_TIMERREG((reg)+0x0c+((tmr)*0x0c))
#define S3C2410_TCFG0 S3C_TIMERREG(0x00)
#define S3C2410_TCFG1 S3C_TIMERREG(0x04)
#define S3C2410_TCON S3C_TIMERREG(0x08)
#define S3C64XX_TINT_CSTAT S3C_TIMERREG(0x44)
#define S3C2410_TCFG_PRESCALER0_MASK (255<<0)
#define S3C2410_TCFG_PRESCALER1_MASK (255<<8)
史海拾趣
|
作者:孙天泽,华清远见嵌入式学院金牌讲师。 从1991年诞生的那天起,Linux内核就在全世界的黑客们精心呵护下不断发展壮大。很多Linux Fans想为Linux内核做贡献,但或许是包括技术在内的等等原因,你的Ideas不一定会被内核容纳。对于操作系统来 ...… 查看全部问答> |
|
来源:我的博客:http://blog.163.com/yuan_xihua/blog/static/3074054420087135650488/ 一,编程语言部分1,C语言 《C语言大全(第四版)》 市场价 :¥48.00 【原 书 名】 The Complete Referene,Fourth Edition 【 ...… 查看全部问答> |
|
在看2.4.18内核的关于三星的nand flash 驱动时遇到一个地方没有看明白,请指教 使用的nand flash 为 k9f1208 其中有个函数:作用是向flash发送一个地址 static void s3c2410_command (struct mtd_info *mtd, unsigned command, int column, int ...… 查看全部问答> |
|
招聘嵌入式Linux讲师,工作地点上海,要求如下: 1、具有3年或以上相关领域工作经验 2、熟悉嵌入式Bootloadr 3、熟悉Linux 内核及实时系统 4、熟悉Linux驱动 5、熟悉Linux设备驱动 6、熟悉嵌入式文件系统 工作时间可在周末,一经录用 ...… 查看全部问答> |
|
前几日使用维纶触摸屏MT6100I系列产品,大约7天后发现故障: 基本症状如下: 黑屏与维纶手型标志交替闪动. 咨询厂家说: 没有遇到此类情况. 把屏返回厂家说,测试了几天,没有发现故障. 大约7天后,另外一个工地,同样的屏出现了同样的故障.即黑屏与维纶手 ...… 查看全部问答> |
|
作者:Ralf Bendlin,德州仪器系统工程师Tony Ekpenyong,德州仪器系统工程师Debbie Greenstreet,德州仪器战略市场营销 摘要 智能手机与其它手持设备的发展以及其上数据消费应用的大量繁衍生息,不 ...… 查看全部问答> |
|
INOUT引脚: 1.FPGA IO在做输入时,可以用作高阻态,这就是所说的高阻输入; 2.FPGA IO在做输出时,则可以直接用来输入输出。 芯片外部引脚很多都使用inout类型的,为的是节省管腿。就是一个端口同时做输入和输出。 inout在具体实现上一般用 ...… 查看全部问答> |
|
如题,官方评估板的例程带了RLos, 我用UDPTCPdbg工具调试,在局域网里传送文件,工具上显示速率只有几十K,想弄个裸奔的程序再试试,有没有弄过的指点下。先谢谢了!… 查看全部问答> |




