/** * Update UART0 Configuration * * \param - * \return - * * \see - */ void UART0_UpdateConfig(void) { switch(UART0.Mode) { case UART0_MODE_RS232: // UART 0 = RS232 U0CTL |= SWRST; // Software Reset UART 0 (clear ISR as well!) P3SEL &= 0xF1; // Disable SPI 0 P3OUT |= 0x02; // Set SPI_0_SOMI to complete signal P3SEL |= 0x30; // Enable UART 0 U0CTL &= ~ PENA; U0CTL &= ~ PEV; U0CTL &= ~ SPB; U0CTL |= CHAR; // 8n1 U0CTL &= ~ LISTEN; U0CTL &= ~ SYNC; // Clear Flag: Set in SPI Mode! U0CTL &= ~ MM; // Clear Flag: Set in SPI Mode! U0TCTL &= ~ CKPL; U0TCTL |= SSEL0; // BRCLK = ACLK U0TCTL &= ~ URXSE; U0TCTL &= ~ TXWAKE; U0TCTL |= TXEPT; U0RCTL &= ~ FE; U0RCTL &= ~ PE; U0RCTL &= ~ OE; U0RCTL &= ~ BRK; U0RCTL &= ~ URXEIE; U0RCTL &= ~ URXWIE; U0RCTL &= ~ RXWAKE; U0RCTL &= ~ RXERR; switch(UART0.Baud) { case BAUDRATE_1200: U0BR0 = BAUDRATE_1200_BRO; U0BR1 = BAUDRATE_1200_BR1; U0MCTL = BAUDRATE_1200_MCTL; break; case BAUDRATE_2400: U0BR0 = BAUDRATE_2400_BRO; U0BR1 = BAUDRATE_2400_BR1; U0MCTL = BAUDRATE_2400_MCTL; break; case BAUDRATE_4800: U0BR0 = BAUDRATE_4800_BRO; U0BR1 = BAUDRATE_4800_BR1; U0MCTL = BAUDRATE_4800_MCTL; break; case BAUDRATE_9600: U0BR0 = BAUDRATE_9600_BRO; U0BR1 = BAUDRATE_9600_BR1; U0MCTL = BAUDRATE_9600_MCTL; break; case BAUDRATE_19200: U0BR0 = BAUDRATE_19200_BRO; U0BR1 = BAUDRATE_19200_BR1; U0MCTL = BAUDRATE_19200_MCTL; break; case BAUDRATE_38400: U0BR0 = BAUDRATE_38400_BRO; U0BR1 = BAUDRATE_38400_BR1; U0MCTL = BAUDRATE_38400_MCTL; break; case BAUDRATE_57600: // Communication with PC U0BR0 = BAUDRATE_57600_BRO; U0BR1 = BAUDRATE_57600_BR1; U0MCTL = BAUDRATE_57600_MCTL; break; case BAUDRATE_115200: U0BR0 = BAUDRATE_115200_BRO; U0BR1 = BAUDRATE_115200_BR1; U0MCTL = BAUDRATE_115200_MCTL; break; default: // Default baudrate: communication with PC U0BR0 = BAUDRATE_57600_BRO; U0BR1 = BAUDRATE_57600_BR1; U0MCTL = BAUDRATE_57600_MCTL; break; } U0TXBUF = 0x00; ME1 &= ~ USPIE0; // Reset SPI Settings ME1 |= UTXE0 + URXE0; // Enable TXD/RXD U0CTL &= ~ SWRST; // clear software reset IE1 |= URXIE0; // Enable RX interrupt break; case UART0_MODE_SPI: // UART0 = SPI U0CTL |= SWRST; // Software Reset UART 0 (clear ISR as well!) P3SEL &= 0xCF; // Disable UART 0 P3OUT |= 0x10; // Release UART0_TX -> switch doesn't work // without release!!! P3SEL |= 0x0E; // Enable SPI 0 U0CTL |= CHAR; // 8 bit data length U0CTL &= ~ LISTEN; U0CTL |= SYNC; // SPI Mode U0CTL |= MM; // MSP is Master U0TCTL &= ~ CKPH; U0TCTL &= ~ CKPL; U0TCTL |= SSEL0; // ACLK source (4MHz) U0TCTL |= STC; // 3 pin SPI mode: STE disable U0TCTL |= TXEPT; U0RCTL &= ~ FE; U0RCTL &= ~ OE; U0BR0 = 0xFA; // 4Mhz / Baudrate = U1BR (16 Bit Register) U0BR1 = 0x00; // U1BR = U1BR0 + U1BR1 --> 16 Pulse in 5ms fix! U0MCTL = 0x00; // no Modulation U0TXBUF = 0x00; ME1 &= ~ (UTXE0 + URXE0); // Reset RS232 Settings ME1 |= USPIE0; // enable SPI U0CTL &= ~ SWRST; // clear software reset IE1 |= URXIE0; // enable RX-interrupt break; default: break; } }