Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins
您好! 1、CAN的发送,架构手册上发送有Tx buffer模式,fifo模式,和queue模式,实际在modusbox的设备配置器里只有Tx buffer模式,应用手册里也没有相关说明。希望能有对应的例程或说明文档。 2,ADC的应用手册AN234282里,设备配置器里的截图和配置代码不一致,无法确定哪个是对的,目前需要用到定时器触发ADC3整组采样,采样完成使用DMA将数据自动传输到内存中。例如ADC0 通道0到通道10通过定时器触发,触发一次采样整组数据,采样完成触发DMA更新到一个2维数组内存中。 谢谢! alex.Wang
0 Likes
1 Solution
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins

Dear Lingling,

  1. CAN有一个比较大的message RAM区,客户打算使用TxFIFO模式,这个模式在架构手册里有介绍,但是没有例程,且Device designer里也没有相关配置选项。
  2. 这个例程客户之前已经测试过了,DMA也使用了。客户问题主要是关于定时器计时到了后如何触发ADC一组10个通道进行转换一次,因为每个通道的都有一个结果寄存器,ADC组转换完成后如何将多个目标地址通过DMA搬运到2维数组中。

3、客户举列到,在STM32接收有一个中断叫空闲中断,可以通过空闲中断进行接收的处理,通过DMA当前传输的地址和空闲中断通过计算共同完成接收。可以接收不定长度的数据,但是XMC7200没找到相关的功能。

 

谢谢!

alex.Wang

View solution in original post

0 Likes
12 Replies
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins

       3SCB-UART模式下,有没有方案可以使用DMA接收不定长度的数据。中断的方式一个一个字节接收效率太低

0 Likes
lock attach
Attachments are accessible only for community members.

1: 

cy_en_canfd_status_t Cy_CANFD_Init(CANFD_Type *base, uint32_t chan,
const cy_stc_canfd_config_t *config,
cy_stc_canfd_context_t *context)

这个函数里面描述的是tx部分没有用tx fifo和tx queue。

 

 

            /* Configure Tx Buffer and Tx FIFO/Queue */
            CANFD_TXESC(base, chan) = _VAL2FLD(CANFD_CH_M_TTCAN_TXESC_TBDS, config->txBufferDataSize);

            /* Set Tx FIFO/QUEUE (not used):
             *  The Watermark interrupt disabled
             *  Tx Event FIFO disabled
             *  The start address of Tx Event FIFO in Message RAM
            */
            CANFD_TXEFC(base, chan) =
            _VAL2FLD(CANFD_CH_M_TTCAN_TXEFC_EFWM, 0UL) |
            _VAL2FLD(CANFD_CH_M_TTCAN_TXEFC_EFS, 0UL)  |
            _VAL2FLD(CANFD_CH_M_TTCAN_TXEFC_EFSA, _FLD2VAL(CANFD_CH_M_TTCAN_RXBC_RBSA, CANFD_RXBC(base, chan)) +
                                                          (config->noOfRxBuffers * (CY_CANFD_R0_R1_SIZE +
                                                           dataBufferSizeInWord[config->rxBufferDataSize])));

 

 

我想确认一下,你是有需要用到fifo和queue吗?具体的需求是什么?

2:DMA部分:

我先给你一个测试代码是关于定时器去trigger 1路ADC进行采样,数据送到DMA。DMA的部分你不一定要设置1个数据,我给你的测试代码是开的10个数据,X loop 为10个数据,全部收到以后DMA 产生中断。这个地方的设置你可以根据你自己的实际需要进行设置。(二维数组你自己改变配置,参考附件的一维数组)

3:ADC 部分:

附件的代码是ADC0使能了两路channel,第二路channel是End of Group,采集结束以后触发ADC的中断,在中断里面可以读取值。

你可以用ADC channel trigger DMA,这样传输数据。具体的你需要根据自己的需求再做一些定制化的修改。

4:这个UART是个异步通信,如果什么信息都不提供,只能一个个接收。如果认为效率不够高,那也要加包头包尾帧长度信息告诉从机,进行设置对应的触发条件。

Thanks,

Lingling

 

 

0 Likes
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins

Dear Lingling,

  1. CAN有一个比较大的message RAM区,客户打算使用TxFIFO模式,这个模式在架构手册里有介绍,但是没有例程,且Device designer里也没有相关配置选项。
  2. 这个例程客户之前已经测试过了,DMA也使用了。客户问题主要是关于定时器计时到了后如何触发ADC一组10个通道进行转换一次,因为每个通道的都有一个结果寄存器,ADC组转换完成后如何将多个目标地址通过DMA搬运到2维数组中。

