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.

TMS320F280025C: controlCARDs板卡在调试Lin作为SCI模式并采用DMA接收时,DMA中断相关问题

Part Number: TMS320F280025C

采用历程lin_ex3_sci_dma历程

修改如下

uint32_t PRESCALER=0x0000144;
uint16_t DIVIDER=0x0008;

波特率改为19200

Device_initGPIO();
GPIO_setPinConfig(DEVICE_GPIO_CFG_LINTXA);
GPIO_setPinConfig(DEVICE_GPIO_CFG_LINRXA);

初始化GPIO

//Interrupt_enable(INT_DMA_CH5);
Interrupt_enable(INT_DMA_CH6);

屏蔽发送中断,只保留接收中断

 

LIN_disableIntLoopback(LINA_BASE);

关闭回环

DMA_setInterruptMode(DMA_CH6_BASE, DMA_INT_AT_BEGINNING);

中断设置为开启即中断

Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP7);

DMA通道6中断内仅保留清除标志位

现在的现象是,DMA确实能搬运过来数据,但是只有第一次发送数据时可以触发DMA通道6的中断,后续的数据来了也不会触发中断,由于项目赶得紧,所以来论坛询问,最终需要串口每接收一次数据包DMA触发一次中断

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,DMA 中断在 DMA 传输开始或结束时生成。 而且不会在每次burst完成时生成 DMA 中断。 如果您想要在burst完成时看到 DMA 中断,请将 transfer_size 设置为 1。

  • 我确实发现了这一点,并且做出了尝试,确实可以每次触发中断,但我设置的Burst长度为8,每次中断只接收到了4个u16,修改到更长也不能增加,依然是4个u16,我发送的是一个32字节的数据,每次接收到的数据都是相同的

  • 好的那再跟进给工程师问下,有答复尽快给到您。

  • 您好,选 16 位读取 (或) 32 位读是取决于寄存器大小。 例如:对于 SCIRD / SCITD ,您可以使用 16 位。 当burst大小设置为 8 时,应该接收 8 位、 16 位而不是 4 位。

  • 您好,我也遇到了上述现象,DMA确实能搬运过来数据,但是只有第一次发送数据时可以触发DMA通道6的中断,后续的数据来了也不会触发中断,中断之进入了一次,请问这是DMA哪里配置有问题吗?

  • 您好,建议您将您的问题发布一个新帖,您可以点击右上方“提出相关问题”,这样方便工程师来单独跟进您的问题。