Hello,
I'm configuring UART with BR 460800 to transmit 21000 byte from FRAM and I'm having problem getting the data on PC.
There is the code:
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
//GPIO FOR TEST
P1DIR |= BIT3;
// Configure Uart
P2SEL1 |= BIT0 | BIT1; // USCI_A0 UART operation
P2SEL0 &= ~(BIT0 | BIT1);
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
set_MCU_frequency(DCO_16MHz); // SET DCO to 16MHz
uart_init(); //
UCA0CTLW0 &= ~UCSWRST; // Initialize eUSCI
P1OUT |= BIT3;
for(i=0;i<21000;i++)
{
DATI[i] = i & 0x00FF; // Write some dummy data in FRAM Variable type NOINIT
}
// Configure DMA (UC0TXIFG trigger)
P1OUT |= BIT3;
DMACTL0 = DMA0TSEL__UCA0TXIFG; // UC0TXIFG trigger
__data16_write_addr((unsigned short) &DMA0SA,(unsigned long) &DATI[0]);
// Source single address
__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &UCA0TXBUF);
// Destination array address
DMA0SZ = 21000; // 32 conversions
DMA0CTL = DMADT_4 + DMASRCINCR_3 + DMAEN + DMAIE + DMALEVEL + DMASRCBYTE + DMADSTBYTE;
// while(!(UCA0IFG & UCTXIFG)); // Wait if UART_TXD
// UCA0CTLW0 &= ~UCSWRST;
__bis_SR_register(CPUOFF + GIE); // LPM0, UART_ISR will force exit
__no_operation(); // << SET BREAKPOINT HERE
P1OUT &= ~BIT3;
return 0;
}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=DMA_VECTOR
__interrupt void DMA0_ISR (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(DMA_VECTOR))) DMA0_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(DMAIV,16))
{
case 0: break; // No interrupt
case 2:
// 21000 complete data transmission
P1OUT |= BIT0;
UCA0CTLW0 |= UCSWRST;
__bic_SR_register_on_exit(CPUOFF); // exit LPM
break; // DMA0IFG
case 4: break; // DMA1IFG
case 6: break; // DMA2IFG
case 8: break; // Reserved
case 10: break; // Reserved
case 12: break; // Reserved
case 14: break; // Reserved
case 16: break; // Reserved
default: break;
}
}
Any help is appreciated,
Regards