3、客户举列到,在STM32接收有一个中断叫空闲中断,可以通过空闲中断进行接收的处理,通过DMA当前传输的地址和空闲中断通过计算共同完成接收。可以接收不定长度的数据,但是XMC7200没找到相关的功能。

 

谢谢!

alex.Wang

0 Likes
lock attach
Attachments are accessible only for community members.

1: 你说的10路通道同时触发转换,根据我的理解XMC7000D没有这个功能。

2:你可以trigger 第一路通过SAR AMUX 自动去切换做下面不同路的转换。每一路转换好了直接trigger DMA 传输,在你预期的次数以后产生中断。

3:第三点你说的空闲中断这种我不清楚,但是你可以通过软件进行做,多长事件没有接收到数据,判断当前接收完成了。

4:在附件我加载了 100ms triggerADC,ADC 配置了两路channel,每路channel trigger DMA,你可以通过我设置的flag 看ADC的中断,判断DMA有没有trigger,也可以通过10个数据产生一次DMA的中断进行看,具体你需要怎么处理这些数据,需要客户自己去配置。

0 Likes
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins

谢谢!

关于第一点,

  1. CAN有一个比较大的message RAM区,客户打算使用TxFIFO模式,这个模式在架构手册里有介绍,但是没有例程,且Device designer里也没有相关配置选项。

看看有没有解决办法,谢谢!

0 Likes
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins

Dear Lingling,

感谢支持!

1). ADC 我尝试使用这种方式测试一下。可能存在的问题是,我们ADC使用的比较多,80多路,这样的话会占用较多的DMA通道。另外这个工程我无法进行编译,且设备配置器也无法打开,我用的是ModusToolBox 3.1 2).  用DMA的目的就是在没有CPU干预的情况下进行接收,只会在DMA接收到一定数据长度或空闲时才会触发中断,CPU进行数据处理,通过此方法来降低CPU负载,不会开启串口的接收中断,不可能每接收一个字节都去设置超时,如果这样做的话不如直接开接收中断了,连超时都不用判断了。

 

谢谢!

Alex.Wang|18019037833

 

 

0 Likes

1: 你把我给你的打包的工程放在你建的workspace外面,通过新建的方法把这个导进来。

2:我们DMA有很多通道的,在资源方面我觉得是可以的。你可以通过for 循环的方式进行配置,不过具体的配置,你可以自己再琢磨一下,怎么写好。

3:即使你用DMA,你要要设置一个具体的数据进行处理,比如50次,10次处理一次,然后如果多长事件没有你就把DMA目的地址里面的数据读出来就可以了。ADC 转换好了会传给DMA,DMA 累计到一定的数会生成中断。即使不生成中断,这些数据也都在目的地址里面。

 

 

0 Likes
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins

Dear Lingling,

导入进来后,很多路径找不到,design.modus也打不开,这个版本是比较老吧,显示的是3.0的,能否转成3.1的,

 

谢谢!

alex.Wang

0 Likes

你私信一个电话沟通方式给我,我告诉你怎么导入。我就是在MTB3.1的版本上面开发的。你不要放到workspace的文件夹里面,用import existing application那个操作。

0 Likes
lock attach
Attachments are accessible only for community members.

你把我附件的test的压缩文件解压缩,你重新建一个文件夹,把这个EVTGEN_trigger_ADC 文件夹拷贝到新的文件夹,MTB toolbox 打开,workspace的路径放到你新建的文件夹下面,等到MTB打开以后,z再左下角点击import Existing Application In-Place。

LinglingG_46_0-1705375851319.png

 

按照我上面的方法可以导进去,然后你打开device config里面,看ADC 部分和DMA部分,看过之后如果有什么问题,我们再继续讨论。

Thanks,

Lingling

0 Likes
lock attach
Attachments are accessible only for community members.
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins

Dear Lingling,

Demo测试是可以的,  目前存在一个问题,我在例程上更改为PWM触发采样也可以正常运行,例程里用的是adc0,单独触发ADC0正常,但是我增加并更改为触发ADC2就无法正常触发采集,如果同时触发ADC0ADC2,则两个ADC触发采样都是正常的。附件为触发ADC2的工程,通过寄存器查看是无法正常触发的,请帮助查看原因!

Thanks!

alex.Wang|18019037833

 

0 Likes
Alex8274
Level 3
Level 3
Distributor - Future(GC)
10 replies posted 10 questions asked 25 sign-ins

Dear Lingling,

非常感谢,我的号码是18019037833

Thanks!

alex.Wang

0 Likes