adc.c
Filename
Remark
Usage
#include "sensor_driver.h"
#include "adc.h"
tsObjData_ADC sObjADC; // ADC management structure (data part)
tsSnsObj sADC; // ADC Management Structure (Control Unit)
int16 a1,a2,ab; // For storing results
...
// ADC initialisation
vSnsObj_Init(&sADC);
vADC_Init(&sObjADC, &sADC, TRUE);
vADC_WaitInit(); // Waiting for hardware initialisation
...
// Specify the port on which you want to make ADC measurements
//(supply voltage and ADC1,2 in the following)
sObjADC.u8SourceMask = TEH_ADC_SRC_VOLT
| TEH_ADC_SRC_ADC_1 | TEH_ADC_SRC_ADC_2;
// start ADC
vSnsObj_Process(&sADC, E_ORDER_KICK); // Kick measurement
// Wait for the ADC to finish processing one channel
//(=E_AHI_DEVICE_ANALOGUE interrupt).
// vSnsObj_Process() is called sequentially.
void cbToCoNet_vHwEvent(uint32 u32DeviceId, uint32 u32ItemBitmap) {
switch (u32DeviceId) {
case E_AHI_DEVICE_ANALOGUE:
// ADC completion interrupt
vSnsObj_Process(&sADC, E_ORDER_KICK);
if (bSnsObj_isComplete(&sADC)) {
// All channels have been processed.
// Values are stored in:
a1=sObjADC.ai16Result[TEH_ADC_IDX_ADC_1]; // ADC1[mV]
a2=sObjADC.ai16Result[TEH_ADC_IDX_ADC_2]; // ADC2[mV]
ab=sObjADC.ai16Result[TEH_ADC_IDX_VOLT]; // VCC[mV]
// Restore the initial state before the ADC started
vSnsObj_Process(&sADC, E_ORDER_KICK);
// E_ORDER_KICK again for successive runs
vSnsObj_Process(&sADC, E_ORDER_KICK);
}
break;
default:
break;
}
}functions
void vSnsObj_Init(tsSnsObj _*_pSnsObj)
void vADC_Init(tsObjData_ADC *pData,_ _tsSnsObj _*_pSnsObj, bool_t bInitAPR)
void vSnsObj_Process(tsSnsObj *pObj, teEvent eEv)
tsObjData_ADC structure
Members
Remark
最終更新