AKI-H8/3048Fでのタイマ割り込み

このQ&Aのポイント
  • AKI-H8/3048Fでのタイマ割り込みを実装する方法について教えてください。
  • int_imia0()関数が実行されない問題が発生しています。
  • 割り込みを使わない方法についても教えてください。
回答を見る
  • ベストアンサー

AKI-H8/3048Fでのタイマ割り込み

秋月電子で http://akizukidenshi.com/catalog/items2.php?p=1&q="K-00004" を買いマイコンの勉強をしています。 コンパイル等はGCC Developer Lite、モニタプログラムを使いRAM上で 動作確認をしています。 タイマによる割り込みをしたいと思い、参考書のプログラムを参考に マザーボード上の2つのLEDが交互に光るようにしたいのですが、 肝心のint_imaia0()が全く実行されていません。 #include <3048.h> int c; void int_imia0( void ) { ITU0.TSR.BIT.IMFA = 0; c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } } int main( void ) { c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; EI; while( 1 ){ } } また、割り込みを使わない方法ということで #include <3048.h> int main( void ) { int c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; while( 1 ){ while( !ITU0.TSR.BIT.IMFA ); c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } ITU0.TSR.BIT.IMFA = 0; } } を試したのですが、こちらはLEDが交互に点滅して成功しています。 なのでタイマ自体は動作していると思うのでですが、上のプログラムだと int_imaia0()動作しません。 何がいけないのでしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • R32C
  • ベストアンサー率39% (115/290)
回答No.2

タイマインタラプトイネーブルレジスタ(TIER)の 設定し忘れのみのように思います。 #GDLのリンク参照しました。ベクタ登録等必要なしとは、 #便利にしているんですね。参考になりました。

chomoo00
質問者

補足

無事にRAMに転送し動作させることが出来ました。 具体的にはソースで ITU0.TIER.BIT.IMIEA = 1; が抜けていたこと。 それとGDLでのリンカのスクリプトファイル(h8rom.x等)をRAM用に書き換える際に http://d.hatena.ne.jp/gimme2s/20051114 を参考にしていたのですが、モニタプログラムで「?」としメモリの配置を見ると Monitor Vector 00000 - 000FF Monitor ROM 00100 - 07E65 Monitor RAM FEF10 - FF02F User Vector FF030 - FF12F となっていたので、h8rom.xの最初を MEMORY { vectors : org =0xff000, len =0x100 rom : org =0xff100, len =128k-0x100 ram : org =0xffef10, len =4k eight : org =0xffff00, len =0x100 } にすることで無事動作することが出来ました。 アドレスの設定が間違っていると、書き込めなかったり実行できなかったり、 割り込みが出来なかったりします。 同じH8/3048F+GDL+hterm+RAMに転送という環境で使っている人に 参考になれば幸いです。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

割り込みベクタの登録はできていますか? また、int_imia0関数は普通の関数ですが、このままでは割り込みハンドラとしては使えません。 アセンブリ言語で、レジスタの退避・復帰処理と割り込みからのリターン処理を記述し、そこからこの関数を呼び出すようにするか、__attribute__((interrupt_handler))属性を付けてやる必要があるかと思います。

chomoo00
質問者

補足

GDLを使う限りそういった宣言はいらないように思えるのですが・・ http://homepage1.nifty.com/rikiya/software/4GDL.htm

