亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2709 | 回復(fù): 0
打印 上一主題 下一主題

CM3權(quán)威指南CnR2 閱讀筆記 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-23 02:53 |只看該作者 |倒序瀏覽

cortex-m3 是一款非常強大的單片機,和arm A系列(應(yīng)用處理器)的確有很大的區(qū)別

但是還是很多相似之處,畢竟都是arm的東西

下面是閱讀CM3權(quán)威指南的一些摘要:


1. P25 兩個級別(user,svc),2個運行模式(handler,thread),3種組合(user沒有handler mode)
       handler ,thread 的區(qū)別可能就是(4)中的自動壓棧

                             特權(quán)      |       用戶
       ———————————————————————
       異常(exp,irq)處理    handler    |       錯誤
       ———————————————————————
       主應(yīng)用的代碼         線程       |       用戶

       注意mode 切換圖
                    
                            [特權(quán)handler mode]
                            /  ^         \   ^  
                           /  /           \   \
                          /  /      (異常返回) (觸發(fā)異常)
                (異常返回)  (觸發(fā)異常)      \    \
                        /   /                \    \________________
                       /   /                  \_____________       | 
                      /   /                                 |      |
                     V   /                                  V      |
   復(fù)位---> [特權(quán)級thread mode]----(修改CONTROL REG)--->(用戶級thread mode)
                                                                                
        CM3:
        handler mode (注意總是 MSP!)
        thread mode, 可以使用  MSP
        thread mode, 也可以使用PSP,通過control reg 設(shè)置
 
        注意和ARM9 ARM A系統(tǒng)等比較
        它們在各異常(Abort,Undefine,IRQ,FIQ),User,Supervisor 都有自己的SP(R13)
        移值時注意這個巨大差異!!!
         

2. P27 內(nèi)存的分布

3. P30 異常名稱介紹,[-1]----[-3] 3個固定優(yōu)先級,NMI[-2] 的作用不錯
   P43  11-SVCCall, 15-SysTick 可以關(guān)注下

4. P32 進(jìn)入異常服務(wù)例程,自動壓棧 R0-R3,R12,LR(R14),PSR,PC(R15)

5. P36 棧指針分MSP(SP_main), PSP(SP_process)  ,push,pop 指令根據(jù)CONTROL[1](P40],自動判斷當(dāng)前那個SP
       如果有特殊要求可以通過MRS/MSR 來指定訪問

6. P38 注意讀PC 時,當(dāng)前支流+4 ,和 arm9上 (PC+8)有區(qū)別,
        pc 奇數(shù)這句表示必須在thumb2 下

7. P39 特殊功能寄存器 MRS/MSR 讀/寫
       PSR 分:
       APSR 應(yīng)用程序PSR    (N,Z,C,V,Q)[31-27]
       IPSR 中斷號PSR      (Exception Number) [8-0] 
                       (如果是thread,那么值為0,因為沒有0號異常)
       EPSR 執(zhí)行PSR        (ICI/IT)[26:25] ,(T)[34],(ICI/IT)[15:10]

8. P39. 異常(中斷) 控制register
       PRIMASK       開關(guān)中斷
       FAULTMASK     開關(guān)異常
       BASEPRI       優(yōu)先級

