- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/target/gr_sakura_gcc/target_timer.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 14 14 * Copyright (C) 2017 by Cores Co., Ltd. Japan 15 15 * 16 * ä¸è¨èä½æ¨©è 17 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 18 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 19 * å¤ã»åé 20 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 21 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 22 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 23 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 24 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼åé 27 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 28 * è 29 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 30 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 31 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 32 * ç¨ã§ããªãå½¢ã§åé 33 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 34 * ã¨ï¼ 35 * (a) åé 36 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 37 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 38 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 39 * (b) åé 40 å¸ã®å½¢æ 41 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 42 * å ±åãããã¨ï¼ 43 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 44 * 害ãããï¼ä¸è¨èä½æ¨©è 45 ããã³TOPPERSããã¸ã§ã¯ããå 46 責ãããã¨ï¼ 47 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 48 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 49 ããã³TOPPERSããã¸ã§ã¯ãã 50 * å 51 責ãããã¨ï¼ 16 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 17 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 18 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 21 * スコード中に含まれていること. 22 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 23 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 24 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 25 * の無保証規定を掲載すること. 26 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 27 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 28 * と. 29 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 30 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 31 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 32 * 報告すること. 33 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 34 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 35 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 36 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 37 * 免責すること. 52 38 * 53 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 54 ã 55 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 56 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 57 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 58 * ã®è²¬ä»»ãè² ããªãï¼ 39 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 40 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 41 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 42 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 43 * の責任を負わない. 59 44 * 60 45 * @(#) $Id$ … … 62 47 63 48 /* 64 * ã¿ã¤ããã©ã¤ãï¼GR-SAKURAç¨ï¼49 * タイマドライバ(GR-SAKURA用) 65 50 */ 66 51 … … 74 59 75 60 /* 76 * ä¸ä½ã¿ã¤ãã½ããã«ã¦ã³ã¿61 * 上位タイマソフトカウンタ 77 62 */ 78 63 static uint16_t elapse_upper_timer = 0; 79 64 80 65 /* 81 * ä¸ä¸ä½ã¿ã¤ãè¨å®ã«ã¦ã³ã¿66 * 上下位タイマ設定カウンタ 82 67 */ 83 68 static uint16_t timer_upper_set_count = 0, timer_lower_set_count = 0; … … 85 70 #ifdef TOPPERS_SUPPORT_OVRHDR 86 71 87 /* ãªã¼ãã©ã³ä¸ä¸ä½ã¿ã¤ãè¨å®ã«ã¦ã³ã¿*/72 /* オーバラン上下位タイマ設定カウンタ */ 88 73 static uint16_t timer_ovr_upper_set_count = 0, timer_ovr_lower_set_count = 0; 89 74 90 /* ãªã¼ãã©ã³ã¿ã¤ãå®è¡ä¸ãã©ã°*/75 /* オーバランタイマ実行中フラグ */ 91 76 static bool_t timer_ovr_running_flg = false; 92 77 93 /* ãªã¼ãã©ã³ã¿ã¤ãéå§æHRTã¿ã¤ãå¤*/78 /* オーバランタイマ開始時HRTタイマ値 */ 94 79 static HRTCNT timer_ovr_hrt_backup; 95 80 96 /* ãªã¼ãã©ã³ã¿ã¤ãè¨å®æé*/81 /* オーバランタイマ設定時間 */ 97 82 static PRCTIM timer_ovr_ovrtim_backup; 98 83 99 84 /* 100 * ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿è¦æ±ã®ã¯ãªã¢85 * オーバランタイマ割込み要求のクリア 101 86 */ 102 87 Inline void … … 109 94 110 95 /* 111 * ã¿ã¤ãã®åæåå¦ç96 * タイマの初期化処理 112 97 */ 113 98 void … … 115 100 { 116 101 /* 117 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å® CMTã¦ããã0 解é¤118 */ 119 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* æ¸è¾¼ã¿è¨±å¯*/102 * モジュールストップ機能の設定 CMTユニット0 解除 103 */ 104 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* 書込み許可 */ 120 105 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 121 106 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA15_BIT); 122 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* æ¸è¾¼ã¿ç¦æ¢*/107 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* 書込み禁止 */ 123 108 124 109 /* 125 * ã¿ã¤ãåæ¢110 * タイマ停止 126 111 */ 127 112 sil_wrh_mem(CMT_CMSTR0_ADDR, … … 129 114 130 115 /* 131 * ã«ã¦ã³ãã¢ããã«ç¨ããããã¯ããã¯è¨å®132 * PCLK/8 ãé¸æ116 * カウントアップに用いられるクロック設定 117 * PCLK/8を選択 133 118 */ 134 119 sil_wrh_mem(CMT0_CMCR_ADDR, CMT_PCLK_DIV_8); … … 136 121 137 122 /* 138 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨å®123 * コンペアマッチタイマカウンタ設定 139 124 */ 140 125 sil_wrh_mem(CMT0_CMCNT_ADDR, 0U); … … 142 127 143 128 /* 144 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨å®129 * コンペアマッチタイマ周期設定 145 130 */ 146 131 sil_wrh_mem(CMT0_CMCOR_ADDR, 0); /* lower */ … … 149 134 150 135 /* 151 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å 152 è¨å®ã¬ã¸ã¹ã¿ï¼28,29ï¼ 136 * コンペアマッチタイマ割り込み要求先設定レジスタ(28,29) 153 137 */ 154 138 sil_wrb_mem(ICU_ISELR028_ADDR, ICU_ISEL_CPU); … … 156 140 157 141 /* 158 * ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢142 * タイマ動作開始前の割込み要求をクリア 159 143 */ 160 144 clear_int(INTNO_TIMER0); … … 162 146 163 147 /* 164 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿ã許å¯148 * コンペアマッチタイマ割り込みを許可 165 149 */ 166 150 // sil_wrh_mem(CMT0_CMCR_ADDR, … … 170 154 171 155 /* 172 * ã¿ã¤ãåä½éå§156 * タイマ動作開始 173 157 */ 174 158 // sil_wrh_mem(CMT_CMSTR0_ADDR, … … 179 163 180 164 /* 181 * ã¿ã¤ãã®åæ¢å¦ç165 * タイマの停止処理 182 166 */ 183 167 void … … 185 169 { 186 170 /* 187 * ã¿ã¤ãåæ¢lower, upper171 * タイマ停止 lower, upper 188 172 */ 189 173 sil_wrh_mem(CMT_CMSTR0_ADDR, … … 191 175 192 176 /* 193 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ¢ãlower,upper177 * タイマ割り込み禁止 lower,upper 194 178 */ 195 179 sil_wrh_mem(CMT0_CMCR_ADDR, … … 199 183 200 184 /* 201 * ã¿ã¤ãå²è¾¼ã¿è¦æ±ãã¯ãªã¢185 * タイマ割込み要求をクリア 202 186 */ 203 187 clear_int(INTNO_TIMER0); … … 205 189 206 190 /* 207 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å® CMTã¦ããã0 åæ¢208 */ 209 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* æ¸è¾¼ã¿è¨±å¯*/191 * モジュールストップ機能の設定 CMTユニット0 停止 192 */ 193 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* 書込み許可 */ 210 194 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 211 195 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) | SYSTEM_MSTPCRA_MSTPA15_BIT); 212 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* æ¸è¾¼ã¿ç¦æ¢*/213 } 214 215 /* 216 * ä¸ä½ã¿ã¤ãå²è¾¼ã¿ãã³ãã©(CMT0)196 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* 書込み禁止 */ 197 } 198 199 /* 200 * 下位タイマ割込みハンドラ(CMT0) 217 201 */ 218 202 void target_lower_timer_handler(void) 219 203 { 220 204 /* 221 * ã¿ã¤ãåæ¢205 * タイマ停止 222 206 */ 223 207 sil_wrh_mem(CMT_CMSTR0_ADDR, … … 225 209 226 210 /* 227 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ¢211 * タイマ割り込み禁止 228 212 */ 229 213 sil_wrh_mem(CMT0_CMCR_ADDR, … … 231 215 232 216 /* 233 * å²ãè¾¼ã¿è¦å ã¯ãªã¢217 * 割り込み要因クリア 234 218 */ 235 219 clear_int(INTNO_TIMER0); 236 220 237 221 /* 238 * ã«ã¦ã³ãè¨å®ã¯ãªã¢222 * カウント設定クリア 239 223 */ 240 224 timer_lower_set_count = 0; 241 225 242 226 /* 243 * ã¿ã¤ãå²ãè¾¼ã¿å¦ç227 * タイマ割り込み処理 244 228 */ 245 229 signal_time(); … … 247 231 248 232 /* 249 * ä¸ä½ã¿ã¤ãå²è¾¼ã¿ãã³ãã©(CMT1)233 * 上位タイマ割込みハンドラ(CMT1) 250 234 */ 251 235 void target_upper_timer_handler(void) 252 236 { 253 237 /* 254 * ä¸ä½ã¿ã¤ãã½ããã«ã¦ã³ã¿æ´æ°238 * 上位タイマソフトカウンタ更新 255 239 */ 256 240 elapse_upper_timer++; 257 241 258 242 /* 259 * ä¸ä½ã¿ã¤ãè¨å®å¤æ´æ°243 * 上位タイマ設定値更新 260 244 */ 261 245 if(timer_upper_set_count > 0) { … … 264 248 265 249 /* 266 * ä¸ä½ã¿ã¤ããããå¦ç250 * 上位タイママッチ処理 267 251 */ 268 252 if(timer_upper_set_count == 0){ 269 253 if(timer_lower_set_count > 0){ 270 254 /* 271 * ä¸ä½ã¿ã¤ãè¨å®ãéå§255 * 下位タイマ設定、開始 272 256 */ 273 257 sil_wrh_mem(CMT0_CMCOR_ADDR, timer_lower_set_count); … … 280 264 else{ 281 265 /* 282 * ä¸ä½ã¿ã¤ãå²ãè¾¼ã¿å¼·å¶èµ·å266 * 下位タイマ割り込み強制起動 283 267 */ 284 268 target_hrt_raise_event(); … … 289 273 if(timer_ovr_running_flg == true) { 290 274 /* 291 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãè¨å®å¤æ´æ°275 * オーバラン上位タイマ設定値更新 292 276 */ 293 277 if(timer_ovr_upper_set_count > 0) { … … 296 280 297 281 /* 298 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ããããå¦ç282 * オーバラン上位タイママッチ処理 299 283 */ 300 284 if(timer_ovr_upper_set_count == 0) { 301 285 if(timer_ovr_lower_set_count > 0){ 302 286 /* 303 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãè¨å®ãéå§287 * オーバラン下位タイマ設定、開始 304 288 */ 305 289 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); … … 313 297 else { 314 298 /* 315 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãå²ãè¾¼ã¿å¼·å¶èµ·å299 * オーバラン下位タイマ割り込み強制起動 316 300 */ 317 301 target_ovrtimer_raise_event(); … … 323 307 324 308 /* 325 * é«å解è½ã¿ã¤ãã¸ã®å²è¾¼ã¿ã¿ã¤ãã³ã°ã®è¨å®309 * 高分解能タイマへの割込みタイミングの設定 326 310 */ 327 311 void … … 332 316 333 317 /* 334 * æé -> ã¿ã¤ãã«ã¦ã³ã¿ å¤æ318 * 時間 -> タイマカウンタ 変換 335 319 */ 336 320 total_timer_count = hrtcnt * USEC_CONVERT_VALUE; … … 339 323 340 324 /* 341 * ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ç¾å¨å¤ã§èª¿æ´325 * 上位タイマカウンタ現在値で調整 342 326 */ 343 327 current_timer_count_work = timer_lower_set_count + sil_reh_mem(CMT1_CMCNT_ADDR); … … 348 332 349 333 /* 350 * ä¸ä½ã¿ã¤ãè¨å®334 * 下位タイマ設定 351 335 */ 352 336 if(timer_upper_set_count == 0 && timer_lower_set_count > 0) { 353 337 /* 354 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨å®338 * コンペアマッチタイマカウンタ設定 355 339 */ 356 340 sil_wrh_mem(CMT0_CMCNT_ADDR, 0U); 357 341 358 342 /* 359 * å²ãè¾¼ã¿è¦å ã¯ãªã¢343 * 割り込み要因クリア 360 344 */ 361 345 clear_int(INTNO_TIMER0); 362 346 363 347 /* 364 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨å®348 * コンペアマッチタイマ周期設定 365 349 */ 366 350 sil_wrh_mem(CMT0_CMCOR_ADDR, timer_lower_set_count); 367 351 368 352 /* 369 * ã¿ã¤ãå²ãè¾¼ã¿è¨±å¯353 * タイマ割り込み許可 370 354 */ 371 355 sil_wrh_mem(CMT0_CMCR_ADDR, … … 373 357 374 358 /* 375 * ã¿ã¤ãéå§359 * タイマ開始 376 360 */ 377 361 sil_wrh_mem(CMT_CMSTR0_ADDR, … … 381 365 382 366 /* 383 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±367 * 高分解能タイマ割込みの要求 384 368 */ 385 369 void … … 387 371 { 388 372 /* 389 * ä¸ä½ã¿ã¤ãå¼·å¶å²ãè¾¼ã¿èµ·å390 * 注æï¼åæ¢ããã¾ã§å²ãè¾¼ã¿ãç¹°ãè¿ãçºçãã391 */ 392 sil_wrh_mem(CMT0_CMCNT_ADDR, 0U); /* ã«ã¦ã³ã¿åæå*/393 clear_int(INTNO_TIMER0); /* è¦æ±ã¯ãªã¢*/394 sil_wrh_mem(CMT0_CMCOR_ADDR, 0U); /* ãããå¨æè¨å®*/395 sil_wrh_mem(CMT0_CMCR_ADDR, /* å²ãè¾¼ã¿è¨±å¯*/373 * 下位タイマ強制割り込み起動 374 * 注意:停止するまで割り込みが繰り返し発生する 375 */ 376 sil_wrh_mem(CMT0_CMCNT_ADDR, 0U); /* カウンタ初期化 */ 377 clear_int(INTNO_TIMER0); /* 要求クリア */ 378 sil_wrh_mem(CMT0_CMCOR_ADDR, 0U); /* マッチ周期設定 */ 379 sil_wrh_mem(CMT0_CMCR_ADDR, /* 割り込み許可 */ 396 380 sil_reh_mem(CMT0_CMCR_ADDR) | CMT0_CMCR_CMIE_BIT); 397 sil_wrh_mem(CMT_CMSTR0_ADDR, /* ã¿ã¤ãèµ·å*/381 sil_wrh_mem(CMT_CMSTR0_ADDR, /* タイマ起動 */ 398 382 sil_reh_mem(CMT_CMSTR0_ADDR) | CMT_CMSTR0_STR0_BIT); 399 383 } 400 384 401 385 /* 402 * é«å解è½ã¿ã¤ãã®ç¾å¨ã®ã«ã¦ã³ãå¤ã®èªåºããå 403 é¨å¦ç 386 * 高分解能タイマの現在のカウント値の読出し 内部処理 404 387 */ 405 388 HRTCNT target_hrt_get_current_convert(void) … … 412 395 413 396 /* 414 * ä¸ä½ã¿ã¤ã ã³ã³ãã¢ããããã§ãã¯397 * 上位タイマ コンペアマッチチェック 415 398 */ 416 399 if (probe_int(INTNO_TIMER1)) { … … 421 404 time = (((HRTCNT)local_eut * CMCOR_PERIOD) + (HRTCNT)local_cnt) / USEC_CONVERT_VALUE; 422 405 #ifdef _MSC_VER 423 // ã·ãã¥ã¬ã¼ã·ã§ã³ã§ã¯ã¿ã¤ãã¼ãæ»ããªããã調æ´406 // シミュレーションではタイマーが戻らないよう調整 424 407 if (time < current_hrtcnt) 425 408 time = current_hrtcnt + ((HRTCNT)local_cnt / USEC_CONVERT_VALUE); … … 429 412 430 413 /* 431 * ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ã414 * オーバランタイマドライバ 432 415 */ 433 416 #ifdef TOPPERS_SUPPORT_OVRHDR 434 417 435 418 /* 436 * ãªã¼ãã©ã³ã¿ã¤ãã®åæåå¦ç419 * オーバランタイマの初期化処理 437 420 */ 438 421 void … … 440 423 { 441 424 /* 442 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å® CMTã¦ããã1 解é¤443 */ 444 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* æ¸è¾¼ã¿è¨±å¯*/425 * モジュールストップ機能の設定 CMTユニット1 解除 426 */ 427 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* 書込み許可 */ 445 428 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 446 429 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA14_BIT); 447 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* æ¸è¾¼ã¿ç¦æ¢*/448 449 /* 450 * ã¿ã¤ãåæ¢CMT2430 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* 書込み禁止 */ 431 432 /* 433 * タイマ停止 CMT2 451 434 */ 452 435 sil_wrh_mem(CMT_CMSTR1_ADDR, … … 454 437 455 438 /* 456 * ã«ã¦ã³ãã¢ããã«ç¨ããããã¯ããã¯è¨å®CMT2457 * PCLK/8 ãé¸æ439 * カウントアップに用いられるクロック設定 CMT2 440 * PCLK/8を選択 458 441 */ 459 442 sil_wrh_mem(CMT2_CMCR_ADDR, CMT_PCLK_DIV_8); 460 443 461 444 /* 462 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨å®CMT2445 * コンペアマッチタイマカウンタ設定 CMT2 463 446 */ 464 447 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); 465 448 466 449 /* 467 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨å®CMT2450 * コンペアマッチタイマ周期設定 CMT2 468 451 */ 469 452 sil_wrh_mem(CMT2_CMCOR_ADDR, 0U); 470 453 471 454 /* 472 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å 473 è¨å®ã¬ã¸ã¹ã¿ï¼30ï¼ 455 * コンペアマッチタイマ割り込み要求先設定レジスタ(30) 474 456 */ 475 457 sil_wrb_mem(ICU_ISELR030_ADDR, ICU_ISEL_CPU); 476 458 477 459 /* 478 * ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢460 * タイマ動作開始前の割込み要求をクリア 479 461 */ 480 462 target_ovrtimer_int_clear(); … … 488 470 489 471 /* 490 * æé -> ã¿ã¤ãã«ã¦ã³ã¿ å¤æ472 * 時間 -> タイマカウンタ 変換 491 473 */ 492 474 total_timer_count = ovrtim * USEC_CONVERT_VALUE; … … 495 477 496 478 /* 497 * é«å解è½ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ç¾å¨å¤ã§èª¿æ´479 * 高分解能上位タイマカウンタ現在値で調整 498 480 */ 499 481 timer_ovr_ovrtim_backup = ovrtim; … … 506 488 507 489 /* 508 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸ãã©ã°490 * オーバランタイマ動作中フラグ 509 491 */ 510 492 timer_ovr_running_flg = true; 511 493 512 494 /* 513 * ä¸ä½ã¿ã¤ãè¨å®495 * 下位タイマ設定 514 496 */ 515 497 if(timer_ovr_upper_set_count == 0) { … … 519 501 else { 520 502 /* 521 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿ã¯ãªã¢CMT2503 * コンペアマッチタイマカウンタクリア CMT2 522 504 */ 523 505 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); 524 506 525 507 /* 526 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨å®CMT2508 * コンペアマッチタイマ周期設定 CMT2 527 509 */ 528 510 sil_wrh_mem(CMT2_CMCOR_ADDR, timer_ovr_lower_set_count); 529 511 530 512 /* 531 * ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢513 * タイマ動作開始前の割込み要求をクリア 532 514 */ 533 515 target_ovrtimer_int_clear(); 534 516 535 517 /* 536 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿ã許å¯CMT2518 * コンペアマッチタイマ割り込みを許可 CMT2 537 519 */ 538 520 sil_wrh_mem(CMT2_CMCR_ADDR, … … 540 522 541 523 /* 542 * ã¿ã¤ãåä½éå§CMT2524 * タイマ動作開始 CMT2 543 525 */ 544 526 sil_wrh_mem(CMT_CMSTR1_ADDR, … … 549 531 550 532 /* 551 * ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢å¦ç533 * オーバランタイマの停止処理 552 534 */ 553 535 void … … 555 537 { 556 538 /* 557 * ã¿ã¤ãåæ¢539 * タイマ停止 558 540 */ 559 541 sil_wrh_mem(CMT_CMSTR1_ADDR, … … 561 543 562 544 /* 563 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ¢545 * タイマ割り込み禁止 564 546 */ 565 547 sil_wrh_mem(CMT2_CMCR_ADDR, … … 567 549 568 550 /* 569 * ã¿ã¤ãå²è¾¼ã¿è¦æ±ãã¯ãªã¢551 * タイマ割込み要求をクリア 570 552 */ 571 553 target_ovrtimer_int_clear(); 572 554 573 555 /* 574 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸ãã©ã°556 * オーバランタイマ動作中フラグ 575 557 */ 576 558 timer_ovr_running_flg = false; 577 559 578 560 /* 579 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å® CMTã¦ããã0 åæ¢580 */ 581 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* æ¸è¾¼ã¿è¨±å¯*/561 * モジュールストップ機能の設定 CMTユニット0 停止 562 */ 563 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* 書込み許可 */ 582 564 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 583 565 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) | SYSTEM_MSTPCRA_MSTPA14_BIT); 584 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* æ¸è¾¼ã¿ç¦æ¢*/585 } 586 587 /* 588 * ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢566 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* 書込み禁止 */ 567 } 568 569 /* 570 * オーバランタイマの停止 589 571 */ 590 572 PRCTIM … … 594 576 595 577 /* 596 * ã¿ã¤ãåæ¢578 * タイマ停止 597 579 */ 598 580 sil_wrh_mem(CMT_CMSTR1_ADDR, … … 600 582 601 583 /* 602 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸ãã©ã°584 * オーバランタイマ動作中フラグ 603 585 */ 604 586 timer_ovr_running_flg = false; … … 606 588 if(int_num == INTNO_TIMER2) { 607 589 /* 608 * ãªã¼ãã©ã³å²è¾¼ã¿ã®å ´å590 * オーバラン割込みの場合 609 591 */ 610 592 target_ovrtimer_int_clear(); … … 622 604 } 623 605 624 if(cnt > timer_ovr_ovrtim_backup) { /* è¨å®æéãéãã*/606 if(cnt > timer_ovr_ovrtim_backup) { /* 設定時間を過ぎた */ 625 607 cnt = 0; 626 608 } … … 630 612 631 613 /* 632 * ãªã¼ãã©ã³ã¿ã¤ãã®ç¾å¨å¤ã®èªåºã614 * オーバランタイマの現在値の読出し 633 615 */ 634 616 PRCTIM … … 639 621 if (probe_int(INTNO_TIMER2)) { 640 622 /* 641 * å²è¾¼ã¿è¦æ±ãçºçãã¦ããå ´å623 * 割込み要求が発生している場合 642 624 */ 643 625 return(0U); … … 650 632 } 651 633 652 if(cnt > timer_ovr_ovrtim_backup) { /* è¨å®æéãéãã*/634 if(cnt > timer_ovr_ovrtim_backup) { /* 設定時間を過ぎた */ 653 635 cnt = 0; 654 636 } … … 658 640 659 641 /* 660 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±642 * 高分解能タイマ割込みの要求 661 643 */ 662 644 void … … 664 646 { 665 647 /* 666 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãå¼·å¶å²ãè¾¼ã¿èµ·å667 * 注æï¼åæ¢ããã¾ã§å²ãè¾¼ã¿ãç¹°ãè¿ãçºçãã668 */ 669 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); /* ã«ã¦ã³ã¿åæå*/670 clear_int(INTNO_TIMER2); /* è¦æ±ã¯ãªã¢*/671 sil_wrh_mem(CMT2_CMCOR_ADDR, 0U); /* ãããå¨æè¨å®*/672 sil_wrh_mem(CMT2_CMCR_ADDR, /* å²ãè¾¼ã¿è¨±å¯*/648 * オーバラン下位タイマ強制割り込み起動 649 * 注意:停止するまで割り込みが繰り返し発生する 650 */ 651 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); /* カウンタ初期化 */ 652 clear_int(INTNO_TIMER2); /* 要求クリア */ 653 sil_wrh_mem(CMT2_CMCOR_ADDR, 0U); /* マッチ周期設定 */ 654 sil_wrh_mem(CMT2_CMCR_ADDR, /* 割り込み許可 */ 673 655 sil_reh_mem(CMT2_CMCR_ADDR) | CMT2_CMCR_CMIE_BIT); 674 sil_wrh_mem(CMT_CMSTR1_ADDR, /* ã¿ã¤ãèµ·å*/656 sil_wrh_mem(CMT_CMSTR1_ADDR, /* タイマ起動 */ 675 657 sil_reh_mem(CMT_CMSTR1_ADDR) | CMT_CMSTR1_STR2_BIT); 676 658 } 677 659 678 660 /* 679 * ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©661 * オーバランタイマ割込みハンドラ 680 662 * 681 * ãã®ã«ã¼ãã³ã«æ¥ãã¾ã§ã«ï¼target_ovrtimer_stopãå¼ã°ãã¦ããããï¼ 682 * OSã¿ã¤ããåæ¢ããå¿ 683 è¦ã¯ãªãï¼ 663 * このルーチンに来るまでに,target_ovrtimer_stopが呼ばれているため, 664 * OSタイマを停止する必要はない. 684 665 */ 685 666 void … … 687 668 { 688 669 /* 689 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ¢670 * タイマ割り込み禁止 690 671 */ 691 672 sil_wrh_mem(CMT2_CMCR_ADDR, … … 693 674 694 675 /* 695 * ä¸ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ã¯ãªã¢676 * 上下位タイマカウンタクリア 696 677 */ 697 678 timer_ovr_upper_set_count = 0; 698 679 timer_ovr_lower_set_count = 0; 699 680 700 call_ovrhdr(); /* ãªã¼ãã©ã³ãã³ãã©ã®èµ·åå¦ç*/681 call_ovrhdr(); /* オーバランハンドラの起動処理 */ 701 682 } 702 683
Note:
See TracChangeset
for help on using the changeset viewer.