GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
12bitADCを機能割り込みで使いたいのですが調べても分かりません。
分かる方助けていただければ幸いです。
調べたところ外部割込みしか探せず機能割り込みのやり方が分かりません。
書いたプログラムも載せておきます。
↓
#define GLOBAL_DEFINE#include <Arduino.h>#include "iodefine.h"#include "global_define.h"
void ad_init(void);void temps(void);
char c; //変数cを初期化
void setup() { /* 変数の宣言 */ /* 初期設定 */ ad_init(); Serial.begin(9600); //シリアル通信開始}
void loop() { if(Serial.available() > 0){ //データを待つ c = Serial.read(); //シリアルで送られてきた文字を変数cに入れる } if(c == 'H'){ //変数の中身が「H」だったら temps(); Serial.println(t_value + 1); //テキストを送り返す } c = 0; }
/* Initialize関数 */void ad_init(void){ /* 動作モード、消費電力低減機能等関連レジスタへの書き込み許可 */ SYSTEM.PRCR.WORD = 0xa502; /* 12ビットA/Dコンバータモジュール ストップ解除 */ SYSTEM.MSTPCRA.BIT.MSTPA17 = 0; /* 温度センサモジュール ストップ解除 */ SYSTEM.MSTPCRB.BIT.MSTPB8 = 0; /* 動作モード、消費電力低減機能等関連レジスタへの書き込み禁止 */ SYSTEM.PRCR.WORD = 0xa500; /* 12ビットAD変換設定 */ S12AD.ADCSR.BIT.EXTRG = 1; //非同期トリガによるAD変換 S12AD.ADCSR.BIT.TRGE = 1; //AD変換開始の許可 S12AD.ADANS0.BIT.ANS0 = 0; S12AD.ADANS1.BIT.ANS1 = 0; S12AD.ADCSR.BIT.ADIE = 1; //AD変換割り込み許可 S12AD.ADCSR.BIT.ADCS = 0; //シングルスキャンモード S12AD.ADCSR.BIT.CKS = 3; //ADCLK = PCLK = 48MHz S12AD.ADEXICR.BIT.TSS = 1; //温度センサ出力をAD変換 S12AD.ADEXICR.BIT.OCS = 0; //内部基準電圧AD変換禁止 S12AD.ADCER.BIT.ADRFMT = 0; //温度センサデータレジスタ 右詰めのフォーマットに設定 /* AD割り込み許可 */ /* S12ADI0による割り込みプライオリティ レベル1 */ ICU.IPR[102].BYTE = 0x01; /* S12ADI0による割り込み要求出力(要求先へ)許可 */ ICU.IER[0x0c].BIT.IEN6 = 1;}
void temps(void){ /* 温度センサ設定 */ TEMPS.TSCR.BIT.TSEN = 1; //温度センサ動作 delay(1); TEMPS.TSCR.BIT.TSOE = 1; //温度センサ出力許可 S12AD.ADCSR.BIT.ADST = 1; //AD変換開始 TEMPS.TSCR.BIT.TSOE = 0; //温度センサ出力禁止 TEMPS.TSCR.BIT.TSEN = 0; //温度センサ停止}
割り込みの処理
#include "global_define.h"#include "interrupt_handlers.h"#include "iodefine.h"#include "usb_hal.h"
void InterruptHandler_USBHost() __attribute__((weak));void InterruptHandler_USBHost() {}
以下省略
void INT_Excep_S12AD_S12ADI0(void){ ad_value = S12AD.ADTSDR; t_value = ((ad_value - 1.143) / 0.0041) + 26;
}