関連するQ&A

  • モータの制御

    //ステッピングモータの回転 //右に2回転、停止、左に1回転、停止これを3回繰り返す //ITUO使用、フラグが立つのを待つ //10msごとにモータに出力 //str_4.c #include <3048f.h> void ioinit(void) { PB.DDR = 0xff; } void ituinit(void) { ITUO.TCR.BIT.CCLR = 1; //カウンタクリア要因 ITUO.TCR.BIT.TPSC = 3; //タイマプリスケーラ 25MHz/8=3.125MHz ITUO.GRA = 31249; //3.125MHz/31250=100Hz、10ms、100pps ITUO.TIER.BIT.IMIEA = 0; //IMFAフラグによる割り込み禁止 } void wait(void) //停止時間 { Long t=200000; while(t--); } int main(void) { int i = 3; //繰り返しカウンタ int p; //回転パルス数 int md = 0x11; //モータ出力データ ioinit(); ituinit(); PB.DR.BYTE = md; wait(); ITU.TSTR.BIT.STR0 = 1; //タイマスタート while(i--){ for(p=0;p<96;p++){ //2回転 PB.DR.BYTE = md; md <<= 1; //右回転 if(md == 0x110) //4回シフトしたかの判断 md = 0x11; //4回シフトで初期値に戻す while(!ITU0.TSR.BIT.IMFA); //フラグが立つのを待つ ITU0.TSR.BIT.IMFA = 0; //フラグクリア } wait(); //少し停止 for(p=50;p>0;p--){ //1回転、1パルス多くした PB.DR.BYTE = md; md >>= 1; //左回転 if(md == 0x08) //4回シフトしたかの判断 md = 0x88; //4回シフトで初期値に戻す while(!ITU0.TSR.BIT.IMFA); //フラグが立つのを待つ ITU0.TSR.BIT.IMFA = 0; //フラグクリア } wait(); } PB.DR.BYTE = 0x00; //モータ励磁OFF while(1); //ここでとまっている } このプログラムのフローチャートがわかりません。

  • SH7144でパルス幅を測定したい。

    マイコン初心者です。 SH7144でPIOに接続された信号のパルス幅を測定したいです。 ネットで検索をしてH8-3048のサンプルプログラムを見つけたのですが、 SH7144への変更のしかがたが分かりません。 どなたか分かる方がいましたらお教えください。 初心者ですので、具体的に教えていただけると助かります。 ちなみに、下記がネットで見つけたH8-3048でのプログラムです。 宜しくお願いいたします。 /* メイン関数************************************************/ int main(void){ long counter; P1.DDR = 0xff; // port1出力に設定 表示LED PA.DDR = 0x00; // portA入力に設定 パルス入力用 ITU1.TCR.BYTE = 0x23; // GRAインプットキャプチャ,カウンタクリアGRA clock 1/8 ITU1.TIOR.BYTE = 0xCD; // GRA立下り,GRB立ち上がりインプットキャプチャ ITU.TSTR.BIT.STR1 = 0; // カウント停止状態 while(1){ while(PA.DR.BIT.B4 == 0){} // 入力パルス立ち上がり検知 ITU.TSTR.BIT.STR1 = 1; // ITU1 TCNTカウント開始 while(ITU1.TSR.BIT.IMFA == 0){} // GRAキャプチャ,パルス立下り検知 ITU1.TSR.BIT.IMFA = 0; // フラグをクリア ITU.TSTR.BIT.STR1 = 0; // ITU1 TCNTカウント停止 counter = ITU1.GRA; // カウント値の取得 P1.DR.BYTE = counter >> 4; // 8bitシフトさせP1に表示 } }

  • タイマーが動作しません

    H8/3052を使っていろいろ動作させようと考えてます、 タイマー割り込みのところで詰まっていますが、タイマー割り込みを使ってLEDを反転するというプログラムです。 結果、LEDが反転しないつまり、タイマー割り込みが動作してないのではないかと考えています。 うちが使いたいタイマーはウオッチドッグタイマです。イエローで、C言語を使っています。 皆様の知識をお借りしたいです。 //20msごとに割り込み、50回の割り込みでLED点灯反転 #include <3048.h> //3048、3052の内部I/O定義 #include <sysio.h> int c; //割り込み回数、外部変数とする //ITUインターバルタイマ割り込み void int_imia0(void) { ITU0.TSR.BIT.IMFA = 0; //割り込みステータスフラグクリア c-=1; if(c==0){ P5.DR.BYTE = ~P5.DR.BYTE; //LED出力データを反転 c=50; } } int main(void) { P5.DDR = 0xff; ITU0.TCR.BIT.CCLR = 1; //カウンタクリア要因 ITU0.TCR.BIT.TPSC = 3; //タイマプリスケーラ25MHz/8=3.125MHz ITU0.GRA =62499; //3.125MHz/62,500=50Hz、周期20ms ITU0.TIER.BIT.IMIEA = 1; //IMFAフラグによる割り込み許可 ITU.TSTR.BIT.STR0 = 1; //タイマスタート P5.DR.BYTE = 0xff; //LED出力データ初期値 c=50; //割り込み回数 _ei(); //割り込み許可 while (1); //何もしない } 動作できない為、ご指摘よろしくお願いします。

  • 32×16ドットLEDマトリクス表示装置をCで動かしたい!

    AKI-H8-3048/Fを使って32×16ドットLEDマトリクス表示装置を動かそうとしています。以前投稿して、そのときの意見やいろんなサイトを参考にCでプログラムを作ってみましたが動きません。 ↓が作ったプログラムです。 #include <3048f.h> #include <stdio.h> /* 待ち時間発生初期化 ************************************/ void timer_init(void){ ITU0.TCR.BYTE = 0x23; ITU0.GRA = 0x07d0; ITU.TSTR.BIT.STR0 = 0; return; } /* 待ち時間発生 引数に、必要なミリ秒を指定する***********/ void wait(int msec){ int i; ITU.TSTR.BIT.STR0 = 1; for(i=0;i<msec;i++){ do{ }while(ITU0.TSR.BIT.IMFA == 0); ITU0.TSR.BIT.IMFA = 0; } ITU.TSTR.BIT.STR0 = 0; return; } /* 表示 ********************************************/ void print(void){ int a=0; int sin1[16]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; int sin2[16]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; int sin3[16]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; while(1){ P1.DR.BIT.B0 =0; wait(100); P1.DR.BIT.B0 =1; wait(100); P1.DR.BIT.B4 =1; for(a=0;a<=16;a++){ P1.DR.BIT.B2 =sin1[a]; P1.DR.BIT.B1 =sin2[a]; P1.DR.BIT.B3 =sin3[a]; } } return; } /* メイン関数 ********************************************/ void main(void){ timer_init(); /* timerの初期化 */ P1.DDR = 0x1f; /* port1出力に設定 */ print(); } 何が違うのかわからないのでご指摘をお願いします。

  • 【H8-3052F】タイマ割り込み

    C言語もマイコンも初心者ですので情報が不足していたら笑って指摘してください。 今はルネサスのHigh-performance Embedded Workshop(Version 4.04.01.001)を使用してタイマ割り込みを実現しようとしてますが、タイマが動作しません。 出力結果も繰り返し処理が正常に動いてないように見えます。 原因等わかる方いらっしゃいましたら教えていただけますでしょうか。 可能でしたらソースコードもつけていただけると幸いです。 ---出力結果--- H8/3052F Monitor v1.12 Copyright (C) 1999-2004 CSE Tomakomai NCT 1:ld 1:go 00ffe000 change job wooooooooo! w ---ソースコード--- #include "3052f.h" #include "utility.h" #pragma interrupt ( aaa ) int cnt; extern void initITU( void ); void aaa() { debugString( "aaa!" ); cnt++; } void main(void) { InitializeSCI(); setDebugMode( true ); initITU(); // タイマーを初期化 ITU0.GRA = 20000; // タイマでカウントする値の設定 ITU0.TCNT = 0; // Reset ITU0.TCNT ITU.TSTR.BIT.STR0 = 1; // タイマ スタート debugString( "change job" ); while( 1 ){ if(cnt == 50){ debugString( "here we go!" ); cnt = 0; } else { debugString( "wooooooooo!" ); } } } void initITU() { ITU.TSNC.BIT.SYNC0 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC1 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC2 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC3 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC4 = 0; // 他チャンネルとの同期無し(独立動作) ITU0.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU1.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU2.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU3.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU4.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU0.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU1.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU2.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU3.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU4.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU0.TIER.BIT.IMIEA = 1; // 全割り込み許可(オーバーフロー/IMFA/IMFB) ITU1.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU2.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU3.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU4.TIER.BIT.IMIEA = 0; // 全割り込み許可(オーバーフロー/IMFA/IMFB) }

  • H8のITUトグル出力で 0出力で停止したい

    ルネサス製H8/3052Fを使用しています。ITUを通常動作で使用して、GRAコンペアマッチでTIOAC端子からトグル出力を行う際にタイマを停止するとTIOACの出力レベルが 0 で停止してほしいのですが、停止した際に 0/1 どちらの状態になるかコントロールできずに困っています。 試しに、「タイマを停止するときにコンペアマッチで0出力を一度させてから停止する」という方法を使ってみたのですが、結果は変わりませんでした。以下、そのソースコードを記載します。どうやったらタイマ停止後に TIOCAの出力レベルを 0 にできるかアドバイスをいただけますようお願いします。 -------------------------------------------- #define ITU4_setBRA(val) ITU4.BRA = val // コンペアマッチによりBRAの値をGRAに自動転送 void ITU4_init(void){ ITU4.TCR.BIT.CCLR = 1; // GRAのコンペアマッチでTCNTをクリア ITU4.TCR.BIT.CKEG = 0; // 立ち上がりエッジでカウント ITU4.TCR.BIT.TPSC = 3; // φ/8 ITU4.TIOR.BIT.IOA = 3; // GRAコンペアマッチでトグル出力 ITU.TFCR.BIT.BFA4 = 1; // BRA4をGRAのバッファレジスタとして使用 ITU4.TCNT = 0; } void ITU4_start(void) { ITU4.TCNT = 0; ITU.TSTR.BIT.STR4 = 1; } void ITU4_stop(void) { int i; // 一度 GRAコンペアマッチで 0 を出力させてから、トグル出力に戻す。 ITU.TSTR.BIT.STR4 = 0; // カウント停止 ITU4.TIOR.BIT.IOA = 1; // GRAコンペアマッチで0出力 ITU4.GRA = 1; ITU4.BRA = 1; ITU.TSTR.BIT.STR4 = 1; // カウント開始 for(i=0; i<32; i++) ; // 無駄時間ループ ITU.TSTR.BIT.STR4 = 0; // カウント停止 ITU4.TIOR.BIT.IOA = 3; // GRAコンペアマッチでトグル出力 }

  • H8マイコンのDA変換機能について

    今、H8マイコンの3048Fをつかっています。マイコンを扱うのは全くの初心者で昔、電子工作でラジオを作ったりしたことがある程度です。 そこで、『C言語によるH8マイコンプログラミング入門』という本を参考に一つずつプログラムを打ち込みながら試しているところです。 そこにある、D/A変換を使ってサインカーブを出力する、プログラムを試そうとしてつまづいています。添付データの様な出力になり、期待に反しています。なぜ、こうなるか分からなくて何かアドバイス頂けないでしょうか? 以下、そのプログラムです。 //タイマ割り込みによるD/Aコンバータの出力 //ITU0使用  //200Hzのサインウェーブを出力する //da_3.c #include <3048.h> //3048、3052の内部I/O定義 int c; //1サイクルの出力回数、外部変数とする unsigned int sindata[128] = {127,133,139,146,152,158,164,170, //出力データ 176,181,187,192,198,203,208,212, 217,221,225,229,233,236,239,242, 244,247,249,250,252,253,253,254, 254,254,253,253,252,250,249,247, 244,242,239,236,233,229,225,221, 217,212,208,203,198,192,187,181, 176,170,164,158,152,146,139,133, 127,121,115,108,102,96,90,84, 78,73,67,62,56,51,46,42, 37,33,29,25,21,18,15,12, 10,7,5,4,2,1,1,0, 0,0,1,1,2,4,5,7, 10,12,15,18,21,25,29,33, 37,42,46,51,56,62,67,73, 78,84,90,96,102,108,115,121}; void ituinit(void) //ITUイニシャライズ { ITU0.TCR.BIT.CCLR = 1; //カウンタクリア要因 ITU0.TCR.BIT.TPSC = 0; //16MHz 周期 0.0625μs ITU0.GRA =900; //200Hz 周期 5ms、1サイクルの出力数 128、 周期 5/128=0.0390625ms //0.0390625ms=39.0625μs、39.0625/0.0625=625 ITU0.TIER.BIT.IMIEA = 1; //IMFAフラグによる割り込み許可 } void dainit(void) //D/Aコンバータイニシャライズ { DA.DACR.BIT.DAOE0 = 1; DA.DACR.BIT.DAE = 0; } //ITUインターバルタイマ割り込み void int_imia0 (void) { ITU0.TSR.BIT.IMFA = 0; //割り込みステータスフラグクリア DA.DADR0 = sindata[c]; //サイン波形データ出力 c+=1; if(c>128) c=0; } int main(void) { ituinit(); dainit(); ITU.TSTR.BIT.STR0 = 1; //タイマスタート c=0; //割り込み回数 EI; //割り込み許可 while (1); //何もしない }

  • H8を使ってモータを、正逆回転するプログラムについてです。 よろしくお

    H8を使ってモータを、正逆回転するプログラムについてです。 よろしくお願いします。 H8(3067F.h)を使って2.5Vを基準として、2.5Vより上5.0まで正転し、2.5V以下0Vなら逆転、2.5Vなら静止するプログラムを作成したいのですが正逆回転のところで困っています。 #include <3067F.h> #pragma interrupt(adi) void initITU(void); void initITU1(void); void initAD(void); void initPA(void); main() { initPA(); initAD(); initITU(); initITU1(); /* Initalize ITU ch1 */ ITU.TSTR.BIT.STR1 = 1; /* Start ITU ch1 */ AD.CSR.BIT.ADST = 1; /* A/D変換 start */ while(1){ ; } } void initPA(void){ PADDR = 0xff; /* PortA 出力モード */ PADR.BYTE = 0x00; /* PA Clear */ } void initAD(void){ AD.CR.BIT.TRGE = 0; /* AD変換外部トリガ開始禁止 */ AD.CSR.BYTE = 0x00; /* ADCSR初期化, ch0のみ */ AD.CSR.BIT.ADIE = 1; /* AD変換終了後割り込み */ AD.CSR.BIT.CKS = 0; /* AD変換時間 : 135ステート */ AD.CSR.BIT.SCAN = 0; /* 単一モード */ } void initITU(void) { ITU.TSTR.BYTE = 0x00; ITU.TSNC.BYTE = 0x00; ITU.TISRA.BYTE = 0x00; /* Disable Interruption */ ITU.TISRB.BYTE = 0x00; /* Disable Interruption */ ITU.TISRC.BYTE = 0x00; /* Disable Interruption */ } void initITU1(void) { ITU.TMDR.BIT.PWM1 = 1; /* CH1 PWM mode */ ITU1.TCR.BYTE = 0x20; /* clear GRA comparematch,1/clock */ ITU1.GRA = 0; /* A/D変換器の保証bitは上位8bit */ ITU1.GRB = 0; ITU1.TIOR.BYTE = 0X00; /* prohibit GRA&GRB'output of comparematch */ } void adi(void) { AD.CSR.BIT.ADST = 0; /* A/D変換停止 */ if(AD.DRA && 0x80) /* open */ { PADR.BIT.B1 = 1; PADR.BIT.B2 = 0; ITU1.GRB = (AD.DRA >> 8); } else{ (AD.DRA - 0x80) = 0 /* close */ PADR.BIT.B1 = 1; PADR.BIT.B2 = 0; ITU1.GRB = (AD.DRA >> 8); } AD.CSR.BIT.ADF = 0; AD.CSR.BIT.ADST = 1; /* A/D変換開始 */ }  プログラムは、このようになっています。 AD変換停止後のif文のあたりでコンパイルできなくなるのですがどうしたらいいでしょうか? お願いします。

  • H8/3052F/IRQを使った割り込み

    こんにちは。 H8/3052F C言語でプログラミングしています。 H8をはじめて約半年がたった者です。 ITUを使ったサーボ制御やAD変換など、いろいろ勉強してきました。 しかしながらまだまだ未熟な者です。 今回割り込みに挑戦しています。 IRQ0を使いスイッチ入力があるとLED点滅パターン変更のプログラムに成功し、ITUと組み合わせてサーボを割り込みで制御できるまで勉強、実験していました。 最終的に成功し、しばらく動かしていたのですが、割り込みがきかなくなってしまいました。 IRQ0が駄目なのか?と仮定してIRQ1でプログラミングし、試したところ無事割り込みできました。 しかしIRQ1も割り込みが急にできなくなってしまいました。 書き込みし直しても直りません。 回路として、本などを参考にIRQ0のポート→マイクロスイッチ→GND という形で接続しています。 もしかしたらIRQ0の時はスイッチがB接点でしばらく繋がったままだったかもしれません。 また、この回路だと動作も少し不安定?なようです。 上記の回路で間違いはありませんか? 一応プログラムを載せておきます。 もし間違いがあったらお願いします。 #include <3048.h> void wait (void) { long t=200000; while (t--); } void int_irq0(void) { int c=3; INTC.ISR.BIT.IRQ0F = 0 while(c--){ P5.DR.BYTE = 0x5; wait(); P5.DR.BYTE = 0xa; wait(); INTC.ISR.BIT.IRQ0F = 0; } } int main(void) { DI; INTC.ISCR.BIT.IRQ0SC = 0; INTC.IER.BIT.IRQ0E = 1; P5.DDR = 0xff; EI; while (1) { P5.DR.BYTE = 0xff; //点灯 wait (); //待ち P5.DR.BYTE = 0; //消灯 wait(); //待ち } } 以上よろしくお願いします。

  • H8を利用したPWMのパルス生成について

    最近H8のマイコンを使い始めた者です。 PWMモードの波形を出力するプログラムを作っているのですが、出力波形が出ない事に困っています。 自分が作成したプログラムを以下に示しますので、 詳しい方いましたら、アドバイス頂けたらと思います。 よろしくお願いします。 #include <tlib.h> #include "3069S.h" const unsigned ptn[] = {4000, 16000, 2000, 10000}; unsigned long pos; unsigned long x; int main() { int i=1; pos=0; ITU.TSTR.BIT.STR0=0; //タイマのカウントを停止。 ITU0.TCR.BYTE=0x43; //GRBのコンペアマッチでクリア。1/8クロック ITU0.GRA=10000; //パルス幅を入力(5ms) ITU0.GRB=20000; //周期を入力(10ms) ITU.TMDR.BIT.PWM0=1; //ITU0をPWMモードに設定。 ITU.TSTR.BIT.STR0=1; //タイマのカウントをスタート while(1){ if(ITU.TISRB.BIT.IMFB0){ x=ITU.TISRB.BIT.IMFB0; ITU.TISRB.BIT.IMFB0=0; ITU0.GRA=ptn[pos]; pos++; pos &= 0x03; } } }

専門家に質問してみよう