查看: 4399|回复: 6

[MPC] MPC56xx SPI只能进195次中断,然后就跑飞了!

[复制链接]

该用户从未签到

8

主题

52

帖子

0

中级会员

Rank: 3Rank: 3

积分
240
最后登录
2016-10-20
发表于 2015-1-22 20:31:52 | 显示全部楼层 |阅读模式
本帖最后由 plabghhahacong1988 于 2015-1-22 20:48 编辑

详细情况如下:
设置SPI_B为主机,SPI_C为从机。
设置定时周期为20ms,使用RTI中断完成。
SPI的接收和发送都采用中断方式完成。
在RTI中断函数开启SPI发送中断,每20ms开一次中断,传一次数据。调用方式如下所示:
void IsrRti(void)
{
        ResultPtr21++;
        PIT.RTI.LDVAL.R=160000;    /* 20ms     */
        PIT.RTI.TCTRL.B.TEN=1;       /* 开始定时    */
        PIT.RTI.TCTRL.B.TIE=1;           /* 使能RTI中断 */
        PIT.RTI.TFLG.B.TIF=1;        /* 清RTI中断   */
        Spi_TransmitByteDataToBuffer(SPI_C, SpiCTransmitData, 4);
        Spi_TransmitByteDataToBuffer(SPI_B, SpiBTransmitData, 4);
        Spi_ReceiveByteDataFromBuffer(SPI_C, SpiC_ReceiveData, 4);
        Spi_ReceiveByteDataFromBuffer(SPI_B, SpiB_ReceiveData, 4);
        sprintf(ttxx,"Number %d : Exit IsrRti.\n\n",ResultPtr21);
        send_string(ttxx);
}

使用这种方式后,只能进195次中断,然后程序就飞到:
void EXCEP_DefaultExceptionHandler(void)

如果不使用RTI中断,直接在主函数中调用,使用方法如下:
int main(void)
{
          for (;;)
          {
              ResultPtr21++;
            Spi_TransmitByteDataToBuffer(SPI_C, SpiCTransmitData, 4);
            Spi_TransmitByteDataToBuffer(SPI_B, SpiBTransmitData, 4);
            Spi_ReceiveByteDataFromBuffer(SPI_C, SpiC_ReceiveData, 4);
            Spi_ReceiveByteDataFromBuffer(SPI_B, SpiB_ReceiveData, 4);
            sprintf(ttxx,"Number %d : Exit SPI.\n\n",ResultPtr21);
            send_string(ttxx);
          }
}

就不存在这个现象!
个人觉得:问题原因是RTI中断与SPI四个中断(SPI_B、SPI_C的接收和发送中断)之间有冲突。
我已经尝试了N种优先级不同的配置,均无解,因此特来求救大神们!


工程文件,如附件所示:
我知道答案 目前已有6人回答

MPC5634-Spi.zip

170.05 KB, 下载次数: 40, 下载积分: 威望 1

MPC5634-Spi

回复

使用道具 举报

该用户从未签到

8

主题

52

帖子

0

中级会员

Rank: 3Rank: 3

积分
240
最后登录
2016-10-20
 楼主| 发表于 2015-1-26 21:36:28 | 显示全部楼层
有大神在吗?
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

835

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1795
最后登录
2016-4-2
发表于 2015-1-29 09:25:48 来自手机 | 显示全部楼层
顶贴路过
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-1-29 09:32:43 | 显示全部楼层
    应该是RTI冲突的问题,数据发送的时候,不建议在中断中增加。在外部通过判断时间间隔来发送数据。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    825

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1687
    最后登录
    2015-2-10
    发表于 2015-1-31 21:57:36 | 显示全部楼层
    RTI冲突的问题
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    52

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    240
    最后登录
    2016-10-20
     楼主| 发表于 2015-2-6 23:31:43 | 显示全部楼层
    安 发表于 2015-1-29 09:32
    应该是RTI冲突的问题,数据发送的时候,不建议在中断中增加。在外部通过判断时间间隔来发送数据。 ...

    我的思路是:每隔RTI定时周期内发送和接收一次spi数据,如果有冲突,该怎么解决该问题,同时还能满足我的需求?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-2-7 08:48:50 | 显示全部楼层
    不要在RTI中断中发生和接收数据。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-17 18:13 , Processed in 0.100256 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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