查看: 2791|回复: 6

[求助] 求助FAE大神们关于K60 SPI的DMA传输

[复制链接]

该用户从未签到

21

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
330
最后登录
1970-1-1
发表于 2015-1-15 11:25:10 | 显示全部楼层 |阅读模式
本帖最后由 冰水混合物-347708 于 2015-1-15 11:26 编辑

本人希望实现通过DMA实现将内存中的数据传输到SPI的数据寄存器PUSHR上,测试使用的SPI0和SPI1的回环测试,轮询和中断条件下都已经通过,现在希望通过DMA将数组内容通过SPI0发送至SPI1。已做操作:
1 修改SPI0的相关寄存器:使能了RSER寄存器的TFFF_RE和TFFF_DIRS
2 DMA寄存器操作:
  1.         dma0_init_struct.DMA_CHx = DMA_CH0;                                   //CH0通道
  2.         dma0_init_struct.DMA_Req = SPI0_TRAN_DMAREQ;                        //SPI0_TRAN_DMAREQ为触发源
  3.         dma0_init_struct.DMA_MajorLoopCnt = 26;                                //主循环计数值
  4.         dma0_init_struct.DMA_MinorByteCnt = 1;                                //次循环字节计数
  5.         dma0_init_struct.DMA_SourceAddr = (uint32_t)info;        //源地址
  6.         dma0_init_struct.DMA_SourceAddrOffset = 1;                        //源地址偏移:每次读入增加1
  7.         dma0_init_struct.DMA_SourceDataSize = DMA_SRC_8BIT;        //源地址数据宽度
  8.         dma0_init_struct.DMA_DestAddr = (uint32_t)&SPI0->PUSHR;     // (uint32_t)&SPI0->PUSHR;
  9.         dma0_init_struct.DMA_DestAddrOffset = 0;                        //目的地址偏移:每次读入增加0
  10.         dma0_init_struct.DMA_DestDataSize = DMA_DST_8BIT;        //目的地址数据宽度
  11.         dma0_init_struct.DMA_AutoDisableReq = TRUE;                        //自动禁用请求
  12.         //初始化DMA
  13.         DMA_Init(dma0_init_struct);        
  14.         DMA_EnableReq(DMA_CH0);
复制代码
对于DMA的触发源还是不太理解,设置了spi0的发送作为触发源,那么到底在什么时候会触发啊?触发之后DMA就开始将数据从源地址搬到目的地址了吗?SPI发送的时候需要设置PUSHR16个字节的命令和数据,DMA传输的时候在哪里设置?


想请教还需要设置什么?看了官方教程DSPI 150MHZ DMA,代码实在不太看得明白~求教各位了~
我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-1-15 13:42:22 | 显示全部楼层
建议可以参考此贴:SPI+eDMA工程
https://www.nxpic.org.cn/module/forum/thread-569108-1-1.html
回复 支持 反对

使用道具 举报

该用户从未签到

21

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
330
最后登录
1970-1-1
 楼主| 发表于 2015-1-15 13:55:09 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-1-15 13:42
建议可以参考此贴:SPI+eDMA工程
https://www.nxpic.org.cn/module/forum/thread-569108-1-1.html ...

谢谢,这个已经看过好几遍,无奈这个代码实在看的不明白,对如何触发源如何触发DMA也没介绍,希望细节方面可以详细介绍下~
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-1-15 14:45:35 | 显示全部楼层
冰水混合物-347708 发表于 2015-1-15 13:55
谢谢,这个已经看过好几遍,无奈这个代码实在看的不明白,对如何触发源如何触发DMA也没介绍,希望细节方 ...

再来点干货。
https://www.nxpic.org.cn/module/forum/thread-582281-1-1.html
回复 支持 反对

使用道具 举报

该用户从未签到

21

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
330
最后登录
1970-1-1
 楼主| 发表于 2015-1-15 15:17:03 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-1-15 14:45
再来点干货。
https://www.nxpic.org.cn/module/forum/thread-582281-1-1.html

我在调试的时候发现SR的TFFF标志位是置位的(因为MCR寄存器的MDIS位为,0,TFFF复位的值就为1),但是没有触发DMA请求,数据没有收到,不知大神有什么好的建议?
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-1-16 10:25:46 | 显示全部楼层
冰水混合物-347708 发表于 2015-1-15 15:17
我在调试的时候发现SR的TFFF标志位是置位的(因为MCR寄存器的MDIS位为,0,TFFF复位的值就为1),但是没有 ...

建议先可以使用可以软件触发DMA的模式,先让DMA数据传输的功能实现,再尝试用SPI硬件触发DMA操作。
回复 支持 反对

使用道具 举报

该用户从未签到

21

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
330
最后登录
1970-1-1
 楼主| 发表于 2015-1-19 21:49:50 | 显示全部楼层
本帖最后由 冰水混合物-347708 于 2015-1-19 21:51 编辑
FSL_TICS_ZP 发表于 2015-1-16 10:25
建议先可以使用可以软件触发DMA的模式,先让DMA数据传输的功能实现,再尝试用SPI硬件触发DMA操作。 ...

软件触发做完才实验SPI触发的,软件上使用PTB触发,将一个数据的内容搬运到另外一个数据是ok的,还在纠结中~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 05:43 , Processed in 0.097124 second(s), 27 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表