Tool/software: TI C / C ++编译器
Unable to enter DMA_ISR interrupt !
void Init_UART0(u32 bd){
P2SEL1 |= BIT0 | BIT1;
P2SEL0 &= ~(BIT0 | BIT1); //
// Configure USCI_A0 for UART mode
UCA0CTLW0 = UCSWRST; // Put eUSCI in reset
UCA0CTLW0 |= UCSSEL__ACLK; // SMCLK = ACLK
switch(bd)
{
case 1200://1200
UCA0BR0 = 0x01; //接收改用1200波特率
UCA0BR1 = 0x00;
UCA0MCTLW = UCOS16+ UCBRF_11;
break;
}
UCA0CTLW0 &= ~UCSWRST; // Initialize eUSCI
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
}
void UART_DMA_init(u8 len)
{
//UCA0IE &= ~UCTXIE;
DMACTL0 = DMA0TSEL__UCA0TXIFG;
DMA0CTL |= DMADT_1| DMADSTBYTE|DMASRCBYTE| DMADSTINCR_0 | DMASRCINCR_3;
DMA0SZ = len;
__data16_write_addr((unsigned short) &DMA0SA,(unsigned long) &Usart.Tx_Buf[0]);//
__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &UCA0TXBUF);
DMA0CTL |=DMAIE|DMAEN;//
}
#pragma vector=DMA_VECTOR
__interrupt void DMA_ISR(void)
{
switch(__even_in_range(DMAIV, 6))
{
case DMAIV_NONE:break; // Vector 0: No interrupt
case DMAIV_DMA0IFG:
{
DMA0CTL &=~(DMAEN+DMAIE);
}break;
case DMAIV_DMA1IFG:
{
}break;
case DMAIV_DMA2IFG: break;
default: break;
}
}