UART MSP430F413

OP #275293
Lesenswert?

Hallo zusammen,

ich hab Probleme mit meiner UART beim MSP430F413. Da ich keine TX-und
RX Buffer habe sieht das bei mir schwieriger aus. Als erstes hab ich
ein C-Programm geschrieben, das mir über die serielle Schnittstelle
Hallo Welt ausgibt. Hat alles wunderbar geklappt. Dann wollte ich das
Programm einarbeiten in die eigentliche Funktion - ein Kartenleser. Für
den benötige ich das CCR0 und CCR1 Register für den Takt. Also nehm ich
CCR2, die Daten werden noch abgespeichert aber nicht übertragen. Hier
mein Code:
ZUerst die uart.c:
void send_char(int c)
{
  RXTXData = c;
  BitCnt = 0xA;                         // Load Bit counter, 8data +
ST/SP
  CCR0 = TAR;                           // Current state of TA counter
  CCR0 += Bitime;                       // Some time till first bit
  RXTXData |= 0x100;                    // Add mark stop bit to
RXTXData
  RXTXData = RXTXData << 1;             // Add space start bit
  TACCTL0 = OUTMOD0+CCIE;                 // TXD = mark = idle
  while ( TACCTL0 & CCIE );               // Wait for TX completion

}
Dann den Interrupt :

interrupt(TIMERA0_VECTOR) Timer_A0 (void)
{
  nop();
  switch (state) {
    case UART :

    CCR2 += Bitime;            // Add Offset to CCR0
    // RX
    if (TACCTL2 & CCIS_1) { // RX on CCI2B? Is configured as RX?
      if( TACCTL2 & CAP ){

// Capture mode = start bit   edge Switch from capture to compare mode,
~CAP means NOT CAP => disable CaptureMode
        TACCTL2 &= ~CAP;
        CCR2 += Bitime_5;
      }
      else
      {
        RXTXData = RXTXData >> 1;
        if (TACCTL2 & SCCI)  // Get bit waiting in receive latch
          RXTXData |= 0x80;
        BitCnt --;                        // All bits RXed?
        if ( BitCnt == 0){ //>>>>>>>>>> Decode of Received Byte
          TACCTL2 &= ~ CCIE; // All bits RXed, disable interrupt
          _BIC_SR_IRQ(CPUOFF);   // Clear LPM0 bits from 0(SR)
          //_BIC_SR_IRQ(LPM0);
        }//>>>>>>>>>> Decode of Received Byte Here
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      }
    }
    // hier fängt Transmit an
    else {
      if ( BitCnt == 0)
         TACCTL2 &= ~ CCIE;// All bits TXed, disable interrupt
      else {
        TACCTL2 |=  OUTMOD2;                    // TX Space (0)
        if (RXTXData & 0x01)
          TACCTL2 &= ~ OUTMOD2;                 // TX Mark  (1)
        RXTXData = RXTXData >> 1;
        BitCnt --;
       //CCTL0 |= CCIS1;
      }
    }
   break;
  }

Ich hoffe es kann mir jemand helfen, vielen Dank
OP #275295
Lesenswert?

OUTMOD ist ein Register, das beim MSP430 konfiguriert werden kann nach
dieser Tabelle:

OUTMOD_0    0    0    0     Output: Die Einheit ist ausgeschaltet. Der
Ausgang entspricht dann dem Bit-Wert des Ports.
OUTMOD_1   0   0   1   Set: Der Ausgang am Pin wird auf 1 gesetzt, wenn 
TAR
den Compare-Wert der CCU erreicht. Er wird nicht wieder auf 0
rückgesetzt wenn der Timer wieder bei 0 beginnt.
OUTMOD_2   0   1   0   Toggle/Reset: Der Ausgang am Pin wird umgekippt 
wenn
TAR den Compare-Wert der CCU erreicht. Er wird auf 0 gesetzt, wenn der
Timer CCR0 ist.
OUTMOD_3   0   1   1   Set/Reset: Der Ausgang am Pin wird auf 1 gesetzt,
wenn TAR den Compare-Wert der CCU passiert. Er wird rückgesetzt, wenn
TAR=CCR0 wird.
OUTMOD_4   1   0   0   Toggle: Der Ausgang am Pin wird umgekippt, wenn 
TAR
den Compare-Wert der CCU erreicht. Keine Aktion wenn TAR=CCR0.
OUTMOD_5   1   0   1   Reset: Der Ausgang am Pin wird auf 0 rückgesetzt,
wenn TAR den Compare-Wert der CCU erreicht. Keine Aktion wenn
TAR=CCR0.
OUTMOD_6   1   1   0   Toggle/Set: Der Ausgang am Pin wirdgekippt, wenn 
TAR
den Compare-Wert der CCU erreicht. Er wird auf 1 gesetzt, wenn
TAR=CCR0.
OUTMOD_7   1   1   1   Reset/Set: Der Ausgang am Pin wird auf 0
rückgesetzt, wenn TAR den Compare-Wert der CCU erreicht. Er wird
gesetzt, wenn TAR=CCR0.

Bei Hallo Welt hat es aber mit OUTMOD_2 hingehauen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren