找回密码
 注册
搜索
查看: 879|回复: 0

[综合资料] ARM简介及编程(二)

[复制链接]
发表于 2009-3-19 11:10:02 | 显示全部楼层 |阅读模式
4.  ARM7 编程要点及示例

VxWorks image 装入ARM的过程:
    ARM7 有两种运行模式, Boot 模式和 Normal 模式, Boot模式主要是把程序装入(down load 或load )Flash ROM中用的, Normal模式是一般运行程序用的.

    ARM7 Boot 模式时, Flash 的地址是0x70000000片选型号是CS0  (Normal模式下,Flash地址为0x00000000)

    ARM7内部有128byte的BootROM和2K的SRAM,当需要Download VxWorks image时,ARM启动采用Boot方式启动运行存在128byte BootROM中的程序初始化ARM内部的COM口,从COM口接受数据到2K的SRAM,这2K程序是用来真正Load VxWorks的,2K程序Load完毕后系统自动跳转到这2K程序执行,它的作用是再次初始化内部的COM口,通过COM口接受VxWorks到DRAM,然后由DRAM写入FLASH。

    写入完毕后,切换到Normal模式重新启动系统,系统自动跳到FLASH 0X00000000开始运行VXWORKS。

    用PC机上的COM1与ARM内部的UART1(COM)通信来Download VxWorks。

主要管脚定义
    32条数据线: D0-------D31

    28条地址线: A0-------A27       little endian 定义, 相对应数据排列 0  1   2  3  4  5  6--------27

    6条片选信号脚: CS0-------CS5,   其实作用相当于地址线 A28------A31

    4个8位的PORT口: PORT A, PORT B , PORT D主要用于外围芯片信号的控制. PORT E有双作用.

    例如 PORT A 控制键盘的行信号, PORT B 用于RS232, PORT D 用于控制MODEM, FPGA..

    外部中断信号EINT, EXTFIQ。

    编程时要根据主板原理图和硬件手册进行。            

    a.看硬件图纸, 该芯片和CPU的那些管脚连结。 特别是 PORT 口和片选线。

    b.查CPU手册, 得到PORT 口和该片选的硬件地址。

    c.编程: 用PORT口直接对芯片操作,如开,关,RESET等, 用片选地址和芯片内地址结合对该外围芯片操作。

Exception vectors, 中断向量表及中断分配







    这个向量表必须要放置在系统地址0x00000000 (一般是逻辑地址, 即经过MMU映射后的地址)处。

    一般是在这些地址上放跳转指令 BL, 跳到相应的地址空间执行相应的程序。

    如系统执行从0x00000000 Reset开始, Reset 跳转到某一地址开始运行操作系统。

    程序示例,中断向量表 (ARM asm):

__VectorStart ; Start of ARM processor vectors

LDR pc,ResetV ;              00 - Reset

LDR pc,UndefV ;              04 - Undefined instructions

LDR pc,SWIV ;                 08 - SWI instructions

LDR pc,PAbortV ;             0C - Instruction fetch aborts

LDR pc,DAbortV ;             10 - Data access aborts

LDR pc,UnusedV ;          14 - Reserved (was address exception)

LDR pc,IRQV ; 18 -           IRQ interrupts

LDR pc,FIQV ;                  1C - FIQ interrupts'

中断号分配 (FIQ, IRQ)



    中断号也是寄存器INTMR和INTSR的位,所以在ARM中中断的编程要点是看硬件图纸, 该外设和CPU的那一个管脚连结。

    查CPU手册, 得到中断号及INTMR,INTSR的地址。

    编程

    注: 如果不是写底层driver, 只是在系统上层编程(如VxWorks, Linux) 知道中断号即可。

程序示例(VxWorks):

//登记中断号 5, 和相应的中断例程 ComISR.

intConnect ( ( VOIDFUNCPTR * ) 5, ComISR, 0 ) ;

//使能这中断

intEnable ( ( VOIDFUNCPTR * ) 5 );

……

    ARM Interrupts: ARM processors implement fast and normal level of interrupt,signalled externally, synchronise interrupts before an exception is raised. A fast interrupt requst (FIQ) will desable subsequent normal and fast interrupt by setting the I and F bit in CPSR,and a normal interrup request(IRQ) will disable subsequent normal interrupt by setting I bit in CPSR.

计时器中断编程过程

    ARM7一般内部有两个16位计时器(Timer counter)和一个32位实时时钟(RTC),计时器中断属于IRQ中断,这里以计时器1为例叙述一下中断的编程过程

    设置interrup mask INTMR1寄存器 0x80000240 第8位TC1OI计时器1为使能. 在0x800000300 计时器 1 的数据寄存器TC1D写入指定数据,这样数据开始从这个给定的数开始递减计数,计数递减至 0 后,会产生一个溢出underflow IRQ中断请求,中断状态寄存器INTSR1 0x80000240 第8位TC1OI置位.系统会跳到中断向量表地址 0x00000018 处,执行相应的中断程序,中断程序通过判断中断的类型(判断中断状态寄存器的位),来执行相应的中断服务程序ISR. 中断状态寄存器标志位复位,计时器开始重新开始计时.

存储空间管理单元(MMU)
    物理地址映射

    重点在于片选地址CS的选取,另外MMU映射需要参考这个物理地址

ARM7 物理地址映射表







MMU 虚拟(逻辑)地址和物理地址的映射实例

    Vxworks支持的ARM架构的处理器,一般是RAM的起始位置为0x0,而实际上ARM的物理地址0x0是ROM的起始地址,RAM在高位地址.这就需要系统在Boot过程中,执行MMU程序,重新映射RAM和ROM的地址.即RAM起始地址为0x0.

    MMU主要有ARM7中协处理器coprocessor 15控制,coporocessor主要控制:

片内的MMU

指令和数据缓存(IDC)

Write Buffer(WB)

    MMU有两层页表(two-level page table)用来进行虚拟地址向物理地址转换,CP15定义16个寄存器,只有MRC和MCR指令才能对它们操作.

    在VxWorks系统中,MMU表分成两部分:boot up table和final table.在文件ramAtHigh.h中定义.该表在文件romInit.s中初始化,语句为:

    BL _ramAtHigh_1(2)

MMU映射实例

       虚拟(逻辑)地址(VxWorks系统)






硬件物理地址
相同的颜色映射对应的地址
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-8 06:28 , Processed in 0.043791 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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