16 #ifdef __MSP430_HAS_TxA7__
21 void Timer_A_startCounter ( uint16_t baseAddress,
25 HWREG16(baseAddress + OFS_TAxCTL) &= ~MC_3;
26 HWREG16(baseAddress + OFS_TAxCTL) |= timerMode;
29 void Timer_A_initContinuousMode (uint16_t baseAddress,
30 Timer_A_initContinuousModeParam *
param)
34 OFS_TAxCTL) &= ~(TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK +
37 TIMER_A_TAIE_INTERRUPT_ENABLE +
40 HWREG16(baseAddress + OFS_TAxEX0) &= ~TAIDEX_7;
42 HWREG16(baseAddress + OFS_TAxEX0) |=
param->clockSourceDivider&0x7;
43 HWREG16(baseAddress + OFS_TAxCTL) |= (
param->clockSource +
45 param->timerInterruptEnable_TAIE +
46 ((
param->clockSourceDivider>>3)<<6));
48 if(
param->startTimer) {
49 HWREG16(baseAddress + OFS_TAxCTL) |= TIMER_A_CONTINUOUS_MODE;
53 void Timer_A_initUpMode (uint16_t baseAddress,
54 Timer_A_initUpModeParam *
param)
57 HWREG16(baseAddress + OFS_TAxCTL) &=
58 ~(TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK +
61 TIMER_A_TAIE_INTERRUPT_ENABLE +
64 HWREG16(baseAddress + OFS_TAxEX0) &= ~TAIDEX_7;
66 HWREG16(baseAddress + OFS_TAxEX0) |=
param->clockSourceDivider&0x7;
67 HWREG16(baseAddress + OFS_TAxCTL) |= (
param->clockSource +
69 param->timerInterruptEnable_TAIE +
70 ((
param->clockSourceDivider>>3)<<6));
72 if (
param->startTimer) {
73 HWREG16(baseAddress + OFS_TAxCTL) |= TIMER_A_UP_MODE;
76 if (TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE ==
77 param->captureCompareInterruptEnable_CCR0_CCIE){
78 HWREG16(baseAddress + OFS_TAxCCTL0) |= TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE;
80 HWREG16(baseAddress + OFS_TAxCCTL0) &= ~TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE;
86 void Timer_A_initUpDownMode(uint16_t baseAddress,
87 Timer_A_initUpDownModeParam *
param)
89 HWREG16(baseAddress + OFS_TAxCTL) &=
90 ~(TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK +
93 TIMER_A_TAIE_INTERRUPT_ENABLE +
96 HWREG16(baseAddress + OFS_TAxEX0) &= ~TAIDEX_7;
98 HWREG16(baseAddress + OFS_TAxEX0) |=
param->clockSourceDivider&0x7;
99 HWREG16(baseAddress + OFS_TAxCTL) |= (
param->clockSource +
101 param->timerInterruptEnable_TAIE +
102 ((
param->clockSourceDivider>>3)<<6));
104 if (
param->startTimer) {
105 HWREG16(baseAddress + OFS_TAxCTL) |= TIMER_A_UPDOWN_MODE;
108 if (TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE ==
109 param->captureCompareInterruptEnable_CCR0_CCIE){
110 HWREG16(baseAddress + OFS_TAxCCTL0) |= TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE;
112 HWREG16(baseAddress + OFS_TAxCCTL0) &= ~TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE;
115 HWREG16(baseAddress + OFS_TAxCCR0) =
param->timerPeriod;
118 void Timer_A_initCaptureMode(uint16_t baseAddress,
119 Timer_A_initCaptureModeParam *
param)
124 ~(TIMER_A_CAPTUREMODE_RISING_AND_FALLING_EDGE +
125 TIMER_A_CAPTURE_INPUTSELECT_Vcc +
126 TIMER_A_CAPTURE_SYNCHRONOUS +
128 TIMER_A_TAIE_INTERRUPT_ENABLE +
133 param->captureInputSelect +
134 param->synchronizeCaptureSource +
135 param->captureInterruptEnable +
136 param->captureOutputMode
140 void Timer_A_initCompareMode(uint16_t baseAddress,
141 Timer_A_initCompareModeParam *
param)
146 ~(TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE +
147 TIMER_A_OUTPUTMODE_RESET_SET
150 HWREG16(baseAddress +
param->compareRegister) |= (
param->compareInterruptEnable +
151 param->compareOutputMode
157 void Timer_A_enableInterrupt (uint16_t baseAddress)
159 HWREG16(baseAddress + OFS_TAxCTL) |= TAIE;
162 void Timer_A_disableInterrupt (uint16_t baseAddress)
164 HWREG16(baseAddress + OFS_TAxCTL) &= ~TAIE;
167 uint32_t Timer_A_getInterruptStatus (uint16_t baseAddress)
169 return (
HWREG16(baseAddress + OFS_TAxCTL) & TAIFG );
172 void Timer_A_enableCaptureCompareInterrupt (uint16_t baseAddress,
173 uint16_t captureCompareRegister
176 HWREG16(baseAddress + captureCompareRegister) |= CCIE;
179 void Timer_A_disableCaptureCompareInterrupt (uint16_t baseAddress,
180 uint16_t captureCompareRegister
183 HWREG16(baseAddress + captureCompareRegister) &= ~CCIE;
186 uint32_t Timer_A_getCaptureCompareInterruptStatus (uint16_t baseAddress,
187 uint16_t captureCompareRegister,
191 return (
HWREG16(baseAddress + captureCompareRegister) & mask );
194 void Timer_A_clear (uint16_t baseAddress)
196 HWREG16(baseAddress + OFS_TAxCTL) |= TACLR;
199 uint8_t Timer_A_getSynchronizedCaptureCompareInput
200 (uint16_t baseAddress,
201 uint16_t captureCompareRegister,
202 uint16_t
synchronized
205 if (
HWREG16(baseAddress + captureCompareRegister) &
synchronized){
206 return ( TIMER_A_CAPTURECOMPARE_INPUT_HIGH) ;
208 return ( TIMER_A_CAPTURECOMPARE_INPUT_LOW) ;
212 uint8_t Timer_A_getOutputForOutputModeOutBitValue
213 (uint16_t baseAddress,
214 uint16_t captureCompareRegister
217 if (
HWREG16(baseAddress + captureCompareRegister) & OUT){
218 return ( TIMER_A_OUTPUTMODE_OUTBITVALUE_HIGH) ;
220 return ( TIMER_A_OUTPUTMODE_OUTBITVALUE_LOW) ;
224 uint16_t Timer_A_getCaptureCompareCount
225 (uint16_t baseAddress,
226 uint16_t captureCompareRegister
229 return (
HWREG16(baseAddress + OFS_TAxR + captureCompareRegister));
232 void Timer_A_setOutputForOutputModeOutBitValue
233 (uint16_t baseAddress,
234 uint16_t captureCompareRegister,
235 uint8_t outputModeOutBitValue
239 HWREG16(baseAddress + captureCompareRegister) &= ~OUT;
240 HWREG16(baseAddress + captureCompareRegister) |= outputModeOutBitValue;
243 void Timer_A_outputPWM(uint16_t baseAddress, Timer_A_outputPWMParam *
param)
245 HWREG16(baseAddress + OFS_TAxCTL) &=
246 ~( TIMER_A_CLOCKSOURCE_INVERTED_EXTERNAL_TXCLK +
247 TIMER_A_UPDOWN_MODE + TIMER_A_DO_CLEAR +
248 TIMER_A_TAIE_INTERRUPT_ENABLE +
251 HWREG16(baseAddress + OFS_TAxEX0) &= ~TAIDEX_7;
253 HWREG16(baseAddress + OFS_TAxEX0) |=
param->clockSourceDivider&0x7;
254 HWREG16(baseAddress + OFS_TAxCTL) |= (
param->clockSource +
257 ((
param->clockSourceDivider>>3)<<6));
259 HWREG16(baseAddress + OFS_TAxCCR0) =
param->timerPeriod;
261 HWREG16(baseAddress + OFS_TAxCCTL0) &=
262 ~(TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE +
263 TIMER_A_OUTPUTMODE_RESET_SET);
270 void Timer_A_stop ( uint16_t baseAddress )
272 HWREG16(baseAddress + OFS_TAxCTL) &= ~MC_3;
275 void Timer_A_setCompareValue ( uint16_t baseAddress,
276 uint16_t compareRegister,
277 uint16_t compareValue
280 HWREG16(baseAddress + compareRegister + OFS_TAxR) = compareValue;
283 void Timer_A_setOutputMode(uint16_t baseAddress,
284 uint16_t compareRegister,
285 uint16_t compareOutputMode)
287 uint16_t
temp =
HWREG16(baseAddress + compareRegister);
288 HWREG16(baseAddress + compareRegister) =
temp & ~(OUTMOD_7) | compareOutputMode;
290 void Timer_A_clearTimerInterrupt (uint16_t baseAddress)
292 HWREG16(baseAddress + OFS_TAxCTL) &= ~TAIFG;
295 void Timer_A_clearCaptureCompareInterrupt (uint16_t baseAddress,
296 uint16_t captureCompareRegister
299 HWREG16(baseAddress + captureCompareRegister) &= ~CCIFG;
302 uint16_t Timer_A_getCounterValue (uint16_t baseAddress)
304 uint16_t voteOne, voteTwo, res;
306 voteTwo =
HWREG16(baseAddress + OFS_TAxR);
311 voteTwo =
HWREG16(baseAddress + OFS_TAxR);
313 if(voteTwo > voteOne) {
314 res = voteTwo - voteOne;
315 }
else if(voteOne > voteTwo) {
316 res = voteOne - voteTwo;
321 }
while ( res > TIMER_A_THRESHOLD);
MPU_initThreeSegmentsParam param