3. 调试工具及调试方法 ARM Project Manager (APM) include ARM Debuger: 这个工具由ARM提供主要是开发程序, 编程调试ARM芯片, 有相当不错的开发环境和远端调试功能, 支持汇编和C. 它带有一个ARM自己的嵌入式操作系统ARM Angel, 用户可以在它的上面开发自己的嵌入式软件, 不过这个操作系统不是实时多任务的. 通过计算机串口与处理器UART相连,设置计算机的超级终端 ( Hyper Terminal ), 通过超级终端察看硬件情况(寄存器设置,数据等)和程序运行情况,当然程序重要加入向UART送出数据的指令, 用Beep报警也是经常用的. 这种调试方法是用于底层调试硬件,找出硬件存在的问题. VxWorks 在Shell 不能正常运行前,也是采取这种方法来调试程序,不过一般不是硬件问题,而是BSP中存在的问题,需要根据硬件,修改BSP. 需要说明的是:上述方法是在没有硬件仿真器的情况下采用的,仿真器是底层调试硬件程序最好,最简便直观的办法。 4. ARM7 编程要点及示例 ARM编程可参考程序示例 ARM_Boot Flash ROM驱动 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。在主板2K SRAM运行的Boot Load程序执行过程,可参看程序示例中ARM Boot Load程序 写入完毕后,切换到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. 编程时要根据主板原理图和硬件手册进行. 看硬件图纸, 该芯片和CPU的那些管脚连结. 特别是 PORT 口和片选线. 查CPU手册, 得到PORT 口和该片选的硬件地址. 编程: 用PORT口直接对芯片操作,如开,关,RESET等, 用片选地址和芯片内地址结合对该外围芯片操作. Exception vectors, 中断向量表及中断分配 Vector 地址ExceptionException ModePriority(1=High) 0x0ResetSvc1 0x4Undefined InstructionUndef6 0x8Software InterruptSvc6 0xCPrefetch AbortAbort5 0x10Data AbortAbort2 0x14ReservedNot applicableNot applicable 0x18Interrupt (IRQ)irq4 0x1CFast Interrupt (FIQ)Fiq3
这个向量表必须要放置在系统地址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) 中断类型中断号Name说明 FIQ0外部中断 EXTFIQ管脚 NEXT FIQ ………… IRQ5外部中断 EINT1管脚 NEINT1 IRQ6外部中断 EINT2管脚 NEINT2 IRQ7外部中断 EINT3管脚 NEINT3 ………… IRQ12内部中断 UTXINT1UART1 TX FIFO 为空 ………… 中断号也是寄存器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 reques(IRQ) will disable subsequent normal interrupt by setting I bit in CPSR. |