查看: 5159|回复: 12

[原创] KL25的SPI中断传输:连续两次传输不同字节,无法通信

[复制链接]

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
发表于 2015-10-16 10:11:47 | 显示全部楼层 |阅读模式
我参考了官方的SPI中断传输的PE例程,kl25_sc_rev10\klxx-sc-pex\projects\spi_demo在这个例程中进行了两次中断传输:
第一次:主机发message给从机,从机发dummy给主机。
第二次:主机发dummy给从机,从机把收到的message发给从机。
在原例程中,第一次和第二次发送的message和dummy,数据大小都是相同的。
我在原例程的基础上进行了如下修改:
第一次:主机发5个字节的命令Start给从机,从机发5个字节的dummy给主机。
第二次:主机发15个字节的dummy数据(程序中是"dummy for data")给从机,从机发15个字节的数据给主机(程序中是"Data For Slave")。
这两次传输的字节数不一样,
main函数的代码如下:
main.png
master中断处理函数代码如下:
master.png
slave中断处理函数如下:
slave.png
顺便问一下:我在设立断点时,出现了下面的提示,好像没有办法设置断点,不知道这是什么情况:
断点.png
我的代码的工程放在这里,请各位前辈帮忙看一下,感激不尽
spi_demo.zip (1.47 MB, 下载次数: 3)
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-10-16 12:50:20 | 显示全部楼层

回帖奖励 +2 NXP金币

你先把代码暂停,然后去掉其他所有断点,再在这里打断点试试。
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2015-10-16 15:35:15 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-10-16 12:50
你先把代码暂停,然后去掉其他所有断点,再在这里打断点试试。

刚刚断点已经解决了,在debug模式下,把breakpoints里面的选项“break all points”取消掉,就可以了。
现在就是主机和从机两次不同数据量的通信仍然无法实现。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-10-16 16:44:08 | 显示全部楼层

回帖奖励 +2 NXP金币

zhangsaisai0814 发表于 2015-10-16 15:35
刚刚断点已经解决了,在debug模式下,把breakpoints里面的选项“break all points”取消掉,就可以了。
...

那你现在无法现实,测试时什么结果?
你有逻辑分析仪吗?
或者示波器也行,你测试看看,你跑了几个字节。
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2015-10-16 16:56:32 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-10-16 16:44
那你现在无法现实,测试时什么结果?
你有逻辑分析仪吗?
或者示波器也行,你测试看看,你跑了几个字节。 ...

我现在用的原来的例程,主机和从机都在一个MCU里面实现。现在从机每次给主机发数据时,主机这边都能接收到数据,但每次的数据都要移位1个字节。我判断应该是从机发送的问题,但确实找不出问题出在哪里。
下面是从机接收到主机命令以后,进入中断,在中断里面把数据发给主机,代码如下:
    if ((strcmp(slave_receive_comm, "Start") == 0))
    {
      strcpy(slave_send_data,"Data For Slave");
      printf("\nSlave: Data send to master...\n");
      SS1_SendBlock(SS1_DeviceData, slave_send_data, DATA_SIZE);
      SS1_ReceiveBlock(SS1_DeviceData, slave_receive_data, DATA_SIZE);
    }
发送的数据内容是"Data For Slave",但每次调试时主机接收到的数据总是在不断地偏移,有时是“Data For Slave”,有时是For Slave Data ,有时是“Slave Data For ”。
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

250

帖子

0

高级会员

Rank: 4

积分
628
最后登录
2016-5-3
发表于 2015-10-16 17:30:40 | 显示全部楼层

回帖奖励 +2 NXP金币

虽然不知道,还是支持一下
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

250

帖子

0

高级会员

Rank: 4

积分
628
最后登录
2016-5-3
发表于 2015-10-16 20:08:20 | 显示全部楼层

回帖奖励 +2 NXP金币

貌似很高端啊,先留着备用
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

250

帖子

0

高级会员

Rank: 4

积分
628
最后登录
2016-5-3
发表于 2015-10-16 20:09:20 | 显示全部楼层
貌似很高端啊,先留着备用
回复 支持 反对

使用道具 举报

  • TA的每日心情
    郁闷
    2019-3-2 02:12
  • 签到天数: 22 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    5

    主题

    462

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1539
    最后登录
    2022-8-25
    发表于 2015-10-16 21:59:46 | 显示全部楼层

    回帖奖励 +2 NXP金币

    太复杂了,但是要好好思考还是会找到原因的,把例程先做一遍,试试。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    62

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    238
    最后登录
    1970-1-1
     楼主| 发表于 2015-10-17 21:16:15 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-10-16 16:44
    那你现在无法现实,测试时什么结果?
    你有逻辑分析仪吗?
    或者示波器也行,你测试看看,你跑了几个字节。 ...

    我简化了一下通信协议,如下:
    主机第一次是发送命令给从机,这里只发送不接收。从机只进行接收操作,不进行发送操作。
    从机进入接受中断后,把数据发给主机。之后等待主机第二次发起传输。
    通信协议改成以上以后,现在能正常收发数据了。
    但是我现在想主机每隔100ms读取一次从机的数据,因此主机的两次传输(第一次发送命令,第二次发送数据)
    都是在定时器中断中执行。但加了中断以后,从机发给主机的数据,主机每隔很长一段时间才收到。
    正常是100ms收到一次数据,现在要间隔10多个100ms主机才能收到一次数据。
    不知道这是什么原因。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-13 22:21 , Processed in 0.117270 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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