Hi all,
I'm attending to write a program which communication with PC via UART connection on MSP430F5151
I ran some examples such as echo, Its work well.
In order to make data transmission more easily, I'm trying to use DMA.
So, I wrote some code.
After initialzing for DMA with following info;
+ Channel 0
+ Trigger source : UCA0TXIF
When send data request occurs, I will resize DMA size, then send directly first byte with UCA0TXBUF
After that enable DMA with DMAEN bit.
I also enable DMA interrupt for checking last bit is transferred.
My source code is here :
main.c
char verStr[] = { "Hello World\r\n" };
volatile UINT dmaLength = 12;
volatile UINT hasData= 0;
..
Init_UART();
..
{
while(1)
{
if (hasData == 1)
{
hasData = 0;
changeDMASizeAndSend();
}
}
}
void changeDMASizeAndSend()
{
DMA0SZ = --dmaLength;
if (dmaLength <= 1) dmaLength = 12;
UCA0TXBUF = verStr[0];
DMA0CTL |= DMAEN;
}
// UCA0RX interrupt
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR (void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
hasData = 1;
break;
case 4:
break; // Vector 4 - TXIFG
default: break;
}
}
// DMA interrupt
#pragma vector=DMA_VECTOR
__interrupt void DMA_ISR (void)
{
DMA0CTL &= ~DMAEN;
}
But It's not work. My thinking is wrong? Pls help me.