查看: 5662|回复: 8

[分享] 【经验分享】KL系列spi主从通信之DMA例程讲解

[复制链接]

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-11-17 16:39:14 | 显示全部楼层 |阅读模式
本次经验分享是在之前发表的“【经验分享】KL系列spi主从通信之查询中断例程”的基础上做的主机DMA发送接收数据的例程,通过该例程,可以让大家熟悉KL系列的DAM结合SPI通信触发方式的使用。
例程主要功能是在KL25实现SPI主从通信的基础上,采用主机DMA发送与接收。发送是将源地址(设置为SRAM的0x20000010)开始存放的13个字节通过DMA传输到SPI0的D寄存器(地址为0x4007_6005)。接收的时候,将接收数据寄存器(SPI0_D)中的数据通过DMA的方式传输到SRAM(地址从0x20000000开始的13个字节)中。
本次经验分享的结构框图如下:

6.jpg

DMA SPI接收与发送的框图分别如下:

7.jpg

8.jpg
本经验分享设计到的详细文档以及代码请查看如下附件:
【经验分享】KL系列spi主从通信之DMA例程.rar (1.27 MB, 下载次数: 481)
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
 楼主| 发表于 2014-11-17 16:39:41 | 显示全部楼层
不足之处,欢迎指正,同时也欢迎大家分享自己的经验!
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

705

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1745
最后登录
1970-1-1
发表于 2014-11-20 14:08:04 | 显示全部楼层
写的很详细,感谢分享!
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    5970
    最后登录
    2020-9-28
    发表于 2014-11-21 10:45:02 | 显示全部楼层
    非常详细的讲解,建议大家先看一下【经验分享】KL系列spi主从通信之查询中断例程后再看此篇。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    41

    帖子

    0

    注册会员

    Rank: 2

    积分
    90
    最后登录
    2014-12-24
    发表于 2014-12-6 00:33:19 | 显示全部楼层
    感谢分享经验哦。。。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    27
    最后登录
    2015-1-30
    发表于 2014-12-10 17:49:14 | 显示全部楼层
    请教个问题。我现在用k60里面spi DMA方式读EEPROM。我用了package里面的SPI TEST。
    以下是测试结果
    -------------- SPI driver example --------------

    This example application demonstrates usage of SPI driver.
    It transfers data to/from external memory over SPI bus.
    The default settings in memory.h apply to TWR-MEM flash memory.
    Test channel is spi2:
    Current baud rate ... 9600000 Hz
    Changing the baud rate to 500000 Hz ... OK
    Current baud rate ... 500000 Hz
    Setting clock mode to SPI_CLK_POL_PHA_MODE0 ... OK
    Getting clock mode ... SPI_CLK_POL_PHA_MODE0
    Setting endian to SPI_DEVICE_BIG_ENDIAN ... OK
    Getting endian ... SPI_DEVICE_BIG_ENDIAN
    Setting transfer mode to SPI_DEVICE_MASTER_MODE ... OK
    Getting transfer mode ... SPI_DEVICE_MASTER_MODE
    Clearing statistics ... OK
    Getting statistics:
    Rx packets:   0
    Tx packets:   0

    Read memory status ... 0x00
    Enable write latch in memory ... OK
    Read memory status ... 0x02
    Write unprotect memory ... OK
    Enable write latch in memory ... OK
    Read memory status ... 0x03
    Write unprotect memory ... OK
    Enable write latch in memory ... OK
    Read memory status ... 0x03
    Erase whole memory chip:
    Read memory status ... 0x03
    Read memory status ... 0x00
    Erase chip ... OK

    Enable write latch in memory ... OK
    Read memory status ... 0x02
    Write byte 0xba to location 0x000000f0 in memory ... done
    Read memory status ... 0x00
    Read byte from location 0x000000f0 in memory ... 0xba
    Byte test ... OK
    Getting statistics:
    Rx packets:   9
    Tx packets:   26

    Enable write latch in memory ... OK
    Read memory status ... 0x02
    Page write 12 bytes to location 0x000001f0 in memory:
    Hello,World!
    Read memory status ... 0x00
    Reading 12 bytes from location 0x000001f0 in memory:
    Hello,World!
    Write short data test ... OK

    Enable write latch in memory ... OK
    Read memory status ... 0x02
    Page write 16 bytes to location 0x000002f0 in memory:
    ABCDEFGHIJKLMNOP
    Enable write latch in memory ... OK
    Read memory status ... 0x02
    Page write 56 bytes to location 0x00000300 in memory:
    QRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz1234567890
    Read memory status ... 0x00
    Reading 72 bytes from location 0x000002f0 in memory:
    QRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz1234567890▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
    Write long data test ... ERROR

    IO_IOCTL_SPI_READ_WRITE ... OK
    Simultaneous write and read - memory read from 0x000000f0 (10):
    Write: 0x03 0x00 0x00 0xf0 0x00 0x00 0x00 0x00 0x00 0x00
    Read : 0xff 0xff 0xff 0xf0 0xf0 0xf0 0x00 0x51 0x52 0x53
    Simultaneous read/write (data == 0xf0) ... ERROR


    -------------- End of example --------------
    小于16个字节的读写正确。不过分两次写的话,第二次的就覆盖第一次。请问有什么建议吗?谢谢。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
     楼主| 发表于 2014-12-11 16:59:45 | 显示全部楼层
    jerryzhang1 发表于 2014-12-10 17:49
    请教个问题。我现在用k60里面spi DMA方式读EEPROM。我用了package里面的SPI TEST。
    以下是测试结果
    ------- ...

    楼主如果有问题,可以直接发个帖子出来,尽量不要跟在分享帖和已结贴后面问问题。
    如果发帖的话,以后有网友遇到和你一样的问题,就有借鉴了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15313
    最后登录
    1970-1-1
    发表于 2015-8-5 17:56:11 | 显示全部楼层
    多谢分享
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    25
    最后登录
    2021-6-7
    发表于 2018-12-25 19:18:25 | 显示全部楼层
    学习
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-2 13:52 , Processed in 0.138819 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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