查看: 6541|回复: 24

[分享] 【YL-KL26Z试用】+ SPI驱动

[复制链接]
  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-4-29 15:04:08 | 显示全部楼层 |阅读模式
    本帖最后由 cxtarm 于 2015-4-29 15:05 编辑

    最近好忙。。。试用计划中断了一段时间。
    今天解决了个工作中的问题,好兴奋,再来一个
    注:SPI工作在主模式

    /** \brief  SPI0 initialization
    *  \param  None
    *  \return None
    */
    void SPI0_Init(void)
    {
    if(Spi0Info.BaseInfo.Init)
      return;
    SIM->SCGC4 |= SIM_SCGC4_SPI0_MASK;

    SPI0_PinInit();
    SPI_Cmd(SPI0,enable);
    SPI_ModeSelect(SPI0,SPI_ModeMaster);
    SPI_BaseSet(SPI0,SPI_CPOL_ActiveLow,SPI_CPHA_1stEdgeSample,SPI_FirstMSB);
    //SPI_ITCmd(SPI0,SPI_IT_TxBufferEmpty | SPI_IT_RxBufferFullOrModeFault,enable);

    //SPI_DataModeSet(SPI0,SPI_DataMode_8bits);
    //SPI_NSSFuncSelect(SPI0,SPI_NSS_MasterDisable);
    //SPI_DMACmd(SPI0,SPI_DMAReq_Rx | SPI_DMAReq_Tx,disable);
    //SPI_BidirectionalCmd(SPI0,disable);
    //SPI_StopInWaitModeCmd(SPI0,enable);

    SPI_BaudDivSet(SPI0,SPI_BaudPreDiv_1,SPI_BaudDiv_2);

    //SPI_MatchRegSet8bits(SPI0,0x55);
    //SPI_Cmd(SPI0,disable);
    Spi0Info.BaseInfo.Init = 1;
    Spi0Info.BaseInfo.Open = 1;
    Spi0Info.BaseInfo.Busy = 0;
    }
    /** \brief  SPI0 deinitialization
    *  \param  None
    *  \return return true when operate successful,else return false.
    */
    bool SPI0_DeInit(void)
    {
    if(Spi0Info.BaseInfo.Busy)
      return false;
    //while(Spi0Info.BaseInfo.Busy);
    SIM->SCGC4 &= ~(uint32_t)SIM_SCGC4_SPI0_MASK;
    SPI0_PinDeInit();
    Spi0Info.BaseInfo.Init = 0;
    Spi0Info.BaseInfo.Open = 0;
    return true;
    }
    /** \brief  open SPI0
    *  \param  None
    *  \return return true when operate successful,else return false.
    */
    bool SPI0_Open(void)
    {
    if(Spi0Info.BaseInfo.Init == 0)
      return false;
    if(Spi0Info.BaseInfo.Open == 0)
    {
      SPI_Cmd(SPI0,enable);
      Spi0Info.BaseInfo.Open = 1;
      Spi0Info.BaseInfo.Busy = 0;
    }
    return true;
    }
    /** \brief  close SPI0
    *  \param  None
    *  \return return true when operate successful,else return false.
    */
    bool SPI0_Close(void)
    {
    if(Spi0Info.BaseInfo.Busy)
      return false;
    SPI_Cmd(SPI0,disable);
    Spi0Info.BaseInfo.Open = 0;
    return true;
    }

    bool SPI0_BaudSet(uint32_t baud)
    {
    if(Spi0Info.BaseInfo.Init == 0)
      return false;
    while(Spi0Info.BaseInfo.Busy);

    SPI_BaudDivSet(SPI0,SPI_BaudPreDiv_1,SPI_BaudDiv_2);

    return true;
    }
    uint8_t SPI0_WriteByte(uint8_t u8Data)
    {
    uint8_t u8Temp;

    while(SPI_FlagGet(SPI0,SPI_FLAG_TxBufferEmpty) == reset);
    SPI0->DL = u8Data;
    while(SPI_FlagGet(SPI0,SPI_FLAG_RxBufferFull) == reset);
    u8Temp = SPI0->DL;

    return u8Temp;
    }
    uint8_t SPI0_ReadByte(void)
    {
    uint8_t u8Temp;

    while(SPI_FlagGet(SPI0,SPI_FLAG_TxBufferEmpty) == reset);
    SPI0->DL = 0xFF;
    while(SPI_FlagGet(SPI0,SPI_FLAG_RxBufferFull) == reset);
    u8Temp = SPI0->DL;

    return u8Temp;
    }
    void SPI0_WriteData(const uint8_t *pData,uint16_t dlen)
    {
    while(dlen--)
    {
      while(SPI_FlagGet(SPI0,SPI_FLAG_TxBufferEmpty) == reset);
      SPI0->DL = *pData++;
      while(SPI_FlagGet(SPI0,SPI_FLAG_RxBufferFull) == reset);
      SPI0->DL;
    }
    }
    void SPI0_ReadData(uint8_t *pBuf,uint16_t dlen)
    {
    while(dlen--)
    {
      while(SPI_FlagGet(SPI0,SPI_FLAG_TxBufferEmpty) == reset);
      SPI0->DL = 0xFF;
      while(SPI_FlagGet(SPI0,SPI_FLAG_RxBufferFull) == reset);
      *pBuf++ = SPI0->DL;
    }
    }

    程序代码文件如下:

    lib.rar (4.87 KB, 下载次数: 10)
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    13

    帖子

    0

    注册会员

    Rank: 2

    积分
    61
    最后登录
    2015-6-19
    发表于 2015-4-29 16:00:25 | 显示全部楼层
    请问一下,你的SPI读数据是先发后读,那DMA的时候是不是也要先发再DMA传书数据啊?新手求教
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-29 16:05:32 | 显示全部楼层
    gaow11 发表于 2015-4-29 16:00
    请问一下,你的SPI读数据是先发后读,那DMA的时候是不是也要先发再DMA传书数据啊?新手求教 ...

    虽然我没有使用过DMA方式,不过我觉得DMA方式和普通方式类似。发送的时候先把DMA配置好,设置好相关参数后启动发送,DMA会自己把数据发出去的。接收的时候类似,DMA通过发送数据来接收数据。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13135
    最后登录
    2019-1-27
    发表于 2015-4-29 17:05:53 | 显示全部楼层
    楼主心情好就来一篇啊~ 祝楼主每天都心情好好的
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-29 18:03:07 | 显示全部楼层
    小七 发表于 2015-4-29 17:05
    楼主心情好就来一篇啊~ 祝楼主每天都心情好好的

    心情好也需要有时间呐。没时间就出不来东西
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-4-29 20:08:31 | 显示全部楼层
    用mbed简单。。。 null.png null.png null.png null.png null.png null.png null.png null.png null.png null.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-29 20:25:01 | 显示全部楼层

    mbed玩玩可以,实际项目无用
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2015-4-29 22:22:00 | 显示全部楼层
    cxtarm 发表于 2015-4-29 20:25
    mbed玩玩可以,实际项目无用

    同意,还是库和寄存器保险,不用上网也能写
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-9 09:28
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    9

    主题

    351

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1461
    最后登录
    1970-1-1
    发表于 2015-4-29 22:38:45 | 显示全部楼层
    喜欢离线模式的编程,在线模式的考网络,网络不行直接死掉…………
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-30 08:55:44 | 显示全部楼层
    wambob 发表于 2015-4-29 22:22
    同意,还是库和寄存器保险,不用上网也能写

    是的,MBED适合开源和DIY。公司一般是不允许用的
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-25 09:27 , Processed in 0.106219 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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