V850のユーザーズマニュアルを見ながらタイマー割り込みを使ったLEDチカチカを作ってみました。関係するのは10章 時計タイマー機能と19章 割り込み/例外処理機能です。
0.25秒毎に割り込みがはいるはずですが、メインクロックの分周なので微妙にずれています。fBRG = 5MHz / 19 / 8 = 32894.736842105263157894736842105Hzなので32768Hzと較べると0.3%くらいずれています。WTM = 0x83にすると0.5秒毎に割り込みがはいります。
SETPLL=1;のところをPLLON=0;にするとPLLがoffになるのでCPUは5MHzで動作します。
ただし点滅速度はかわりません。
__nop();を__halt();に変えてもLEDは点滅します。
WTM7 = 0にする(WTM = 0x07にする)と、サブクロックをを使用するはずですが、なぜかうまくいきません。何か初期設定とかいるのかな?
ATラボさんのキットはKDS4Lという水晶発振子でしたが、手元にあったKDS7Aをつけたのがいけなかったかもしれません
0.25秒毎に割り込みがはいるはずですが、メインクロックの分周なので微妙にずれています。fBRG = 5MHz / 19 / 8 = 32894.736842105263157894736842105Hzなので32768Hzと較べると0.3%くらいずれています。WTM = 0x83にすると0.5秒毎に割り込みがはいります。
SETPLL=1;のところをPLLON=0;にするとPLLがoffになるのでCPUは5MHzで動作します。
ただし点滅速度はかわりません。
__nop();を__halt();に変えてもLEDは点滅します。
WTM7 = 0にする(WTM = 0x07にする)と、サブクロックをを使用するはずですが、なぜかうまくいきません。何か初期設定とかいるのかな?
ATラボさんのキットはKDS4Lという水晶発振子でしたが、手元にあったKDS7Aをつけたのがいけなかったかもしれません
#pragma ioreg void main( void ) { // CPU初期化 VSWC = 1; WDTM2 = 0; __asm("mov 0x00, r11"); __asm("st.b r11, PRCMD"); __asm("st.b r11, PCC"); while(LOCK) ; SELPLL = 1; // PLL on → 20MHz // LEDポート 初期化 PMCT.6 = 0; // 0で点灯, 1で消灯 // タイマー設定 PRSCM0 = 19; // プリスケーラでfBRG = 32894Hzにする PRSM0 = 0x12; // {WTM7,WTM3,WTM2} = 101 ... fBRG使用 0.25s毎に割り込み WTM = 0x87; // 割り込み許可 WTIC = 0; __EI(); // 点滅 while(1) __nop(); } #pragma interrupt INTWT handler __interrupt void handler(void) { PCT.6 ^= 1; }