This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F280037C: LIN转SCI采用DMA进行收发

Part Number: TMS320F280037C

void initDMA()
{

    DMA_initController();

    DMA_configAddresses(DMA_CH5_BASE, (uint16_t *)(LINA_BASE + LIN_O_TD0+2), ComTxRx[0].Buf);
    DMA_configBurst(DMA_CH5_BASE, 1, 1, 0);
    DMA_configTransfer(DMA_CH5_BASE, 2048, 1, 0);
    DMA_configMode(DMA_CH5_BASE, DMA_TRIGGER_LINATX, DMA_CFG_ONESHOT_DISABLE |
                   DMA_CFG_CONTINUOUS_DISABLE | DMA_CFG_SIZE_16BIT);

    DMA_setInterruptMode(DMA_CH5_BASE, DMA_INT_AT_END);
    DMA_enableInterrupt(DMA_CH5_BASE);
    DMA_enableTrigger(DMA_CH5_BASE);

    DMA_configAddresses(DMA_CH6_BASE, ComTxRx[0].Buf,(uint16_t *)(LINA_BASE + LIN_O_RD0+2));
    DMA_configBurst(DMA_CH6_BASE, 1 , 0, 1);
    DMA_configTransfer(DMA_CH6_BASE, 2048, 0, 1);
    DMA_configMode(DMA_CH6_BASE, DMA_TRIGGER_LINARX, DMA_CFG_ONESHOT_DISABLE |
                   DMA_CFG_CONTINUOUS_DISABLE | DMA_CFG_SIZE_16BIT);

    // Configure DMA Ch6 interrupts
    DMA_setInterruptMode(DMA_CH6_BASE, DMA_INT_AT_BEGINNING);
    DMA_enableInterrupt(DMA_CH6_BASE);
    DMA_enableTrigger(DMA_CH6_BASE);
}

void configureSCIMode(void)
{

    Interrupt_register(INT_DMA_CH5, &dmaCh5ISR);
    Interrupt_register(INT_DMA_CH6, &dmaCh6ISR);

    Interrupt_enable(INT_DMA_CH5);
    Interrupt_enable(INT_DMA_CH6);

    initDMA();

    LIN_initModule(LINA_BASE);

    // Enter LIN reset state to perform configurations
    LIN_enterSoftwareReset(LINA_BASE);
    // Switch LIN into SCI mode
    LIN_enableSCIMode(LINA_BASE);
    // Set the SCI communication mode to idle line
    LIN_setSCICommMode(LINA_BASE, LIN_COMM_SCI_IDLELINE);
    // Set SCI to transmit one stop bit
    LIN_setSCIStopBits(LINA_BASE,LIN_SCI_STOP_ONE);
    // Disable parity check
    LIN_disableSCIParity(LINA_BASE);
    // Disable multi-buffer mode
    LIN_enableMultibufferMode(LINA_BASE);
    // Module set to complete operations when halted by debugger
    LIN_setDebugSuspendMode(LINA_BASE, LIN_DEBUG_COMPLETE);
    // Set character length as 8-bits
    LIN_setSCICharLength(LINA_BASE, 8);
    // Set to 1 character in response field
    LIN_setSCIFrameLength(LINA_BASE, 2);
//    LIN_enableIntLoopback(LINA_BASE);
//    LIN_setBaudRatePrescaler(LINA_BASE, 0x000001a, 0x0002);
//    LIN_setBaudRatePrescaler(LINA_BASE, 0x35, 0x0004);
    LIN_setBaudRatePrescaler(LINA_BASE, 0x40, 0x0002);
    // Enable interrupt for when a frame has been completely received
    LIN_enableSCIInterrupt(LINA_BASE, LIN_SCI_INT_TX_DMA);
    LIN_enableSCIInterrupt(LINA_BASE, LIN_SCI_INT_RX_DMA);

    LIN_exitSoftwareReset(LINA_BASE);

    DMA_startChannel(DMA_CH6_BASE);

}
void Uart_Init(void)
{
    GPIO_setPinConfig(GPIO_46_LINA_TX);
    GPIO_setPinConfig(GPIO_33_LINA_RX);

    configureSCIMode();

}

采用如上配置可进行偶数字节接收,现在想改成一个字节发收,

 LIN_setSCIFrameLength(LINA_BASE, 2);改成    LIN_setSCIFrameLength(LINA_BASE, 1);

DMA_configAddresses(DMA_CH6_BASE, ComTxRx[0].Buf,(uint16_t *)(LINA_BASE + LIN_O_RD0+2));
DMA_configBurst(DMA_CH6_BASE, 1 , 0, 1);
DMA_configTransfer(DMA_CH6_BASE, 2048, 0, 1);

这里配置不知道怎么改,改了好多种都触发不了中断了,请问如何更改?