查看: 1569|回复: 2

[求助] 求教KL16的SPI0问题 多谢

[复制链接]

该用户从未签到

3

主题

13

帖子

0

注册会员

Rank: 2

积分
61
最后登录
2015-6-19
发表于 2015-4-27 21:29:48 | 显示全部楼层 |阅读模式
用SPI0主模式控制外围芯片获取数据,SS是用GPIO控制,先发送再接收。发现SPRF在没有读取DL值时就清0,而且发送数据以后SPRF会置1。不知道怎么解决这个问题了。
我知道答案 目前已有2人回答
回复

使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-4-27 22:13:46 | 显示全部楼层
    很正常。首先你得弄懂SPI的工作原理。提示:SPI是收发同时进行的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    13

    帖子

    0

    注册会员

    Rank: 2

    积分
    61
    最后登录
    2015-6-19
     楼主| 发表于 2015-4-28 10:49:47 | 显示全部楼层
    本帖最后由 gaow11 于 2015-4-28 11:51 编辑

    额,那我接着去读就读不到了。程序执行SPI_DL_REG(baseadd) = data; 以后SPRF置1,,执行完for(i = 0;i < 0xFFF0;i++)还没进入循环体就把SPRF清0了。我把MISO和MOSI直接接起来试了一下能读到数据,这个会有什么问题吗?

    uint8 SPI0_receive1(void)
    {
      while(!(SPI0_S&SPI_S_SPRF_MASK));
      return SPI_DL_REG(baseadd);
    }
    uint8 SPI0_send1(uint8 data)
    {
      uint32 i;  
      while(!(SPI0_S&SPI_S_SPTEF_MASK));
      SPI_DL_REG(baseadd) = data;
      for(i = 0;i < 0xFFF0;i++)
      {
        if(SPI0_S&SPI_S_SPTEF_MASK)  
        {
          return(1);
        }
      }
      return(0);
      }
    在while里循环读取
    while(1)
        {      
          SPI0_send1(0x11);
          rev = SPI0_receive1();
          uart0_putchar(UART0_BASE_PTR,rev);
        }
    }
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 10:58 , Processed in 0.090999 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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