ルネサス製のRX210マイコンのチップ内蔵の温度計からデータを取り出すサンプルプログラムです。
- #include "iodefine.h"
- #include <stdio.h>
- #include <machine.h>
- #include "rs232c.h"
-
- /*
- * ADコンバータと温度センサーの初期化
- */
- void ad_init(void)
- {
- SYSTEM.PRCR.WORD = 0xA502; /* protect off */
- MSTP(S12AD) = 0; /* ADコンバータ */
- MSTP(TEMPS) = 0; /* 温度センサー */
- SYSTEM.PRCR.WORD = 0xA500; /* protect on */
- //MPC.PWPR.BIT.B0WI = 0; /* enable to write PFSWE bit */
- //MPC.PWPR.BIT.PFSWE = 1; /* enable to write PFS register */
- //MPC.P40PFS.BIT.ASEL = 1; /* AN000 */
- //MPC.P41PFS.BIT.ASEL = 1; /* AN001 */
- //MPC.PWPR.BIT.PFSWE = 0; /* disable to write PFS register */
- //MPC.PWPR.BIT.B0WI = 1; /* disable to write PFSWE bit */
- S12AD.ADEXICR.BIT.TSS = 1; /* 温度センサー選択 */
- S12AD.ADCSR.BIT.ADCS = 0; /* シングルスキャンモード */
- S12AD.ADSSTRT = 100; /* アナログ入力サンプリング時間 */
- S12AD.ADSTRGR.BIT.TRSA = 0x0A; /* AD開始トリガー設定 温度センサからのトリガ */
- S12AD.ADCSR.BIT.TRGE = 1; /* 温度センサーからのトリガーを有効 */
- S12AD.ADCSR.BIT.EXTRG = 0;
- TEMPS.TSCR.BIT.PGAGAIN = 0x01; /* 電源電圧 3.3V */
- }
- /*
- * 温度の測定
- */
- unsigned int get_temp(void)
- {
- volatile int i;
- unsigned int temp;
- TEMPS.TSCR.BIT.TSEN = 1; /* 温度センサー起動 */
- for(i=0;i<1000;i++); /* 安定するまで待つ */
- TEMPS.TSCR.BIT.PGAEN = 1; /* PGA動作 A/D変換スタート */
- while(TEMPS.TSCR.BIT.PGAEN == 1); /* A/D変換終了まで待つ */
- temp = S12AD.ADTSDR; /* 結果の読み出し */
- TEMPS.TSCR.BIT.TSEN = 0; /* 温度センサー停止 */
- return temp;
- }
- /*
- * メイン関数
- */
- void main(void)
- {
- char buf[256];
- unsigned int t;
- volatile int i;
- change_oscillation_PLL(); //クロックソースPLL 50MHz
- SCI_Init ();
- ad_init();
- setpsw_i(); // 割込み許可 clrpsw_i()割込み禁止
- printString("chip thermometer test program\n");
- printString("use SCI0\n");
- while(1) {
- t = get_temp();
- sprintf(buf,"temperature %x\n",t);
- printString(buf);
- for(i=0;i<800000;i++);
- }
- }