首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CM3权威指南CnR2 阅读笔记 2

CM3权威指南CnR2 阅读笔记 2

cortex-m3 是一款非常强大的单片机,和arm A系列(应用处理器)的确有很大的区别
但是还是很多相似之处,毕竟都是arm的东西
下面是阅读CM3权威指南的一些摘要:

1. P25 两个级别(user,svc),2个运行模式(handler,thread),3种组合(user没有handler mode)
       handler ,thread 的区别可能就是(4)中的自动压栈
                             特权      |       用户
       ———————————————————————
       异常(exp,irq)处理    handler    |       错误
       ———————————————————————
       主应用的代码         线程       |       用户
       注意mode 切换图
                     
                            [特权handler mode]
                            /  ^         \   ^   
                           /  /           \   \
                          /  /      (异常返回) (触发异常)
                (异常返回)  (触发异常)      \    \
                        /   /                \    \________________
                       /   /                  \_____________       |  
                      /   /                                 |      |
                     V   /                                  V      |
   复位---> [特权级thread mode]----(修改CONTROL REG)--->(用户级thread mode)
                                                                                 
        CM3:
        handler mode (注意总是 MSP!)
        thread mode, 可以使用  MSP
        thread mode, 也可以使用PSP,通过control reg 设置

        注意和ARM9 ARM A系统等比较
        它们在各异常(Abort,Undefine,IRQ,FIQ),User,Supervisor 都有自己的SP(R13)
        移值时注意这个巨大差异!!!
         
2. P27 内存的分布
3. P30 异常名称介绍,[-1]----[-3] 3个固定优先级,NMI[-2] 的作用不错
   P43  11-SVCCall, 15-SysTick 可以关注下
4. P32 进入异常服务例程,自动压栈 R0-R3,R12,LR(R14),PSR,PC(R15)
5. P36 栈指针分MSP(SP_main), PSP(SP_process)  ,push,pop 指令根据CONTROL[1](P40],自动判断当前那个SP
       如果有特殊要求可以通过MRS/MSR 来指定访问
6. P38 注意读PC 时,当前支流+4 ,和 arm9上 (PC+8)有区别,
        pc 奇数这句表示必须在thumb2 下
7. P39 特殊功能寄存器 MRS/MSR 读/写
       PSR 分:
       APSR 应用程序PSR    (N,Z,C,V,Q)[31-27]
       IPSR 中断号PSR      (Exception Number) [8-0]  
                       (如果是thread,那么值为0,因为没有0号异常)
       EPSR 执行PSR        (ICI/IT)[26:25] ,(T)[34],(ICI/IT)[15:10]
8. P39. 异常(中断) 控制register
       PRIMASK       开关中断
       FAULTMASK     开关异常
       BASEPRI       优先级
9. P40 快速开关中断异常
       CPSID I   RIMASK=1 关
       CPSIE I   ;       =0 开
       CPSID F   ;FAULTMASK 关
       CPSIE F  
10. P40 CONTROL register
        CONTROL[1]   0---MSP (reset default) (handler mode 必须为0)
        CONTROL[1]   1---PSP
        CONTROL[0]   1---svc mode
        CONTROL[0]   0---user mode
11. P41 复位后为  thread mode + svc mode
        thread mode + svc mode 对系统空间阻止访问,MRS/MSR 也禁用,否则fault
        注意user ,svc mode 的切换  (control[0] + user 发生异常(+SVCall)
12. P43 异常相量表
    P109  ,16 个异常,240 IRQ
13. P46 使用满递减栈,双栈(svc,user),用于带kernel的 user ,kernel 切换很好
14. P47 奇特的复位过程,可以看下
         1. 从0x0地址取MSP
         2. 从0x4地址取PC的值,这个值是复位向量,LSB 必须为1,然后从这个地址所
            对应的地址处取值
            [reset] -->[0x0(MSP)][0x4(复位向量)]----->[Reset Vector] !
                       (0x0--开始是MSP,然后接下拉是向量表!!!)
                       (向量表中都是32bit 地址,比如0x4放的就是reset 执行指令位置)
           P148 图3.18
15. P50 指令后缀使用:
        S 更新APSR中标志   EQ,NE,LT,GT 等等
        等只有B(跳转)指令才能任意用,其他指令引入IF-THEN 块,在这个块中才可以加后缀
16. P51 注意thumb 语法和thumb 2 以及arm 的区别 ,在UAL 下thumb2 和arm 基本相似
        但也可以用thumb 语法明确 16bit 指令
        或者通过 .N(16bit)  .W(32bit) 来指定 16bit ,32bit
17. P59 自增自减,根据指令宽度, LDMIA Rd! ,{register list} 读后Rd 自增16bit
                           LDMIA.W RD! ,{register list} 读后Rd 自增32bit
18. P69 BX reg, 指令中reg 中最低位必须为1 (LSB=1) ,因为CM3 只在Thumb 中允许,否则fault
        而BLX reg arm ,thumb 都支持,根据LSB=1 thumb LSB=0 arm
19. P71 大多数16bit 算术逻辑指令,直接更新标志位 ,除 ADD.N Rd,Rn,Rm
        32bit 需要S 后缀来控制
20. P72 barrier 指令
        DMB --- 数据访问指令等前面数据访问指令完成才执行
        DSB --- 任何指令等前面数据访问指令完成才执行
                 (比如建立完所有向量后追加1条DSB P168)
        ISB --- 任何指令等前面指令完成才执行  
        依次往下表现barrier 更严格
21. P73 带符号 饱和运算指令  SSAT.W Rd #imm5,Rn,{,shift}
        不带符号饱和运算指令
22. P75 MRS/MSR   除APSR 可以在user级访问,其他必须特权级
23. P76 IF-THEN(IT)里最多有4条支流
        IT  <cond>     ; 围起1条
        IT<x>  <cond>     ; 围起2条
        IT<x><y>  <cond>     ; 围起3条
        IT<x><y><z>  <cond>     ; 围起4条  
        <x><y><z>  =>为  T(then),E(else)
        IT指令的意义:
          当执行到跳转指令时,需要清洗流水线,处理器必须从跳转地址重新取指,
          IT可以改善一些小跳转!!!
24. P76 比较跳转CBZ <Rn> , <lable>  CBNZ <Rn> , <lable> ,但范围很小只有0-126
        并且不会更新标志位
25. P80 跳转表指令TBB ,TBH
26. P84 CM3 存储映射
        0x0-------------------------------------------------------------------------4G
        |512M(代码)|512M(片上SRAM)|512M(片上设备)|512M(片外SRAM)|512M(片外设备)|512M|
                                                                               /    |
                                             ----------------------------------     |
                                             |内部私有外设总线|外部私有外设总线|其他|
                                            0xE0000000       0xE0040000    0xE0100000
继承事业,薪火相传
返回列表