从NOR启动:在片选0位置放置的是2M的nor flash,在片选6位置放置的是内存0x30000000
ARM工作模式
ARM处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式以外,其余的所有6种模式称为非用户模式,或特权模式(privileged modes);其中出去用户模式和系统模式以外的5种又称为异常模式(exception modes),常用语处理终端或异常,以及需要访问受保护的系统资源等情况。
处理器的开发工具,处理器的工作模式,处理器的寄存器,处理器的指令集
ARM寄存器
ARM处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用局存期R14~R0、程序计数器PC、一个状态寄存器都是可访问的。
在ARM工作状态下,任意时刻可以访问16个通用寄存器和一到两个状态寄存器。在非用户模式(特权模式)下,则可访问到特定模式分组寄存器
使用ADS查看寄存器
ARM寻址方式
处理器根据指令中给出的地址信息来寻找物理地址的方式
GPIO
S3c2440共130个gpio,分为10组
每组GPIO(GPA-GPJ)们都可以通过3个寄存器来控制与访问,这3个寄存器分别为:
——GPxCON:GPIO配置寄存器
——GPxDAT:GPIO数据寄存器
——GPxUP:上拉电阻控制寄存器:某位为1时,相应引脚无内部上拉电阻;为0时相应的引脚使用内部上拉电阻
(其中x为A、B......H、J)
LED控制思想
1.先将相应的引脚设置为输出模式;
2.再向相应的引脚输出低电平即可点亮LED灯。
ARM中断机制
1.查询方式
程序不断地查询各设备的状态,并作出相应的反应。该方式实现简单,常用在比较单一的系统中,比如一个温控系统中可以使用查询方式不断检测温度的变化。
2.中断方式
当事件发生时,硬件会设置某个寄存器;CPU在每执行完一个指令时,查看这个寄存器,如果所关注的时间发生了,则中断当前程序,跳转到一个固定的地址处理这个事件,处理完后返回到被中断的程序中继续运行
中断处理流程
1.中断控制器汇集各类外设发出的中断信号,然后通知CPU
2.CPU保存当前程序的运行环境,然后调用中断服务程序(ISR)来处理中断
3.在ISR中通过读取外设的相关寄存器来设别中断的类型,并进行相应的处理
4清除中断:通过读写相关中断控制寄存器和外设相关寄存器来实现
5恢复被中断程序的执行环境,继续执行被中断的程序
S3c2440含60个中断源
SUBSRCPND
SUBSRCPND寄存器用来标明子中断(如:INT_RXD0)是否发生.S3C2440有15个子中断,SUBSRCPND中每一位对应一个子中断,当这些子中断发生时,相应的位被置为1.清除子中断只需向SUBSRCPND寄存器中相应位写入1(page-392)
INTSUBMSK
INTSUBMSK寄存器用来屏蔽SUBSRCPND寄存器所标示的中断。INTSUBMSK寄存器中某位被设为1时,相应的子中断被屏蔽。设置为0时,标示子中断被允许。(s3c2440.pfd page-395)
SRCPND
SRCPND中每一位用来标明一个(或一类)中断是否已经发生。例如:SUBSRCPND寄存器中的子中断INT_RXD0发生了,且没有被INTSUBMSK屏蔽,则SRCPND的INT_UART0位被置1.SRCPND寄存器的清除与SUBSRCPND寄存器相似,若想清除某一位,往此位写入1
INTMSK
INTMSK寄存器用来屏蔽SRCPND所标示的中断。INTMSK某位被设置为1时,对应的中断被屏蔽,设置为0时,相应中断被允许。INTMSK只能屏蔽设为IRQ的中断,不能屏蔽设为FIQ的中断(page-388)
INTMOD
当INTMOD寄存器中某位被设置为1时,它所对应的中断源会被设置为FIQ模式,即此中断发生时,CPU将进入快速中断模式,这通常用来处理特别紧急的中断。当该位被置为0时,表示为IRQ模式(page-387)
FIQ&IRQ
IRQ模式下,中断处理程序需要自己保存R8到R12这几个寄存器,退出中断处理时需要自己恢复这几个寄存器,而FIQ模式由于这几个寄存器都有back寄存器(fiq_R8....),模式切换时CPU自动保存这些值到back寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快。FIQ比IRQ有更高优先级,如果FIQ和IRQ同时发生,那么FIQ先处理
优先级选择-分析(page-382)
INTPND
经过中断优先级仲裁器选出优先级高的中断后,这个中断在INTPND寄存器中的相应位被置1,随后,CPU将进入中断模式处理它。同一时间内,此寄存器只有1位被置1;在ISR中可以根据这个位确定中断类型。清除该中断时,往这个位写入0