???????????????????????????????????????
?????????????
???????????????????
1????????????????д????
???
?????? ??????1?? ??????2??... ?????
1??????????????????У?????????д???????????????????????????????????
2?????????????????????????????????????????????????????????Tab??????????
3???????????????????????????????????????????????????????????????н????洢?????????????????????????????????????????????????????
4??????????;???????????????????????????????????????ó??????????????????
2?????????EQU?????????峣????????????DCB???????????????——?????????????????????????????DCD?????????32λ??????
3??????????????????Щ????????????????????“??????”?????????????ж????????????????DCI????????????
4???????????????????????????????????ARM?????????????????????????????????????????
??????????????????????
1????ARM???????У?????????к?????
2????Cortex-CM3?У???????????????????????????????B??????????????á??????????????Cortex-CM3????IF-THEN??飬????????в???????????
?????????
????????????????????????
1????????????Thumb-2???????????“??????????UAL??”???????????16λ????32λ??????????Щ??????????????????????????????????????????
?????в?????????????????????????????????????????д?????????????????????16λ?????32λ??䶮
2??????????????Thumb????Щ??????????APSR?????????м???S???????????UAL????????????S???????????
3????Thumb-2????У???Щ???????????16λ??????????????32λ?????ɡ???UAL???????????????????????????????????????16λ????32λ??
1????.W??????32λ??䶮?????и??????????bain???????????16λ???????С???????????????????32λ??䶮
2????.N??????16λ??䶮
4??32λThumb-2???????????????
??????
1??APSR?е?5?????λ??
1????N???????????Negative????
2????Z???????????Zero????
3????C????λ/??λ?????Carry????
4????V??????????oVerflow????
5????S??????????Saturation???????????????????????
2??Cortex-CM3????????????
?????????????ARMv6T2????????䶮
?????????Cortex-CM3???????????v7????????????????????
1????16λ??????????
2????16λ??????
3????16λ?洢????????????
4????????16λ???
5????32λ??????????
6????32λ?洢????????????
7????32λ??????
8????????32λ???
3??δ???????
1???????????????????????Щ???????????
2??????????Э????????????
3??????????CPS????÷?
4??????????hint???
?塢?????????????
????????????????????
1??Cortex-CM3?е????????????
1????????????????????????
2???????????洢???????????
3??????????????????????????????
4???????????????????????????
2??????????????????MOV???????????????????MVN——???????????????????????
3?????????洢????????????“?????load??”??“?洢??store??”??
1???????????LDR??洢???е???????????????У??洢???STR????????????洢???洢???С????????????????????????????????????У?
2??????????????????洢?????????????????LDM/STM?????У?????????????LDR/STR???????????
I?????м??????Cortex-CM3?????????LDM/STM????÷???????????Rd??R13??????PUSH??POP??Ч??
II??????????????????????洢??Rd??????????????η??????????????????????????????洢???——LDR/STR???????????ν??“???????”??LDR??
STR??
III??Cortex-CM3????????????????????????????????offset????????????????????????????????????????Rd?????????????????????????????????
?????Rd<-Rd+offset??
4??LDRα??? VS ADRα???
1????LDR??ADR????????????????????????????????????
2????????LDR???????????????????????????????????????????????LSB??λ??
3????????ADR?????????????LSB??
?????????????????????
1??????????????ADD????????????????????????????16λ?????????????APSR????λ??????????????“.W”????????32λ???????????“S”???????
??APSR??????
2???????????????????????
3??Cortex-CM3??????????????????????/??????????????64λ?????
4?????????
5????λ????????????????????????
6??????????????
7????????????
8??λ?δ????????????
????????????????????????????????????
1?????????????????????????????
B Label ??????Label?????????
BL reg ???????м????reg????????
2????????????????????淵?????????????????
BL Label ??????Label??????????????????????????????????浽LR
BLX reg ????????????reg??????????????REG??LSB?л????????????????????????????????????浽LR
????????BLX??????????????????????reg??lsb?????1??????????????ARM????
3????PC??????????MOV??LDR?????????????????????????У?
MOV PC, R0 ; ???????R0????
LDR PC, [R0] ; ??????洢??R0??????洢????
POP {..., PC] ; ??????????????????????PC???????????
LDMIA SP!, {..., PC ; POP??????Чд??
????????Щ???????????PC???????????LSB=1????
????????λ?????????
1??????ó??????????????5?????λ???????4??????????????ο??????????ARM????????????????????????????????
2????ARM????????????????????4?????λ????Щ???λ?????????????????ж???????????Щ?????????????????е??????????????λ?????г??????н?
?????
3????????????????????е??????????4?????λ?????????????????????????????15???ж??????
4????Cortex-CM3?У??????????????PSR??????
1????16λ?????????䶮
2????32λ??S??????????????䶮
3????????????????䶮
4???????дPSR/APSR??MAR?????
?壩????????????????????洢?????????
????????????????????
1??Cortex-CM3????????????????????????????????????????????????
2?????????????
????Cortex-CM3???Щ??????????
1??MSR??MRS
1???????????????????????????????????????????·??????APSR??
2??????????????
MRS <Rn>, <SReg> ; ???????????????????Rn
MSR <SReg>, <Rn> ; ?洢Rn??????????????????
3????SReg???????±??е????
2??IF-THEN
1????IF-THEN???Χ??????飬???????4????????????????????????С?
2????IT????????
3??CBZ??CBNZ
1?????????????????????????????????裬???????????????
2????????
4??SDIV??UDIV
1????32λ?????????䶮
2???????
3????????????Rd = Rn / Rm??
5??REV,REVH,REV16???REVSH
1????REV???32λ?????е??????REVH???????????λ??????????????????
2????REVSH??REVH??????????????????????????????????
3??????
6??RBIT
1????RBIT???????REV????????????????λ???????????32λ????????????????????180°???????????????б??????????????
2???????
RBIT.W Rd?? Rn
7??SXTB,SXTH,UXTB,UXTH
1?????????????????????C??????????????????????????????????????????????32λ?????
2??????
3????????SXTB/SXTH???????????λ?????32λ??????????UXTB/UXTH????λ??0??
8??BFC/BFI,UBFX/SBFX
1??????????????Cortex-CM3????λ?β?????䶮
2????BFC??λ??????????32λ??????????????????????λS??0??????????
BFC Rd?? #lsb?? #width
3????BFI??λ?β???????????????????LSB???????????????????????????????λ???У????????
BFI.w Rd?? Rn?? #lsb?? #width
4????UBFX/SBFX????λ????????????????
UBFx.w Rd?? Rn?? #lsb?? #width
SBFX.w Rd?? Rn?? #lsb?? #width
9??LDRD/STRD
1????Cortex-CM3??????????????64λ??????????LDRD/STRD?????64λ????????????????????
2?????????
10??TBB,TBH
1????TBB????????????Χ?????????????TBH??????????????Χ????????????????????????????????в???????????????????????в???????
???TBB???????Χ?255*2+4=514??TBH???????Χ?65535*2+4=128kb+2??
2????TBB?????
TBB.W [Rn?? Rm] ??PC+=Rn[Rm]*2
3????TBH?????
TBH.W [Rn?? 2*Rm] ??PC+=Rn[2*Rm]*2
????洢????????????
1??Cortex-CM3?洢????????
1?????洢????????????????????涨???????λ??????????????
2????Cortex-CM3??洢???????“λ??”??????
3????Cortex-CM3?洢??????????????????????
4????Cortex-CM3??洢???????both??????ú?С?????á?
?????洢?????
1??Cortex-CM3??????????????洢?????????????????????Cortex-CM3?????????????
2???洢?????Щλ????????????????????裬???????????“?????????”??????????????????????
1?????????????????????FPB????
2??????????????DWT????
3??????????????ITM????
4????????????????ETM????
5????????????????TPIU????
6????ROM????
3??Cortex-CM3?????????4GB?????????????????????SRAM?????RAM????С?4GB???????????
1???????SRAM?????С??512MB????????о???????????????SRAM????????????????????????????????????????1MB??λ????????λ????????????????
32MB??“λ????????”????????8M??“λ????”??λ???????????????1MB?????Χ????λ????????????????????λ??????????????λ?????????????????????
????????????????
2???????????????512??Χ????????裨??????????á????????????32MB??λ?????????????????????????????
3????????????1GB???Χ???????????????RAM?????豸????????????λ???????????????????RAM???????????????????豸??????????
4??????????0.5GB??????Cortex-CM3???????????????????????????????????S?????????????S????????????????????衣
5???????????????????
I??AHB??????????????Cortex-CM3?????AHB?豸?????????NVIC,FPB??DWT??ITM??
II??APB???????????????Cortex-CM3?????APB?豸??????????豸
6????NVIC?????????????“????????SCS??”??SCS???滹??SysTick??MPU????????????????????????
?????洢??????????S
1??Cortex-CM3??洢????????????????洢???????涨??4???????
1???????壨Bufferable??
2???????棨Cacheable??
3?????????У?Executable??
4???????????Shareable??
2???????????MPU???????????????ò????洢???????????????????????
????洢??????????????
1??Cortex-CM3????????????????????????????????????????洢???????NVIC,MPU????????????????????????????????Ч??
1???????????MPU??
2??????????MPU??????MOPU???????
2???洢??????????????
???λ??????
????????
1?????λ??????????????????????/?洢????????????????ж?д????Cortex-CM3?У??????????????λ?????????????SRAM???????1MB????????????????
?????????1MB??Χ????????????????????????????RAM?????????????????“λ????????”??λ?????????????????????????32λ?????
1????λ???????????????????????A
2????λ???????????????????????B
2??Cortex-CM3???????????????λ???洢??????
1????λ?????????λ??????????????
2????λ??????????????????????????????λ?????????????????????????????????????
3????λ???????????????????????????????????——???????LSB??Ч???????????????????????????????????任??λ???????
1??????????????????λ??????е???????????????λ?????LSB??????LSB?????
2????????д???????????д??λ??????????λ???????????????????“??-??-д”?????
4?????λ????????????????????Χ???
1????0x2000_0000-0x000F_FFFF??SRAM???е????1MB????0x4000_0000-0x400F_FFFF????????????е????1MB????
2????????SRAMλ????????????????????????????A??λ????n??????????????????????
3???????????????λ????????????????????????????A??λ????n??????????????????????
5??λ????????
1????SRAM???е?λ????????
2??????????????е?λ????????
??????λ?????????????
1??λ???????????I/O??????????????????
2??λ??????????????????????ж????????????
3????????????????????????????????“????”?????
????????????????????λ??????
1??λ?????????????????????λ????????????????????????λ?????
?塢??C?????????λ??????
1??C???????в??????????λ??????????????C?????λ????????????????????#define???λ??????????????????λ?????????????????Щ??
2???????λ????????????????????????vollatile?????塣
????????????????
1??Cortex-CM3????????????????÷????????????????????洢??????????????
2????????????
3????Cortex-CM3?У????????????????????????????????????У????????????????
1???????????????洢??LDM/STM????
2????????????PUSH/POP????
3????????????LDREX/STREX????
4????λ????????
4???????????????????????????????????NVIC?????????????
??????????
1????Cortex-CM3?У????????????????ARM???????е?SWP??䶮
2???????????????SWP????????????????????????????????????????????????????????master????????????????????????????????????????Cortex-CM3
??????п?????????????????????
3???????????????/?洢???????????LDREX/STREX??LDREXH/STREXH??LDREXB/STREXB???????????/????/???
4????÷??????LDREX/STREX?????
1?????????
2????LDREX?????LDR???????STREX?????STREX???????????????????
I????????????????STREX??Rxf??????洢????Rn+Offset???????????Rd????????
II????????????????STREX????У???????洢???????????Rd????????1??
3????????????????LDREX??к?????????STREX????????С????????????????STREX
I???????????STR?????С?
II?????????????STREX??С?
4??????????????????LDREX/STREX??????????á?
???????
1??Cortex-CM3???bothС??????????????????????????Cortex-CM3??????С????——????????????鷳????????С??????
2??Cortex-CM3?ж????????????ARM7??????С????嶼?????????ARM7?д???????“???????”??????Cortex-CM3?У???????“????????”??
1????Cortex-CM3????????????洢?????
2????Cortex-CM3?????????????ABH???????
3????ARM7???????????ABH???????
3????Cortex-CM3,?????λ?????????????????????????????????????????С???????????????洢???????????С??????????NVIX??FPB?
???????????????????????0xE0000000??0xE00FFFFF???????С??????
????????FATFS??????????
????????????nano100B??????????
972369124