Changeset 318 for asp3_gr_sakura/trunk/target/gr_sakura_gcc/target_timer.c
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/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
r317 r318 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)) { … … 425 408 426 409 /* 427 * ãªã¼ãã©ã³ã¿ã¤ããã©ã¤ã410 * オーバランタイマドライバ 428 411 */ 429 412 #ifdef TOPPERS_SUPPORT_OVRHDR 430 413 431 414 /* 432 * ãªã¼ãã©ã³ã¿ã¤ãã®åæåå¦ç415 * オーバランタイマの初期化処理 433 416 */ 434 417 void … … 436 419 { 437 420 /* 438 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å® CMTã¦ããã1 解é¤439 */ 440 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* æ¸è¾¼ã¿è¨±å¯*/421 * モジュールストップ機能の設定 CMTユニット1 解除 422 */ 423 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* 書込み許可 */ 441 424 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 442 425 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) & ~SYSTEM_MSTPCRA_MSTPA14_BIT); 443 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* æ¸è¾¼ã¿ç¦æ¢*/444 445 /* 446 * ã¿ã¤ãåæ¢CMT2426 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* 書込み禁止 */ 427 428 /* 429 * タイマ停止 CMT2 447 430 */ 448 431 sil_wrh_mem(CMT_CMSTR1_ADDR, … … 450 433 451 434 /* 452 * ã«ã¦ã³ãã¢ããã«ç¨ããããã¯ããã¯è¨å®CMT2453 * PCLK/8 ãé¸æ435 * カウントアップに用いられるクロック設定 CMT2 436 * PCLK/8を選択 454 437 */ 455 438 sil_wrh_mem(CMT2_CMCR_ADDR, CMT_PCLK_DIV_8); 456 439 457 440 /* 458 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿è¨å®CMT2441 * コンペアマッチタイマカウンタ設定 CMT2 459 442 */ 460 443 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); 461 444 462 445 /* 463 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨å®CMT2446 * コンペアマッチタイマ周期設定 CMT2 464 447 */ 465 448 sil_wrh_mem(CMT2_CMCOR_ADDR, 0U); 466 449 467 450 /* 468 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿è¦æ±å 469 è¨å®ã¬ã¸ã¹ã¿ï¼30ï¼ 451 * コンペアマッチタイマ割り込み要求先設定レジスタ(30) 470 452 */ 471 453 sil_wrb_mem(ICU_ISELR030_ADDR, ICU_ISEL_CPU); 472 454 473 455 /* 474 * ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢456 * タイマ動作開始前の割込み要求をクリア 475 457 */ 476 458 target_ovrtimer_int_clear(); … … 484 466 485 467 /* 486 * æé -> ã¿ã¤ãã«ã¦ã³ã¿ å¤æ468 * 時間 -> タイマカウンタ 変換 487 469 */ 488 470 total_timer_count = ovrtim * USEC_CONVERT_VALUE; … … 491 473 492 474 /* 493 * é«å解è½ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ç¾å¨å¤ã§èª¿æ´475 * 高分解能上位タイマカウンタ現在値で調整 494 476 */ 495 477 timer_ovr_ovrtim_backup = ovrtim; … … 502 484 503 485 /* 504 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸ãã©ã°486 * オーバランタイマ動作中フラグ 505 487 */ 506 488 timer_ovr_running_flg = true; 507 489 508 490 /* 509 * ä¸ä½ã¿ã¤ãè¨å®491 * 下位タイマ設定 510 492 */ 511 493 if(timer_ovr_upper_set_count == 0) { … … 515 497 else { 516 498 /* 517 * ã³ã³ãã¢ãããã¿ã¤ãã«ã¦ã³ã¿ã¯ãªã¢CMT2499 * コンペアマッチタイマカウンタクリア CMT2 518 500 */ 519 501 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); 520 502 521 503 /* 522 * ã³ã³ãã¢ãããã¿ã¤ãå¨æè¨å®CMT2504 * コンペアマッチタイマ周期設定 CMT2 523 505 */ 524 506 sil_wrh_mem(CMT2_CMCOR_ADDR, timer_ovr_lower_set_count); 525 507 526 508 /* 527 * ã¿ã¤ãåä½éå§åã®å²è¾¼ã¿è¦æ±ãã¯ãªã¢509 * タイマ動作開始前の割込み要求をクリア 528 510 */ 529 511 target_ovrtimer_int_clear(); 530 512 531 513 /* 532 * ã³ã³ãã¢ãããã¿ã¤ãå²ãè¾¼ã¿ã許å¯CMT2514 * コンペアマッチタイマ割り込みを許可 CMT2 533 515 */ 534 516 sil_wrh_mem(CMT2_CMCR_ADDR, … … 536 518 537 519 /* 538 * ã¿ã¤ãåä½éå§CMT2520 * タイマ動作開始 CMT2 539 521 */ 540 522 sil_wrh_mem(CMT_CMSTR1_ADDR, … … 545 527 546 528 /* 547 * ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢å¦ç529 * オーバランタイマの停止処理 548 530 */ 549 531 void … … 551 533 { 552 534 /* 553 * ã¿ã¤ãåæ¢535 * タイマ停止 554 536 */ 555 537 sil_wrh_mem(CMT_CMSTR1_ADDR, … … 557 539 558 540 /* 559 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ¢541 * タイマ割り込み禁止 560 542 */ 561 543 sil_wrh_mem(CMT2_CMCR_ADDR, … … 563 545 564 546 /* 565 * ã¿ã¤ãå²è¾¼ã¿è¦æ±ãã¯ãªã¢547 * タイマ割込み要求をクリア 566 548 */ 567 549 target_ovrtimer_int_clear(); 568 550 569 551 /* 570 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸ãã©ã°552 * オーバランタイマ動作中フラグ 571 553 */ 572 554 timer_ovr_running_flg = false; 573 555 574 556 /* 575 * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å® CMTã¦ããã0 åæ¢576 */ 577 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* æ¸è¾¼ã¿è¨±å¯*/557 * モジュールストップ機能の設定 CMTユニット0 停止 558 */ 559 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA502); /* 書込み許可 */ 578 560 sil_wrw_mem(SYSTEM_MSTPCRA_ADDR, 579 561 sil_rew_mem(SYSTEM_MSTPCRA_ADDR) | SYSTEM_MSTPCRA_MSTPA14_BIT); 580 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* æ¸è¾¼ã¿ç¦æ¢*/581 } 582 583 /* 584 * ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢562 sil_wrh_mem(SYSTEM_PRCR_ADDR, 0xA500); /* 書込み禁止 */ 563 } 564 565 /* 566 * オーバランタイマの停止 585 567 */ 586 568 PRCTIM … … 590 572 591 573 /* 592 * ã¿ã¤ãåæ¢574 * タイマ停止 593 575 */ 594 576 sil_wrh_mem(CMT_CMSTR1_ADDR, … … 596 578 597 579 /* 598 * ãªã¼ãã©ã³ã¿ã¤ãåä½ä¸ãã©ã°580 * オーバランタイマ動作中フラグ 599 581 */ 600 582 timer_ovr_running_flg = false; … … 602 584 if(int_num == INTNO_TIMER2) { 603 585 /* 604 * ãªã¼ãã©ã³å²è¾¼ã¿ã®å ´å586 * オーバラン割込みの場合 605 587 */ 606 588 target_ovrtimer_int_clear(); … … 618 600 } 619 601 620 if(cnt > timer_ovr_ovrtim_backup) { /* è¨å®æéãéãã*/602 if(cnt > timer_ovr_ovrtim_backup) { /* 設定時間を過ぎた */ 621 603 cnt = 0; 622 604 } … … 626 608 627 609 /* 628 * ãªã¼ãã©ã³ã¿ã¤ãã®ç¾å¨å¤ã®èªåºã610 * オーバランタイマの現在値の読出し 629 611 */ 630 612 PRCTIM … … 635 617 if (probe_int(INTNO_TIMER2)) { 636 618 /* 637 * å²è¾¼ã¿è¦æ±ãçºçãã¦ããå ´å619 * 割込み要求が発生している場合 638 620 */ 639 621 return(0U); … … 646 628 } 647 629 648 if(cnt > timer_ovr_ovrtim_backup) { /* è¨å®æéãéãã*/630 if(cnt > timer_ovr_ovrtim_backup) { /* 設定時間を過ぎた */ 649 631 cnt = 0; 650 632 } … … 654 636 655 637 /* 656 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®è¦æ±638 * 高分解能タイマ割込みの要求 657 639 */ 658 640 void … … 660 642 { 661 643 /* 662 * ãªã¼ãã©ã³ä¸ä½ã¿ã¤ãå¼·å¶å²ãè¾¼ã¿èµ·å663 * 注æï¼åæ¢ããã¾ã§å²ãè¾¼ã¿ãç¹°ãè¿ãçºçãã664 */ 665 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); /* ã«ã¦ã³ã¿åæå*/666 clear_int(INTNO_TIMER2); /* è¦æ±ã¯ãªã¢*/667 sil_wrh_mem(CMT2_CMCOR_ADDR, 0U); /* ãããå¨æè¨å®*/668 sil_wrh_mem(CMT2_CMCR_ADDR, /* å²ãè¾¼ã¿è¨±å¯*/644 * オーバラン下位タイマ強制割り込み起動 645 * 注意:停止するまで割り込みが繰り返し発生する 646 */ 647 sil_wrh_mem(CMT2_CMCNT_ADDR, 0U); /* カウンタ初期化 */ 648 clear_int(INTNO_TIMER2); /* 要求クリア */ 649 sil_wrh_mem(CMT2_CMCOR_ADDR, 0U); /* マッチ周期設定 */ 650 sil_wrh_mem(CMT2_CMCR_ADDR, /* 割り込み許可 */ 669 651 sil_reh_mem(CMT2_CMCR_ADDR) | CMT2_CMCR_CMIE_BIT); 670 sil_wrh_mem(CMT_CMSTR1_ADDR, /* ã¿ã¤ãèµ·å*/652 sil_wrh_mem(CMT_CMSTR1_ADDR, /* タイマ起動 */ 671 653 sil_reh_mem(CMT_CMSTR1_ADDR) | CMT_CMSTR1_STR2_BIT); 672 654 } 673 655 674 656 /* 675 * ãªã¼ãã©ã³ã¿ã¤ãå²è¾¼ã¿ãã³ãã©657 * オーバランタイマ割込みハンドラ 676 658 * 677 * ãã®ã«ã¼ãã³ã«æ¥ãã¾ã§ã«ï¼target_ovrtimer_stopãå¼ã°ãã¦ããããï¼ 678 * OSã¿ã¤ããåæ¢ããå¿ 679 è¦ã¯ãªãï¼ 659 * このルーチンに来るまでに,target_ovrtimer_stopが呼ばれているため, 660 * OSタイマを停止する必要はない. 680 661 */ 681 662 void … … 683 664 { 684 665 /* 685 * ã¿ã¤ãå²ãè¾¼ã¿ç¦æ¢666 * タイマ割り込み禁止 686 667 */ 687 668 sil_wrh_mem(CMT2_CMCR_ADDR, … … 689 670 690 671 /* 691 * ä¸ä¸ä½ã¿ã¤ãã«ã¦ã³ã¿ã¯ãªã¢672 * 上下位タイマカウンタクリア 692 673 */ 693 674 timer_ovr_upper_set_count = 0; 694 675 timer_ovr_lower_set_count = 0; 695 676 696 call_ovrhdr(); /* ãªã¼ãã©ã³ãã³ãã©ã®èµ·åå¦ç*/677 call_ovrhdr(); /* オーバランハンドラの起動処理 */ 697 678 } 698 679
Note:
See TracChangeset
for help on using the changeset viewer.