Samp_PingPongプログラムの変更箇所
(1)Samp_PingPongプログラムの変更のポイント
*Samp_PingPongもvoid cbToCoNet_vRxEvent(tsRxDataApp *pRx)等の割込み処理を行っており、250ms等の長いDelayループは使用できない。
*Tick Timerの基本設定とコールバック関数はどこかですでに設定されている。
*TickTimerIntervalは4msとなっている。
*Tick Timerのコールバック関数はvoid cbToCoNet_vHwEvent(uint32 u32DeviceId, uint32 u32ItemBitmap)であり、u32DeviceId=E_AHI_DEVICE_TICK_TIMERがTick Timerの割込みである。
(2)変数・関数定義追加
//***変更3
void MyDelay(long Tu);
uint16 TTC=0;//TickTimerカウンタ
uint8 gTGS_F=0;//TGS2450フラグ
uint16 gTGS_N=100;//総和回数
uint16 gTGS_NC=0;//総和カウンタ
uint32 gADC;//ADC総和
void TGS2450();
(3)void cbAppColdStart(bool_t bAfterAhiInit)への追加
//****変更3
vPortAsOutput(PORT_OUT1);//出力設定
vPortSetLo(PORT_OUT1);//OFF設定
vPortAsOutput(PORT_OUT2);//出力設定
vPortSetLo(PORT_OUT2);//OFF設定
(4)void cbToCoNet_vHwEvent(uint32 u32DeviceId, uint32 u32ItemBitmap)への追加
//***変更3
if(gTGS_F == 1)
{
TTC++;
if(TTC > 62)
{
TTC=0;
gTGS_NC++;
TGS2450();
if(gTGS_NC > gTGS_N)
{
gTGS_NC=0;
vfPrintf(&sSerStream,"TGS2450-TEST=\t%d\r\n",gADC);//TEST表示
gADC=0;
//gTGS_F=0;//これを有効にすると1回で終了!!
}
}
}
(5)static void vHandleSerialInput(void)への追加
case 'j'://***変更3
vfPrintf(&sSerStream,"TGS2450-TEST\r\n");//TEST表示
gTGS_F=1;//フラグON
if (!bAHI_APRegulatorEnabled())//REGULATORがOFFの場合
{
//REGULATOR許可、割込み無し、サンプリング間隔2、500KHz、内部クロックを設定
vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE, E_AHI_AP_INT_DISABLE,E_AHI_AP_SAMPLE_2,E_AHI_AP_CLOCKDIV_500KHZ,E_AHI_AP_INTREF);
while(!bAHI_APRegulatorEnabled());//REGULATORがON待ち
}
break;
(6)追加関数
//***変更3
void MyDelay(long Tu)
{
vAHI_TimerEnable(E_AHI_TIMER_4,4,FALSE,FALSE,FALSE);//プレスケール1/16設定
vAHI_TimerStartSingleShot(E_AHI_TIMER_4,0x0000,0x0000);//タイマー4スタート
while(u16AHI_TimerReadCount(E_AHI_TIMER_4) < Tu);//Tuμsディレイ
vAHI_TimerStop (E_AHI_TIMER_4);//タイマー4ストップ
vAHI_TimerDisable (E_AHI_TIMER_4);//タイマー開放
}
void TGS2450()
{
vPortSetHi(PORT_OUT1);//ON設定
MyDelay(3000);
vPortSetHi(PORT_OUT2);//ON設定
MyDelay(5000);
vAHI_AdcEnable(E_AHI_ADC_SINGLE_SHOT,E_AHI_AP_INPUT_RANGE_2,E_AHI_ADC_SRC_ADC_2);
vAHI_AdcStartSample();//測定開始
//MyDelay(1000);
while(bAHI_AdcPoll());//AD変換待ち
gADC=gADC + u16AHI_AdcRead();//結果読み込み
//MyDelay(1000);
vPortSetLo(PORT_OUT1);//OFF設定
vPortSetLo(PORT_OUT2);//OFF設定
}