9. P40 快速開關(guān)中斷異常
       CPSID I   ;PRIMASK=1 關(guān)
       CPSIE I   ;       =0 開

       CPSID F   ;FAULTMASK 關(guān)
       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 復(fù)位后為  thread mode + svc mode
        thread mode + svc mode 對系統(tǒng)空間阻止訪問,MRS/MSR 也禁用,否則fault
        注意user ,svc mode 的切換  (control[0] + user 發(fā)生異常(+SVCall)

12. P43 異常相量表
    P109  ,16 個異常,240 IRQ

13. P46 使用滿遞減棧,雙棧(svc,user),用于帶kernel的 user ,kernel 切換很好

14. P47 奇特的復(fù)位過程,可以看下
         1. 從0x0地址取MSP
         2. 從0x4地址取PC的值,這個值是復(fù)位向量,LSB 必須為1,然后從這個地址所
            對應(yīng)的地址處取值
            [reset] -->[0x0(MSP)][0x4(復(fù)位向量)]----->[Reset Vector] !
                       (0x0--開始是MSP,然后接下拉是向量表!!!)
                       (向量表中都是32bit 地址,比如0x4放的就是reset 執(zhí)行指令位置)
           P148 圖3.18

15. P50 指令后綴使用:
        S 更新APSR中標(biāo)志   EQ,NE,LT,GT 等等
        等只有B(跳轉(zhuǎn))指令才能任意用,其他指令引入IF-THEN 塊,在這個塊中才可以加后綴

16. P51 注意thumb 語法和thumb 2 以及arm 的區(qū)別 ,在UAL 下thumb2 和arm 基本相似
        但也可以用thumb 語法明確 16bit 指令
        或者通過 .N(16bit)  .W(32bit) 來指定 16bit ,32bit

17. P59 自增自減,根據(jù)指令寬度, 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 都支持,根據(jù)LSB=1 thumb LSB=0 arm

19. P71 大多數(shù)16bit 算術(shù)邏輯指令,直接更新標(biāo)志位 ,除 ADD.N Rd,Rn,Rm
        32bit 需要S 后綴來控制

20. P72 barrier 指令
        DMB --- 數(shù)據(jù)訪問指令等前面數(shù)據(jù)訪問指令完成才執(zhí)行
        DSB --- 任何指令等前面數(shù)據(jù)訪問指令完成才執(zhí)行
                 (比如建立完所有向量后追加1條DSB P168)
        ISB --- 任何指令等前面指令完成才執(zhí)行 
        依次往下表現(xiàn)barrier 更嚴(yán)格

21. P73 帶符號 飽和運算指令  SSAT.W Rd #imm5,Rn,{,shift}
        不帶符號飽和運算指令

22. P75 MRS/MSR   除APSR 可以在user級訪問,其他必須特權(quán)級

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指令的意義:
          當(dāng)執(zhí)行到跳轉(zhuǎn)指令時,需要清洗流水線,處理器必須從跳轉(zhuǎn)地址重新取指,
          IT可以改善一些小跳轉(zhuǎn)!!!

24. P76 比較跳轉(zhuǎn)CBZ <Rn> , <lable>  CBNZ <Rn> , <lable> ,但范圍很小只有0-126
        并且不會更新標(biāo)志位

25. P80 跳轉(zhuǎn)表指令TBB ,TBH

26. P84 CM3 存儲映射
        0x0-------------------------------------------------------------------------4G
        |512M(代碼)|512M(片上SRAM)|512M(片上設(shè)備)|512M(片外SRAM)|512M(片外設(shè)備)|512M|
                                                                               /    |
                                             ----------------------------------     |
                                             |內(nèi)部私有外設(shè)總線|外部私有外設(shè)總線|其他|
                                            0xE0000000       0xE0040000    0xE0100000       

27. P85 CM3 存儲器訪問屬性
        Bufferable, Cacheable,Executable,Sharable

28. P88 位帶操作, 0bit --- 0x0(位帶別名區(qū)偏移)  1bit ---- 0x4
         操作 位帶區(qū) bit2
           無別名                   使用別名
        LDR R0,=0x20000000        LDR R0,=0x22000008
        LDR R1,[R0]               MOV R1,#1
        ORR.W R1, #0x4
        STR R1,[R0]               STR R1,[R0]
        注意位帶別名地址必須對齊到字, 位帶別名操作原子的

29. P94 對齊的地址傳輸:
        LDR/STR, LDM/STM, PUSH/POP, LDREX/STREX,位帶別名操作

30. P96 LDREX/STREX 實現(xiàn)mutex 的原理
        LDREX后,處理器會在內(nèi)部標(biāo)記出一段地址(范圍可定義),后續(xù)執(zhí)行到STR/STREX,
        只要其存儲地址落在標(biāo)記范圍內(nèi),就會清除此標(biāo)記,
        下一個STREX 執(zhí)行先檢查有沒有做過標(biāo)記和范圍,否則駁回STREX

31. P113 子優(yōu)先級至少1bit,所以搶占優(yōu)先級最多7bit,這就造成了128級搶占情況
    P112  AIRCR(中斷及復(fù)位控制寄存器) 0xE000_ED00
          其中[10:8]PRIGROUP 設(shè)置優(yōu)先分組
             比如寫5,表示從第5bit 處分,前面2bit表示搶占優(yōu)先級(P171)
             一般3級:
                  3bit =>0x00,0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0
                     這8個值有效

32. P116 向量表偏移寄存器(VTOR:0xE000_ED08)
          向量數(shù)對齊到2的整次冪,比如 32irq+16except=48 =>64 個
          然后64*4 =256,那么按0x100 對起的偏移量
       
         (P170 向量表移動的sample!)

33. P117 當(dāng)某中斷的服務(wù)例程開始執(zhí)行時,就稱此中斷進(jìn)入了active 狀態(tài),并且其懸起位
         會被硬件自動清除 ,一般ISR  執(zhí)行完成,才能對新請求響應(yīng),所以軟件在ISR中
     清除中斷請求


34. P121 總線fault 狀態(tài)寄存器(BFSR) 0xE000ED29

35. P122  MemManage fault 的原因:
          NVIC 中寄存器:
             MFSR(指出導(dǎo)致MemManage fault 的原因)
                DACCVIOL bit --- 數(shù)據(jù)訪問違例
                DACCVIOL bit --- 取指訪問違例
             MMAR---可讀出引發(fā)此fault 的地址
          在不帶mmu 的操作系統(tǒng)中,這個東西具體發(fā)揮什么先進(jìn)功能???

        
36. P122 用法fault必須被使能才能正常響應(yīng),使能位是NVIC的系統(tǒng)handler控制及狀態(tài)register
         的USGFAULTENA,
         總線fault 和 MemManage fault 則不需要enable   
         用法fault 的原因可以查 UFSR(用法fault狀態(tài)寄存器) 0xE000_ED2A

37. P124 硬fault狀態(tài)寄存器 0xE000_ED2C
          發(fā)生的三種情況: 調(diào)試, 其他fault 上訪,取向量(異常處理時對向量表讀取)

         注意各fault服務(wù)例程在處理后要清FSRs狀態(tài)寄存器


38. P125 如果分kernel user,那么user svc 進(jìn)入kernel,如果user 使用PSP ,那么
         kernel 訪問PSP (MRS Rn,PSP) 找到user 的棧指針,然后分析LR

39. P127 關(guān)于PSVC的應(yīng)用!!!
         OS在某中斷活躍時嘗試切入,線程模式,將觸發(fā)use fault

40. P129 除軟件中斷寄存器外,所有中斷控制及狀態(tài)寄存器只能在特權(quán)級下訪問


41. P130 enable disable 中斷:(寫1有效)
         SETENA0---SETENA7  0xE000_E100---E11C
         CLRENA0-7          0xE000_E180---E19C
         可以參考P168的sample! (REG addr offset = (N/32)*4)
        

42. P131 中斷pending :
         SETPEND0-7 (寫1懸起)   0xE000_E200---E21C
         CLRPEND0-7 (寫1解懸)   0xE000_E280---E29C

43. P131 中斷優(yōu)先級寄存器 (8bit可分為高底兩段,分別為搶占優(yōu)先級和亞優(yōu)先級)
         PRI_0---239 (每個8bit)(0xE000_E400-E4EF)
         及系統(tǒng)異常優(yōu)先級寄存器(0xE000_ED18-ED23)

44. P132 中斷活動狀態(tài) 只讀,處理器執(zhí)行了ISR第1條指令后set1,
          直到ISR返回時才硬件清0
         ACTIVE0---7 (0xE000_E300---E31C)

45. P133 PRIMASK disable NMI,硬fault 之外所有異常(將當(dāng)前優(yōu)先級改為0)
         關(guān)中斷  MOV R0,#1
                 MSR PRIMASK,R0  
                 或者     CPSID i

         開中斷  MOV R0,#0
                 MSR PRIMASK,R0  
                 或者     CPSIE i

         FAULTMASK 連硬fault 也disable (將當(dāng)前優(yōu)先級改為-1)
         但注意異常退出時自動清0!

         BASEPRI 寄存器 用于mask 低于某優(yōu)先級的中斷
         BASEPRI_MAX 只能越設(shè)越高(只能擴大mask 范圍)
         用戶態(tài)不能訪問BASEPRI
         根據(jù)優(yōu)先級位數(shù)判斷mask值是否有效
              3bit =>0x00,0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0
                     這8個值有效
         通過動態(tài)計算的方法在P167

46. P134 系統(tǒng)handler控制及狀態(tài)寄存器SHCSR(0xE000_ED24)
         使用這部分寄存器請小心
         一般在: 系統(tǒng)調(diào)用過程中執(zhí)行上下文切換
                 使用軟件模擬為定義指令功能

47. P135 中斷控制及狀態(tài)寄存器ICSR (0xE000_ED04)
         VCETPENDING   懸起的最高優(yōu)先級的ISR的編號
         RETTOBAE   ???
         VECTACTIVE    當(dāng)前活動的ISR編號
    P137 中斷系統(tǒng)設(shè)置過程示例


48. P137 軟件觸發(fā)中斷寄存器STIR(0xE000_EF00)
         寫入8,則懸起IRQ #8
   (P170)  軟件中斷的使用說明 (P137通過軟件觸發(fā)某 IRQ n)
           1. 設(shè)置NVIC  USERSETMPEND位
           2. 寫0xE000EF000后必須執(zhí)行DSB(數(shù)據(jù)同步隔離)
      3. 該IRQ n必須使能
      4. 如果只是為了系統(tǒng)調(diào)用盡量用SVC 指令


49. P138  SysTick 控制及狀態(tài)寄存器(0xE000_E010)
          SysTick reload寄存器(0xE000_E014)
          SysTick 當(dāng)前數(shù)值寄存器(0xE000_E010)
          SysTick 校準(zhǔn)數(shù)值寄存器(0xE000_E010)
          注意當(dāng)處理器在調(diào)試時被halt,SytTick也暫停運行!

50. P141 響應(yīng)異常的3個動作(!!!):
          1.入棧
             xPSR,PC,LR,R12,R3-R0
             當(dāng)前上PSP 就壓PSP,否則壓MSP,進(jìn)入服務(wù)例程一直使用MSP
    P142 如果棧有雙字對齊,如果不對齊,先空4字節(jié),然后壓棧

          2.取向量
          3.更新寄存器

51. P143 異常返回(!!!)及指令
         BX LR (EXC_RETURN)
         POP {...,PC}
         LDR/LDM =>PC

         1.出棧, 2.更新NVIC
         (同級異常不可重入)


52. P144 咬尾中斷(硬件處理)
         當(dāng)處理器響應(yīng)異常時,有發(fā)生異常,前次異常push的,仍舊對下次異常有效
    P145 晚到中斷的方式基本同上, 省去一個pop,push


53. P147 異常返回值
         LR=
           0xFFFF_FFF1 返回handler mode (注意總是MSP!)
           0xFFFF_FFF9 返回thread mode,并使用MSP
           0xFFFF_FFFD 返回thread mode,并使用PSP
         正真的LR ,已經(jīng)在主程被打斷前自動入棧了,(LR=>EXC_RETURN,只是指出在那個SP!!!)
         0xFFFF_FFF1所指主程其實就是被搶占的服務(wù)例程

54. P148 質(zhì)量LDM/STM 的中止和繼續(xù)(xPSR開出若干ICI 位)


55. P148 異常響應(yīng)時的faults
        1.入棧 => 總線fault BFSR bit4 STKERR
                  存儲fault MFSR bit4 MSTKERR

        2.出棧 => 總線fault BFSR bit3 UNSTKERR
                  存儲fault MFSR bit3 UNMSTKERR
 
        3.取向量 => 硬fault HFSR bit VECTTBL


        4. 無效返回 =>use fault  => UFSR bit2 INVPC ,bit1 INVSTATE
                 (if disabled then hard fault)

56.  P152.   在使用C開發(fā)時建議開啟CM3的雙字對齊
         #define NVIC_CCR ((volatile unsigned long *)(0xE000ED14))
         *NVIC_CCR = *NVIC_CCR |0x200;  //set STKALIGN
          

57.  P155 一個串口輸出程序
     P160 使用mutex 實現(xiàn)信號量訪問
           LDREX R2,[R1]
           ...
           STREX R2,R0, [R1]
           CMP R2,#0   => R2 == 0 那么就表示成功
     P161 使用位帶實現(xiàn)互斥鎖操作 (P88=> 位帶別名操作原子的)
     P163 使用位段提取與查表跳轉(zhuǎn)

58.  P165 主堆棧安全容量計算方法
          每個中斷都可以嵌套,對于每1級至少需要8字(32字節(jié)),附加考慮ISR局部變量的大小量
         
          進(jìn)程堆棧處了滿足本進(jìn)程所有函數(shù)調(diào)用的最大需求量外,好要保留8字,用于容納第1級
          中斷時被保護的寄存器(然后進(jìn)入主棧)

59.  P167     RBIT R2,R1, 反轉(zhuǎn)R1,并LSB對齊    R1=0xE0 =>R2=0x07
     (P55表)  CLZ  R1,R2  計算前導(dǎo)0個數(shù)       R1=0x07 =>R2=0x5  
 

60.  P169  一個ISR 匯編的主結(jié)構(gòu) (注意R4-R11要自己保護, 其他8個自動保護P141)
            PUSH {R4-R11,LR} ... POP {R4-R11,PC} 浪費了1字LR再壓棧1次
            PUSH {R4-R11}  ... POP {R4-R11},BX LR 更節(jié)約

           
61.  P171 一個比較完整的中斷處理例程
           其中SetupIrqHandler 負(fù)責(zé)建立向量表中斷服務(wù)例程入口地址,所以向量表
           必須移動到RAM中,否則無法動態(tài)設(shè)置!!!

62.  P173 SVC使用:
            1.SVC 提供1個8位立即數(shù)
            2.SVC框架:
               svc_handler
                   TST   LR, #4     ;測試EXC_RETURN的bit2
                   ITE   EQ         ; 如果為0,下面包括2條指令 (P76)
                   MRSEQ R0,MSP     ; 如果==0 則使用MSP
                   MRSNE R0,PSP     ; 否則使用PSP
                   LDR   R1,[R0,#24] ;從棧中讀取PC值 (+24見P142表9.1)
                                     ;注意自動壓棧8個reg,
                                     ;總是8字對齊的所以不用考慮
                   LDRB  R0,[R1,#-2] ;從立既數(shù)取系統(tǒng)調(diào)用號
                                     ; P54表4.5 SVC 是16bit 指令
                   ;準(zhǔn)備系統(tǒng)調(diào)用func,這需要適當(dāng)調(diào)整入棧的PC及LR(EXC_RETRUN),
                                     來進(jìn)入OS內(nèi)部
                   BX LR              ;借異常返回形式,進(jìn)入OS 內(nèi)部,call sysfunc
                                      ;可使用TBB/TBH查表跳轉(zhuǎn)加速
                                      ;返回user的情況如何處理 ???

63. P173 一個具體的SVC 例程
                   (也可以放在Rx,linuxEABI-R7) 但注意咬尾+晚到情況(P176)!!!
         P178 一個gcc 內(nèi)聯(lián)匯編的svc 代碼

64. P180 一個MPU系統(tǒng)的布局
       __________________________________________________________
       |用戶數(shù)據(jù)  | 用戶棧     |   特權(quán)數(shù)據(jù)    |     特權(quán)棧     |
       ----------------------------------------------------------
        (user 級訪問)          ^         (supervisor級訪問)     ^
                              PSP                              MSP

65. P180 一個簡單OS的init 和返回user級的過程
         (這里叫user級,不叫user空間,因為沒有MMU)
         1. OS init
         2. 建立PSP,并創(chuàng)建任務(wù)的堆棧(PC,xPSR)
         3. 把EXC_RETURN 改為0xFFFFFFFD 返回 (P147)

66. P181 一個使用Systick及PendSV(優(yōu)先級最低異常)來實現(xiàn)輪轉(zhuǎn)調(diào)度和上下文切換的例子
          1. user程序#1 ===> 響應(yīng) Systick 異常后進(jìn)入OS
          2.                 OS 執(zhí)行系統(tǒng)管理
          3.                 OS 懸起PendSV以便從systick
                                異常返回后執(zhí)行調(diào)度和switch context
          4.                 從systick返回如果無其他異;蛑袛鄤t進(jìn)入
                                PendSV ,這時通過PSP 保存user#1程序
                                堆棧幀,再把PSP 指向user#2程序的堆棧幀
                                修改EXC_RETURN,(#2堆棧幀pop2psp)并且返回  

67. P182  非基級thread mode的使用
          可以在服務(wù)例程中切換到thread mode,這樣如果中斷服務(wù)例程是用戶程序的1部分
          ,可能需要讓它在thread mode 下執(zhí)行,以現(xiàn)在訪問特權(quán)級下的資源
           比如:
               redirect_handler
                    PUSH  {LR}
                    SVC   #0)         ;通過系統(tǒng)服務(wù),由特權(quán)級進(jìn)入user級
                    (BL    User_IRQ_Handler )
                    (SVC   #1         ;執(zhí)行完中斷處理后,回特權(quán)級
                    POS   {PC}       ;本次中斷返回
               上面帶括號中的指令,包括SVC #0 返回部分,和SVC #1的進(jìn)入部分
               ,都是在PSP+thread mode 下運行,理解這部分有助手動調(diào)棧的了解
 
               * 所以第1次調(diào)整PSP,是為了SVC0返回用,否則svc0不知道返回那里
                 因為SVC0是在PSP上返回,所以將SVC0的MSP上內(nèi)容cpy過來

               * 第2次調(diào)整為了SVC1的返回,因為SVC1壓棧在PSP,返回在MSP
                 所以,先將PSP上+0x18的內(nèi)容讀出(pop pc指令地址),然后
                 修改MSP上原來SVC0壓入的LR(+0x18),然后PSP東西拋棄
                 然后Bx LR,返回到SVC1下面那條指令

               * 一般情況下異常是在Handler+MSP下,但是通過
                 1. 對PSP中已經(jīng)壓入的IPSR清0
                 2. 然后NVIC中配置和控制寄存器CCR的NONBASETHRDENA位設(shè)置
                 3. 最后修改EXC_RETURN,并BX LR返回,就可以返回到PSP+thread
                   特殊的一半在handler+MSP一半在thread+PSP
                 
                
           需要手動調(diào)棧具體見P183-184:
               主要就是 SVC #0 時特權(quán)級IRQ棧(MSP)上的內(nèi)容到PSP上,
               然后進(jìn)入user thread,注意進(jìn)入user thread要清0,IPSR
                            而這步必須在特權(quán)級下做!!!

68. P185  1. 消滅存儲器等待周期的方法 ???
          2. 中斷向量盡量放代碼區(qū),防止取向量與入棧搶總線
          3. 限制非對齊訪問

           一些匯編的技巧:
                1.使用帶偏移的LDR/STR,可以省去地址增減等計算
                2. 上下文相關(guān)的變量放到一起,這樣就可以創(chuàng)造使用LDM/STM
                   連續(xù)地址的數(shù)據(jù)傳送
                3. 當(dāng)遇到很小if then ,可以使用(ITxxx),最多包括4條
                4. 盡量使用thumb-2 指令
                5. 多用CM3新指令

69. P186   鎖定圖12.5

70. P191  消除systick 異常兩次懸起,通過在異常處理中除能systick,并清除
              NVIC的Systick 懸起位(0xE000ED04)

71. P192  系統(tǒng)控制寄存器(0xE000_ED10)
            bit 4  SEVONPEND 
            bit 2  SLEEPDEEP    當(dāng)進(jìn)入睡眠mode時,使能外部的SLEEPDEEP
                                信號,以允許停止系統(tǒng)時鐘
      bit 1  SLEEPONEXT

            圖13.2進(jìn)入睡眠模式的序列
      
       WFI(WaitForInterrupt)             WFE(WaitForEvent)
                      |                                |
                      |                                |             
                      | (清除事件鎖存器) 事件鎖存器!=1 |
                      <-------------------------<------|
                      |                            事件鎖存器==1                          
       SLEEPDEEP!=1)  | (SLEEPDEEP==1)                 |
                |---------------|                      V                
                |               |                 (清除事件鎖存器)
             V            V               (然后執(zhí)行下條指令)
        進(jìn)入普通睡眠(idle)   進(jìn)入深度睡眠(suspend)  
        SLEEPING信號為高   SLEEPING和SLEEPDEEP都為高
    SLEEPDEEP為低!

72. P193 喚醒小節(jié):  
    P194  SleepOnExit 自動睡眠功能演示


73. P194 多機通信功能 (有機會再看)


74. P202 CM3共支持8個regions,允許把每個region進(jìn)1步劃分為更小的 子region
          次外還允許啟用1個背景region(即沒有MPU時的全部地址空間)

75. P204 PRIVDEFENA =1 允許特權(quán)級訪問背景region (圖14.1)
         注意有個列外: 不管MPU如何限制,響應(yīng)異常是的取向量操作,以及對系統(tǒng)分區(qū)(E000_xxxx)
         的訪問不受影響


76. P205 1. MPURNR (MPU region 號) 0xE000ED98
         2. MPURBAR (基地址)       0xE000ED9c
               [31:N] N >=16   ADDR
               [4]             valid
               [3:0]           那個region
         3. MPURASR   (屬性及容量) 0xE000EDA0

         當(dāng)region 不夠用,如果是特權(quán)級就放到背景region中
         
總之這款arm 單片機就其單片機的角色,的確強大,特別是MPU,user級特權(quán)級等概念一看就是跑RTOS的好材料,但是感覺象ucos這樣簡單的RTOS 不是很合適,但比較強大的也不行,比如linux,主要是因為MMU,雖然都有支持linux 的cortex m3的patch ,但沒有了MMU,也沒發(fā)揮出強大os的特性,不過也沒見過那款單片機帶MMU的,所以個人認(rèn)為cortex m3 應(yīng)該有一款自己特定的os ,才能最大發(fā)揮他的特點

 

 

 

 

 

 

 


       

 

 

 

 

 

        


        

 

 

      

 

 

 

 

 

 

 

 


 

 
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP