社区导航

 

搜索
查看: 1656|回复: 3

关于ARM板IO地址转换的问题

[复制链接]

146

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-6-9 11:23 | 显示全部楼层 |阅读模式
在ARM板上PC104总线上外挂一个数据采集板PM511P,PM511P上有IO端口,根据PM511P硬件手册上定义,这个IO的地址是
100H,根据ARM的特性,这个地址是不能直接访问的,需要从物理地址到虚拟地址的转换。下面是BSP的地址转换表:
OEMAddressTable
    ;;;-------------------------------------------------------------
    ;;; Virt Addr   Phys Addr   MB
    ;;;-------------------------------------------------------------
    DCD 0x80000000, 0x02000000, 30  ; 30 MB SROM(SRAM/ROM) BANK 0
    DCD 0x82000000, 0x08000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 1
    DCD 0x84000000, 0x10000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 2
    DCD 0x86000000, 0x18000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 3
    DCD 0x88000000, 0x20000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 4
    DCD 0x8A000000, 0x28000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 5
    DCD 0x8C000000, 0x30000000, 64  ; 64 MB DRAM BANK 0,1
    DCD 0x90800000, 0x48000000,  1  ; Memory control register
    DCD 0x90900000, 0x49000000,  1  ; USB Host register
    DCD 0x90A00000, 0x4A000000,  1  ; Interrupt Control register
    DCD 0x90B00000, 0x4B000000,  1  ; DMA control register
    DCD 0x90C00000, 0x4C000000,  1  ; Clock & Power register
    DCD 0x90D00000, 0x4D000000,  1  ; LCD control register
    DCD 0x90E00000, 0x4E000000,  2  ; NAND flash control register
    DCD 0x91000000, 0x50000000,  1  ; UART control register
    DCD 0x91100000, 0x51000000,  1  ; PWM timer register
    DCD 0x91200000, 0x52000000,  1  ; USB device register
    DCD 0x91300000, 0x53000000,  1  ; Watchdog Timer register
    DCD 0x91400000, 0x54000000,  1  ; IIC control register
    DCD 0x91500000, 0x55000000,  1  ; IIS control register
    DCD 0x91600000, 0x56000000,  1  ; I/O Port register
    DCD 0x91700000, 0x57000000,  1  ; RTC control register
    DCD 0x91800000, 0x58000000,  1  ; A/D convert register
    DCD 0x91900000, 0x59000000,  1  ; SPI register
    DCD 0x91A00000, 0x5A000000,  1  ; SD Interface register
        DCD 0x92000000, 0x00000000,  2  ;  2 MB SROM(SRAM/ROM) BANK 0
        DCD 0x93000000, 0x2A000000,  32 ;  Upper 32 MB PCMCIA Register BANK 5
        DCD 0x95000000, 0x2C000000,  64 ;  64 MB PCMCIA Controller (CPLD) Register BANK 5
    DCD 0x00000000, 0x00000000,  0  ; End of Table (MB MUST BE ZERO!)
    END

//////////////////
请问:
1 如果我要访问PM511P 100H这个物理地址,是否只要在这个地址转换表里倒数第三行添加一行:
DCD 0x99000000, 0x00000100  1
让后在程序里访问0x99000000就可以访问到PM511P的100h这个地址了?
此帖出自ARM技术论坛


117

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-6-9 15:13 | 显示全部楼层
自己顶!!!


回复

使用道具 举报

118

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-6-10 15:56 | 显示全部楼层
可以使用这两个函数建立动态映射的:
  1. #include
  2. volatile PS3C2410X_IOPORT_REG g_pGpio; //定义寄存器结构体指针
  3. PHYSICAL_ADDRESS PA;//定义地址结构体
  4. PA.QuadPart = S3C2410X_BASE_REG_PA_IOPORT;//给结构体赋值物理地址
  5. g_pGpio = (PS3C2410X_IOPORT_REG) MmMapIoSpace(PA, sizeof(PS3C2410X_IOPORT_REG), FALSE);//映射物理地址

  6. MmUnmapIoSpace((PVOID)g_pGpio, sizeof(PS3C2410X_IOPORT_REG));//取消映射
复制代码


回复

使用道具 举报

120

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-7-30 11:30 | 显示全部楼层
楼主,这个相当于访问寄存器
通常使用VirtualAlloc
VirtualCopy
这两个函数实现动态映射


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /1 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-7-16 23:04 , Processed in 0.147478 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表