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