初歩的な質問で大変恐縮なのですが、AD変換された値を取得する方法についてご教授いただきたいです。
RX72T Starter Kitを使用して開発を行っております。
AD変換された値を以下①~③の手順で取得しようとしていますが、取得できていない状態です。
おそらくどこかの理解が間違っていると思うのですが、ご指摘いただけないでしょうか。
(開発環境はe2Studio, GCCです。リアルタイムOSは入れていません)
①AD変換する電圧の入力は、マイクロコントローラピンヘッダJA1の9~12ピン(ADC0~ADC3)のいずれかを使用する
(ユーザーマニュアルを参考:https://www.marutsu.co.jp/contents/shop/marutsu/datasheet/r20ut4272jg0100-rskrx72t-usermanual.pdf)
②上記のピン位置は以下の場所である
③AD変換後の値を取得するには「S12AD.ADDR0~ADDR7」を使用する
例えば「 hoge = S12AD.ADDR0 」でAD変換後の値がhogeに格納される
(ピンは4つなのにADDRは8つ指定できるのがよく分かっていない点です)
現状ではAD変換後の値が取得できておらず、上記①~③の内いづれか(もしくは全部)が間違っているのではと考えています。
初歩的な質問で申し訳ありませんが、ご教授いただけると幸いです。
よろしくお願いいたします。
panpanpandaさん、こんにちは。NoMaYです。#お久しぶりです。RXスマートコンフィグレータというツール(e2 studioに組み込まれています)を使うと、AD変換ぐらいであれば何事も無くコード生成出来るだろうと思います。そして、そのコードと現在の手元のコードを比較して相違点を調べていくのも手ではないかと思うのです。(そのままコードを使っても良いと思います。)スマート・コンフィグレータwww.renesas.com/jp/ja/products/software-tools/tools/solution-toolkit/smart-configurator.html
NoMayさん
スマート・コンフィグレータの情報をいただきありがとうございました。
使用しコードを作成しました。
RX72Tで走らせるところまでは問題なくできているのですが、AD変換値を取得することができていません。
以下のコードで実行しており、何かデータが入ればブレークアウトする仕様としているのですが、ブレークポイントに入ってこないです。
データ取得の方法としてどこが問題となっているのでしょうか。
それとも確認の方法として間違っているでしょうか。
お忙しいところ申し訳ありませんが、ご教授いただけると幸いです。
****Main***
void main(void){ ad_channel_t channel = ADCHANNEL0; uint16_t * const buffer; R_Config_S12AD0_Create(); while(true){ R_Config_S12AD0_Start(); R_Config_S12AD0_Get_ValueResult(channel, buffer); R_Config_S12AD0_Stop(); }}
****関数部分**
void R_Config_S12AD0_Create(void){ /* Cancel S12AD0 module stop state */ MSTP(S12AD) = 0U;
/* Disable and clear interrupt flags of S12AD0 module */ S12AD.ADCSR.BIT.ADIE = 0U; S12AD.ADCMPCR.BIT.CMPAIE = 0U; S12AD.ADCMPCR.BIT.CMPBIE = 0U; IR(S12AD, S12ADI) = 0U; IEN(S12AD, S12ADI) = 0U;
/* Set S12AD0 control registers */ S12AD.ADCSR.WORD = _0000_AD_DBLTRIGGER_DISABLE | _0100_AD_ASYNC_TRIGGER | _0200_AD_SYNCASYNCTRG_ENABLE | _0000_AD_SINGLE_SCAN_MODE;
/* Set AD conversion start trigger sources */ S12AD.ADSTRGR.WORD = _0000_AD_TRSA_ADTRG; S12AD.ADADC.BYTE = _00_AD_1_TIME_CONVERSION | _00_AD_ADDITION_MODE; S12AD.ADDISCR.BYTE = _00_AD_DISCONECT_DISCHARGE | _0F_AD_DISCONECT_15ADCLK;
/* Set channels and sampling time */ S12AD.ADSSTR0 = _1B_AD0_SAMPLING_STATE_0; S12AD.ADANSA0.WORD = _0001_AD_ANx00_USED;
/* Set AN000 amplifier */ S12AD.ADPGADCR0.BIT.P000DEN = 0U; S12AD.ADPGACR.BIT.P000CR = _0001_AD_PATH_ANx_NONE_NONE; S12AD.ADCER.WORD = _0000_AD_AUTO_CLEARING_DISABLE | _0000_AD_SELFTDIAGST_DISABLE | _0000_AD_RIGHT_ALIGNMENT; S12AD.ADELCCR.BYTE = _02_ALL_SCAN_COMPLETION; S12AD.ADCSR.WORD |= _1000_AD_SCAN_END_INTERRUPT_ENABLE;
/* Set compare control register */ S12AD.ADCMPCR.WORD = _0000_AD_WINDOWB_DISABLE | _0000_AD_WINDOWA_DISABLE | _0000_AD_WINDOWFUNCTION_DISABLE;
/* Set interrupt and priority level */ IPR(S12AD, S12ADI) = _0F_AD_PRIORITY_LEVEL15;
/* Set AN000 pin */ PORT4.PMR.BYTE &= 0xFEU; PORT4.PDR.BYTE &= 0xFEU; MPC.P40PFS.BYTE = 0x80U;
/* Set ADTRG0# pin */ MPC.PA4PFS.BYTE = 0x09U; PORTA.PMR.BYTE |= 0x10U;
R_Config_S12AD0_Create_UserInit();}
void R_Config_S12AD0_Start(void){ IR(S12AD, S12ADI) = 0U; IEN(S12AD, S12ADI) = 1U; S12AD.ADCSR.BIT.TRGE = 1U;}
void R_Config_S12AD0_Stop(void){ S12AD.ADCSR.BIT.TRGE = 0U; S12AD.ADCSR.BIT.ADST = 0U; IEN(S12AD, S12ADI) = 0U; IR(S12AD, S12ADI) = 0U;}
void R_Config_S12AD0_Get_ValueResult(ad_channel_t channel, uint16_t * const buffer){ if (channel == ADCHANNEL0) { *buffer = (uint16_t)(S12AD.ADDR0); }
else { /* Do Nothing */ } if (*buffer != 0U) { *buffer = (uint16_t)(S12AD.ADDBLDR.WORD); //ここでブレークポイント }
}
panpanpandaさん、こんにちは。NoMaYです。これはAPI関数の使い方を誤解されていると思います。RXスマートコンフィグレータで生成するAPIで、動作完了まで待ちが発生するようなものは以下の簡易IICの例のように動作完了を割り込みで知らせるような作りになっています。S12ADも変換終了コールバック(割り込み)でグローバル変数にフラグを立てるようにして、Startの後、そのフラグが立つのをwhileで待つようにしないといけない、と思います。とっさに、(つい最近も他の方に紹介したのですが)役に立ちそうな最近のスレッドかな、と私の頭に思い浮かんだスレッドとしては以下のスレッドがあります。(RX72TではなくてRX231ですが。)RX231のコード生成を用いた簡易IIC通信についてjapan.renesasrulz.com/cafe_rene/f/002-2095199602/6169/rx231-iic/34171#34171起動直後にr_Config_RIIC0_error_interrupt()が永遠に呼ばれる (RX231/CS+ )japan.renesasrulz.com/cafe_rene/f/forum21/6210/r_config_riic0_error_interrupt-rx231-csI2Cバスビジー状態になる時がある(RX231/CS+/Config_RIIC0)japan.renesasrulz.com/cafe_rene/f/forum5/6219/i2c-rx231-cs-config_riic0