Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4463061
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-06-16 21:47:11

CORTEX-M3 编程手册


1. R0-R12 通用寄存器

2. R13 MSP PSP 主栈指针  进程栈指针

 
     R14 link register 链接寄存器

   R15 PC    指针


    MSP
: main stack pointer 主栈指针
     复位后缺省使用的栈指针,用于操作系统内核以及异常处理程序(包括中断服务程序)

           
     PSP: process stack pointer  进程栈指针
     由用户的应用程序代码使用。

     栈指针的最低两位永远是0, 这意味着栈总是 4 字节对其的。


3. 特殊功能寄存器


   1.程序状态寄存器PSR (APSR IPSR EPSR)
   2.中断屏蔽寄存器PRIMASK, FAULMASK, BASEPRI
   3.控制寄存器 CONTROL


3.1  程序状态寄存器 PSRx
   APSR :应用程序状态寄存器
   IPSR:中断号状态寄存器
   EPSR: 执行状态寄存器
  
   通过MRS/MSR指令,这3个PSR既可以单独访问,也可以组合访问。当使用三合一的方式访问时,应使用名字xPSR或者PSR



3.2
中断屏蔽寄存器PRIMASK, FAULTMASK, BASEPRI
   这三个寄存器用来控制异常的使能和禁止

PRIMASK: 只有单一位的寄存器。
          value =1,表示关掉所有可屏蔽的异常,只剩下NMI和硬故障可以响应
          缺省值=0,表示没有关中断

FALUTMASK:只有单一位的寄存器
          value=1,只有NMI才能响应,所有其他的异常,甚至是硬故障不理睬
          缺省值value=0,表示灭有关异常

BASEPRI: 最多有9bit(有表示优先级的位数决定)。它定义了被屏蔽优先级的阀
          值。当它被设成某个值后,所有优先记号大于或等于此值的中断都被
          关闭(优先级好越大,优先级越小)。但若被设成0,则不关闭任何中断


3.3 控制寄存器 CONTROL
    控制寄存器有两个用途,其一是用于定义权限级别,其二是用于选择当前使用哪个栈指针。有两个位控制这两个用途。

CONTROL[1]     栈指针选择
               0= 选择住栈指针 MSP 复位后的缺省值
               1= 选择进程栈指针PSP
               在线程或基础级(没有在响应异常),可以使用PSP,在处理模式
               下,只允许使用MSP,所以此时不得想该位写1
CONTROL[0]     0= 特权级的线程模式
               1= 用户级的线程模式
               处理模式永远都是特权模式


BASEPRI寄存器设置



CONTROL寄存器设置





M3内部 寄存器 概览




阅读(6255) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~