16 #ifdef __MSP430_HAS_ADC10_A__
21 bool ADC10_A_init (uint16_t baseAddress,
22 uint16_t sampleHoldSignalSourceSelect,
23 uint8_t clockSourceSelect,
24 uint16_t clockSourceDivider)
29 HWREG16(baseAddress + OFS_ADC10IFG) &= 0x0000;
32 HWREG16(baseAddress + OFS_ADC10CTL1) =
33 sampleHoldSignalSourceSelect
34 + (clockSourceDivider & ADC10DIV_7)
38 HWREG16(baseAddress + OFS_ADC10CTL2) =
39 (clockSourceDivider & (ADC10PDIV_1 | ADC10PDIV_2))
45 void ADC10_A_enable (uint16_t baseAddress)
48 HWREG16(baseAddress + OFS_ADC10CTL0) |= ADC10ON;
51 void ADC10_A_disable (uint16_t baseAddress)
54 HWREG16(baseAddress + OFS_ADC10CTL0) &= ~ADC10ON;
57 void ADC10_A_setupSamplingTimer (uint16_t baseAddress,
58 uint16_t clockCycleHoldCount,
59 uint16_t multipleSamplesEnabled)
61 HWREG16(baseAddress + OFS_ADC10CTL1) |= ADC10SHP;
64 HWREG16(baseAddress + OFS_ADC10CTL0) &= ~(ADC10SHT_15 + ADC10MSC);
65 HWREG16(baseAddress + OFS_ADC10CTL0) |= clockCycleHoldCount
66 + multipleSamplesEnabled;
69 void ADC10_A_disableSamplingTimer (uint16_t baseAddress)
71 HWREG16(baseAddress + OFS_ADC10CTL1) &= ~(ADC10SHP);
74 void ADC10_A_configureMemory (uint16_t baseAddress,
75 uint8_t inputSourceSelect,
76 uint8_t positiveRefVoltageSourceSelect,
77 uint8_t negativeRefVoltageSourceSelect)
80 assert( !(
HWREG16(baseAddress + OFS_ADC10CTL0) & ADC10ENC) );
82 if(!(
HWREG16(baseAddress + OFS_ADC10CTL0) & ADC10ENC))
84 assert(inputSourceSelect <= ADC10_A_INPUT_A15);
85 assert(positiveRefVoltageSourceSelect <= ADC10_A_VREFPOS_INT);
86 assert(negativeRefVoltageSourceSelect <= ADC10_A_VREFNEG_EXT);
89 HWREG8(baseAddress + OFS_ADC10MCTL0) = inputSourceSelect
90 + positiveRefVoltageSourceSelect +
91 negativeRefVoltageSourceSelect;
95 void ADC10_A_enableInterrupt (uint16_t baseAddress,
96 uint8_t interruptMask)
98 HWREG16(baseAddress + OFS_ADC10IE) |= interruptMask;
101 void ADC10_A_disableInterrupt (uint16_t baseAddress,
102 uint8_t interruptMask)
104 HWREG16(baseAddress + OFS_ADC10IE) &= ~(interruptMask);
107 void ADC10_A_clearInterrupt (uint16_t baseAddress,
108 uint8_t interruptFlagMask)
110 HWREG16(baseAddress + OFS_ADC10IFG) &= ~(interruptFlagMask);
113 uint16_t ADC10_A_getInterruptStatus (uint16_t baseAddress,
114 uint8_t interruptFlagMask)
116 return (
HWREG16(baseAddress + OFS_ADC10IFG) & interruptFlagMask );
119 void ADC10_A_startConversion (uint16_t baseAddress,
120 uint8_t conversionSequenceModeSelect)
123 HWREG16(baseAddress + OFS_ADC10CTL0) &= ~(ADC10ENC);
125 HWREG16(baseAddress + OFS_ADC10CTL1) |= conversionSequenceModeSelect;
126 HWREG16(baseAddress + OFS_ADC10CTL0) |= ADC10ENC + ADC10SC;
129 void ADC10_A_disableConversions (uint16_t baseAddress,
bool preempt)
131 if (ADC10_A_PREEMPTCONVERSION == preempt){
132 HWREG16(baseAddress + OFS_ADC10CTL1) &= ~(ADC10CONSEQ_3);
134 }
else if ( ~(
HWREG16(baseAddress + OFS_ADC10CTL1) & ADC10CONSEQ_3) ){
137 while (
HWREG16(baseAddress + OFS_ADC10CTL1) & ADC10BUSY) ;
140 HWREG16(baseAddress + OFS_ADC10CTL0) &= ~(ADC10ENC);
143 int16_t ADC10_A_getResults (uint16_t baseAddress)
145 return (
HWREG16(baseAddress + OFS_ADC10MEM0) );
148 void ADC10_A_setResolution (uint16_t baseAddress,
149 uint8_t resolutionSelect)
151 HWREG16(baseAddress + OFS_ADC10CTL2) &= ~(ADC10RES);
152 HWREG16(baseAddress + OFS_ADC10CTL2) |= resolutionSelect;
155 void ADC10_A_setSampleHoldSignalInversion (uint16_t baseAddress,
156 uint16_t invertedSignal)
158 HWREG16(baseAddress + OFS_ADC10CTL1) &= ~(ADC10ISSH);
159 HWREG16(baseAddress + OFS_ADC10CTL1) |= invertedSignal;
162 void ADC10_A_setDataReadBackFormat (uint16_t baseAddress,
163 uint16_t readBackFormat)
165 HWREG16(baseAddress + OFS_ADC10CTL2) &= ~(ADC10DF);
166 HWREG16(baseAddress + OFS_ADC10CTL2) |= readBackFormat;
169 void ADC10_A_enableReferenceBurst (uint16_t baseAddress)
171 HWREG16(baseAddress + OFS_ADC10CTL2) |= ADC10REFBURST;
174 void ADC10_A_disableReferenceBurst (uint16_t baseAddress)
176 HWREG16(baseAddress + OFS_ADC10CTL2) &= ~(ADC10REFBURST);
179 void ADC10_A_setReferenceBufferSamplingRate (uint16_t baseAddress,
180 uint16_t samplingRateSelect)
182 HWREG16(baseAddress + OFS_ADC10CTL2) &= ~(ADC10SR);
183 HWREG16(baseAddress + OFS_ADC10CTL2) |= samplingRateSelect;
186 void ADC10_A_setWindowComp (uint16_t baseAddress,
187 uint16_t highThreshold,
188 uint16_t lowThreshold)
190 HWREG16(baseAddress + OFS_ADC10HI) = highThreshold;
191 HWREG16(baseAddress + OFS_ADC10LO) = lowThreshold;
194 uint32_t ADC10_A_getMemoryAddressForDMA (uint16_t baseAddress)
196 return ( baseAddress + OFS_ADC10MEM0 );
199 uint16_t ADC10_A_isBusy (uint16_t baseAddress)
201 return (
HWREG16(baseAddress + OFS_ADC10CTL1) & ADC10BUSY);