www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 dma07 Variable wird zurückgesetzt


Autor: Stefan M. (stefan_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
 }
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.