ãã ããæ¯èŒçæè¿ãARMã¯Cortexã³ã¢ã®æ°ãããã¡ããªãå°å ¥ããŸãããã·ã³ã°ã«ããããœãªã¥ãŒã·ã§ã³ã®ãããã§ARM7TDMIã眮ãæããã ãã®Cortex-M3ã®ããŒãžã§ã³ã«èå³ããããŸãã
å ¬åŒãªãªãŒã¹çŽåŸã«ãCortex-M3ã³ã¢ã«åºã¥ããNXP LPC1300ãããããŸãã¯ãããLPC1343ã䜿çšã§ããã®ã¯å¹žéã§ããã çŸåšã2ã3ã®ãããžã§ã¯ããæ¢ã«ãããã®äžã«è»¢éãããŠããŸãã ãããŠãARMã®ãå£ç¯ã«åããããããã°ã©ããŒãšããŠãäŒãããŸãã圌ãã¯æ¬åœã«å¥œãã§ãããã圌ãã¯ã¢ãŒããã¯ãã£ã«ç¬èªã®ãžã§ãŒã¯ãæã£ãŠããŸãã
ãã®ãããCortex-M3ã¯ARM7TDMIã眮ãæããããã«èšèšãããŠããŸãã ARM Ltd.ã«ãã£ãŠéçºããããšã ããã»ããµåè·¯ã®ããžãã¯ãå€§å¹ ã«è€éåããããšãªãç®æšãèšå®ããæ©èœã匷åããæçšãªåœä»€ãè¿œå ããŠãã³ãŒãå¯åºŠãšããã©ãŒãã³ã¹ãåäžãããŸãã ãã®ãããåäŸã®ãªãæé ãèžãå¿ èŠããããŸãããåããŠãARMã³ã¢ã¯ä»¥åã®ãã¡ããªãšãã€ããªã³ãŒãã§äºææ§ããããŸããã å®éãããã¯Cortex-M3ã32ãããARMã³ãŒããå®è¡ã§ããªãããã«çºçããŸããã
以åã®ãã¹ãŠã®ã«ãŒãã«ã«ã¯2ã€ã®åäœã¢ãŒãããããããããã«ç¬èªã®ã³ãã³ãã»ããããããŸããã ãããã®ã¢ãŒãã¯ãARMããã³ThumbãšåŒã°ããŠããŸããã 1ã€ç®ã¯32ãããã®å®å šãªåœä»€ã»ããã§åäœãã2ã€ç®ã¯ç°¡ç¥åããã16ãããã®åœä»€ã»ããã§åäœããŸããã å®éãã«ãŒãã«ã¯åžžã«ARMã³ãŒããå®è¡ããŸããããThumbã¢ãŒãã§ã¯ãç¹å®ã®ãã³ãŒããŒãæ¥ç¶ããã16ãããåœä»€ã32ãããã®åœä»€ã«ãã®å Žã§ããããã³ã°ãããŸããã
Cortex-M3ã¯32ãããã³ãŒããã¯ã©ã¹ãšããŠæŸæ£ããŸããã Cortexãã¡ããªã«ã¯ãããã«ããã€ãã®ã³ã¢ïŒCortex-M0ãM1ãA0-A3ïŒãå«ãŸããŠããŸãã M3ã¯äžå€®ã«ãããŸãã M0ãM1-ããã«ç°¡çŽ åãããŠããŸãããAã·ãªãŒãºã¯ããããšã¯å¯Ÿç §çã«ãééã®ããé«æ§èœã¢ããªã±ãŒã·ã§ã³åãã«èšèšãããŠãããARMã³ãŒããå®è¡ããæ©èœãåé€ãå§ããŠããŸããã
ARMã³ã¢ã§ã¯ã倧èŠæš¡æ§ãšäœã³ãŒãå¯åºŠã倧ããªåé¡ã§ãããããããæäœã§32ããããäœæã§ããŸãããŸããåœä»€ã§1ãã€ããè¶ ããå®æ°ããšã³ã³ãŒãããããšã¯äžå¯èœã§ãã ãã®ãããThumbåœä»€ã®è¿œå ã»ãããå°å ¥ãããŸããã ããã©ãŒãã³ã¹ã¯5ã10ïŒ äœäžããŸãããããé«ãã³ãŒãå¯åºŠïŒ20ã30ïŒ ã®å¹³åã²ã€ã³ïŒãåŸãããŸãã
Cortexã§ã¯ãThumbã³ãŒãã®ã¢ã€ãã¢ãéçºãããŸããã 16ãããThumbåœä»€ã»ãããæ¡åŒµãããåœä»€ã»ããã¯Thumb-2ãšåŒã°ããŠããŸãã ã³ã³ãã€ã«ãããå Žåãããã©ãŒãã³ã¹ã®äœäžã¯ïŒçŽç²ãªARMã³ãŒããšæ¯èŒããŠïŒãããæ°ããŒã»ã³ãã§ãããããªã¥ãŒã ã®ç¯çŽã¯äŸç¶ãšããŠ20ã30ïŒ ã§ãã
Thumb-2ã»ããã®ç¹å¥ãªæ³šæã¯ãITãªã©ã®é«ã¬ãã«ã®æ瀺ã«å€ããŸãïŒã¢ããªã±ãŒã·ã§ã³ã®èšèšã以äžã«ç€ºããŸãïŒãäžè¬ã«ãã³ãã³ãã·ã¹ãã ã«ã¯ãCã³ãŒãã®ã³ã³ãã€ã«æã«æé©åãé«ããããã®ãæ©èœããè©°ã蟌ãŸããŠããŸãã ãã®ãããThumb-2ã®èšèšïŒ
CMP r0, r1
ITE EQ ; if (r0 == r1)
MOVEQ r0, r2 ; then r0 = r2;
MOVNE r0, r3 ; else r0 = r3;
åæ§ã®ããšãARMåœä»€ã»ããã§å®è¡ã§ããŸãã
CMP r0, r1 ; if (r0 == r1)
MOVEQ r0, r2 ; then r0 = r2;
MOVNE r0, r3 ; else r0 = r3;
ãããŠãçŽç²ãªThumbã§ã¯ãå°ããå€æ ãããå¿ èŠããããŸãïŒ
CMP r0, r1 ; if (r0 == r1)
BNE .else
MOV r0, r2 ; then r0 = r2;
B .endif
.else:
MOV r0, r3 ; else r0 = r3;
.endif
ããªã¥ãŒã ãèšç®ãããšãThumbã®å Žåãæ§ç¯ã«2 * 5 = 10ãã€ããThumb-2ã®å Žåãããªã¥ãŒã ã¯2 * 4 = 8ãã€ããARMã§ã¯4 * 3 = 12ãã€ãã«ãªããŸãïŒãã ããåœä»€ã¯3ã€ãããããŸããïŒ ïŒ
ãã ããçæããããªã¹ãã調ã¹ããšãã«èŠã€ãããªãã£ããããKeil RealView MDKã³ã³ãã€ã©ãŒã«ã¯æããã«ç¥ãããŠããªãã®ã¯ããŸãã«ãã®èªæ ¢ã®ITåœä»€ã§ãããã³ã³ãã€ã©ãŒããã®åºåã®ã¢ã»ã³ãã©ãŒã³ãŒãã¯ãéåžžã®Thumbã®ããã«èŠããŸãã ãœãŒã¹ã³ãŒãèªäœã¯åºæã®ãã®ã§ããããã³ã³ãã€ã©ã¯æ°ããã«ãŒãã«ãšã³ãã³ãã·ã¹ãã ã®äžã§å®éã«ãå®æãããŠããŸããã æ®å¿µãªãããä»ã®ã³ã³ãã€ã©ã«é¢ããæ å ±ã¯ãããŸããããGCCãçæãããã®ãèŠãã®ã¯æªããããŸããã
äžè¬çã«ãã³ãŒãã®å¿ æ»ã®æé©åã宣äŒããã ãã§ãããããããæçµãµã€ãºã¯ã8ããã³16ããããã€ã¯ãã³ã³ãããŒã©ãŒçšã«ã³ã³ãã€ã«ãããåããœãŒã¹ã³ãŒãããã30ã50ïŒ å°ãªãã§ãããïŒããšãã°ãèšäºã®æåŸã«ããæåã®ãªã³ã¯ã§ç€ºãããããã¥ã¡ã³ãïŒã ç§ã¯ããã«èšããŸãïŒããã¯ããäžæ£ãªçµæã§ããããã¯32ãããã³ãŒããã€ãŸã intãlongå€æ°ãããã³å€æ°ã®èšç®ãåããè±å¯ãªæŒç®ãåããCã³ãŒãïŒããç¥ãããŠããDhrystoneãã¹ãã¯ããããã®èŠä»¶ã«é©ããŠããŸãïŒã 以åã«èšè¿°ããã8ãããçšã«æé©åãããã³ãŒãã転éãããšãéã«32ãããããã»ããµã«è»¢éãããšããã€ããªã³ãŒãã®ãµã€ãºã倧ãããªããŸããç§ã®çµéšã§ã¯ãã³ãŒãã®ããªã¥ãŒã ã¯çŽ1.5ã2åã«ãªããŸãã
Cortex-M3ã®ãã1ã€ã®å€§ããªé©æ°ã¯ãåå²ã³ãã³ãã®è¿œå ã§ãã æããã®ARMã«ãŒãã«ã«ã¯ãä¹ç®ïŒ64ãããã®çµæïŒãšçŽ¯ç©ã®ä¹ç®ïŒ64ãããã®çµæïŒãå«ãŸããŠããŸããã é€ç®åœä»€ãè¿œå ãããŸããã ãã¡ãããå€ãã®ã¯ããã¯ã䜿ãæããå¯èœæ§ãé«ãã§ããããšã«ãããããã¯å¥ã®ãµãã«ãŒãã³ãããã¯ããã«é«éã§ãã ã©ããªã«é説çã§ããããšãäžäœã®äººã ãšãã€ã¯ãã³ã³ãããŒã©ãŒããé ãé¢ãã人ã ïŒã·ã³ã°ã«ãããã·ã¹ãã ã§ã¯ããŒããŠã§ã¢ã®åå²ã¯ãŸã ãŸãã§ãïŒæµ®åå°æ°ç¹æŒç®ãä»ã®ã³ããã»ããµãŒã®ç°ãªãåœä»€ã»ããã«ã€ããŠã¯äœãèšããããã«ãã¡ãã£ã¢çšã«ç ãæŸãŸãããæãéãã¢ã³ã¹ã¿ãŒã§ã®ã¿å©çšå¯èœã§ãïŒ ã
ARM7TDMIãšã¯ç°ãªããCortexã«ã¯ããŒããŒãã¡ã¢ãªã¢ãŒããã¯ãã£ïŒåå¥ã®ã³ãã³ããã¹ãšããŒã¿ãã¹ïŒããããŸãã åãAVRã§ã¯ãããã«ããç¹å®ã®äžäŸ¿ãçããŸããããã°ã©ãã³ã°æã«ã¯ãconstå€æ°ãRAMã«èœã¡ãªãããã«ãããã€ãã®ã³ã³ãã€ã©ãã¯ããšç¹å®ã®é¢æ°ã䜿çšããå¿ èŠããããŸãã ããïŒARM9ãARM11ãªã©ãARMv4以éã®ãã¹ãŠã®ARMïŒã§ãåã ã®ãã¹ã¯ããã°ã©ãã³ã°äžã«æããããããããå ã§ã¯ãã¹ãŠåäžã®ã¢ãã¬ã¹ç©ºéã«çµåãããŠããŸãã ãã¹ãŠã®ARMãããã«ã¯ããµã€ãºã4 GBã®32ãããç·åœ¢ã¢ãã¬ã¹ç©ºéãããïŒx86ããã°ã©ããŒã®å Žåãããã¯ãã©ããã¡ã¢ãªã¢ãã«ã«å¯Ÿå¿ïŒããã¹ãŠã®åšèŸºæ©åšã¢ãã¬ã¹ãROMãããã³RAMãé 眮ãããŸãã
泚ïŒ1ïŒïŒãã¹ãŠã®å©ç¹ã«ãããããããã³ãŒãã®æé©åã«ãšã£ãŠå€§ããªé害ãšãªãã®ã¯å·šå€§ãªã¢ãã¬ã¹ç©ºéã§ãïŒ32ãããã¢ãã¬ã¹æå®ããããŸã.ARM / Thumbããã³Thumb-2åœä»€ã§ãããç¹å®ã®ãªããžã§ã¯ãã®å®å šãªã¢ãã¬ã¹ãçŽæ¥ãšã³ã³ãŒãã§ããªããããã¢ãã¬ã¹ã¯ã³ãŒãå ã®ããŒã¿ãããã³å¥ã®åœä»€ãååŸããŸãã ããã¯ãã³ãŒãã®éã«ãæªåœ±é¿ãåãŒããŸãã ããšãã°ãMSC-51ã§ã¯ãRAMããå€æ°ãèªã¿åãã®ã«2ãã€ãã§ååã§ããARMã§ã¯ãå°ãªããšã2ãã€ãã®åœä»€èªäœãšãã¢ãã¬ã¹ã®æ ŒçŽã«äœ¿çšãã4ãã€ããçŽæ¥æ ŒçŽããå¿ èŠããããŸãã
泚ïŒ2ïŒïŒã«ãŒãã«ã®åå¿ã芳å¯ããªãããããªãã§ã©ã«ã¬ãžã¹ã¿ã«ã³ãŒãïŒããšãã°ããªã¿ãŒã³åœä»€ïŒãé 眮ããŠå¶åŸ¡ã転éããããšåžžã«è©Šã¿ãŠããŸããã ARM7TDMIã§ã¯ãVon Neumannã®ã¡ã¢ãªæ§æã«ãããã®ããªãã¯ã¯æ©èœããŸãããCortexãšãã®ããŒããŒãã¯ã»ãŒç¢ºå®ã«é ãåå°ã«éãããäžçµ¶ã®1ã€ã«ãªããŸãã
次ã®å€§ããªéãã¯ã1ã€ã®ã¹ã¿ãã¯ã§ãã ç°ãªãã«ãŒãã«ã¢ãŒãã®ARM7TDMIã§ïŒARM / Thumbã«ã€ããŠã§ã¯ãªããå²ã蟌ã¿ãå ¥åããŠäŸå€ãåŠçãããšãã«ããã»ããµãåãæ¿ããã¢ãŒãã«ã€ããŠïŒãå¥ã®ã¹ã¿ãã¯ãå²ãåœãŠãããå Žåãã¹ã¿ãã¯ã¯1ã€ã ãã§ãã ããã«é¢é£ããæ¹æ³ã¯ããããŸããããçè«çã«ã¯æè»æ§ãäœããªããŸãããå®éã«ã¯éåžžã«äŸ¿å©ã§ãã ã¹ã¿ãã¯ã®æãäºçŽããå¿ èŠããªããããRAMãç¯çŽããããã¹ããããå²ã蟌ã¿ã®ããžãã¯ãšã·ã¹ãã ã³ãŒã«ã®å®è£ ãç°¡çŽ åãããŸãïŒARM7TDMIã䜿çšããŠã4ã€ä»¥äžã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠSWIå²ã蟌ã¿ãä»ããŠã·ã¹ãã ã³ãŒã«ãå®è¡ããŠãã ããã ããã«ãããã«ãããå²ã蟌ã¿ã®éå§ãšçµäºãããã³å²ã蟌ã¿éã®åãæ¿ãã®é 延ãåæžãããŸããã
å²ã蟌ã¿åŠçãé«éåãã2çªç®ã®å€æŽã¯ãVICã®æåŠã§ãã ã¯ããVICïŒVector Interrupt ControllerïŒãšåŒã°ããã¢ã³ã¹ã¿ãŒã¯ãããããŸããã ã¯ããããã¯æè»æ§ããåçŽåãžã®ã¹ãããã§ãããããããã€ã¯ãã³ã³ãããŒã©ãŒã·ã¹ãã ã§ã¯ãå²ã蟌ã¿ãã³ãã©ãŒããã®å Žã§åå²ãåœãŠããå¿ èŠãããå Žåã¯ãŸãã§ããããããã¹ãŠã®ãããžã§ã¯ãã§VICãæ§æãããããç°¡åã«èšè¿°ã§ããŸãã ããã«ãRAMã«å²ã蟌ã¿ããŒãã«ãé 眮ãããã®ããŒãã«ã®ãã³ãã©ãŒã®ã¢ãã¬ã¹ãæ¢ã«éãã«å€æŽããããšãã§ããŸãã
VICã®ä»£ããã«ãNVICãšFLASHã®å é ã«å€æ°ã®å²ã蟌ã¿ãã¯ã¿ãŒããããŸãã ARM7TDMIã®å²ã蟌ã¿ãã¯ãã«ãå é ã§32ãã€ããå ããŠããå Žåãæ°çŸãã€ããããŸããŸãªããã€ã¹ããã®å²ã蟌ã¿ã«å²ãåœãŠãããŸãã ããã«ããããã¯ãžã£ã³ãåœä»€ã§ã¯ãªããã¢ãã¬ã¹ãæã€å®ãã¯ãã«ã§ãã ã€ãŸã ã«ãŒãã«ã¯ãã¢ãã¬ã¹ã®å¶åŸ¡ãå²ã蟌ã¿ããŒãã«ã«è»¢éããŸããããç®çã®ãªãã»ããã®ã¢ãã¬ã¹ãéžæãããããå¶åŸ¡ããŸããããã°ã©ãã®ç«å Žããããã䟿å©ã§ãããçŸãããããéæã«ãªããŸãã
ããããäž»ãªé©ãã¯ãæåã®2ã€ã®å²ã蟌ã¿ãã¯ãã«ã§ãã ãªã»ãããªã©ãèããŸããïŒ ããïŒ 0çªç®ã®ã¢ãã¬ã¹ã«ãã...ã¹ã¿ãã¯ã®å€ã¯ããªã»ããæã«ã¹ã¿ãã¯ã¬ãžã¹ã¿å ã®ã«ãŒãã«ã«ãã£ãŠããŒããŠã§ã¢ã«å ¥åãããŸãã ãªãã»ãã4-ãšã³ããªãã€ã³ãã®ã¢ãã¬ã¹ã ããã¯äœãäžããŸããïŒ ãããŠã次ã®ãšããã§ããåæåããããšãªããCã³ãŒãã§ããã°ã©ã ã®å®è¡ãããã«éå§ã§ããŸãã ãã¡ããããã®å ŽåãRWã»ã¯ã·ã§ã³ãRAMã«æåã§ã³ããŒããZIããªã»ããããå¿ èŠããããŸãïŒã³ã³ãã€ã©ãŒã®ãã«ããå®å šã«æåŠããå ŽåïŒã
ãã®æ瀺çãªCæ¹åã¯ãCortexãããžã§ã¯ãã®äŸã§ãé¡èã§ãã ãã¹ãŠã®åæåã¯ã¢ã»ã³ãã©ãŒããCã«è»¢éãããŸãã å€ãã®ã¹ã¿ãã¯ãæåŠããããããæåããã¹ã¿ãã¯ãåæåããå¿ èŠããªããªããŸããã åæã«ãä»ã®åæåãCã³ãŒãã«ç§»è¡ãããŸããã
ã³ãã³ãã·ã¹ãã ã®éããèå³æ·±ããã®ã§ãããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®äœæãç°¡çŽ åããé«ã¬ãã«ã®åœä»€WFIïŒå²ã蟌ã¿åŸ æ©ïŒãWFEïŒã€ãã³ãåŸ æ©ïŒãªã©ãè¿œå ãããŸããã ãã®ã»ããã«ã¯ããã«ãããã»ããµã·ã¹ãã çšã®æé ãå«ãŸããŠããããã«ãã³ã¢ã·ã³ã°ã«ããããœãªã¥ãŒã·ã§ã³ããŸããªãç»å Žããå¯èœæ§ããããŸãã
泚ïŒãã«ãã³ã¢ãã€ã¯ãã³ã³ãããŒã©ãŒã¯åãParallax Propellerã®åœ¢ã§ååšããŸããïŒæ¢ã«8ã€ã®32ãããã³ã¢ãåããŠããŸãïŒãæ¬æ Œçãªãã®ãšã¯èšãããåçšå©çšã«ã¯é©ããŠããŸããïŒã¢ããã¥ã¢ã¯ã©ããã«ã¯é©ããŠããŸããïŒã
Cortex-M3ã³ã¢ã®èª¬æã«ãã1ã€ã®ã¿ã€ããŒãè¿œå ãããŠããŸãã ã¿ã€ããŒã¯åçŽã§ãäžå®ã®åšæã§å²ã蟌ã¿ãçæã§ããŸãããããšãã°ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã«ãŒãã«ã®å Žåããã以äžã¯å¿ èŠãããŸããã
泚ïŒã«ãŒãã«ã®èª¬æã®ã¿ã€ããŒã¯éåžžã«äŸ¿å©ã§éèŠãªãã®ã§ãã ã«ãŒãã«ã®ããã¥ã¡ã³ãã«èšèŒãããŠãããå®éã«ã¯ã©ã€ã»ã³ã¹ãããã«ãŒãã«ã®äžéšã§ããããããã¹ãŠã®ã¡ãŒã«ãŒããããã«è¿œå ããæãéèŠãªããšã¯ããã¹ãŠåãå®è£ ã䜿çšããããšã§ãã ããã¯ãã³ãŒãã®äºææ§ã«éåžžã«åœ¹ç«ã¡ãŸããç°ãªãã¡ãŒã«ãŒã®å€æ°ã®ã¿ã€ããŒå®è£ çšã®ãµããŒãã¢ãžã¥ãŒã«ãèšè¿°ããå¿ èŠã¯ãããŸããïŒARM7TDMIã®å Žåã®ããã«ïŒã ãã ããã¿ã€ããŒãè¿œå ãããšãåã¡ãŒã«ãŒã¯ãšã«ããç¬èªã®æ¹æ³ã§å®è£ ããŸããããã§ã«1ã€ã®æšæºããããŸããããã¯æ®éæ§ãžã®è¯ãã¹ãããã§ãã
çµè«ãšããŠãMPUïŒã¡ã¢ãªä¿è·ãŠãããïŒã¢ãžã¥ãŒã«ãã«ãŒãã«ã®ããã¥ã¡ã³ãã«èšèŒãããŠãããšèšã䟡å€ããããŸãã è€æ°ã®ã¹ã¬ãããå®è¡ãããŠãããåå¥ã®ã¹ã¬ããã§é害ãçºçããããã«ãã¡ãŒã ãŠã§ã¢å šäœã®åäœãäžæããããªãå Žåãè€éãªããã€ã¹ã§éåžžã«äŸ¿å©ã§ãã ãã ãããã®ã¢ãžã¥ãŒã«ã¯ãªãã·ã§ã³ã§ããããããã¡ãŒã«ãŒã¯æ¥ãã§ãã«ãããããšã¯ã§ããŸããã å€ãNXP LPC1700ãã¡ããªãŒã§ããæ¬ èœããŠããŸãã ä»ã®ã¡ãŒã«ãŒãèŠãããŠããŸããã ããã§ããä»®æ³ã¡ã¢ãªã¯ãã¡ããã®ããšãã¡ã¢ãªä¿è·ã¯äŸç¶ãšããŠé«äŸ¡ã§å€§ããªã¢ã³ã¹ã¿ãŒã®å€ãã§ãã
é¢é£ãªã³ã¯ïŒ