📄 freescale
字号:
/** ###################################################################
** THIS COMPONENT MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.
** Filename : LIGHT_AD.C
** Project : Smoke_Detector
** Processor : MC9S08JM60CLHE
** Component : ADC
** Version : Component 01.580, Driver 01.26, CPU db: 3.00.046
** Compiler : CodeWarrior HCS08 C Compiler
** Date/Time : 2010-1-25, 17:15
** Abstract :
** This device "ADC" implements an A/D converter,
** its control methods and interrupt/event handling procedure.
** Settings :
** AD control register : ADCSC1 [$0010]
** AD control register : ADCCFG [$0016]
** AD control register : ADCRH [$0012]
** AD control register : ADCRL [$0013]
** AD control register : ADCCVH [$0014]
** AD control register : ADCCVL [$0015]
** AD control register : ADCSC2 [$0011]
** AD control register : APCTL1 [$0017]
** AD control register : APCTL2 [$0018]
** User handling procedure : not specified
** Number of conversions : 1
** AD resolution : 12-bit
**
** Input pins
**
** Port name : PTB
** Bit number (in port) : 0
** Bit mask of the port : $0001
** Port data register : PTBD [$0002]
** Port control register : PTBDD [$0003]
**
** Initialization:
** Conversion : Enabled
** Event : Enabled
** High speed mode
** Prescaler : divide-by-1
** Contents :
** Enable - byte LIGHT_AD_Enable(void);
** Measure - byte LIGHT_AD_Measure(bool WaitForResult);
** GetValue - byte LIGHT_AD_GetValue(void* Values);
** GetValue16 - byte LIGHT_AD_GetValue16(word *Values);
**
** Copyright : 1997 - 2009 Freescale Semiconductor, Inc. All Rights Reserved.
**
** http : www.freescale.com
** mail : support@freescale.com
** ###################################################################*/
/* MODULE LIGHT_AD. */
#include "LIGHT_AD.h"
#pragma MESSAGE DISABLE C5703 /* Disable warning C5703 "Parameter is not referenced" */
static void SaveValue(void);
/*
** ===================================================================
** Method : SaveValue (component ADC)
**
** Description :
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
static void LIGHT_AD_MainMeasure(void);
/*
** ===================================================================
** Method : MainMeasure (component ADC)
**
** Description :
** The method performs the conversion of the input channels in
** the polling mode.
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
#define STOP 0 /* STOP state */
#define MEASURE 1 /* MESURE state */
#define CONTINUOUS 2 /* CONTINUOS state */
#define SINGLE 3 /* SINGLE state */
static const byte Channels = 0x00; /* Content for the device control register */
static bool OutFlg; /* Measurement finish flag */
static byte ModeFlg; /* Current state of device */
volatile word LIGHT_AD_OutV; /* Sum of measured values */
bool WaitForRes; /* Wait for result flag */
/*
** ===================================================================
** Method : SaveValue (component ADC)
**
** Description :
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
static void SaveValue(void)
{
((TWREG*)(&LIGHT_AD_OutV))->b.high = ADCRH; /* Save measured value */
((TWREG*)(&LIGHT_AD_OutV))->b.low = ADCRL; /* Save measured value */
OutFlg = TRUE; /* Measured values are available */
ModeFlg = STOP; /* Set the device to the stop mode */
}
/*
** ===================================================================
** Method : MainMeasure (component ADC)
**
** Description :
** The method performs the conversion of the input channels in
** the polling mode.
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
static void LIGHT_AD_MainMeasure(void)
{
ADCSC1 = Channels; /* Start measurement of next channel */
if (!WaitForRes) { /* If doesn't wait for result */
return; /* then return */
}
while (!ADCSC1_COCO) {} /* Wait for AD conversion complete */
OutFlg = TRUE; /* Measured values are available */
SaveValue();
}
/*
** ===================================================================
** Method : LIGHT_AD_HWEnDi (component ADC)
**
** Description :
** Enables or disables the peripheral(s) associated with the bean.
** The method is called automatically as a part of the Enable and
** Disable methods and several internal methods.
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
void LIGHT_AD_HWEnDi(void)
{
if (ModeFlg) { /* Start or stop measurement? */
OutFlg = FALSE; /* Output value isn't available */
LIGHT_AD_MainMeasure();
}
}
/*
** ===================================================================
** Method : LIGHT_AD_Enable (component ADC)
**
** Description :
** Enables A/D converter bean. <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 LIGHT_AD_Enable(void)
{
LIGHT_AD_HWEnDi(); /* Enable the device */
return ERR_OK; /* OK */
}
/*
** ===================================================================
** Method : LIGHT_AD_Measure (component ADC)
**
** Description :
** This method performs one measurement on all channels that
** are set in the bean 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 channel> 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 LIGHT_AD_Measure(bool WaitForResult)
{
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 */
WaitForRes = WaitForResult; /* Save Wait for result flag */
LIGHT_AD_HWEnDi(); /* Enable the device */
return ERR_OK; /* OK */
}
/*
** ===================================================================
** Method : LIGHT_AD_GetValue (component ADC)
**
** Description :
** Returns the last measured values for all channels. Format
** and width of the value is a native format of the A/D
** converter.
** Parameters :
** NAME - DESCRIPTION
** * Values - Pointer to the array that contains
** the measured data. Data type is a byte, a
** word or an int. It depends on the supported
** modes, resolution, etc. of the AD converter.
** See the Version specific information for
** the current CPU in <General Info>.
** Returns :
** --- - Error code, possible codes:
** ERR_OK - OK
** ERR_SPEED - This device does not work in
** the active speed mode
** ERR_NOTAVAIL - Requested value not
** available
** ERR_OVERRUN - External trigger overrun flag
** was detected after the last value(s) was
** obtained (for example by GetValue). This
** error may not be supported on some CPUs
** (see generated code).
** ===================================================================
*/
byte LIGHT_AD_GetValue(void *Values)
{
if (!OutFlg) { /* Is output flag set? */
if (ADCSC1_COCO) {
SaveValue(); /* Save measured value, finish measuring */
}
else {
return ERR_NOTAVAIL; /* If no then error */
}
}
*(word*)Values = LIGHT_AD_OutV; /* Save measured values to the output buffer */
return ERR_OK; /* OK */
}
/*
** ===================================================================
** Method : LIGHT_AD_GetValue16 (component ADC)
**
** Description :
** This method returns the last measured values of all channels
** justified to the left. Compared with <GetValue> method this
** method returns more accurate result if the <number of
** conversions> is greater than 1 and <AD resolution> is less
** than 16 bits. In addition, the user code dependency on <AD
** resolution> is eliminated.
** Parameters :
** NAME - DESCRIPTION
** * Values - Pointer to the array that contains
** the measured data.
** Returns :
** --- - Error code, possible codes:
** ERR_OK - OK
** ERR_SPEED - This device does not work in
** the active speed mode
** ERR_NOTAVAIL - Requested value not
** available
** ERR_OVERRUN - External trigger overrun flag
** was detected after the last value(s) was
** obtained (for example by GetValue). This
** error may not be supported on some CPUs
** (see generated code).
** ===================================================================
*/
byte LIGHT_AD_GetValue16(word *Values)
{
if (!OutFlg) { /* Is output flag set? */
if (ADCSC1_COCO) {
SaveValue(); /* Save measured value, finish measuring */
}
else {
return ERR_NOTAVAIL; /* If no then error */
}
}
*Values = (word)((LIGHT_AD_OutV) << 4); /* Save measured values to the output buffer */
return ERR_OK; /* OK */
}
/*
** ===================================================================
** Method : LIGHT_AD_Init (component ADC)
**
** Description :
** Initializes the associated peripheral(s) and the bean'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 LIGHT_AD_Init(void)
{
/* ADCSC1: COCO=0,AIEN=0,ADCO=0,ADCH4=1,ADCH3=1,ADCH2=1,ADCH1=1,ADCH0=1 */
setReg8(ADCSC1, 0x1F); /* Disable the module */
/* ADCSC2: ADACT=0,ADTRG=0,ACFE=0,ACFGT=0,??=0,??=0,??=0,??=0 */
setReg8(ADCSC2, 0x00); /* Disable HW trigger and autocompare */
OutFlg = FALSE; /* 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, 0x07); /* Set prescaler bits */
}
/* END LIGHT_AD. */
/*
** ###################################################################
**
** This file was created by Processor Expert 3.07 [04.34]
** for the Freescale HCS08 series of microcontrollers.
**
** ###################################################################
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -