打印
[KungFu32位 MCU]

除SPI2外其它SPI通道 DMA无法发送

[复制链接]
3455|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GchLeo|  楼主 | 2021-11-29 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 GchLeo 于 2021-12-2 16:23 编辑

1. 我使用了模板SPI_Master_DMA_Mode,自带使用的是SPI2,调试可以正常使用
2. 当我把模板中的SPI2换成其它SPIX(SPI0,SPI1,SPI3)均无法触发DMA0通道的发送完成中断,导致无法发送
3. 仿真发现修改SPIX后,相应SPI的配置寄存器与模板中SPI2除了CTLR5,PADDR5/6,CPAR5/6外也都相同,DMA配置也是完全相同修改后的工程见附件

SPI_Master.zip

1.97 MB

使用特权

评论回复
沙发
呐咯密密| | 2021-12-1 09:43 | 只看该作者
有几个问题需要楼主确认一下,切换和SPIX后相应的SPI初始化有没有设置完成,引脚有没有对应上相应的SPIx。其次,对照DMA通道请求表查一下DMA的通道是否对应。你用的哪一款MCU也没有说,只根据你的工程名称我在官网找不到这颗料,如果可以提供一下手册吧

使用特权

评论回复
评论
GchLeo 2021-12-3 10:17 回复TA
我测试了下原厂的SPI2 DMA 把模板master SPI2 DMA烧到一块开发板上 把模板slave SPI2 DMA烧到一块开发板上 然后相互通信,在slave端,进不了发送和接收中断 
板凳
GchLeo|  楼主 | 2021-12-2 10:04 | 只看该作者
呐咯密密 发表于 2021-12-1 09:43
有几个问题需要楼主确认一下,切换和SPIX后相应的SPI初始化有没有设置完成,引脚有没有对应上相应的SPIx。 ...

已经找到原因了是由于每个SPI对应的DMA通道不一致导致的,一开始以为DMA通道可以配置给任意SPI呢

使用特权

评论回复
地板
呐咯密密| | 2021-12-2 10:06 | 只看该作者
GchLeo 发表于 2021-12-2 10:04
已经找到原因了是由于每个SPI对应的DMA通道不一致导致的,一开始以为DMA通道可以配置给任意SPI呢 ...

解决了就好,手册还是很重要的,可惜我在官网找不着

使用特权

评论回复
5
GchLeo|  楼主 | 2021-12-2 14:46 | 只看该作者
本帖最后由 GchLeo 于 2021-12-2 14:49 编辑
呐咯密密 发表于 2021-12-2 10:06
解决了就好,手册还是很重要的,可惜我在官网找不着

DMA 发送中断都正常了,但是DMA接受中断总是进不去,总线上看RX引脚是有数据的,半传输中断标志位HTIF可置位,但是FTIF总是不置位,这个可能有哪些原因

使用特权

评论回复
6
GchLeo|  楼主 | 2021-12-2 14:49 | 只看该作者
呐咯密密 发表于 2021-12-1 09:43
有几个问题需要楼主确认一下,切换和SPIX后相应的SPI初始化有没有设置完成,引脚有没有对应上相应的SPIx。 ...

DMA 发送中断都正常了,但是DMA接受中断总是进不去,总线上看RX引脚是有数据的,半传输中断标志位HTIF可置位,但是FTIF总是不置位,这个可能有哪些原因

使用特权

评论回复
7
呐咯密密| | 2021-12-2 14:53 | 只看该作者
GchLeo 发表于 2021-12-2 14:46
DMA 发送中断都正常了,但是DMA接受中断总是进不去,总线上看RX引脚是有数据的,半传输中断标志位HTIF可置 ...

你的数据接收完整吗?如果使用半传输中断能进去吗

使用特权

评论回复
评论
GchLeo 2021-12-2 16:00 回复TA
看总线上是有数据的,但是接受应该是不完整的,如果完整就应该进中断了 
GchLeo 2021-12-2 15:59 回复TA
进去了几下,然后就进不去了 
8
GchLeo|  楼主 | 2021-12-2 16:02 | 只看该作者
呐咯密密 发表于 2021-12-2 14:53
你的数据接收完整吗?如果使用半传输中断能进去吗

还有我发现SDO输出的空闲电平是低电平,我把SDO的引脚配置成为上拉输出空闲电平依然是低电平

使用特权

评论回复
9
Justin256| | 2021-12-2 16:04 | 只看该作者
进来学习下,越来越好!

使用特权

评论回复
10
呐咯密密| | 2021-12-2 16:06 | 只看该作者
GchLeo 发表于 2021-12-2 16:02
还有我发现SDO输出的空闲电平是低电平,我把SDO的引脚配置成为上拉输出空闲电平依然是低电平 ...

你配置成上拉输出,但是你空闲的时候没输出,不影响空闲电平。 你用SPI2是不是所有功能都可以。没有任何问题的那种,中断啥的也正常

使用特权

评论回复
11
GchLeo|  楼主 | 2021-12-2 16:15 | 只看该作者
本帖最后由 GchLeo 于 2021-12-2 16:25 编辑
呐咯密密 发表于 2021-12-2 16:06
你配置成上拉输出,但是你空闲的时候没输出,不影响空闲电平。 你用SPI2是不是所有功能都可以。没有任何 ...

我现在用的就是SPI2(主板,主机用), 因为SPI从机是一个支持16bit spi的传感器,我暂时用一块板子模拟的SPI的从机(用的是SPI1)MCU:KF32A156MQV我把主机的程序放在附件里了



使用特权

评论回复
12
GchLeo|  楼主 | 2021-12-2 16:39 | 只看该作者
呐咯密密 发表于 2021-12-2 16:06
你配置成上拉输出,但是你空闲的时候没输出,不影响空闲电平。 你用SPI2是不是所有功能都可以。没有任何 ...

那SDO空闲输出的电平由什么决定

使用特权

评论回复
13
呐咯密密| | 2021-12-2 17:07 | 只看该作者
GchLeo 发表于 2021-12-2 16:15
我现在用的就是SPI2(主板,主机用), 因为SPI从机是一个支持16bit spi的传感器,我暂时用一块板子模拟的SPI ...

首先SDO的电平你不用管,如果你非要空闲高电平你就在引脚上拉。根据全文,你的SPI2代码是用的例程是吧,首先你需要用逻辑分析仪解析数据接收是否完整,如果没有逻辑分析仪,那就在debug模式下看接收数据是否完整。如果不完整你需要看一下SPI的速度是否正确,DMA的速度是否足够,因为我遇到因为DMA速度不够而导致数据接收不完整。如果上两项都无问题。那你先不用DMA直接读取数据,看看数据是否完整。如果是完整的。那么用示波器看一下你的CSN是否是在所有的CLK发完后再上拉回来的,因为会有使能提前回拉,导致数据不完整。
其实你的思路是先保证你不使用中断能完整无误的通信,在这个前提下再进行中断,如果你的数据都接收不完整,后面的活都是无用功。

使用特权

评论回复
14
GchLeo|  楼主 | 2021-12-2 17:36 | 只看该作者
呐咯密密 发表于 2021-12-2 17:07
首先SDO的电平你不用管,如果你非要空闲高电平你就在引脚上拉。根据全文,你的SPI2代码是用的例程是吧, ...

我模仿从机,并没有使用CS引脚,因为只有一个从机,就没有接CS
我主机用的一块开发板,从机用的一块开发板,里面用的都是样例程序

使用特权

评论回复
评论
GchLeo 2021-12-2 17:38 回复TA
我的想法是,在只有一个从机的情况下,不存在总线竞争,主机完全无碍控制时钟,主从机的SPI配置基本相同,那么CS引脚没有什么作用吧 
GchLeo 2021-12-2 17:36 回复TA
总线数据我用示波器看了,都是完整的 
15
GchLeo|  楼主 | 2021-12-2 17:43 | 只看该作者
本帖最后由 GchLeo 于 2021-12-2 17:56 编辑
呐咯密密 发表于 2021-12-2 17:07
首先SDO的电平你不用管,如果你非要空闲高电平你就在引脚上拉。根据全文,你的SPI2代码是用的例程是吧, ...

我用主机发的数据,在示波器上看都发出来了,且是完整的,然后在从机端接收仿真,发现数据会移位。
我仿真的结果就是,数据bit都保存完整,就是接收到的数据对这些数据进行了移位,而且在不同上电周期,移位也是不同的。环行的移位(最后一位可以变成第一位,第一位可以变成第二位这样的)我使用的是16bit传输方式下面是我写下来从机接收到主机发送的数据:
主机发送0X017F  0000 0001 0111 1111
从机接收0xFE02  1111 1110 0000 0010
从机接收0x80BF  1000 0000 1011 1111
从机接收0x17F0  0001 0111 1111 0000
从机接收0xC05F  1100 0000 0101 1111(收到的数据都可以看成是正确数据的剪切重组)
偶尔也会有接收正确,我记得同样的程序,昨天我是全天都接收正确的


DMA速度是否足够怎么理解,波特率我设置的是166K

使用特权

评论回复
16
caigang13| | 2021-12-2 20:41 | 只看该作者
是不是还有其它配置没有修改

使用特权

评论回复
17
呐咯密密| | 2021-12-3 09:37 | 只看该作者
GchLeo 发表于 2021-12-2 17:43
我用主机发的数据,在示波器上看都发出来了,且是完整的,然后在从机端接收仿真,发现数据会移位。
我仿真 ...

你的从设备的SPI配置代码贴一下,或者你就用传感器测试,然后把传感器的SPI协议贴出来

使用特权

评论回复
18
GchLeo|  楼主 | 2021-12-7 11:13 | 只看该作者
此问题,暂时关闭,暂时开发没有问题了
1. 把SPI2 polling slave代码放到一块负载板中
2. 把SPI2 DMA master代码放到一块负载板中
目前调试正常,暂无问题,我后续会把SPI0~SPI3全部测试一遍,

使用特权

评论回复
19
单片小菜| | 2021-12-22 16:24 | 只看该作者
这个问题是咋回事?没有关闭?

使用特权

评论回复
20
别看我照片| | 2021-12-22 16:39 | 只看该作者
为什么将问题关闭了,咋回事呢?

使用特权

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

本版积分规则

3

主题

19

帖子

1

粉丝