历史上的今天
返回首页

历史上的今天

今天是:2025年06月05日(星期四)

正在发生

2018年06月05日 | linux中S3C2440的物理地址映射到虚拟地址详解

2018-06-05 来源:eefocus

  1. linux-2.6.30.4\arch\arm\plat-s3c\include\plat\ map-base.h  

  2.   

  3. #defineS3C_ADDR_BASE (0xF4000000)  

  4. #ifndef __ASSEMBLY__  

  5. #define S3C_ADDR(x)  ((void__iomem __force *)S3C_ADDR_BASE+ (x))  

  6. #else  

  7. #defineS3C_ADDR(x) (S3C_ADDR_BASE+ (x))  

  8. #endif  

  9. #define S3C_VA_IRQ    S3C_ADDR(0x00000000)     /* irq controller(s) */  

  10. #define S3C_VA_SYS   S3C_ADDR(0x00100000)     /* system control   Clock and Power management*/  

  11. #define S3C_VA_MEM S3C_ADDR(0x00200000)     /* system control  memoery*/  

  12. #define S3C_VA_TIMER      S3C_ADDR(0x00300000)     /* timer block --PWM Timer*/  

  13. #define S3C_VA_WATCHDOG     S3C_ADDR(0x00400000)     /* watchdog */  

  14. #define S3C_VA_UART      S3C_ADDR(0x01000000)    /*UART */  

  15. linux-2.6.30.4\arch\arm\plat-s3c24xx\include\plat\ map.h  

  16.   

  17. /* UARTs */  

  18. #defineS3C24XX_VA_UART        S3C_VA_UART  

  19. #define S3C2410_PA_UART    (0x50000000)  

  20. #define S3C24XX_SZ_UART          SZ_1M  

  21. #define S3C_UART_OFFSET         (0x4000)  

  22. UART映射后的虚拟地址是0xF4000000+0x01000000  

  23. linux-2.6.30.4\arch\arm\plat-s3c24xx\include\plat\ map.h  

  24.   

  25. /* GPIO ports */  

  26. #define S3C2410_PA_GPIO     (0x56000000)  

  27. #defineS3C24XX_VA_GPIO       ((S3C24XX_PA_GPIO- S3C24XX_PA_UART) + S3C24XX_VA_UART)//GPIO的虚拟地址  

  28. #define S3C24XX_SZ_GPIO          SZ_1M  

[html] view plain copy

  1. linux-2.6.30.4\arch\arm\plat-s3c\include\plat\ map-base.h  

  2.   

  3. #defineS3C_ADDR_BASE (0xF4000000)  

  4. #ifndef __ASSEMBLY__  

  5. #define S3C_ADDR(x)  ((void__iomem __force *)S3C_ADDR_BASE+ (x))  

  6. #else  

  7. #defineS3C_ADDR(x) (S3C_ADDR_BASE+ (x))  

  8. #endif  

  9. #define S3C_VA_IRQ    S3C_ADDR(0x00000000)     /* irq controller(s) */  

  10. #define S3C_VA_SYS   S3C_ADDR(0x00100000)     /* system control   Clock and Power management*/  

  11. #define S3C_VA_MEM S3C_ADDR(0x00200000)     /* system control  memoery*/  

  12. #define S3C_VA_TIMER      S3C_ADDR(0x00300000)     /* timer block --PWM Timer*/  

  13. #define S3C_VA_WATCHDOG     S3C_ADDR(0x00400000)     /* watchdog */  

  14. #define S3C_VA_UART      S3C_ADDR(0x01000000)    /*UART */  

  15. linux-2.6.30.4\arch\arm\plat-s3c24xx\include\plat\ map.h  

  16.   

  17. /* UARTs */  

  18. #defineS3C24XX_VA_UART        S3C_VA_UART  

  19. #define S3C2410_PA_UART    (0x50000000)  

  20. #define S3C24XX_SZ_UART          SZ_1M  

  21. #define S3C_UART_OFFSET         (0x4000)  

  22. UART映射后的虚拟地址是0xF4000000+0x01000000  

  23. linux-2.6.30.4\arch\arm\plat-s3c24xx\include\plat\ map.h  

  24.   

  25. /* GPIO ports */  

  26. #define S3C2410_PA_GPIO     (0x56000000)  

  27. #defineS3C24XX_VA_GPIO       ((S3C24XX_PA_GPIO- S3C24XX_PA_UART) + S3C24XX_VA_UART)//GPIO的虚拟地址  

  28. #define S3C24XX_SZ_GPIO          SZ_1M  

