打印
[技术问答]

请教关于M467的UART-DMA应用!

[复制链接]
869|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
東南博士|  楼主 | 2023-10-23 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 東南博士 于 2023-10-24 09:29 编辑

请教关于M467的UART-DMA应用!
我现在使用M467的最新料,要替换一款其他MCU。看中了贵司的4XCANFD,以及多达10路串口,以及EPWM-ACC中断并停止发出脉冲的功能。
现在我有几点疑问,也是涉及到产品要小批量,马上就要量产的关键时期。

1、串口的0--9的TX,RX,是否可以协助写一款例程,全部打开PDMA,进行高速收发。我看到BSP,按照UART-RX[0---9],UART-TX[10---19]的序号进行分配。并未成功。
2、PDMA0.1通道,所允许的最多通道,或者用户该如何合理分配?
3、EPWM-ACC中断的功能,如果是单次触发,客户如果能够将其扩充至大于65535个脉冲个数?除了在中断累加循环计次,还有其他好的方法吗?

使用特权

评论回复
沙发
21ic小管家| | 2023-10-23 09:59 | 只看该作者
@奔跑的牛 @clyu @Risn 请新唐版主关注本帖并解答

使用特权

评论回复
板凳
小灵通2018| | 2023-10-23 14:07 | 只看该作者
这么多通道的,只能让牛总来解决了

使用特权

评论回复
地板
laocuo1142| | 2023-10-24 09:21 | 只看该作者
关于串口0-9的TX, RX,协助写一款例程,全部打开PDMA进行高速收发的问题:
您可以在BSP中按照UART-RX[0---9], UART-RX[10---19]的序号进行分配,但是需要确保在相应的UART配置中启用了PDMA。在我们的M467器件中,每个UART都可以配置为使用PDMA进行数据传输。您需要为每个UART配置相应的PDMA通道,并且设置PDMA的传输参数,例如传输方向、触发方式等。您可以在我们的UART-DMA用户手册中找到更多的信息。

此外,我们提供了一些UART-DMA的示例代码,您可以参考这些示例代码来编写您的应用程序。这些示例代码展示了如何配置UART和PDMA,以及如何处理UART的数据接收和发送。

关于PDMA0.1通道所允许的最多通道或用户该如何合理分配的问题:
在我们的M467器件中,每个PDMA通道可以支持多个任务。每个任务可以由一个单独的源地址和一个单独的目标地址组成。因此,您可以根据您的应用程序的需求来分配PDMA通道。

如果您需要同时进行多个数据传输任务,您可以将多个任务分配给同一个PDMA通道。例如,您可以将多个UART的数据接收任务分配给同一个PDMA通道,以便同时传输来自不同UART的数据。

如果您需要更多的通道来支持更多的任务,您可以考虑增加PDMA的通道数量。我们的M467器件支持多个PDMA控制器,每个控制器都有自己的通道数量。您可以在我们的数据手册中查找更多关于PDMA控制器的信息。

关于EPWM-ACC中断的功能,如果是单次触发,客户如果能够将其扩充至大于65535个脉冲个数?除了在中断累加循环计次,还有其他好的方法吗?
EPWM-ACC中断的功能是基于计数值的,可以配置为单次触发或者周期触发。如果需要将其扩充至大于65535个脉冲个数,您可以考虑以下方法:

a. 增加计数值:您可以增加EPWM的计数值,以生成更多的脉冲个数。请注意,增加计数值将导致脉冲的频率降低。

b. 使用多个EPWM模块:如果您需要生成更多的脉冲个数,您可以考虑使用多个EPWM模块。每个EPWM模块都有自己的计数值和输出端口,因此您可以通过配置多个EPWM模块来生成更多的脉冲个数。

c. 使用外部计数器:另一种方法是使用外部计数器来生成更多的脉冲个数。您可以使用一个外部计数器来计数您需要的脉冲个数,然后将这个计数器的输出连接到EPWM的输入端口。这样,每次EPWM的周期结束时,外部计数器的值将被重置,并继续计数直到达到您需要的脉冲个数。

使用特权

评论回复
5
東南博士|  楼主 | 2023-10-24 10:02 | 只看该作者
laocuo1142 发表于 2023-10-24 09:21
关于串口0-9的TX, RX,协助写一款例程,全部打开PDMA进行高速收发的问题:
您可以在BSP中按照UART-RX[0---9 ...

UART-RX[0---9], UART-TX[10---19]序号进行分配。那么在进行PDMAOPEN(PDMA0,XXX)的时候,XXX对应的数据都需要进行1<<X的操作吗?

使用特权

评论回复
6
東南博士|  楼主 | 2023-10-24 11:05 | 只看该作者
本帖最后由 東南博士 于 2023-10-24 11:08 编辑

项目时间来不及了。。。最好帮忙协助给一个PDMA串口发送的例程。。。

使用特权

评论回复
7
東南博士|  楼主 | 2023-10-24 11:05 | 只看该作者
laocuo1142 发表于 2023-10-24 09:21
关于串口0-9的TX, RX,协助写一款例程,全部打开PDMA进行高速收发的问题:
您可以在BSP中按照UART-RX[0---9 ...

项目时间来不及了。。。最好帮忙协助给一个PDMA串口发送的例程。。。

使用特权

评论回复
8
cr315| | 2023-10-31 11:28 | 只看该作者
// 配置PDMA通道和参数  
PDMA_InitTypeDef PDMA_InitStruct = {0};  
PDMA_InitStruct.Instance = PDMA;  
PDMA_InitStruct.Request = UART_TX_DMA_CH;  
PDMA_InitStruct.ChannelPreemptionPriority = 0;  
PDMA_InitStruct.BurstType = PDMA_BURST_SINGLE;  
PDMA_InitStruct.TransferMode = PDMA_TRANSFERMODE_TO_MEMORY;  
PDMA_InitStruct.SrcInc = PDMA_SRC_INC_NO;  
PDMA_InitStruct.DstInc = PDMA_DST_INC_NO;  
PDMA_InitStruct.MajorTickDiv = 0;  
PDMA_InitStruct.MinorTickDiv = 0;  
PDMA_Init(PDMA, &PDMA_InitStruct);  
  
// 配置串口发送DMA通道  
PDMA_SetTransferAddr(PDMA, UART_TX_DMA_CH, (uint32_t)&UART1->DAT, PDMA_SAR_FIX, (uint32_t)DestArray, PDMA_DAR_INC);  
  
// 配置后主函数打开PDMA通道  
SYS_ResetModule(PDMA_RST);  
PDMA_Open(PDMA, (1<<UART_TX_DMA_CH));

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

382

主题

6081

帖子

34

粉丝