忘備録-備忘録

技術的な備忘録

RX62Nの12bitAD変換を使うその2

2015-11-26 15:00:48 | RX62N
RX62Nの12bitAD変換器を動かすプログラムのサンプルです。MTU0のTGRAのコンペアマッチを使い一定間隔で変換を行います。AD変換結果の読み出しに割り込みを使用しています。

  1. #include <stdio.h>
  2. #include <machine.h>
  3. #include "iodefine.h"
  4. #include "vect.h"
  5. #define PCLK    48    //PCLK = 48MHz
  6. /*
  7.  * MTU0の初期化
  8.  * TGRAのコンペアマッチでAD変換をスタートさせる
  9.  *
  10.  * 12bit A/Dコンバータ初期化
  11.  * AN0のみ使用
  12.  */
  13. void initMTU0_S12AD(void)
  14. {
  15.     MSTP(MTU0) = 0;                    //タイマMTU0回路動作
  16.     MTU0.TCR.BIT.CCLR = 1;            //TGRAコンペアマッチでカウンタクリア
  17.     MTU0.TCR.BIT.CKEG = 0;            //クロックエッジ選択ビット (使用しない)
  18.     MTU0.TCR.BIT.TPSC = 3;            //PCLK/64でカウント
  19.     MTU0.TMDR.BIT.MD = 0;            //通常動作
  20.     MTU0.TIER.BIT.TTGE = 1;            //A/D変換開始要求の発生を許可
  21.     MTU0.TCNT = 0;
  22.     MTU0.TGRA = PCLK*1000000L/64L/1000L - 1L;    // PCLK = 48MHzで1秒間に1000回AD変換を行う
  23.     MSTP(S12AD) = 0;                // 12bit AD変換回路動作
  24.     delay_ms(100);                    // AD変換回路が安定するのを待つ
  25.     PORT4.DDR.BIT.B0 = 0;            // AN0を使用するためデジタル入力に
  26.     S12AD.ADCSR.BIT.CKS = 3;        // クロック PCLK/1
  27.     S12AD.ADCSR.BIT.EXTRG = 0;        // A/D開始トリガ選択レジスタ(ADSTRGR)で選択されたタイマ要因による、スキャン変換の開始を選択
  28.     S12AD.ADCSR.BIT.TRGE = 1;        // 外部トリガ(ADTRG0#)または、MTU、TMRトリガによるスキャン変換を許可
  29.     S12AD.ADCSR.BIT.ADIE = 1;        // スキャン終了後のS12ADI0割り込み発生の許可
  30.     IR(S12AD,ADI) = 0;                // 割り込みフラグクリア
  31.     IEN(S12AD,ADI) = 1;                // 割込み許可
  32.     IPR(S12AD,ADI) = 0x01;            // 割り込み優先順位設定
  33.     S12AD.ADANS.BIT.ANS = 0x01;        // AN0のみ変換
  34.     S12AD.ADCER.BIT.ADRFMT = 0;        // 保存データは右詰め
  35.     S12AD.ADSTRGR.BIT.ADSTRS = 1;    // TRG0AN_0トリガで変換開始
  36.     MTUA.TSTR.BIT.CST0 = 1;            // タイマMTU0スタート
  37. }
  38. /*
  39.  * S12AD ADI
  40.  * AD変換終了で呼び出される割り込み関数
  41.  * AD変換の結果を表示
  42.  */
  43. //
  44. void Excep_S12AD_ADI(void)
  45. {
  46.     int ans;
  47.     ans = S12AD.ADDR0;
  48.     printf("AD value %d\n",ans);
  49. }
  50. int main(void)
  51. {
  52.     volatile int i;
  53.     Initialization();
  54.     initMTU0_S12AD();                        //AD変換初期化
  55.     printf("A/D converter test.\n");
  56.     while (1) {
  57.         //何もしない 割込みで動作
  58.     }
  59. }


最新の画像もっと見る

コメントを投稿