忘備録-備忘録

技術的な備忘録

RX210のチップ内臓温度計を使う

2015-10-27 08:40:21 | RX210
ルネサス製のRX210マイコンのチップ内蔵の温度計からデータを取り出すサンプルプログラムです。

  1. #include "iodefine.h"
  2. #include <stdio.h>
  3. #include <machine.h>
  4. #include "rs232c.h"
  5.                                                                            
  6. /*
  7.  * ADコンバータと温度センサーの初期化
  8.  */
  9. void ad_init(void)
  10. {
  11.     SYSTEM.PRCR.WORD = 0xA502;                    /* protect off */
  12.     MSTP(S12AD) = 0;                            /* ADコンバータ */
  13.     MSTP(TEMPS) = 0;                             /* 温度センサー */
  14.     SYSTEM.PRCR.WORD = 0xA500;                    /* protect on */
  15.     //MPC.PWPR.BIT.B0WI = 0;                        /* enable to write PFSWE bit */
  16.     //MPC.PWPR.BIT.PFSWE = 1;                        /* enable to write PFS register */
  17.     //MPC.P40PFS.BIT.ASEL = 1;                    /* AN000 */
  18.     //MPC.P41PFS.BIT.ASEL = 1;                    /* AN001 */
  19.     //MPC.PWPR.BIT.PFSWE = 0;                        /* disable to write PFS register */
  20.     //MPC.PWPR.BIT.B0WI = 1;                        /* disable to write PFSWE bit */
  21.     S12AD.ADEXICR.BIT.TSS = 1;                    /* 温度センサー選択 */
  22.     S12AD.ADCSR.BIT.ADCS = 0;                    /* シングルスキャンモード */
  23.     S12AD.ADSSTRT = 100;                            /* アナログ入力サンプリング時間 */
  24.     S12AD.ADSTRGR.BIT.TRSA = 0x0A;                /* AD開始トリガー設定 温度センサからのトリガ */
  25.     S12AD.ADCSR.BIT.TRGE = 1;                    /* 温度センサーからのトリガーを有効 */
  26.     S12AD.ADCSR.BIT.EXTRG = 0;
  27.     TEMPS.TSCR.BIT.PGAGAIN = 0x01;                /* 電源電圧 3.3V */
  28. }
  29. /*
  30.  * 温度の測定
  31.  */
  32. unsigned int get_temp(void)
  33. {
  34.     volatile int i;
  35.     unsigned int temp;
  36.     TEMPS.TSCR.BIT.TSEN = 1;                    /* 温度センサー起動 */
  37.     for(i=0;i<1000;i++);                        /* 安定するまで待つ */
  38.     TEMPS.TSCR.BIT.PGAEN = 1;                    /* PGA動作 A/D変換スタート */
  39.     while(TEMPS.TSCR.BIT.PGAEN == 1);            /* A/D変換終了まで待つ */
  40.     temp = S12AD.ADTSDR;                        /* 結果の読み出し */
  41.     TEMPS.TSCR.BIT.TSEN = 0;                    /* 温度センサー停止 */
  42.     return temp;
  43. }
  44. /*
  45.  * メイン関数
  46.  */
  47. void main(void)
  48. {
  49.     char buf[256];
  50.     unsigned int t;
  51.     volatile int i;
  52.     change_oscillation_PLL();            //クロックソースPLL 50MHz
  53.     SCI_Init ();
  54.     ad_init();
  55.     setpsw_i();                            // 割込み許可 clrpsw_i()割込み禁止
  56.     printString("chip thermometer test program\n");
  57.     printString("use SCI0\n");
  58.     while(1) {
  59.         t = get_temp();
  60.         sprintf(buf,"temperature %x\n",t);
  61.         printString(buf);
  62.         for(i=0;i<800000;i++);
  63.     }
  64. }


最新の画像もっと見る

コメントを投稿