在Linux内核中,只能访问虚拟地址空间,所以访问硬件寄存器,常常需要采用物理地址映射为虚拟地址的方式。

在定时器中寄存器访问,采用如下方式



  1. #define S3C_TIMERREG(x) (S3C_VA_TIMER + (x))  

  2. #define S3C_TIMERREG2(tmr,reg) S3C_TIMERREG((reg)+0x0c+((tmr)*0x0c))  

  3.   

  4. #define S3C2410_TCFG0         S3C_TIMERREG(0x00)  

  5. #define S3C2410_TCFG1         S3C_TIMERREG(0x04)  

  6. #define S3C2410_TCON          S3C_TIMERREG(0x08)  

  7.   

  8. #define S3C64XX_TINT_CSTAT    S3C_TIMERREG(0x44)  

  9.   

  10. #define S3C2410_TCFG_PRESCALER0_MASK (255<<0)  

  11. #define S3C2410_TCFG_PRESCALER1_MASK (255<<8)  

[html] view plain copy

  1. #define S3C_TIMERREG(x) (S3C_VA_TIMER + (x))  

  2. #define S3C_TIMERREG2(tmr,reg) S3C_TIMERREG((reg)+0x0c+((tmr)*0x0c))  

  3.   

  4. #define S3C2410_TCFG0         S3C_TIMERREG(0x00)  

  5. #define S3C2410_TCFG1         S3C_TIMERREG(0x04)  

  6. #define S3C2410_TCON          S3C_TIMERREG(0x08)  

  7.   

  8. #define S3C64XX_TINT_CSTAT    S3C_TIMERREG(0x44)  

  9.   

  10. #define S3C2410_TCFG_PRESCALER0_MASK (255<<0)  

  11. #define S3C2410_TCFG_PRESCALER1_MASK (255<<8) 


推荐阅读

史海拾趣

Echelon公司的发展小趣事

尽管Echelon在能源管理领域取得了显著的成绩,但公司也面临着一些挑战。随着数字化、智能化技术的不断发展,传统能源管理市场正在发生深刻变革。为了应对这些挑战,Echelon积极调整战略方向,加大在数字化、智能化技术方面的投入。同时,公司还加强了对新兴市场的关注和布局,寻找新的增长点。未来,Echelon将继续秉承创新、合作、共赢的理念,推动能源管理行业的持续发展和进步。

安谱隆(Ampleon)公司的发展小趣事

在独立发展后,安谱隆不断推出创新产品,巩固其在射频市场的地位。2015年12月,安谱隆推出了基于0.5μm工艺、额定功率为10至200W的GaN on SiC射频功率晶体管。这一产品的推出不仅展示了安谱隆在射频技术方面的领先实力,也为其在移动通信、广播电视等领域的应用提供了强有力的支持。

Fermionics Lasertech Inc公司的发展小趣事

面对日益激烈的市场竞争,Fermionics Lasertech Inc公司始终坚持以创新为驱动力。他们不断投入研发资金,引进高端人才,加强与高校和科研机构的合作,共同推动激光技术的创新。公司成功研发出了一系列具有自主知识产权的新型激光器,不仅提升了产品性能,还降低了生产成本,使公司在激烈的市场竞争中保持领先地位。

ATC [American Technical Ceramics]公司的发展小趣事

在当今社会,绿色环保已经成为各行各业发展的重要趋势。假设ATC积极响应这一趋势,投入大量资源进行环保型陶瓷材料的研发和生产。这些材料在生产过程中产生的污染较少,同时在使用过程中也能有效降低能耗和减少废弃物排放。因此,ATC的产品在绿色环保领域获得了良好的声誉,也赢得了越来越多客户的青睐。

GigPeak公司的发展小趣事

