Hi, die Datei von TI msp430xG46x_dma_07_CCE.c gibt einen Sinus und Cosinus von einer LookUpTable aus. Allerdings ist das ganze statisch und ich wollte es mittels einer Variable flexibler machen, dass wenn der Taster S2 gedrückt wird, der Ausgabetakt halbiert wird und damit die Periode sich vergrößert. Leider wird meine Variable immer wieder zurückgesetzt, wenn der Controller in den LPM0 zurückkehrt. Wie kann ich das verhindern? void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer FLL_CTL0 |= XCAP14PF; // Configure load caps initPortPins(); ADC12CTL0 = REF2_5V + REFON; // Internal 2.5V ref TACCR0 = 13600; // Delay to allow Ref to settle TACCTL0 |= CCIE; // Compare-mode interrupt. TACTL = TACLR + MC_1 + TASSEL_2; // SMCLK __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts TACCTL0 &= ~CCIE; // Disable timer compare-mode interrupt __disable_interrupt(); // Disable Interrupts DMACTL0 = DMA0TSEL_5 + DMA1TSEL_5; // DAC12IFG triggers DMA0SA = (void (*)())Sin_tab; // Source block address DMA0DA = (void (*)())&DAC12_0DAT; // Destination single address DMA0SZ = 0x20; // Block size for SinTab DMA0CTL = DMADT_4 + DMASRCINCR_3 + DMAEN; // Rpt, inc src, word-word DMA1SA = (void (*)())Cos_tab; // Source block address DMA1DA = (void (*)())&DAC12_1DAT; // Destination single address DMA1SZ = 0x20; // Block size for CosTab DMA1CTL = DMADT_4 + DMASRCINCR_3 + DMAEN; // Rpt, inc src, word-word DAC12_0CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_5 + DAC12IFG + DAC12ENC + DAC12GRP; DAC12_1CTL = DAC12LSEL_2 + DAC12IR + DAC12AMP_5 + DAC12IFG + DAC12ENC; >//-TimerA for OUTPUT Periode- >//--------------------------- TACCTL1 = OUTMOD_3; // TACCR1 set/reset TACCR1 = 01; // TACCR1 PWM Duty Cycle TACCTL0 = CCIFG; > //Variable die bei Tasterberührung verdoppelt wird TACCR0 = a; //1638 TACTL = TASSEL_2 + MC_1; // SMCLK, upmode while (1) { __bis_SR_register(LPM0_bits + GIE); // Enter LPM0 } > // kehrt er in den LPM0 zurück, wird a = Anfangswert (1638) gesetzt } #pragma vector = TIMERA0_VECTOR __interrupt void TA0_ISR(void) { TACTL =; // Clear Timer_A control registers __bic_SR_register_on_exit(LPM0_bits); // Exit LPMx, interrupts enabled } //interrupt ServiceRoutine for Port1 //---------------------------------- #pragma vector=PORT1_VECTOR __interrupt void P1_ISR(void) { DebounceDelay(); if (P1IFG & BIT1)// if Switch sends an interrupt, Reset IFlag1 and set b=6 { beep48(); P1IFG &= ~BIT1; // InterruptFlag1 Schalte Speicherplatz 1 auf Null > a*=2; // Verdopplung der Var } }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.