// Configure GPIO Out
P1DIR |= BIT_RL|BIT_GL|BIT7; // Set LEDs & PWM to output direction
P1OUT &= ~(BIT_RL|BIT_GL); // LEDs off
+#ifdef P1SEL1
P1SEL1 |= BIT7; // PWM out
+#else
+ P1SEL |= BIT7; // PWM out
+#endif
// Configure GPIO In
PBTN(DIR) &= ~(BIT_BTN|BIT_BTN2); // Buttons
P2IES &= ~(BIT4|BIT5); // INT on Lo->Hi edge
P2IE |= BIT4|BIT5; // INT enable
- // Configure ADC A7 pin
- SYSCFG2 |= ADCPCTL7;
-
// Configure ADC10
+
+#ifdef ADCPCTL4 /* Newer model */
+ SYSCFG2 |= ADCPCTL4|ADCPCTL5; // disconnect pin 4 and 5 from GPIO
ADCCTL0 |= ADCSHT_2 | ADCON; // ADCON, S&H=16 ADC clks
ADCCTL1 |= ADCSHP; // ADCCLK = MODOSC; sampling timer
ADCCTL2 |= ADCRES; // 10-bit conversion results
- ADCMCTL0 |= ADCINCH_7; // A7 ADC input select; Vref=AVCC
+ ADCMCTL0 |= ADCINCH_4; // A4 ADC input select; Vref=AVCC
ADCIE |= ADCIE0; // Enable ADC conv complete interrupt
+ // channel 5 is unused, reserved for measuring current
+#else
+ ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADCON, S&H=16 ADC clks
+ ADC10CTL1 = INCH_4; // A4 ADC input select
+ // channel 5 is unused, reserved for measuring current
+#endif
+
+ // Timer and ADC
+
+#ifndef TASSEL__SMCLK
+# define TASSEL__SMCLK TASSEL_2
+#endif
+#ifndef MC__UP
+# define MC__UP MC_1
+#endif
+#ifndef MC__CONTINUOUS
+# define MC__CONTINUOUS MC_2
+#endif
// Configure timer A0 for PWM
TA0CCR0 = 10000-1; // PWM Period
TA0CCTL2 = OUTMOD_7; // CCR2 reset/set
TA0CCR2 = 500; // CCR2 PWM duty cycle
- TA0CTL = TASSEL__SMCLK | MC__UP | TACLR; // SMCLK, up mode, clear TAR
+ TA0CTL = TASSEL__SMCLK | MC__UP | TACLR;// SMCLK, up mode, clear TAR
//Configure timer A1 for counting time
- TA1CTL |= TASSEL__SMCLK | MC__CONTINUOUS | TACLR | TAIE; // SMCLK, no divider, continuous mode
+ TA1CTL |= TASSEL__SMCLK | MC__CONTINUOUS | TACLR | TAIE;
+ // SMCLK, no divider, continuous mode, interrupt enable
+#ifdef LOCKLPM5
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
+#endif
while(1)
{
Time_Left = 15;
continue;
}
- ADCCTL0 |= ADCENC | ADCSC; // Sampling and conversion start
- P1OUT |= BIT1; // Set P1.1 LED on
+ // Sampling and conversion start
+#ifdef ADCENC
+ ADCCTL0 |= ADCENC | ADCSC;
+#else
+ ADC10CTL0 |= ENC + ADC10SC;
+#endif
+ P1OUT |= BIT_GL; // Set green LED on
}
- // End of light measurement, set new Duty_Cycle and zero increment and tuns off green led
+ // End of light measurement,
+ // set new Duty_Cycle and zero increment and turn off green led
if (events & 1<<ev_adc) {
- P1OUT &= ~BIT1; // Clear P1.1 LED off
+ P1OUT &= ~BIT_GL; // Clear green LED off
if (Time_Left)
continue;
if (ADC_Result < 200)
if (events & 1<<ev_tmr) {
if (Time_Count++ > 10) {
Time_Count = 0;
- P1OUT ^= BIT0;
+ P1OUT ^= BIT_RL; // blink
if (Time_Left)
Time_Left--;
else if (Duty_Cycle > 1)
break; // CCR2 not used
case TA1IV_TAIFG:
irq_events |= 1<<ev_tmr;
- __bic_SR_register_on_exit(LPM0_bits); // Clear CPUOFF bit from LPM0
+ __bic_SR_register_on_exit(LPM0_bits); // Wake up
break;
default:
break;
}
- //if (Time_Count++ > 1000) {
- // Time_Count = 0;
- // __bic_SR_register_on_exit(LPM0_bits); // Clear CPUOFF bit from LPM0
- //}
}
+#ifndef ADC_VECTOR
+# define ADCMEM0 ADC10MEM
+# define ADC_VECTOR ADC10_VECTOR
+#endif
+
// ADC interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC_VECTOR
#error Compiler not supported!
#endif
{
+#ifdef ADCIV_NONE
switch(__even_in_range(ADCIV,ADCIV_ADCIFG))
{
case ADCIV_NONE:
case ADCIV_ADCINIFG:
break;
case ADCIV_ADCIFG:
+#endif
ADC_Result = ADCMEM0;
irq_events |= 1<<ev_adc;
- __bic_SR_register_on_exit(LPM0_bits); // Clear CPUOFF bit from LPM0
+ __bic_SR_register_on_exit(LPM0_bits); // Wake up
+#ifdef ADCIV_NONE
break;
default:
break;
}
+#endif
}
// GPIO interrupt service routine
#error Compiler not supported!
#endif
{
- if (P2IFG & BIT3) {
+ if (PBTN(IFG) & BIT_BTN) {
irq_events |= 1<<ev_btn1;
- P2IFG &= ~BIT3; // Clear P1.3 IFG
+ PBTN(IFG) &= ~BIT_BTN; // Clear button IFG
}
- if (P2IFG & BIT7) {
+#ifdef HAVE_BTN2
+ if (PBTN(IFG) & BIT_BTN2) {
irq_events |= 1<<ev_btn2;
- P2IFG &= ~BIT7; // Clear P1.3 IFG
+ PBTN(IFG) &= ~BIT_BTN2; // Clear button 2 IFG
}
- if (P2IFG & BIT2) {
+#endif
+ if (P2IFG & BIT4) {
irq_events |= 1<<ev_pir1;
- P2IFG &= ~BIT2; // Clear P1.4 IFG
+ P2IFG &= ~BIT4; // Clear P2.4 IFG
}
if (P2IFG & BIT5) {
irq_events |= 1<<ev_pir2;
- P2IFG &= ~BIT5; // Clear P1.7 IFG
+ P2IFG &= ~BIT5; // Clear P2.5 IFG
}
- __bic_SR_register_on_exit(LPM3_bits); // Exit LPM3
+ __bic_SR_register_on_exit(LPM0_bits); // Wake up
}