Возникла такая проблема, DMA не пересылает данные в буфер передачи.
Помогите найти ошибку, пожалуйста.
Код
unsigned int I2C_Slave;
unsigned int I2C_TX_Cnt;
unsigned int I2C_RX_Cnt;
unsigned char I2C_TX_Buf[3];
unsigned char I2C_RX_Buf[3];

void I2C_Init(void)
{
    P3SEL = 0x0A;
    P3DIR &= ~0x0A;
    U0CTL |= I2C + SYNC;
    U0CTL &= ~I2CEN;
    I2CTCTL = I2CTRX + I2CSSEL_2;
    I2COA = 0x01A5;
    I2CPSC = 0x00;
    I2CSCLH = 0x03;
    I2CSCLL = 0x03;
    U0CTL |= TXDMAEN + RXDMAEN;
    U0CTL |= I2CEN;
    
    DMACTL0 = DMA1TSEL_4 +    // I2C Transmit
        DMA2TSEL_3;    // I2C Recieve
    DMA1CTL = DMASRCINCR_3 +// Source address increase
        DMALEVEL +    // Trigger on level
        DMASRCBYTE +    // Source - Byte
        DMADSTBYTE;    // Destination - Byte
    DMA2CTL = DMADSTINCR_3 +
        DMALEVEL +
        DMASRCBYTE +
        DMADSTBYTE;
    DMA1SA = (int) I2C_TX_Buf;
    DMA1DA = I2CDRB_;
    DMA2SA = I2CDRB_;
    DMA2DA = (int) I2C_RX_Buf;
}
void I2C_WriteInit(void)
{
    U0CTL |= MST;
    I2CTCTL |= I2CTRX;      // I2CTRX=1 => Transmit Mode (R/nW bit = 0)
    I2CIFG &= ~TXRDYIFG;
    I2CIE |= TXRDYIE;
    I2CSA = I2C_Slave;
    I2CNDAT = I2C_TX_Cnt;
    DMA1SZ = I2C_TX_Cnt;
    DMA1CTL |= DMAEN;
}
void I2C_Write(void)
{
    while (I2CDCTL&I2CBUSY);
    I2C_WriteInit();
    I2CTCTL |= I2CSTT + I2CSTP;
}
void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;
    I2C_Init();
    _EINT();
    I2C_Slave = 0x50;
    I2C_TX_Cnt = 3;
    I2C_TX_Buf[0] = 0x00;
    I2C_TX_Buf[1] = 0x00;
    I2C_TX_Buf[2] = 0x55;
    I2C_Write();
    while (I2CDCTL&I2CBUSY);    // на этой строке остаётся навсегда :(
}


Ведомое устройство 100% рабочее (24LC64) (при заполнении буфера по прерыванию всё работает).
Контроллер MSP430F1611.
Заранее благодарен за помощь.