/* ===================================================================*/ byte AD1_Start(void) { if (ModeFlg != STOP) { /* Is the device in running mode? */ return ERR_BUSY; /* If yes then error */ } ModeFlg = CONTINUOUS; /* Set state of device to the continuous mode */ AD1_HWEnDi(); /* Enable the device */ return ERR_OK; /* OK */ }
/* ===================================================================*/ byte PE_AD1_Measure(void) { if (ModeFlg != STOP) { /* Is the device in different mode than "stop"? */ return ERR_BUSY; /* If yes then error */ } ModeFlg = MEASURE; /* Set state of device to the measure mode */ AD1_HWEnDi(); /* Enable the device */ return ERR_OK; /* OK */ }
/* ** =================================================================== ** Method : AD1_Disable (component ADC) ** Description : ** Disables A/D converter component. No <events> will be ** generated. If possible, this method switches off A/D ** converter device, voltage reference, etc. ** Parameters : None ** Returns : ** --- - Error code, possible codes: ** ERR_OK - OK ** ERR_SPEED - This device does not work in ** the active speed mode ** =================================================================== */ byte AD1_Disable(void) { if (!EnUser) { /* Is the device disabled by user? */ return ERR_OK; /* If yes then OK */ } EnUser = FALSE; /* If yes then set the flag "device disabled" */ AD1_HWEnDi(); /* Enable the device */ return ERR_OK; /* OK */ }
/* ** =================================================================== ** Method : AD1_Enable (component ADC) ** Description : ** Enables A/D converter component. <Events> may be generated ** (<DisableEvent>/<EnableEvent>). If possible, this method ** switches on A/D converter device, voltage reference, etc. ** Parameters : None ** Returns : ** --- - Error code, possible codes: ** ERR_OK - OK ** ERR_SPEED - This device does not work in ** the active speed mode ** =================================================================== */ byte AD1_Enable(void) { if (EnUser) { /* Is the device enabled by user? */ return ERR_OK; /* If yes then set the flag "device enabled" */ } EnUser = TRUE; /* Set the flag "device enabled" */ AD1_HWEnDi(); /* Enable the device */ return ERR_OK; /* OK */ }
/* The definition of method: byte AD1_MeasureChan(bool WaitForResult, byte Channel) was optimised based on the current component setting. An appropriate macro has been defined in the AD1.h to maintain API compatibility. */ byte PE_AD1_MeasureChan(bool WaitForResult) { if (ModeFlg != STOP) { /* Is the device in different mode than "stop"? */ return ERR_BUSY; /* If yes then error */ } ModeFlg = SINGLE; /* Set state of device to the measure mode */ AD1_HWEnDi(); /* Enable the device */ if (WaitForResult) { /* Is WaitForResult TRUE? */ while (ModeFlg == SINGLE) {} /* If yes then wait for end of measurement */ } return ERR_OK; /* OK */ }
/* ** =================================================================== ** Method : AD1_Init (component ADC) ** ** Description : ** Initializes the associated peripheral(s) and the component's ** internal variables. The method is called automatically as a ** part of the application initialization code. ** This method is internal. It is used by Processor Expert only. ** =================================================================== */ void AD1_Init(void) { /* ADCSC1: COCO=0,AIEN=0,ADCO=0,ADCH4=1,ADCH3=1,ADCH2=1,ADCH1=1,ADCH0=1 */ setReg8(ADCSC1, 0x1FU); /* Disable the module */ /* ADCSC2: ADACT=0,ADTRG=0,ACFE=0,ACFGT=0,??=0,??=0,??=0,??=0 */ setReg8(ADCSC2, 0x00U); /* Disable HW trigger and autocompare */ EnUser = TRUE; /* Enable device */ AD1_EnEvent = TRUE; /* Enable events */ OutFlg = 0U; /* No measured value */ ModeFlg = STOP; /* Device isn't running */ /* ADCCFG: ADLPC=0,ADIV1=0,ADIV0=0,ADLSMP=0,MODE1=0,MODE0=1,ADICLK1=1,ADICLK0=1 */ setReg8(ADCCFG, 0x07U); /* Set prescaler bits */ AD1_HWEnDi(); /* Enable/disable device according to the status flags */ }
/* ** =================================================================== ** Method : AD1_Measure (component ADC) ** Description : ** This method performs one measurement on all channels that ** are set in the component inspector. (Note: If the <number of ** conversions> is more than one the conversion of A/D channels ** is performed specified number of times.) ** Parameters : ** NAME - DESCRIPTION ** WaitForResult - Wait for a result of a ** conversion. If <interrupt service> is ** disabled, A/D peripheral doesn't support ** measuring all channels at once or Autoscan ** mode property isn't enabled and at the same ** time the <number of channels> is greater ** than 1, then the WaitForResult parameter is ** ignored and the method waits for each ** result every time. If the <interrupt ** service> is disabled and a <number of ** conversions> is greater than 1, the ** parameter is ignored and the method also ** waits for each result every time. ** Returns : ** --- - Error code, possible codes: ** ERR_OK - OK ** ERR_SPEED - This device does not work in ** the active speed mode ** ERR_DISABLED - Device is disabled ** ERR_BUSY - A conversion is already running ** =================================================================== */ #pragma MESSAGE DISABLE C5703 /* WARNING C5703: Parameter declared but not referenced */ byte AD1_Measure(bool WaitForResult) { if (!EnUser) { /* Is the device disabled by user? */ return ERR_DISABLED; /* If yes then error */ } if (ModeFlg != STOP) { /* Is the device in different mode than "stop"? */ return ERR_BUSY; /* If yes then error */ } ModeFlg = MEASURE; /* Set state of device to the measure mode */ AD1_HWEnDi(); /* Enable the device */ if (WaitForResult) { /* Is WaitForResult TRUE? */ while (ModeFlg == MEASURE) {} /* If yes then wait for end of measurement */ } return ERR_OK; /* OK */ }
/* ** =================================================================== ** Method : AD1_MeasureChan (component ADC) ** Description : ** This method performs measurement on one channel. (Note: If ** the <number of conversions> is more than one the conversion ** of the A/D channel is performed specified number of times.) ** Parameters : ** NAME - DESCRIPTION ** WaitForResult - Wait for a result of ** conversion. If the <interrupt service> is ** disabled and at the same time a <number of ** conversions> is greater than 1, the ** WaitForResult parameter is ignored and the ** method waits for each result every time. ** Channel - Channel number. If only one ** channel in the component is set this ** parameter is ignored, because the parameter ** is set inside this method. ** Returns : ** --- - Error code, possible codes: ** ERR_OK - OK ** ERR_SPEED - This device does not work in ** the active speed mode ** ERR_DISABLED - Device is disabled ** ERR_BUSY - A conversion is already running ** ERR_RANGE - Parameter "Channel" out of range ** =================================================================== */ byte AD1_MeasureChan(bool WaitForResult,byte Channel) { if (!EnUser) { /* Is the device disabled by user? */ return ERR_DISABLED; /* If yes then error */ } if (Channel >= 3U) { /* Is channel number greater than or equal to 3 */ return ERR_RANGE; /* If yes then error */ } if (ModeFlg != STOP) { /* Is the device in different mode than "stop"? */ return ERR_BUSY; /* If yes then error */ } ModeFlg = SINGLE; /* Set state of device to the measure mode */ SumChan = Channel; /* Set required channel */ AD1_HWEnDi(); /* Enable the device */ if (WaitForResult) { /* Is WaitForResult TRUE? */ while (ModeFlg == SINGLE) {} /* If yes then wait for end of measurement */ } return ERR_OK; /* OK */ }
/* ===================================================================*/ byte AD1_Enable(void) { AD1_HWEnDi(); /* Enable the device */ return ERR_OK; /* OK */ }