为了进一步增强市场地位和扩大产品线,GigPeak在2010年实施了一项重要的并购战略。公司成功收购了另一家在光纤通信领域具有深厚技术积累的企业,这次并购不仅为GigPeak带来了先进的产品线和研发资源,还显著提升了其在全球市场的份额。通过整合双方的优势资源,GigPeak在光纤通信领域的技术实力和市场份额均实现了质的飞跃。

德艺隆(DEALON)公司的发展小趣事

在激烈的市场竞争中,德艺隆始终坚持诚信经营的原则。他们严格遵守承诺,对客户提供的商业信息严格保密,不向任何第三方泄露。这种高度的诚信度赢得了客户的信任,许多客户都愿意与德艺隆建立长期合作关系。同时,德艺隆还积极参与社会公益活动,回馈社会,进一步提升了公司的品牌形象。

问答坊 | AI 解惑

后级是用IGBT管子的电鱼器

后级是用IGBT管子的电鱼器…

查看全部问答>

运放经典

本帖最后由 paulhyde 于 2014-9-15 04:26 编辑 运放经典 运放经典  …

查看全部问答>

Linux发行版,你了解么?

作者:孙天泽,华清远见嵌入式学院金牌讲师。 从1991年诞生的那天起,Linux内核就在全世界的黑客们精心呵护下不断发展壮大。很多Linux Fans想为Linux内核做贡献,但或许是包括技术在内的等等原因,你的Ideas不一定会被内核容纳。对于操作系统来 ...…

查看全部问答>

9G-LINUX嵌入式开发书籍推荐(附WINCE部分)

来源:我的博客:http://blog.163.com/yuan_xihua/blog/static/3074054420087135650488/ 一,编程语言部分1,C语言 《C语言大全(第四版)》  市场价 :¥48.00 【原 书 名】 The Complete Referene,Fourth Edition   【 ...…

查看全部问答>

s3c2410 Nand flash 驱动问题

在看2.4.18内核的关于三星的nand flash 驱动时遇到一个地方没有看明白,请指教 使用的nand flash 为 k9f1208 其中有个函数:作用是向flash发送一个地址 static void s3c2410_command (struct mtd_info *mtd, unsigned command, int column, int ...…

查看全部问答>

招聘 兼职嵌入式Linux讲师 (上海)

招聘嵌入式Linux讲师,工作地点上海,要求如下: 1、具有3年或以上相关领域工作经验 2、熟悉嵌入式Bootloadr 3、熟悉Linux 内核及实时系统 4、熟悉Linux驱动 5、熟悉Linux设备驱动 6、熟悉嵌入式文件系统 工作时间可在周末,一经录用 ...…

查看全部问答>

维纶触摸屏MT6系列产品问题

前几日使用维纶触摸屏MT6100I系列产品,大约7天后发现故障: 基本症状如下: 黑屏与维纶手型标志交替闪动. 咨询厂家说: 没有遇到此类情况. 把屏返回厂家说,测试了几天,没有发现故障. 大约7天后,另外一个工地,同样的屏出现了同样的故障.即黑屏与维纶手 ...…

查看全部问答>

【白皮书分享】为无线扩容铺平道路

作者:Ralf Bendlin,德州仪器系统工程师Tony Ekpenyong,德州仪器系统工程师Debbie Greenstreet,德州仪器战略市场营销   摘要       智能手机与其它手持设备的发展以及其上数据消费应用的大量繁衍生息,不 ...…

查看全部问答>

INOUT引脚:在FPGA中使用方法

INOUT引脚: 1.FPGA IO在做输入时,可以用作高阻态,这就是所说的高阻输入; 2.FPGA IO在做输出时,则可以直接用来输入输出。 芯片外部引脚很多都使用inout类型的,为的是节省管腿。就是一个端口同时做输入和输出。 inout在具体实现上一般用 ...…

查看全部问答>

STM32F407 以太网如何配置?

如题,官方评估板的例程带了RLos, 我用UDPTCPdbg工具调试,在局域网里传送文件,工具上显示速率只有几十K,想弄个裸奔的程序再试试,有没有弄过的指点下。先谢谢了!…

查看全部问答>