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);
这里配置不知道怎么改,改了好多种都触发不了中断了,请问如何更改?