[302] | 1 |
|
---|
| 2 | TOPPERS/ASP3ã«ã¼ãã«
|
---|
| 3 | ARMã³ã¢ä¾åé¨ è¨è¨ã¡ã¢
|
---|
| 4 |
|
---|
| 5 | 対å¿ãã¼ã¸ã§ã³: Release 3.B.0
|
---|
| 6 | æçµæ´æ°: 2015å¹´8æ18æ¥
|
---|
| 7 |
|
---|
| 8 | ----------------------------------------------------------------------
|
---|
| 9 |
|
---|
| 10 | âç®æ¬¡
|
---|
| 11 |
|
---|
| 12 | ã»ç¥å·
|
---|
| 13 | ã»åèæç®
|
---|
| 14 | ã»ARMã³ã¢ä¾åé¨ã®ä½ç½®ã¥ã
|
---|
| 15 | - Thumbå½ä»¤ã®æ±ã
|
---|
| 16 | ã»ã·ã¹ãã ç¶æ
|
---|
| 17 | ã®ç®¡ç
|
---|
| 18 | - ããã»ããµã¢ã¼ã
|
---|
| 19 | - ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿
|
---|
| 20 | - å
|
---|
| 21 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
| 22 | ã®ç®¡ç
|
---|
| 23 | - ã³ã³ããã¹ãã®ç®¡ç
|
---|
| 24 | - CPUããã¯ç¶æ
|
---|
| 25 | ã®ç®¡ç
|
---|
| 26 | - å²è¾¼ã¿åªå
|
---|
| 27 | 度ãã¹ã¯ã®ç®¡ç
|
---|
| 28 | - å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ç®¡ç
|
---|
| 29 | - å²è¾¼ã¿ã«é¢ãããã®ä»ã®æä½
|
---|
| 30 | - CPSRï¼Program Status Registerï¼ã®è¨å®å¤
|
---|
| 31 | ã»ä¾å¤ï¼å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ï¼ã®åºå
|
---|
| 32 | ¥å£
|
---|
| 33 | - ARMv6ããåã®ããã»ããµã®å ´å
|
---|
| 34 | - ARMv6以éã®ããã»ããµã®å ´å
|
---|
| 35 | ã»å²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
| 36 | ¥å£å¦ç
|
---|
| 37 | ã»CPUä¾å¤ãã³ãã©ã®åºå
|
---|
| 38 | ¥å£å¦ç
|
---|
| 39 | - ã¹ã¿ãã¯ãã¤ã³ã¿ãä¸æ£ã®å ´åã®å¯¾ç
|
---|
| 40 |
|
---|
| 41 | âç¥å·
|
---|
| 42 |
|
---|
| 43 | CPSR Current Program Status Register
|
---|
| 44 | FIQ Fast Interrupt Request
|
---|
| 45 | GIC Generic Interrupt Controller
|
---|
| 46 | IRQ Interrupt Request
|
---|
| 47 |
|
---|
| 48 | âåèæç®
|
---|
| 49 |
|
---|
| 50 | [1] TOPPERSããã¸ã§ã¯ã è¨è¨ã¡ã¢ãARMã®ã¢ã¼ããã¯ãã£ã«é¢ããã¡ã¢ãï¼
|
---|
| 51 |
|
---|
| 52 | âARMã³ã¢ä¾åé¨ã®ä½ç½®ã¥ã
|
---|
| 53 |
|
---|
| 54 | ARMã³ã¢ä¾åé¨ã¯ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã®ä¸ã§ï¼ARMv4ï¼ARMv5ï¼ARMv6ï¼
|
---|
| 55 | ARMv7-Aï¼ARMv7-Rã«æºæ ããããã»ããµã³ã¢ãæã¤ã¿ã¼ã²ããã·ã¹ãã ï¼ãã
|
---|
| 56 | ãï¼ã«å
|
---|
| 57 | ±éã«ä½¿ç¨ã§ããé¨åã§ããï¼
|
---|
| 58 |
|
---|
| 59 | ARMã³ã¢ã®ããã»ããµã³ã¢ç¥ç§°ã"arm"ã¨ããï¼GNUéçºç°å¢åãã®ARMã³ã¢ä¾å
|
---|
| 60 | é¨ãç½®ããã£ã¬ã¯ããªã¯arch/arm_gcc/commonã¨ãªãï¼
|
---|
| 61 |
|
---|
| 62 | ARMã®å ´åï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã¯ã³ã¢ã®å¤ã«ãããã¨ããï¼å²è¾¼ã¿ã³ã³ããã¼
|
---|
| 63 | ã©ã«ä¾åããé¨åã¯ARMã³ã¢ä¾åé¨ã«å«ããªããã¨ãååã¨ãããï¼å¤ãã®ãã
|
---|
| 64 | ãã«æ¡ç¨ããã¦ããå²è¾¼ã¿ã³ã³ããã¼ã©ã§ããGICï¼ARM Generic Interrupt
|
---|
| 65 | Controllerï¼ã«ä¾åããé¨åï¼GICä¾åé¨ï¼ã¯ï¼ARMã³ã¢ä¾åé¨ã®ãã£ã¬ã¯ããª
|
---|
| 66 | ã«ç½®ãã¦ããï¼GICä¾åé¨ã®è¨è¨ã«ã¤ãã¦ã¯ï¼ãGICä¾åé¨ è¨è¨ã¡ã¢ããåç
|
---|
| 67 | §ã
|
---|
| 68 | ããã¨ï¼
|
---|
| 69 |
|
---|
| 70 | ãªãï¼ARMã³ã¢ä¾åé¨ã¯ï¼ARMã¢ã¼ããã¯ãã£ã®ãã¼ã¸ã§ã³çªå·ï¼4ã7ã®ããã
|
---|
| 71 | ãï¼ãï¼__TARGET_ARCH_ARMã«ãã¯ãå®ç¾©ããã¦ãããã®ã¨ãã¦è¨è¿°ãã¦ããï¼
|
---|
| 72 |
|
---|
| 73 | âThumbã¢ã¼ãã®æ±ã
|
---|
| 74 |
|
---|
| 75 | ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®Cè¨èªã§è¨è¿°ãããé¨åã¯ï¼Thumbã¢ã¼
|
---|
| 76 | ãåãã«ã³ã³ãã¤ã«ãã¦ãåä½ããããã«ããï¼ããã«å¯¾ãã¦ï¼ã«ã¼ãã«ã®ã¢
|
---|
| 77 | ã»ã³ããªè¨èªè¨è¿°ã®é¨åã¯ï¼ARMå½ä»¤ã§è¨è¿°ãï¼Thumbã¢ã¼ãã§å®è¡ãããã¨ã¯
|
---|
| 78 | èããªãï¼
|
---|
| 79 |
|
---|
| 80 | âã·ã¹ãã ç¶æ
|
---|
| 81 | ã®ç®¡ç
|
---|
| 82 |
|
---|
| 83 | âããã»ããµã¢ã¼ã
|
---|
| 84 |
|
---|
| 85 | ASP3ã«ã¼ãã«ã®ARMã³ã¢ä¾åé¨ã§ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®
|
---|
| 86 | 大é¨åãï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã§å®è¡ããï¼ä¾å¤ã®å
|
---|
| 87 | ¥å£ã§ããããã®ããã»ã
|
---|
| 88 | ãµã¢ã¼ãã«åãæãããï¼å
|
---|
| 89 | ¥å£å¦çã®ä¸ã§ã¹ã¼ããã¤ã¶ã¢ã¼ãã«æ»ãããï¼ã
|
---|
| 90 | ãã¾ã§ã«ã¼ãã«ã®å
|
---|
| 91 | é¨ã§ä¸æçã«ä»ã®ã¢ã¼ãã使ãã«éããªãï¼
|
---|
| 92 |
|
---|
| 93 | å²è¾¼ã¿å¦çã®å®è¡ã«IRQã¢ã¼ãã使ããªãã®ã¯ï¼æ¬¡ã®çç±ã§ããï¼IRQã¢ã¼ãã§
|
---|
| 94 | å®è¡ä¸ã«å²è¾¼ã¿ãçºçããã¨ï¼lrã¬ã¸ã¹ã¿ã«æ»ãçªå°ãæ ¼ç´ãããï¼ãã®ããï¼
|
---|
| 95 | å²è¾¼ã¿å¦çãIRQã¢ã¼ããå®è¡ããã¨ï¼å¤éå²è¾¼ã¿ã«ããlrã¬ã¸ã¹ã¿ã®å
|
---|
| 96 | 容ã失
|
---|
| 97 | ãããããï¼å¤éå²è¾¼ã¿ã許å¯ãããã¨ãã§ããªãï¼
|
---|
| 98 |
|
---|
| 99 | ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®å¤§é¨åã®å®è¡ã«ã·ã¹ãã ã¢ã¼ãã使
|
---|
| 100 | ããªãçç±ã¯ï¼ä»¥ä¸ã®éãã§ããï¼
|
---|
| 101 |
|
---|
| 102 | (1) ARMv5以åã®ããã»ããµã§ã¯ï¼ä¾å¤ããã®å¾©å¸°ãï¼
|
---|
| 103 |
|
---|
| 104 | ldmfd sp!, {<復帰ãã¹ãã¬ã¸ã¹ã¿ã®ãªã¹ã>, pc}^
|
---|
| 105 |
|
---|
| 106 | ã®å½ä»¤ã§è¡ãï¼ãã®å½ä»¤ã¯ï¼ä¾å¤ã¢ã¼ãã§ã®ã¿ä½¿ç¨ãããã¨ãã§ãï¼ã·ã¹ãã
|
---|
| 107 | ã¢ã¼ãã§ã¯ä½¿ç¨ã§ããªãï¼ã·ã¹ãã ã¢ã¼ãã«ã¯SPSRããªãããï¼CPSRã復帰ã§
|
---|
| 108 | ããªãï¼ï¼ãã®ããï¼å²è¾¼ã¿ãã³ãã©ãCPUä¾å¤ãã³ãã©ãã·ã¹ãã ã¢ã¼ãã§å®
|
---|
| 109 | è¡ããã¨ï¼ä¾å¤ããã®ãªã¿ã¼ã³æã«ï¼ä½è¨ãªããã»ããµã¢ã¼ãåæãã¨ããã«
|
---|
| 110 | ä¼´ãã¹ã¿ãã¯æä½ãå¿
|
---|
| 111 | è¦ã«ãªãï¼å¹çãæªãï¼
|
---|
| 112 |
|
---|
| 113 | ARMv6以éã®ããã»ããµã§ã¯ï¼ä¾å¤ããã®å¾©å¸°ã®ããã«rfeå½ä»¤ãæã£ã¦ãããï¼
|
---|
| 114 | rfeå½ä»¤ã«ã¯ã·ã¹ãã ã¢ã¼ãã§ã¯ä½¿ç¨ã§ããªãã¨ããå¶ç´ããªãããã«ï¼ãã®ã
|
---|
| 115 | ã¨ã¯å½ã¦ã¯ã¾ããªãï¼
|
---|
| 116 |
|
---|
| 117 | (2) ä¿è·æ©è½å¯¾å¿ã«ã¼ãã«ã«ããã¦ã¯ï¼ä¾å¤ã®å
|
---|
| 118 | ¥å£ã§ï¼ã¦ã¼ã¶ã¹ã¿ãã¯ããã·
|
---|
| 119 | ã¹ãã ã¹ã¿ãã¯ã«åãæããå¦çãå¿
|
---|
| 120 | è¦ã§ãããï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©
|
---|
| 121 | ã ã®éç¹æ¨©ã¢ã¼ãã§å®è¡ãã¹ãé¨åãã¦ã¼ã¶ã¢ã¼ãã§ï¼ã¢ããªã±ã¼ã·ã§ã³ãã
|
---|
| 122 | ã°ã©ã ã®ç¹æ¨©ã¢ã¼ãã§å®è¡ãã¹ãé¨åã¨ã«ã¼ãã«ã®å¤§é¨åãã¹ã¼ããã¤ã¶ã¢ã¼
|
---|
| 123 | ããå®è¡ããã°ï¼ã¹ã¿ãã¯ã®åæãããã¼ãã¦ã§ã¢ã§è¡ããï¼å¹ççã§ããï¼
|
---|
| 124 |
|
---|
| 125 | éã«ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®å¤§é¨åãã·ã¹ãã ã¢ã¼ãã§å®
|
---|
| 126 | è¡ããã¡ãªããã¨ãã¦ï¼ä»¥ä¸ãæãããã¨ãã§ããï¼
|
---|
| 127 |
|
---|
| 128 | ã»ã¹ã¼ããã¤ã¶ã¢ã¼ãã§å®è¡ä¸ã«svcå½ä»¤ãçºè¡ããã¨ï¼lrã¬ã¸ã¹ã¿ã«æ»ãçªå°
|
---|
| 129 | ããæ ¼ç´ãããï¼lrãå£ããæ³å®ã§svcå½ä»¤ãå¼ã³åºãã°ãããï¼ããã°ã©ã ã«
|
---|
| 130 | ãããããå½ã¦ãç®çã§svcå½ä»¤ã使ãå ´åãªã©ï¼lrãä¿åï¼å¾©å¸°ããä½å°ããª
|
---|
| 131 | ããå ´åã«ã¯ï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã§å®è¡ãã¦ããã¨ãã¾ãå®è£
|
---|
| 132 | ã§ããªãï¼
|
---|
| 133 |
|
---|
| 134 | ä¿è·æ©è½å¯¾å¿ã§ãªãASP3ã«ã¼ãã«ã§ï¼ARMv6以éã®ããã»ããµã使ç¨ããå ´åã«
|
---|
| 135 | ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®å¤§é¨åãã·ã¹ãã ã¢ã¼ãã§å®è¡
|
---|
| 136 | ããããã«ä¿®æ£ããã®ã¯å®¹æã§ããï¼å
|
---|
| 137 | ·ä½çã«ã¯ï¼core_support.Sã¨start.Så
|
---|
| 138 |
|
---|
| 139 | ã®ç´20ç®æç¨åº¦ã®CPSR_SVC_MODEãï¼CPSR_SYS_MODEã«æ¸ãæããã°ããï¼
|
---|
| 140 |
|
---|
| 141 | âã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿
|
---|
| 142 |
|
---|
| 143 | ARMã³ã¢ä¾åé¨ã®æ¨æºã§ã¯ï¼IRQãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ï¼FIQãã«ã¼ãã«ç®¡çå¤
|
---|
| 144 | ã®å²è¾¼ã¿ã¨æ±ãï¼ãã®ããã«ããã®ãï¼æãã·ã³ãã«ã§æ§è½ãè¯ãããã§ããï¼
|
---|
| 145 |
|
---|
| 146 | ãã ãï¼SafeGã®ã»ãã¥ã¢ã¢ã¼ãã§ASP3ã«ã¼ãã«ãåä½ãããå ´åã«ã¯ï¼FIQã
|
---|
| 147 | ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ã¨ãã¦æ±ãï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¯ãµãã¼ãããªãï¼
|
---|
| 148 | IRQã¯ï¼ãã³ã»ãã¥ã¢ã¢ã¼ãã§åä½ããOSã使ç¨ããï¼ãã®è¨å®ã«ããå ´åã«ã¯ï¼
|
---|
| 149 | TOPPERS_SAFEG_SECUREããã¯ãå®ç¾©ããï¼
|
---|
| 150 |
|
---|
| 151 | âå
|
---|
| 152 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
| 153 | ã®ç®¡ç
|
---|
| 154 |
|
---|
| 155 | å
|
---|
| 156 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
| 157 | ã§ã¯ï¼FIQã»IRQã¨ããã¹ã¯ããï¼å
|
---|
| 158 | ·å¤çã«ã¯ï¼CPSRä¸ã®Fãã
|
---|
| 159 | ãï¼FIQç¦æ¢ï¼ã¨Iãããï¼IRQç¦æ¢ï¼ãã»ããããï¼
|
---|
| 160 |
|
---|
| 161 | âã³ã³ããã¹ãã®ç®¡ç
|
---|
| 162 |
|
---|
| 163 | å®è¡ä¸ã®ã³ã³ããã¹ããããã»ããµã¢ã¼ãã§å¤æãããã¨ãã§ããªãããï¼ä¾
|
---|
| 164 | å¤ï¼å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ï¼ã®ãã¹ã段æ°ãå¤æ°ï¼ãããï¼ä¾
|
---|
| 165 | å¤ãã¹ãã«ã¦ã³ãã¨å¼ã¶ï¼ã§ç®¡çãï¼ä¾å¤ãã¹ãã«ã¦ã³ãã0ã®æã«ã¿ã¹ã¯ã³ã³
|
---|
| 166 | ããã¹ãï¼0ãã大ããå ´åã«éã¿ã¹ã¯ã³ã³ããã¹ãã§ããã¨å¤æããï¼
|
---|
| 167 |
|
---|
| 168 | âCPUããã¯ç¶æ
|
---|
| 169 | ã®ç®¡ç
|
---|
| 170 |
|
---|
| 171 | CPUããã¯ç¶æ
|
---|
| 172 | ã§ã¯ï¼IRQããã¹ã¯ããï¼å
|
---|
| 173 | ·å¤çã«ã¯ï¼CPSRä¸ã®Iãããï¼IRQç¦
|
---|
| 174 | æ¢ï¼ãã»ããããï¼å
|
---|
| 175 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
| 176 | ã¨CPUããã¯ç¶æ
|
---|
| 177 | ãåºå¥ã§ããå¿
|
---|
| 178 | è¦ã¯ãª
|
---|
| 179 | ããã¨ããï¼CPSRä¸ã®Iããããç«ã£ã¦ããã°ï¼CPUããã¯ç¶æ
|
---|
| 180 | ã§ããã¨å¤æã
|
---|
| 181 | ãï¼
|
---|
| 182 |
|
---|
| 183 | TOPPERS_SAFEG_SECUREããã¯ãå®ç¾©ããã¦ããå ´åã«ã¯ï¼CPUããã¯ç¶æ
|
---|
| 184 | ã§ã¯ï¼
|
---|
| 185 | FIQããã¹ã¯ããï¼IRQã¯å¸¸ã«ãã¹ã¯ããããï¼FIQã»IRQã¨ããã¹ã¯ãããã¨ã«
|
---|
| 186 | ãªãï¼CPSRä¸ã®Fããããç«ã£ã¦ããã°ï¼CPUããã¯ç¶æ
|
---|
| 187 | ã§ããã¨å¤æããï¼
|
---|
| 188 |
|
---|
| 189 | âå²è¾¼ã¿åªå
|
---|
| 190 | 度ãã¹ã¯ã®ç®¡ç
|
---|
| 191 |
|
---|
| 192 | å²è¾¼ã¿åªå
|
---|
| 193 | 度ãã¹ã¯ã®ç®¡çã¯ï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦è¡ãï¼ãã®ããï¼
|
---|
| 194 | ARMä¾åé¨ã«ã¯å«ããªãï¼
|
---|
| 195 |
|
---|
| 196 | GICã®å ´åã«ã¯ï¼GICC_PMRï¼Interrupt Priority Mask Registerï¼ã«ããï¼å²è¾¼
|
---|
| 197 | ã¿åªå
|
---|
| 198 | 度ãã¹ã¯ã管çããï¼
|
---|
| 199 |
|
---|
| 200 | âå²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ç®¡ç
|
---|
| 201 |
|
---|
| 202 | å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ç®¡çã¯ï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦è¡ãï¼ãã®ããï¼
|
---|
| 203 | ARMä¾åé¨ã«ã¯å«ããªãï¼
|
---|
| 204 |
|
---|
| 205 | GICã®å ´åã«ã¯ï¼GICD_ISENABLEnï¼Interrupt Set-Enable Registersï¼ã¨
|
---|
| 206 | GICD_ICENABLERnï¼Interrupt Clear-Enable Registersï¼ã«ãã£ã¦ï¼ã»ããï¼ã¯
|
---|
| 207 | ãªã¢ããï¼
|
---|
| 208 |
|
---|
| 209 | âå²è¾¼ã¿ã«é¢ãããã®ä»ã®æä½
|
---|
| 210 |
|
---|
| 211 | å²è¾¼ã¿ã«é¢ãããã®ä»ã®æä½ã¯ï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦å®ç¾ããï¼ãã®
|
---|
| 212 | ããï¼ARMä¾åé¨ã«ã¯å«ããªãï¼
|
---|
| 213 |
|
---|
| 214 | GICã®å ´åã«ã¯ï¼å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ã¨ããã¼ãã¯ï¼GICD_ICPENDRnï¼Interrupt
|
---|
| 215 | Clear-Pending Registersï¼ã¨GICD_ISPENDRnï¼Interrupt Set-Pending
|
---|
| 216 | Registersï¼ã«ãã£ã¦å®ç¾ããï¼
|
---|
| 217 |
|
---|
| 218 | âCPSRï¼Program Status Registerï¼ã®è¨å®å¤
|
---|
| 219 |
|
---|
| 220 | CPUããã¯ã»å
|
---|
| 221 | ¨å²è¾¼ã¿ããã¯è§£é¤ç¶æ
|
---|
| 222 | ï¼CPUããã¯ç¶æ
|
---|
| 223 | ï¼å
|
---|
| 224 | ¨å²è¾¼ããã¯ç¶æ
|
---|
| 225 | ã¨ã
|
---|
| 226 | ãCPSRã®è¨å®å¤ãï¼ä»¥ä¸ã®ããã«å®ç¾©ãã¦ããï¼
|
---|
| 227 |
|
---|
| 228 | #define CPSR_UNLOCK UINT_C(0x00)
|
---|
| 229 | #define CPSR_CPULOCK CPSR_IRQ_BIT
|
---|
| 230 | #define CPSR_INTLOCK CPSR_FIQ_IRQ_BIT
|
---|
| 231 |
|
---|
| 232 | TOPPERS_SAFEG_SECUREããã¯ãå®ç¾©ããã¦ããå ´åã«ã¯ï¼ä»¥ä¸ã®ããã«å®ç¾©ã
|
---|
| 233 | ãï¼
|
---|
| 234 |
|
---|
| 235 | #define CPSR_UNLOCK CPSR_IRQ_BIT
|
---|
| 236 | #define CPSR_CPULOCK CPSR_FIQ_IRQ_BIT
|
---|
| 237 | #define CPSR_INTLOCK CPSR_FIQ_IRQ_BIT
|
---|
| 238 |
|
---|
| 239 | ããã§ï¼CPSR_IRQ_BITã¨CPSR_FIQ_BITã¯ï¼ããããIRQã¨FIQããã¹ã¯ããå ´å
|
---|
| 240 | ã®CPSRã®å¤ï¼CPSR_FIQ_IRQ_BITã¯ï¼FIQã»IRQã¨ããã¹ã¯ããå ´åã®CPSRã®å¤ã§
|
---|
| 241 | ããï¼ä»¥ä¸ã®ããã«å®ç¾©ãã¦ããï¼
|
---|
| 242 |
|
---|
| 243 | #define CPSR_IRQ_BIT UINT_C(0x80)
|
---|
| 244 | #define CPSR_FIQ_BIT UINT_C(0x40)
|
---|
| 245 | #define CPSR_FIQ_IRQ_BIT (CPSR_FIQ_BIT|CPSR_IRQ_BIT)
|
---|
| 246 |
|
---|
| 247 | âä¾å¤ï¼å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ï¼ã®åºå
|
---|
| 248 | ¥å£
|
---|
| 249 |
|
---|
| 250 | SRSå½ä»¤ã¨RFEå½ä»¤ãæã¤ARMv6以éã¨ï¼ããããåã®ããã»ããµã§ã¯ï¼ä¾å¤ã®åº
|
---|
| 251 | å
|
---|
| 252 | ¥å£ï¼å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ã®åºå
|
---|
| 253 | ¥å£å¦çã®æåã¨æå¾ã®é¨åï¼
|
---|
| 254 | ã®æé©ãªã³ã¼ããç°ãªãï¼
|
---|
| 255 |
|
---|
| 256 | âARMv6ããåã®ããã»ããµã®å ´å
|
---|
| 257 |
|
---|
| 258 | ã¢ã¼ããã¯ãã£ã®æ³å®ã§ã¯ï¼ä¾å¤ããã®å¾©å¸°ãï¼
|
---|
| 259 |
|
---|
| 260 | ldmfd sp!, {<復帰ãã¹ãã¬ã¸ã¹ã¿ã®ãªã¹ã>, pc}^
|
---|
| 261 |
|
---|
| 262 | ã®å½ä»¤ã§è¡ãï¼ãã®æç¹ã§ï¼æ»ãçªå°ãã¹ã¿ãã¯ã®æå¾ï¼æã大ããçªå°ï¼ã«
|
---|
| 263 | ä¿åããã¦ããï¼æ»ãå
|
---|
| 264 | ã®CPSRããã®ã¢ã¼ãã®SPSRã«ç½®ããã¦ãããã¨ãå¿
|
---|
| 265 | è¦
|
---|
| 266 | ã§ããï¼
|
---|
| 267 |
|
---|
| 268 | ä¾å¤ã®åºå
|
---|
| 269 | ¥å£å¦çã§ï¼ãã¹ã¦ã®ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãä¿åï¼å¾©å¸°ãããã¨ã«ã
|
---|
| 270 | ãã¨ï¼ä¸ã®å½ä»¤ã®<復帰ãã¹ãã¬ã¸ã¹ã¿ã®ãªã¹ã>ã«ã¯ï¼ãã¹ã¦ã®ã¹ã¯ã©ããã¬
|
---|
| 271 | ã¸ã¹ã¿ã®ãªã¹ããè¨è¿°ããï¼ã¾ãï¼ä¾å¤ããã®ãªã¿ã¼ã³ã§ã¢ã¼ããå¤ãããªã
|
---|
| 272 | ï¼ã©ã¡ããã¹ã¼ããã¤ã¶ã¢ã¼ãã§ããï¼ããï¼å¾©å¸°ããã¬ã¸ã¹ã¿ã«ï¼lrãå ã
|
---|
| 273 | ã¦ãããã¨ãå¿
|
---|
| 274 | è¦ã§ããï¼
|
---|
| 275 |
|
---|
| 276 | å
|
---|
| 277 | ·ä½çã«ã¯ï¼ä¾å¤ã®åºå£ã¯ï¼æ¬¡ã®ãããªã³ã¼ãã¨ãªãï¼
|
---|
| 278 |
|
---|
| 279 | ----------------------------------------
|
---|
| 280 | /*
|
---|
| 281 | * ãã®æç¹ã§ã¯ã¹ã¼ããã¤ã¶ã¢ã¼ãã«ãªã£ã¦ããï¼
|
---|
| 282 | */
|
---|
| 283 | ldmfd sp!, {r0} /* æ»ãå
|
---|
| 284 | ã®cpsrãspsrã«å¾©å¸° */
|
---|
| 285 | msr spsr_cxsf, r0
|
---|
| 286 | ldmfd sp!, {r0-r4,r12,lr,pc}^ /* ä¾å¤å¦çããã®å¾©å¸° */
|
---|
| 287 | ----------------------------------------
|
---|
| 288 |
|
---|
| 289 | ããã§ï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã«å ãã¦r4ã復帰ãã¦ããã®ã¯ï¼ä¾å¤ã®åºå
|
---|
| 290 | ¥å£å¦
|
---|
| 291 | çã§ã¹ã¯ã©ããã¬ã¸ã¹ã¿ä»¥å¤ã«ä½¿ããã¬ã¸ã¹ã¿ã¨ãã¦ï¼r4ã確ä¿ããããã§ã
|
---|
| 292 | ãï¼
|
---|
| 293 |
|
---|
| 294 | ãã®åºå£ãå®è¡ããæç¹ã§ï¼ã¹ã¿ãã¯ã¯æ¬¡ã®ããã«ãªã£ã¦ããå¿
|
---|
| 295 | è¦ãããï¼ã¬
|
---|
| 296 | ã¸ã¹ã¿ã¯ããããCPUä¾å¤çºçæã®å¤ã示ãï¼ä¾ãã°ï¼CPSRã¯CPUä¾å¤çºçæã®
|
---|
| 297 | CPSRã示ãï¼ï¼
|
---|
| 298 |
|
---|
| 299 | +----------------+ <- sp
|
---|
| 300 | | cpsr |
|
---|
| 301 | +----------------+ <- sp+0x04
|
---|
| 302 | | r0 |
|
---|
| 303 | +----------------+ <- sp+0x08
|
---|
| 304 | | r1 |
|
---|
| 305 | +----------------+ <- sp+0x0c
|
---|
| 306 | | r2 |
|
---|
| 307 | +----------------+ <- sp+0x10
|
---|
| 308 | | r3 |
|
---|
| 309 | +----------------+ <- sp+0x14
|
---|
| 310 | | r4 |
|
---|
| 311 | +----------------+ <- sp+0x18
|
---|
| 312 | | r12 |
|
---|
| 313 | +----------------+ <- sp+0x1c
|
---|
| 314 | | lr |
|
---|
| 315 | +----------------+ <- sp+0x20
|
---|
| 316 | | æ»ãçªå° |
|
---|
| 317 | +----------------+
|
---|
| 318 |
|
---|
| 319 | ããã«å¯¾å¿ããä¾å¤ã®å
|
---|
| 320 | ¥å£ã¯ï¼æ¬¡ã®ã³ã¼ãã¨ãªãï¼IRQã®å ´åï¼ï¼
|
---|
| 321 |
|
---|
| 322 | ----------------------------------------
|
---|
| 323 | /*
|
---|
| 324 | * ã¹ã¼ããã¤ã¶ã¢ã¼ãã«åãæãï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãä¿åããï¼
|
---|
| 325 | */
|
---|
| 326 | msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
|
---|
| 327 | stmfd sp!, {r0-r4,r12,lr,pc} /* pcã¯ã¹ãã¼ã¹ç¢ºä¿ã®ãã */ (*1)
|
---|
| 328 |
|
---|
| 329 | /*
|
---|
| 330 | * IRQã¢ã¼ãã«æ»ãã¦ï¼æ»ãçªå°ã¨spsrï¼æ»ãå
|
---|
| 331 | ã®cpsrï¼ãåå¾ããï¼
|
---|
| 332 | */
|
---|
| 333 | msr cpsr_c, #(CPSR_IRQ_MODE AOR CPSR_IRQ_BIT)
|
---|
| 334 | sub r2, lr, #4
|
---|
| 335 | mrs r1, spsr
|
---|
| 336 |
|
---|
| 337 | /*
|
---|
| 338 | * ã¹ã¼ããã¤ã¶ã¢ã¼ãã«åãæãï¼æ»ãçªå°ã¨spsrãä¿åããï¼
|
---|
| 339 | */
|
---|
| 340 | msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
|
---|
| 341 | str r2, [sp,#0x1c] /* æ»ãçªå°ãã¹ã¿ãã¯ã«ä¿å */ (*2)
|
---|
| 342 | push {r1} /* spsrãã¹ã¿ãã¯ã«ä¿å */
|
---|
| 343 | ----------------------------------------
|
---|
| 344 |
|
---|
| 345 | (*1)ã§pcãä¿åããã®ã¯ï¼æ»ãçªå°ãä¿åãã¹ãã¹ãã¼ã¹ã確ä¿ããããã§ã
|
---|
| 346 | ãï¼ãã®æç¹ã§ä¿åããpcã®å¤ã¯ä½¿ããªãï¼(*2)ã§ï¼ç¢ºä¿ããã¹ãã¼ã¹ã«æ»ã
|
---|
| 347 | çªå°ãæ ¼ç´ããï¼æ ¼ç´å
|
---|
| 348 | ã[sp,#0x1c]ã¨ããã®ã¯ï¼ãã®æç¹ã§ã¯spã¯ä¸ã®å³ã®
|
---|
| 349 | ï¼sp+0x04ï¼ãæãã¦ããï¼æ»ãçªå°ã¯ï¼sp+0x20ï¼ã«æ ¼ç´ãããããã§ããï¼
|
---|
| 350 |
|
---|
| 351 | ä¾å¤ãåãä»ããã¨Iããããã»ããããããï¼ä¾å¤ã®å
|
---|
| 352 | ¥å£ãå®è¡ãããæç¹ã§ï¼
|
---|
| 353 | CPSRã®Iãããã¯ã»ããããã¦ããï¼IRQã®å ´åï¼IRQãåãä»ããããã¨ããã
|
---|
| 354 | ã¨ã¯ï¼åä»åã®æç¹ã§ã¯Iãããã¯ã¯ãªã¢ããã¦ããã¯ãã§ããããï¼Fããã
|
---|
| 355 | ã¯ã¯ãªã¢ããã¦ããï¼Iããããã»ããããã¦ããï¼Fããããã¯ãªã¢ããã¦ã
|
---|
| 356 | ãç¶æ³ã¯ä½ããªãããï¼ï¼ãã£ã¦ï¼ä¸è¨ã®ã³ã¼ãã§ï¼Iãããã¨Fãããã¯å¤å
|
---|
| 357 | ããªãï¼
|
---|
| 358 |
|
---|
| 359 | IRQ以å¤ã®ä¾å¤ï¼CPUä¾å¤ãã³ãã©ï¼ã®åºå
|
---|
| 360 | ¥å£ã«ããã¦ã¯ï¼ä¸è¨ã®ã³ã¼ãã«å¯¾ã
|
---|
| 361 | ã¦ï¼æ¬¡ã®ä¿®æ£ãå ããï¼
|
---|
| 362 |
|
---|
| 363 | ã»Iãããã ãã§ã¯ãªãï¼Fããããã»ããããï¼å
|
---|
| 364 | ·ä½çã«ã¯ï¼3ç®æã«ãã
|
---|
| 365 | ãCPSR_IRQ_BITãï¼CPSR_FIQ_IRQ_BITã«ç½®ãæããï¼
|
---|
| 366 |
|
---|
| 367 | ã»æ»ãçªå°ãåå¾ããæã«ï¼lrãã4ãæ¸ç®ããªãï¼å®éã«æ»ãã¹ãçªå°ã«ãªã£
|
---|
| 368 | ãã¦ããã¨ã¯éããªãï¼ï¼
|
---|
| 369 |
|
---|
| 370 | ã»æ»ãçªå°ã¨spsrãåå¾ããæã«ï¼IRQã¢ã¼ãã§ã¯ãªãï¼ãã®CPUä¾å¤ã§é·ç§»ã
|
---|
| 371 | ããã¢ã¼ãã«æ»ãï¼ã¹ã¼ããã¤ã¶ã³ã¼ã«ã®å ´åã¯ï¼æ»ãå¿
|
---|
| 372 | è¦ããªãï¼ï¼
|
---|
| 373 |
|
---|
| 374 | Iãããã ãã§ãªãFããããã»ããããã®ã¯ï¼(1) FIQãåãä»ããã¨Fããã
|
---|
| 375 | ãã»ãããããï¼(2) ãã®ä»ã®ä¾å¤ã¯Fããããã»ããããã¦ããç¶æ
|
---|
| 376 | ã§ãåã
|
---|
| 377 | ä»ããããï¼ã®2ã¤ã®çç±ããã§ããï¼ãã ãï¼Fããããã¯ãªã¢ããã¦ããæ
|
---|
| 378 | ã«çºçããï¼FIQ以å¤ã®ï¼ä¾å¤ã§ã¯ï¼ãã®å¦çã«ããFããããã»ãããããã
|
---|
| 379 | ã¨ã«ãªãï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ããã¹ã¯ãããæéãé·ããªããï¼CPUä¾å¤
|
---|
| 380 | ãã³ãã©ãå¼ã³åºãã¾ã§ã®çæéãªã®ã§ï¼è¨±å®¹ãããã¨ã«ããï¼
|
---|
| 381 |
|
---|
| 382 | 3ã¤ãã®å¦çï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã«åãæãã¨ï¼æ»ãçªå°ã¨spsrã®ä¿åï¼ã¯ï¼
|
---|
| 383 | ï¼IRQ以å¤ã®ï¼ãã¹ã¦ã®ä¾å¤ã§å
|
---|
| 384 | ±éã§ããããï¼exc_handler_1ã®å
|
---|
| 385 | é ã§å®æ½ã
|
---|
| 386 | ããã¨ãã§ãããï¼ARMv6以éã®ããã»ããµã®å ´åã¨ã®å
|
---|
| 387 | ±éåã®ããã«ï¼ä¾å¤æ¯
|
---|
| 388 | ã«åå¥ã«å®æ½ããï¼
|
---|
| 389 |
|
---|
| 390 | âARMv6以éã®ããã»ããµã®å ´å
|
---|
| 391 |
|
---|
| 392 | ä¾å¤ããã®å¾©å¸°ã«rfeå½ä»¤ãç¨ããã¨ï¼ä¾å¤ã®åºå£ã¯ï¼æ¬¡ã®ãããªã³ã¼ãã¨ãªãï¼
|
---|
| 393 |
|
---|
| 394 | ----------------------------------------
|
---|
| 395 | ldmfd sp!, {r0-r4,r12,lr}
|
---|
| 396 | rfefd sp!
|
---|
| 397 | ----------------------------------------
|
---|
| 398 |
|
---|
| 399 | ããã§ï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã«å ãã¦r4ã復帰ãã¦ããã®ã¯ï¼ä¾å¤ã®åºå
|
---|
| 400 | ¥å£å¦
|
---|
| 401 | çã§ã¹ã¯ã©ããã¬ã¸ã¹ã¿ä»¥å¤ã«ä½¿ããã¬ã¸ã¹ã¿ã¨ãã¦ï¼r4ã確ä¿ããããã§ã
|
---|
| 402 | ãï¼
|
---|
| 403 |
|
---|
| 404 | ãã®åºå£ãå®è¡ããæç¹ã§ï¼ã¹ã¿ãã¯ã¯æ¬¡ã®ããã«ãªã£ã¦ããå¿
|
---|
| 405 | è¦ãããï¼ã¬
|
---|
| 406 | ã¸ã¹ã¿ã¯ããããCPUä¾å¤çºçæã®å¤ã示ãï¼ä¾ãã°ï¼CPSRã¯CPUä¾å¤çºçæã®
|
---|
| 407 | CPSRã示ãï¼ï¼
|
---|
| 408 |
|
---|
| 409 | +----------------+ <- sp
|
---|
| 410 | | r0 |
|
---|
| 411 | +----------------+ <- sp+0x04
|
---|
| 412 | | r1 |
|
---|
| 413 | +----------------+ <- sp+0x08
|
---|
| 414 | | r2 |
|
---|
| 415 | +----------------+ <- sp+0x0c
|
---|
| 416 | | r3 |
|
---|
| 417 | +----------------+ <- sp+0x10
|
---|
| 418 | | r4 |
|
---|
| 419 | +----------------+ <- sp+0x14
|
---|
| 420 | | r12 |
|
---|
| 421 | +----------------+ <- sp+0x18
|
---|
| 422 | | lr |
|
---|
| 423 | +----------------+ <- sp+0x1c
|
---|
| 424 | | æ»ãçªå° |
|
---|
| 425 | +----------------+ <- sp+0x20
|
---|
| 426 | | cpsr |
|
---|
| 427 | +----------------+
|
---|
| 428 |
|
---|
| 429 | ããã«å¯¾å¿ããä¾å¤ã®å
|
---|
| 430 | ¥å£ã¯ï¼æ¬¡ã®ãããªã³ã¼ãã¨ãªãï¼IRQã®å ´åï¼ï¼
|
---|
| 431 |
|
---|
| 432 | ----------------------------------------
|
---|
| 433 | /*
|
---|
| 434 | * æ»ãå
|
---|
| 435 | ï¼lrï¼ã¨spsrï¼cpsr_svcï¼ãã¹ã¼ããã¤ã¶ã¢ã¼ãã®ã¹ã¿ãã¯ã«
|
---|
| 436 | * ä¿åããï¼
|
---|
| 437 | */
|
---|
| 438 | sub lr, lr, #4 /* æ»ãçªå°ã®ç®åº */
|
---|
| 439 | srsfd #CPSR_SVC_MODE!
|
---|
| 440 |
|
---|
| 441 | /*
|
---|
| 442 | * ã¹ã¼ããã¤ã¶ã¢ã¼ãã«åãæãï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãä¿åããï¼
|
---|
| 443 | */
|
---|
| 444 | cps #CPSR_SVC_MODE
|
---|
| 445 | stmfd sp!, {r0-r4,r12,lr}
|
---|
| 446 | ----------------------------------------
|
---|
| 447 |
|
---|
| 448 | IRQ以å¤ã®ä¾å¤ï¼CPUä¾å¤ãã³ãã©ï¼ã®åºå
|
---|
| 449 | ¥å£ã«ããã¦ã¯ï¼ä¸è¨ã®ã³ã¼ãã«å¯¾ã
|
---|
| 450 | ã¦ï¼æ¬¡ã®ä¿®æ£ãå ããï¼
|
---|
| 451 |
|
---|
| 452 | ã»æ»ãçªå°ã®ç®åºã®ããã«lrãã4ãæ¸ç®ããªãï¼å®éã«æ»ãã¹ãçªå°ã«ãªã£ã¦
|
---|
| 453 | ãããã¨ã¯éããªãï¼ï¼
|
---|
| 454 |
|
---|
| 455 | å¾åã®å¦çï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã¸ã®åæãã¨ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã®ä¿åï¼ã¯
|
---|
| 456 | å
|
---|
| 457 | ±éã ãï¼ãã®ç´å¾ã§CPUä¾å¤ãã³ãã©çªå·ãæ ¼ç´ããããã«r4ã使ãããï¼
|
---|
| 458 | exc_handler_1ã®æ¹ã¸ç§»åã§ããªãï¼
|
---|
| 459 |
|
---|
| 460 | âå²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
| 461 | ¥å£å¦ç
|
---|
| 462 |
|
---|
| 463 | ASP3ã«ã¼ãã« ãã¼ãã£ã³ã°ã¬ã¤ãã«å¾ã£ã¦ï¼å²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
| 464 | ¥å£å¦çã®å®
|
---|
| 465 | è£
|
---|
| 466 | æ¹æ³ãæ¤è¨ãã¦ããï¼
|
---|
| 467 |
|
---|
| 468 | ----------------------------------------
|
---|
| 469 | void
|
---|
| 470 | <å²è¾¼ã¿ã®åºå
|
---|
| 471 | ¥å£å¦ç>(void)
|
---|
| 472 | {
|
---|
| 473 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
| 474 | ã«ãã ⦠(*d)
|
---|
| 475 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
| 476 | ----------------------------------------
|
---|
| 477 |
|
---|
| 478 | ARMã³ã¢ã¯ï¼ä¾å¤ãåãä»ããã¨ï¼CPSRä¸ã®Iããããã»ãããã¦å²è¾¼ã¿ãç¦æ¢
|
---|
| 479 | ããããï¼(*d)ã®å¦çã¯å¿
|
---|
| 480 | è¦ãªãï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã®ä¿åã¯ï¼ä¾å¤ã®å
|
---|
| 481 | ¥å£
|
---|
| 482 | ã§å®è£
|
---|
| 483 | æ¸ã¿ã§ããï¼
|
---|
| 484 |
|
---|
| 485 | ----------------------------------------
|
---|
| 486 | if (å²è¾¼ã¿ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
| 487 | ----------------------------------------
|
---|
| 488 |
|
---|
| 489 | ã¾ãï¼ä¾å¤ãã¹ãã«ã¦ã³ããã¤ã³ã¯ãªã¡ã³ãããï¼ã¤ã³ã¯ãªã¡ã³ãå¾ã®å¤ã1ã§
|
---|
| 490 | ãªãå ´åã«ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§ã®å²è¾¼ã¿çºçã§ããããï¼ãã®å¾ã®{}
|
---|
| 491 | å
|
---|
| 492 | ã®å¦çãã¹ãããããï¼irq_handler_1ã«åå²ï¼ï¼
|
---|
| 493 |
|
---|
| 494 | ----------------------------------------
|
---|
| 495 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 496 | ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢ */
|
---|
| 497 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 498 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼
|
---|
| 499 | éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
| 500 | }
|
---|
| 501 | ----------------------------------------
|
---|
| 502 |
|
---|
| 503 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼åãæãåã®ã¹ã¿ã
|
---|
| 504 | ã¯ãã¤ã³ã¿ãåãæãå¾ã®ã¹ã¿ãã¯ä¸ã«ä¿åããï¼ãããã®å¦çã®å¾ã«ï¼
|
---|
| 505 | irq_handler_1ã©ãã«ãç½®ãï¼
|
---|
| 506 |
|
---|
| 507 | ----------------------------------------
|
---|
| 508 | å²è¾¼ã¿åªå
|
---|
| 509 | 度ãã¹ã¯ãï¼åãä»ããå²è¾¼ã¿ã®å²è¾¼ã¿åªå
|
---|
| 510 | 度ã«è¨å®ãã
|
---|
| 511 |
|
---|
| 512 | CPUããã¯è§£é¤ç¶æ
|
---|
| 513 | ã«ããï¼åãä»ããå²è¾¼ã¿ãããåªå
|
---|
| 514 | 度ã®é«ãå²è¾¼ã¿ã
|
---|
| 515 | åãä»ããããã«ããï¼
|
---|
| 516 |
|
---|
| 517 | å²è¾¼ã¿ãã³ãã©ã®å
|
---|
| 518 | ¥å£ã§å¿
|
---|
| 519 | è¦ãªIRCã®æä½ãè¡ãï¼å²è¾¼ã¿è¦æ±ã©ã¤ã³ãã¨ã
|
---|
| 520 | ã¸ããªã¬ã§ããå ´åã®ããªã¬ãããå²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ãªã©ï¼
|
---|
| 521 | ----------------------------------------
|
---|
| 522 |
|
---|
| 523 | å²è¾¼ã¿åªå
|
---|
| 524 | 度ãã¹ã¯ã®ç®¡çã¯ï¼ãããä¾åã®å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦è¡ã
|
---|
| 525 | å¿
|
---|
| 526 | è¦ãããããï¼ä¸è¨ã®å¦çã®é åºãä¸é¨å¤æ´ãï¼ä¸è¨ã®å¦çã®ä¸ã§ãCPUãã
|
---|
| 527 | ã¯è§£é¤ç¶æ
|
---|
| 528 | ã«ããã以å¤ã®å¦çã¯ï¼ãããä¾åé¨ã®irc_begin_intã§è¡ããã¨ã¨
|
---|
| 529 | ããï¼ããªãã¡ï¼irc_begin_intã¯ï¼å²è¾¼ã¿åªå
|
---|
| 530 | 度ãã¹ã¯ãåãä»ããå²è¾¼ã¿è¦
|
---|
| 531 | æ±ã®å²è¾¼ã¿åªå
|
---|
| 532 | 度ã«è¨å®ãï¼å²è¾¼ã¿ãã³ãã©ã®å
|
---|
| 533 | ¥å£ã§å¿
|
---|
| 534 | è¦ãªIRCã®æä½ãè¡ãï¼
|
---|
| 535 | ã¾ãirc_begin_intã¯ï¼å²è¾¼ã¿çªå·ï¼0ããå§ã¾ãçªå·ã§ï¼å²è¾¼ã¿ãã³ãã©çªå·
|
---|
| 536 | ã¨ä¸è´ãããï¼ãè¿ãããã«ããï¼ã¹ããªã¢ã¹å²è¾¼ã¿ã®å ´åã«ã¯ï¼
|
---|
| 537 | irc_begin_intã¯å²è¾¼ã¿çªå·ã®æ大å¤ãã大ããå¤ãè¿ããã®ã¨ãï¼ãã®å ´åã«
|
---|
| 538 | ã¯ï¼å²è¾¼ã¿ãã³ãã©ã®å¼åºãå¦çãã¹ãããããï¼irq_handler_2ã«åå²ï¼ï¼
|
---|
| 539 |
|
---|
| 540 | ãã®å¾ï¼irc_begin_intã§è¡ããªãã£ããCPUããã¯è§£é¤ç¶æ
|
---|
| 541 | ã«ãããå¦çãè¡
|
---|
| 542 | ãï¼å
|
---|
| 543 | ·ä½çã«ã¯ï¼CPSRä¸ã®Fãããã¨Iãããï¼ãã ãï¼TOPPERS_SAFEG_SECURE
|
---|
| 544 | ã®å ´åã¯ï¼Fãããã®ã¿ï¼ãã¯ãªã¢ãã¦ï¼å²è¾¼ã¿ã許å¯ããï¼
|
---|
| 545 |
|
---|
| 546 | ----------------------------------------
|
---|
| 547 | #ifdef LOG_INH_ENTER
|
---|
| 548 | log_inh_enter(å²è¾¼ã¿ãã³ãã©çªå·);
|
---|
| 549 | #endif /* LOG_INH_ENTER */
|
---|
| 550 | å²è¾¼ã¿ãã³ãã©ãå¼ã³åºã
|
---|
| 551 | #ifdef LOG_INH_LEAVE
|
---|
| 552 | log_inh_leave(å²è¾¼ã¿ãã³ãã©çªå·);
|
---|
| 553 | #endif /* LOG_INH_LEAVE */
|
---|
| 554 | ----------------------------------------
|
---|
| 555 |
|
---|
| 556 | å²è¾¼ã¿ãã³ãã©ãã¼ãã«ï¼inh_tableï¼ããå²è¾¼ã¿ãã³ãã©ã®çªå°ãåãåºãã¦
|
---|
| 557 | å¼ã³åºãï¼
|
---|
| 558 |
|
---|
| 559 | ----------------------------------------
|
---|
| 560 | å²è¾¼ã¿ãã³ãã©ã®åºå£ã§å¿
|
---|
| 561 | è¦ãªIRCã®æä½ãè¡ãï¼IRCã«å¯¾ããå²è¾¼ã¿å¦ç
|
---|
| 562 | ã®çµäºéç¥ãªã©ï¼
|
---|
| 563 |
|
---|
| 564 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
| 565 | ã«ãã
|
---|
| 566 |
|
---|
| 567 | å²è¾¼ã¿åªå
|
---|
| 568 | 度ãã¹ã¯ãï¼å²è¾¼ã¿ãåãä»ããåã®å¤ã«æ»ã ⦠(*e)
|
---|
| 569 | ----------------------------------------
|
---|
| 570 |
|
---|
| 571 | å²è¾¼ã¿ãã³ãã©ã®å¼åºãåã®å¦çã®é åºãä¸é¨å¤æ´ããã®ã«å¯¾å¿ãã¦ï¼ã¾ãï¼
|
---|
| 572 | ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããï¼å
|
---|
| 573 | ·ä½çã«ã¯ï¼CPSRä¸ã®Iãããï¼ãã ãï¼
|
---|
| 574 | TOPPERS_SAFEG_SECUREã®å ´åã¯ï¼Fããããï¼ãã»ããããï¼ãã®å¦çã®å¾ã«ï¼
|
---|
| 575 | irq_handler_2ã©ãã«ãç½®ãï¼
|
---|
| 576 |
|
---|
| 577 | 次ã«ï¼ãããä¾åé¨ã®irc_end_intãå¼ã³åºãï¼irc_end_intã§ã¯ï¼å²è¾¼ã¿ãã³
|
---|
| 578 | ãã©ã®åºå£ã§å¿
|
---|
| 579 | è¦ãªIRCã®æä½ãè¡ãï¼å²è¾¼ã¿åªå
|
---|
| 580 | 度ãã¹ã¯ãå²è¾¼ã¿å¦çåã®ç¶
|
---|
| 581 | æ
|
---|
| 582 | ã«æ»ãï¼
|
---|
| 583 |
|
---|
| 584 | ã³ã¢ä¾åé¨ããã¯ï¼irc_end_intã«ãã©ã¡ã¼ã¿ã渡ããªãããï¼irc_end_intã®
|
---|
| 585 | ä¸ã§å¿
|
---|
| 586 | è¦ãªæ
|
---|
| 587 | å ±ï¼ä¾ãã°ï¼å²è¾¼ã¿çªå·ï¼ã¯ï¼irc_begin_intã§ã¹ã¿ãã¯ä¸ã«ä¿å
|
---|
| 588 | ãã¦ããå¿
|
---|
| 589 | è¦ãããï¼ãããå¯è½ã«ããããã«ï¼irc_begin_intãå¼ã³åºããã
|
---|
| 590 | ãï¼irc_end_intãå¿
|
---|
| 591 | ãå¼ã³åºãããããã«ãã¦ããï¼ã¹ããªã¢ã¹å²è¾¼ã¿ã®å ´å
|
---|
| 592 | ã«ãï¼irc_end_intãå¼ã³åºãããã«ãã¦ããï¼
|
---|
| 593 |
|
---|
| 594 | ãµãã«ã¼ãã³ï¼irc_begin_intï¼ã®ä¸ã§ã¹ã¿ãã¯ã«ç©ã¿å¢ãã®ã¯ï¼ä¸è¬ã«ã¯æ¡ç¨
|
---|
| 595 | ããªãããã°ã©ãã³ã°ææ³ã§ãããï¼irc_begin_intããirc_end_intã«æ¸¡ãæ
|
---|
| 596 |
|
---|
| 597 | å ±ã¯ï¼ãããä¾åé¨ã«ãã£ã¦ç°ãªããã¨ï¼ARMã§ã¯æ»ãçªå°ãlrã«ä¿åãããã
|
---|
| 598 | ã¹ã¿ãã¯ã«ç©ã¿å¢ãã®ã容æã§ãããã¨ããï¼ãã®æ¹æ³ãæ¡ç¨ãããã¨ã«ããï¼
|
---|
| 599 |
|
---|
| 600 | ----------------------------------------
|
---|
| 601 | ret_int:
|
---|
| 602 | if (å²è¾¼ã¿ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
| 603 | ----------------------------------------
|
---|
| 604 |
|
---|
| 605 | ã¾ãï¼ä¾å¤ãã¹ãã«ã¦ã³ãããã¯ãªã¡ã³ãããï¼ãã¯ãªã¡ã³ãå¾ã®å¤ã0ã§ãªã
|
---|
| 606 | å ´åã«ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§ã®å²è¾¼ã¿çºçã§ããããï¼{}å
|
---|
| 607 | ã®å¦çãã¹
|
---|
| 608 | ãããããï¼irq_handler_3ã«åå²ï¼ï¼
|
---|
| 609 |
|
---|
| 610 | ----------------------------------------
|
---|
| 611 | ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
| 612 | ⦠(*f)
|
---|
| 613 | ----------------------------------------
|
---|
| 614 |
|
---|
| 615 | ã¿ã¹ã¯ã³ã³ããã¹ãã®ã¹ã¿ãã¯ãã¤ã³ã¿ã¯ï¼ãã®æç¹ã§ï¼ã¹ã¿ãã¯ã®å
|
---|
| 616 | é ã«ä¿
|
---|
| 617 | åããã¦ããããï¼ã¹ã¿ãã¯ã®å
|
---|
| 618 | é ãåãåºãã¦ï¼ã¹ã¿ãã¯ãã¤ã³ã¿ã«è¨å®ã
|
---|
| 619 | ãï¼
|
---|
| 620 |
|
---|
| 621 | ----------------------------------------
|
---|
| 622 | if (p_runtsk != p_schedtsk) {
|
---|
| 623 | ----------------------------------------
|
---|
| 624 |
|
---|
| 625 | ãã®å¦çã®åã«ï¼ret_int_1ã©ãã«ãç½®ãï¼p_runtskã¨p_schedtskãä¸è´ããªã
|
---|
| 626 | æã¯ï¼irq_handler_4ã¸åå²ããï¼
|
---|
| 627 |
|
---|
| 628 | ----------------------------------------
|
---|
| 629 | CPUããã¯ç¶æ
|
---|
| 630 | ã«ãã ⦠(*g)
|
---|
| 631 | å²è¾¼ã¿åªå
|
---|
| 632 | 度ãã¹ã¯ã¯ï¼å
|
---|
| 633 | ¨è§£é¤ç¶æ
|
---|
| 634 | ï¼TIPM_ENAALLï¼ã«ãªã£ã¦
|
---|
| 635 | ããªããã°ãªããªã ⦠(*h)
|
---|
| 636 | ----------------------------------------
|
---|
| 637 |
|
---|
| 638 | (*g)ã®å¦çã¯ï¼irc_end_intãå¼ã³åºãåã«è¡ã£ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢
|
---|
| 639 | ããå¦çã§ååã§ããããï¼ããã§ã¯è¡ããªãï¼(*h)ã«ã¤ãã¦ã¯ï¼
|
---|
| 640 | irc_end_intã§å²è¾¼ã¿åªå
|
---|
| 641 | 度ãã¹ã¯ãå²è¾¼ã¿å¦çåã®ç¶æ
|
---|
| 642 | ã«æ»ããã¨ã§ï¼æºãã
|
---|
| 643 | ãã¦ããã¯ãã§ããï¼
|
---|
| 644 |
|
---|
| 645 | ----------------------------------------
|
---|
| 646 | if (p_runtsk != NULL) {
|
---|
| 647 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
| 648 | ã¹ã¿ãã¯ãã¤ã³ã¿ãèªã¿ã¹ã¯ï¼p_runtskï¼ã®TCBã«ä¿åãã
|
---|
| 649 | ret_int_rãï¼å®è¡åéçªå°ã¨ãã¦èªã¿ã¹ã¯ã®TCBã«ä¿åãã ⦠(*a)
|
---|
| 650 | #ifdef LOG_DSP_ENTER
|
---|
| 651 | log_dsp_enter(p_runtsk);
|
---|
| 652 | #endif /* LOG_DSP_ENTER */
|
---|
| 653 | }
|
---|
| 654 | dispatcherã«åå²ãã
|
---|
| 655 |
|
---|
| 656 | ret_int_r:
|
---|
| 657 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
| 658 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 659 | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
| 660 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 661 | }
|
---|
| 662 | ----------------------------------------
|
---|
| 663 |
|
---|
| 664 | ãã®è¾ºãã¯ç´ ç´ã«å®è£
|
---|
| 665 | ã§ããï¼
|
---|
| 666 |
|
---|
| 667 | ----------------------------------------
|
---|
| 668 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 669 | else {
|
---|
| 670 | if (p_runtsk != NULL) {
|
---|
| 671 | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
| 672 | }
|
---|
| 673 | }
|
---|
| 674 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 675 | }
|
---|
| 676 | ----------------------------------------
|
---|
| 677 |
|
---|
| 678 | ãã®elseé¨ã¯ï¼p_runtskã¨p_schedtskãä¸è´ãã¦ããï¼ã¿ã¹ã¯åæããå¿
|
---|
| 679 | è¦ãª
|
---|
| 680 | ãã£ãå ´åã®å¦çã§ããï¼elseé¨ã®{}ã®ä¸ã®å¦çã®å
|
---|
| 681 | é ã«ï¼irq_handler_4ã©ã
|
---|
| 682 | ã«ãç½®ãï¼ãªã¼ãã©ã³ãã³ãã©ããµãã¼ãããªãå ´åã¯ï¼irq_handler_4ã®ã©ã
|
---|
| 683 | ã«ãï¼irq_handler_3ã¨åãå ´æï¼å¾è¿°ï¼ã«ç½®ãï¼ããã«ããï¼ä¸ã®å¦çãã¹ãã
|
---|
| 684 | ãããï¼
|
---|
| 685 |
|
---|
| 686 | ----------------------------------------
|
---|
| 687 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
| 688 | å²è¾¼ã¿å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUããã¯è§£é¤ç¶æ
|
---|
| 689 | ã«æ»ãããã«æºåãã
|
---|
| 690 | å²è¾¼ã¿å¦çããã®ãªã¿ã¼ã³
|
---|
| 691 | }
|
---|
| 692 | ----------------------------------------
|
---|
| 693 |
|
---|
| 694 | ãããã®å¦çã®åã«ï¼irq_handler_3ã®ã©ãã«ãç½®ãï¼ãããã®å¦çã¯ï¼ä¾å¤ã
|
---|
| 695 | ãã®åºå£ã§è¡ãï¼
|
---|
| 696 |
|
---|
| 697 | âCPUä¾å¤ãã³ãã©ã®åºå
|
---|
| 698 | ¥å£å¦ç
|
---|
| 699 |
|
---|
| 700 | ASP3ã«ã¼ãã« ãã¼ãã£ã³ã°ã¬ã¤ãã«å¾ã£ã¦ï¼CPUä¾å¤ãã³ãã©ã®åºå
|
---|
| 701 | ¥å£å¦çã®
|
---|
| 702 | å®è£
|
---|
| 703 | æ¹æ³ãæ¤è¨ãã¦ããï¼
|
---|
| 704 |
|
---|
| 705 | ----------------------------------------
|
---|
| 706 | void
|
---|
| 707 | <CPUä¾å¤ã®åºå
|
---|
| 708 | ¥å£å¦ç>(void)
|
---|
| 709 | {
|
---|
| 710 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
| 711 | ----------------------------------------
|
---|
| 712 |
|
---|
| 713 | ãã®å¦çã¯ï¼ä¾å¤ã®å
|
---|
| 714 | ¥å£ã§å®è£
|
---|
| 715 | æ¸ã¿ã§ããï¼
|
---|
| 716 |
|
---|
| 717 | ----------------------------------------
|
---|
| 718 | CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
| 719 | å ±ãã¹ã¿ãã¯ã«ä¿åãã ⦠(*j)
|
---|
| 720 | ãã®æç¹ã§ã®ã¹ã¿ãã¯ãã¤ã³ã¿Â±nãï¼CPUä¾å¤ã®æ
|
---|
| 721 | å ±ãè¨æ¶ãã¦ããé åã®
|
---|
| 722 | å
|
---|
| 723 | é çªå°ã¨ããï¼å¿
|
---|
| 724 | è¦ãªãä¿åããï¼
|
---|
| 725 | ----------------------------------------
|
---|
| 726 |
|
---|
| 727 | exc_sense_intmaskãå®ç¾ããããã«ï¼CPUä¾å¤ãçºçããæç¹ã§ã®ã³ã³ããã¹
|
---|
| 728 | ãã¨å²è¾¼ã¿åªå
|
---|
| 729 | 度ãã¹ã¯ãå¿
|
---|
| 730 | è¦ã¨ãªãããï¼ç¾å¨ã®å²è¾¼ã¿åªå
|
---|
| 731 | 度ãã¹ã¯ï¼CPUä¾
|
---|
| 732 | å¤ã®çºçã§å²è¾¼ã¿åªå
|
---|
| 733 | 度ãã¹ã¯ãå¤ãããã¨ã¯ãªãããï¼ããã§è¯ãï¼ã¨ä¾å¤
|
---|
| 734 | ãã¹ãã«ã¦ã³ããã¹ã¿ãã¯ã«ä¿åããï¼ã¾ãï¼CPUä¾å¤ã®æ
|
---|
| 735 | å ±ãè¨æ¶ãã¦ããé
|
---|
| 736 | åã®å
|
---|
| 737 | é çªå°ã¨ãã¦ï¼ãã®æç¹ã§ã®ã¹ã¿ãã¯ãã¤ã³ã¿ãï¼ã¬ã¸ã¹ã¿ã«ä¿åãã¦
|
---|
| 738 | ããï¼
|
---|
| 739 |
|
---|
| 740 | ----------------------------------------
|
---|
| 741 | if (ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤) {
|
---|
| 742 | ----------------------------------------
|
---|
| 743 |
|
---|
| 744 | ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã¯ï¼ã«ã¼ãã«å®è¡ä¸ï¼å
|
---|
| 745 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
| 746 | ï¼CPUãã
|
---|
| 747 | ã¯ç¶æ
|
---|
| 748 | ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©å®è¡ä¸ã«çºçããCPUä¾å¤ã§ããï¼
|
---|
| 749 | ARMã³ã¢ã®å ´åã¯ï¼æ»ãå
|
---|
| 750 | ã®CPSRã®IããããFãããã®ãããããã»ããããã¦
|
---|
| 751 | ãããªãï¼ããã«è©²å½ããï¼
|
---|
| 752 |
|
---|
| 753 | ããã§ï¼ä¾å¤ãã¬ã¼ã ããæ»ãå
|
---|
| 754 | ã®CPSRãåãåºãï¼IããããFãããã®ãã
|
---|
| 755 | ãããã»ããããã¦ããå ´åã«ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã®åºå
|
---|
| 756 | ¥å£å¦ç
|
---|
| 757 | ï¼nk_exc_handler_1ï¼ã«åå²ããï¼
|
---|
| 758 |
|
---|
| 759 | ----------------------------------------
|
---|
| 760 | if (CPUä¾å¤ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
| 761 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼
|
---|
| 762 | éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã ⦠(*k)
|
---|
| 763 | }
|
---|
| 764 | ----------------------------------------
|
---|
| 765 |
|
---|
| 766 | ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã®åºå
|
---|
| 767 | ¥å£å¦çï¼nk_exc_handler_1ï¼ã§ã¯ï¼ã¾ãï¼ä¾å¤
|
---|
| 768 | ãã¹ãã«ã¦ã³ããã¤ã³ã¯ãªã¡ã³ãããï¼CPUä¾å¤çºçåãã¿ã¹ã¯ã³ã³ããã¹ããª
|
---|
| 769 | ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼åãæãåã®ã¹ã¿ãã¯ã
|
---|
| 770 | ã¤ã³ã¿ãåãæãå¾ã®ã¹ã¿ãã¯ä¸ã«ä¿åããï¼
|
---|
| 771 |
|
---|
| 772 | ----------------------------------------
|
---|
| 773 | ã·ã¹ãã ç¶æ
|
---|
| 774 | ï¼ã³ã³ããã¹ãã¯é¤ãï¼ãï¼CPUä¾å¤çºçæã®ç¶æ
|
---|
| 775 | ã«ãã
|
---|
| 776 | ----------------------------------------
|
---|
| 777 |
|
---|
| 778 | ã·ã¹ãã ç¶æ
|
---|
| 779 | ï¼ã³ã³ããã¹ãã¯é¤ãï¼ãCPUä¾å¤çºçæã®ç¶æ
|
---|
| 780 | ã«ããã«ã¯ï¼ã¹ã¼
|
---|
| 781 | ããã¤ã¶ã¢ã¼ãã«åãæãï¼Iãã©ã°ã¨Fãã©ã°ã®ç¶æ
|
---|
| 782 | ãCPUä¾å¤çºçæã®ç¶æ
|
---|
| 783 | ã«
|
---|
| 784 | æ»ãï¼
|
---|
| 785 |
|
---|
| 786 | ----------------------------------------
|
---|
| 787 | CPUä¾å¤ãã³ãã©ãï¼CPUä¾å¤ã®æ
|
---|
| 788 | å ±ãè¨æ¶ãã¦ããé åã®å
|
---|
| 789 | é çªå°ã
|
---|
| 790 | ãã©ã¡ã¼ã¿ï¼p_excinfï¼ã¨ãã¦å¼ã³åºã
|
---|
| 791 | ----------------------------------------
|
---|
| 792 |
|
---|
| 793 | CPUä¾å¤ãã³ãã©ãã¼ãã«ï¼exc_tableï¼ããCPUä¾å¤ãã³ãã©ã®çªå°ãåãåºãï¼
|
---|
| 794 | CPUä¾å¤ã®æ
|
---|
| 795 | å ±ãè¨æ¶ãã¦ããé åã®å
|
---|
| 796 | é çªå°ã第1ãã©ã¡ã¼ã¿ï¼CPUä¾å¤ãã³ã
|
---|
| 797 | ã©çªå·ã第2ãã©ã¡ã¼ã¿ã¨ãã¦å¼ã³åºãï¼ç¬¬2ãã©ã¡ã¼ã¿ã«CPUä¾å¤ãã³ãã©çªå·
|
---|
| 798 | ã渡ãã®ã¯ï¼default_exc_handlerã§å²è¾¼ã¿ãã³ãã©çªå·ã表示ã§ããããã«ã
|
---|
| 799 | ãããã§ï¼ARMã³ã¢ä¾åé¨ã®ç¬èªæ¡å¼µã§ããï¼
|
---|
| 800 |
|
---|
| 801 | ----------------------------------------
|
---|
| 802 | if (CPUä¾å¤ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
| 803 | ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼
|
---|
| 804 | ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã ⦠(*k)
|
---|
| 805 | }
|
---|
| 806 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUä¾å¤çºçæã®ã·ã¹ãã ç¶æ
|
---|
| 807 | ã«
|
---|
| 808 | æ»ãããã«æºåãã
|
---|
| 809 | }
|
---|
| 810 | CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
| 811 | å ±ãã¹ã¿ãã¯ä¸ããæ¨ã¦ã
|
---|
| 812 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
| 813 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³
|
---|
| 814 | }
|
---|
| 815 | ----------------------------------------
|
---|
| 816 |
|
---|
| 817 | ä¾å¤ãã¹ãã«ã¦ã³ãããã¯ãªã¡ã³ããï¼0ã«ãªã£ãå ´åã«ã¯ï¼ã¿ã¹ã¯ç¨ã®ã¹ã¿ã
|
---|
| 818 | ã¯ã«æ»ãï¼ãã®å¾ï¼CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
| 819 | å ±ãã¹ã¿ã
|
---|
| 820 | ã¯ä¸ããæ¨ã¦ï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã復帰ããå¾ï¼ä¾å¤ãããªã¿ã¼ã³ããï¼
|
---|
| 821 |
|
---|
| 822 | ----------------------------------------
|
---|
| 823 | else {
|
---|
| 824 | if (CPUä¾å¤ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
| 825 | ----------------------------------------
|
---|
| 826 |
|
---|
| 827 | ã«ã¼ãã«ç®¡çã®CPUä¾å¤ã®åºå
|
---|
| 828 | ¥å£å¦çã§ã¯ï¼ã¾ãï¼ä¾å¤ãã¹ãã«ã¦ã³ããã¤ã³ã¯
|
---|
| 829 | ãªã¡ã³ãããï¼CPUä¾å¤çºçåãéã¿ã¹ã¯ã³ã³ããã¹ããªãï¼ãã®å¾ã®{}å
|
---|
| 830 | ã®å¦
|
---|
| 831 | çãã¹ãããããï¼exc_handler_2ã«åå²ï¼ï¼
|
---|
| 832 |
|
---|
| 833 | ----------------------------------------
|
---|
| 834 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
| 835 | ã«ãã
|
---|
| 836 | ----------------------------------------
|
---|
| 837 |
|
---|
| 838 | ARMã³ã¢ã§ã¯ï¼ä¾å¤ã®åä»ã«ããCPSRã®Iããããã»ãããããããï¼ãã®å¦ç
|
---|
| 839 | ã¯å¿
|
---|
| 840 | è¦ãªãï¼
|
---|
| 841 |
|
---|
| 842 | ----------------------------------------
|
---|
| 843 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 844 | ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢ */
|
---|
| 845 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 846 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼
|
---|
| 847 | éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
| 848 | }
|
---|
| 849 | ----------------------------------------
|
---|
| 850 |
|
---|
| 851 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼åãæãåã®ã¹ã¿ã
|
---|
| 852 | ã¯ãã¤ã³ã¿ãåãæãå¾ã®ã¹ã¿ãã¯ä¸ã«ä¿åããï¼ãããã®å¦çã®å¾ã«ï¼
|
---|
| 853 | exc_handler_2ã©ãã«ãç½®ãï¼
|
---|
| 854 |
|
---|
| 855 | ----------------------------------------
|
---|
| 856 | å²è¾¼ã¿åªå
|
---|
| 857 | 度ãã¹ã¯ãï¼CPUä¾å¤çºçæã®å¤ã«è¨å®ãã ⦠(*l)
|
---|
| 858 | ----------------------------------------
|
---|
| 859 |
|
---|
| 860 | ãããä¾åé¨ã®irc_begin_excãå¼ã³åºãï¼å¿
|
---|
| 861 | è¦ã§ããã°ï¼å²è¾¼ã¿åªå
|
---|
| 862 | 度ãã¹ã¯
|
---|
| 863 | ãCPUä¾å¤çºçæã®å¤ã«è¨å®ããï¼ã¾ãï¼irc_end_excã§å¿
|
---|
| 864 | è¦ãªæ
|
---|
| 865 | å ±ãã¹ã¿ãã¯
|
---|
| 866 | ã«ä¿åããï¼
|
---|
| 867 |
|
---|
| 868 | ----------------------------------------
|
---|
| 869 | CPUããã¯è§£é¤ç¶æ
|
---|
| 870 | ã«ããï¼CPUä¾å¤çºçæã®å²è¾¼ã¿åªå
|
---|
| 871 | 度ãã¹ã¯ããã
|
---|
| 872 | åªå
|
---|
| 873 | 度ã®é«ãå²è¾¼ã¿ãåãä»ããããã«ããï¼
|
---|
| 874 | ----------------------------------------
|
---|
| 875 |
|
---|
| 876 | å²è¾¼ã¿ã許å¯ãã¦ï¼CPUããã¯è§£é¤ç¶æ
|
---|
| 877 | ã«ããï¼
|
---|
| 878 |
|
---|
| 879 | ----------------------------------------
|
---|
| 880 | #ifdef LOG_EXC_ENTER
|
---|
| 881 | log_exc_enter(CPUä¾å¤ãã³ãã©çªå·);
|
---|
| 882 | #endif /* LOG_EXC_ENTER */
|
---|
| 883 | CPUä¾å¤ãã³ãã©ãï¼CPUä¾å¤ã®æ
|
---|
| 884 | å ±ãè¨æ¶ãã¦ããé åã®å
|
---|
| 885 | é çªå°ã
|
---|
| 886 | ãã©ã¡ã¼ã¿ï¼p_excinfï¼ã¨ãã¦å¼ã³åºã
|
---|
| 887 | #ifdef LOG_EXC_LEAVE
|
---|
| 888 | log_exc_leave(CPUä¾å¤ãã³ãã©çªå·);
|
---|
| 889 | #endif /* LOG_EXC_LEAVE */
|
---|
| 890 | ----------------------------------------
|
---|
| 891 |
|
---|
| 892 | CPUä¾å¤ãã³ãã©ãã¼ãã«ï¼exc_tableï¼ããCPUä¾å¤ãã³ãã©ã®çªå°ãåãåºãï¼
|
---|
| 893 | CPUä¾å¤ã®æ
|
---|
| 894 | å ±ãè¨æ¶ãã¦ããé åã®å
|
---|
| 895 | é çªå°ã第1ãã©ã¡ã¼ã¿ï¼CPUä¾å¤ãã³ã
|
---|
| 896 | ã©çªå·ã第2ãã©ã¡ã¼ã¿ã¨ãã¦å¼ã³åºãï¼r12ã«ä¿åããã¦ããCPUä¾å¤ã®æ
|
---|
| 897 | å ±ã
|
---|
| 898 | è¨æ¶ãã¦ããé åã®å
|
---|
| 899 | é çªå°ãä¿åãããããã«ï¼å¿
|
---|
| 900 | è¦ã«å¿ãã¦ï¼ã¹ã¿ãã¯ã«
|
---|
| 901 | ä¿åããï¼
|
---|
| 902 |
|
---|
| 903 | ----------------------------------------
|
---|
| 904 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
| 905 | ã«ãã ⦠(*m)
|
---|
| 906 | å²è¾¼ã¿åªå
|
---|
| 907 | 度ãã¹ã¯ãï¼CPUä¾å¤çºçæã®å¤ã«è¨å®ãã ⦠(*n)
|
---|
| 908 | ----------------------------------------
|
---|
| 909 |
|
---|
| 910 | ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããå¾ï¼ãããä¾åé¨ã®irc_end_excãå¼ã³åºãï¼
|
---|
| 911 |
|
---|
| 912 | ----------------------------------------
|
---|
| 913 | if (CPUä¾å¤ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
| 914 | ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
| 915 | ⦠(*g)
|
---|
| 916 | ----------------------------------------
|
---|
| 917 |
|
---|
| 918 | ä¾å¤ãã¹ãã«ã¦ã³ãããã¯ãªã¡ã³ããï¼0ã«ãªã£ãå ´åã«ã¯ï¼ã¿ã¹ã¯ç¨ã®ã¹ã¿ã
|
---|
| 919 | ã¯ã«æ»ãï¼ãã®å¾ï¼CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
| 920 | å ±ãã¹ã¿ã
|
---|
| 921 | ã¯ä¸ããæ¨ã¦ãï¼ä¾å¤ãã¹ãã«ã¦ã³ãã0ã«ãªã£ãå ´åã®å¦çã¯ï¼å²è¾¼ã¿ãã³ã
|
---|
| 922 | ã©ã®åºå£å¦çã¨å
|
---|
| 923 | ±éã§ããããï¼ret_int_1ã«åå²ããï¼
|
---|
| 924 |
|
---|
| 925 | ----------------------------------------
|
---|
| 926 | if (p_runtsk != p_schedtsk) {
|
---|
| 927 | CPUããã¯ç¶æ
|
---|
| 928 | ã«ãã ⦠(*h)
|
---|
| 929 | å²è¾¼ã¿åªå
|
---|
| 930 | 度ãã¹ã¯ã¯ï¼å
|
---|
| 931 | ¨è§£é¤ç¶æ
|
---|
| 932 | ï¼TIPM_ENAALLï¼ã«ãªã£ã¦
|
---|
| 933 | ããªããã°ãªããªã ⦠(*i)
|
---|
| 934 | if (p_runtsk != NULL) {
|
---|
| 935 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
| 936 | ã¹ã¿ãã¯ãã¤ã³ã¿ãèªã¿ã¹ã¯ï¼p_runtskï¼ã®TCBã«ä¿åãã
|
---|
| 937 | ret_exc_rãï¼å®è¡åéçªå°ã¨ãã¦èªã¿ã¹ã¯ã®TCBã«ä¿åãã
|
---|
| 938 | ⦠(*a)
|
---|
| 939 | #ifdef LOG_DSP_ENTER
|
---|
| 940 | log_dsp_enter(p_runtsk);
|
---|
| 941 | #endif /* LOG_DSP_ENTER */
|
---|
| 942 | }
|
---|
| 943 | dispatcherã«åå²ãã
|
---|
| 944 |
|
---|
| 945 | ret_exc_r:
|
---|
| 946 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
| 947 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 948 | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
| 949 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 950 | }
|
---|
| 951 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
| 952 | else {
|
---|
| 953 | if (p_runtsk != NULL) {
|
---|
| 954 | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
| 955 | }
|
---|
| 956 | }
|
---|
| 957 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
| 958 | }
|
---|
| 959 | ----------------------------------------
|
---|
| 960 |
|
---|
| 961 | 以ä¸ã®å¦çã«ã¯ï¼å²è¾¼ã¿ãã³ãã©ã®åºå£å¦çã®ã«ã¼ãã³ãæµç¨ããï¼
|
---|
| 962 |
|
---|
| 963 | ----------------------------------------
|
---|
| 964 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUããã¯è§£é¤ç¶æ
|
---|
| 965 | ã«æ»ãããã«æºåãã
|
---|
| 966 | }
|
---|
| 967 | CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
| 968 | å ±ãã¹ã¿ãã¯ä¸ããæ¨ã¦ã
|
---|
| 969 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
| 970 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³
|
---|
| 971 | }
|
---|
| 972 | ----------------------------------------
|
---|
| 973 |
|
---|
| 974 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã復帰ããå¾ï¼ä¾å¤ãããªã¿ã¼ã³ããï¼
|
---|
| 975 |
|
---|
| 976 | âã¹ã¿ãã¯ãã¤ã³ã¿ãä¸æ£ã®å ´åã®å¯¾ç
|
---|
| 977 |
|
---|
| 978 | CPUä¾å¤ãã³ãã©ãå®è¡ããéã«çµç±ããé¨åã§ï¼CPUä¾å¤ãèµ·ããå¯è½æ§ã¨ã
|
---|
| 979 | ã¦ï¼ã¹ã¿ãã¯ãã¤ã³ã¿ãä¸æ£ãªçªå°ã¨ãªã£ãå ´åãèããããï¼ã¹ã¼ããã¤ã¶
|
---|
| 980 | ã¢ã¼ãã®ã¹ã¿ãã¯ãã¤ã³ã¿ãä¸æ£ãªçªå°ã¨ãªã£ãç¶æ
|
---|
| 981 | ã§ä¾å¤ãçºçããã¨ï¼ã
|
---|
| 982 | ã®å
|
---|
| 983 | ¥å£ã§ã¹ã¯ã©ããã¬ã¸ã¹ã¿çãä¿åãããã¨ãã¦ï¼å度ä¾å¤ãçºçããï¼ã
|
---|
| 984 | ã®ç¶æ³ã§ï¼ä¾å¤çºçãç¡éã«ç¹°ãè¿ããã¨ãé²ã対çãã¨ããã¨ãæã¾ããï¼
|
---|
| 985 |
|
---|
| 986 | ãããé²ãããã«ï¼ãã¼ã¿ã¢ãã¼ãã®å
|
---|
| 987 | ¥å£ã§ï¼ãã¼ã¿ã¢ãã¼ããçºçãããçª
|
---|
| 988 | å°ã調ã¹ï¼CPUä¾å¤ã®å
|
---|
| 989 | ¥å£ã§ãã£ãå ´åã«ã¯ï¼ãã§ã¤ã¿ã«ãã¼ã¿ã¢ãã¼ãå¦çã
|
---|
| 990 | è¡ãï¼
|
---|
| 991 |
|
---|
| 992 | ãã§ã¤ã¿ã«ãã¼ã¿ã¢ãã¼ãå¦çã§ã¯ï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã®ã¹ã¿ãã¯ãï¼å¼·å¶
|
---|
| 993 | çã«ï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã®åæå¤ã«è¨å®ããå¾ï¼CPUä¾å¤ã®å¦
|
---|
| 994 | çãè¡ãï¼ãã®éï¼é常ã®ãã¼ã¿ã¢ãã¼ãã¨åºå¥ã§ããããã«ï¼ä¾å¤ãã¹ãã«
|
---|
| 995 | ã¦ã³ãã®æä¸ä½ãããã1ã«ããï¼ãã§ã¤ã¿ã«ãã¼ã¿ã¢ãã¼ãå¦çããã¯ãªã¿ã¼
|
---|
| 996 | ã³ãããã¨ãã§ããªãï¼
|
---|
| 997 |
|
---|
| 998 | 以ä¸
|
---|