查看: 5259|回复: 15

[分享] MKL05Z32的SPI通讯进入死循环

[复制链接]
  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
    发表于 2014-9-10 16:38:00 | 显示全部楼层 |阅读模式
    void SPI_InitMater( void )
    {
                    // enable clock gate for spi module
              SIM_SCGC4 |= SIM_SCGC4_SPI0_MASK;
             
              // enable PORT
              SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK|SIM_SCGC5_PORTB_MASK;
             
              // disable SPI
              SPI0_C1 &= ~SPI_C1_SPE_MASK;
             
              // configure I/O to SPI function
                  PORTA_PCR5 &= ~PORT_PCR_MUX_MASK;
            PORTA_PCR5 |= PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;                          //Use PTA5 as SPI0_SS_b
            PORTA_PCR6 &= ~PORT_PCR_MUX_MASK;
            PORTA_PCR6 |= PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;                          //Use PTA6 as SPI0_MISO
            PORTA_PCR7 &= ~PORT_PCR_MUX_MASK;
            PORTA_PCR7 |= PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;                          //Use PTA7 as SPI0_MOSI
            PORTB_PCR0 &= ~PORT_PCR_MUX_MASK;
            PORTB_PCR0 = PORT_PCR_MUX(3)|PORT_PCR_DSE_MASK;                            //Use PTB0 as SPI0_SCK
            
                    SPI0_C1 |= SPI_C1_MSTR_MASK;
                    SPI0_BR = 0x02;
                    SPI0_C1 |= SPI_C1_SSOE_MASK;      
                    SPI0_C2 |= SPI_C2_MODFEN_MASK;

                    SPI0_C1 |= SPI_C1_CPHA_MASK;
                    SPI0_C1 &= (~SPI_C1_CPHA_MASK);               
                    SPI0_C1 |= SPI_C1_CPOL_MASK;
                    SPI0_C1 &= (~SPI_C1_CPOL_MASK);               
                    //SPI0_C1 |= SPI_C1_LSBFE_MASK;
                    SPI0_C1 &= (~SPI_C1_LSBFE_MASK);
                   
                    SPI0_C1 |= SPI_C1_SPE_MASK;
    }

    uint8_t SPI_ReadData(uint8_t *pRead,uint32_t uiLength){        uint16_t i;        for( i=0;i<uiLength;i++)        {        while(!(SPI0_S & SPI_S_SPRF_MASK ) )                        ;                pRead = SPI0_D;        }    return 1;}

    uint8_t SPI_WriteData(uint8_t *pWrite,uint32_t uiLength){        uint16_t i;        for( i=0;i<uiLength;i++)        {        while(!(SPI0_S & SPI_S_SPTEF_MASK ) )                        ;                SPI0_S |= SPI_S_SPTEF_MASK;                SPI0_D = pWrite;        }        return 1;}

    向SPI slave写入(SPI_WriteData)命令后读取返回值( SPI_ReadData),在这句(  while(!(SPI0_S & SPI_S_SPRF_MASK ) );)进入死循环,SPI0_S的值总是等于0x60

    管脚什么的配置没问题

    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-9-10 16:40:10 | 显示全部楼层
    发送的数据对方是否可以收到?
    这里确定是没有收到数据导致再等待SPI数据。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2014-9-10 17:12:23 | 显示全部楼层
    本帖最后由 中山无雪 于 2014-9-10 17:19 编辑
    安 发表于 2014-9-10 16:40
    发送的数据对方是否可以收到?
    这里确定是没有收到数据导致再等待SPI数据。 ...

    无法确定对方是否接收到了,但是在进入读状态后,第一次判断SPI0_S通过,读到一次数据,之后就无法读到了,进入了死循环

    正确的结果应该是返回3个byte
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-9-11 09:30:14 | 显示全部楼层
    这样还是用示波器检测一下波形吧。看看是不是回复的有问题。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2014-9-11 09:55:32 | 显示全部楼层
    楼主从机那边SPI有没有问题?
    你可以看下波形,测试下到底卡在什么地方。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2014-9-11 15:28:44 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2014-9-11 09:55
    楼主从机那边SPI有没有问题?
    你可以看下波形,测试下到底卡在什么地方。 ...

    只能这么试一下了,谢谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2014-9-11 16:42:13 | 显示全部楼层
    中山无雪 发表于 2014-9-11 15:28
    只能这么试一下了,谢谢

    是的,自己调试,出问题,首先要看看波形到底什么情况了,这样便于定位问题。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    802

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1763
    最后登录
    1970-1-1
    发表于 2014-9-12 17:36:13 | 显示全部楼层
    建议用示波器看看波形变化
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2019-4-1 22:48
  • 签到天数: 302 天

    连续签到: 1 天

    [LV.8]以坛为家I

    87

    主题

    7322

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    4614
    最后登录
    2021-1-25
    发表于 2014-9-18 01:06:18 | 显示全部楼层
    一般来说可能是参数设置错误
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
     楼主| 发表于 2014-10-7 10:07:54 | 显示全部楼层
    仔细查过了,波形没问题,还没查处问题出在哪里
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 06:29 , Processed in 0.102730 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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