查看: 4198|回复: 6

[求助] K60/KL25-SPI模块CS片选问题

[复制链接]
  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
    发表于 2016-4-22 09:36:02 | 显示全部楼层 |阅读模式
    本帖最后由 zico1998 于 2016-4-22 09:53 编辑

    问题:
    K60-SPI里的PCS、KL25里的SS。在写SPI一个字节时打开(比如设置为低),然后写完一个字节后就自动为高吗?还是自己手动将它抬高?如果是自动为高,那么我想连续写两个字节,或写一个、收一个的话,是不是就不能用PCS、SS,而是自己将该片选管脚定义成普通GPIO,使用输出功能?

    如K60:
    SPI1_PUSHR |=SPI_PUSHR_PCS(1) ; //假设片选为低         

    ......//写数据、启动传输、等待、清标志
    ///////////////这里是否手动SPI1_PUSHR &=~SPI_PUSHR_PCS(1) ;
    //停止传输







    我知道答案 目前已有6人回答
    我今天最想说
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24871
    最后登录
    2025-7-18
    发表于 2016-4-22 09:54:27 | 显示全部楼层
    楼主你好!
    关于KL系列的SPI,你可以参考下我的这篇经验分享:
    KL系列spi主从通信之查询中断例程


    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24871
    最后登录
    2025-7-18
    发表于 2016-4-22 09:58:10 | 显示全部楼层
    查询方式的的确是一个字节发完,CS会自动被拉高。
    但是中断方式,连续发送,也会等整个帧发完CS再拉上去。
    不过,如果你想CS的控制由自己自由控制,可以不用SPI模块的CS,直接用GPIO自行控制。
    通常写外部flash芯片的时候,就会使用自定义的GPIO 控制CS。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
     楼主| 发表于 2016-4-22 10:28:53 | 显示全部楼层
    比如我要写3字节、读3字节,再关片选,是否可行
    //开片选、开始传输,发tx_data[0]、收rx_data[0]
        SPI1_PUSHR |=SPI_PUSHR_PCS(1) ; //假设片选PCS1为低有效
        SPI1_PUSHR |=SPI_PUSHR_TXDATA(tx_data[0]);
        SPI1_MCR &= ~SPI_MCR_HALT_MASK;   //启动SPI数据传输
        while((SPI1_SR & SPI_SR_TCF_MASK) == 0);       //等待发送完成
        SPI1_SR |= SPI_SR_TCF_MASK;                    //清除传送完成标志
        while((SPI1_SR & SPI_SR_RFDF_MASK) == 0);      //等待接收缓冲区有有效数据,即等待RX FIFO不为空为止
        rx_data[0] = (uint8)SPI1_POPR;                 //读取RX FIFO内部数据
        SPI1_SR |= SPI_SR_RFDF_MASK;                   //清除RX FIFO不为空标志
    //发tx_data[1]、收rx_data[1]
        SPI1_PUSHR |=SPI_PUSHR_TXDATA(tx_data[1]);
        while((SPI1_SR & SPI_SR_TCF_MASK) == 0);      
        SPI1_SR |= SPI_SR_TCF_MASK;                    
        while((SPI1_SR & SPI_SR_RFDF_MASK) == 0);      
        rx_data[1] = (uint8)SPI1_POPR;                 
        SPI1_SR |= SPI_SR_RFDF_MASK;                     
    //发tx_data[2]、收rx_data[2]
        SPI1_PUSHR |=SPI_PUSHR_TXDATA(tx_data[2]);
        while((SPI1_SR & SPI_SR_TCF_MASK) == 0);      
        SPI1_SR |= SPI_SR_TCF_MASK;                    
        while((SPI1_SR & SPI_SR_RFDF_MASK) == 0);      
        rx_data[2] = (uint8)SPI1_POPR;                 
        SPI1_SR |= SPI_SR_RFDF_MASK;                  

    //关闭片选、停止传输
        SPI1_PUSHR &=~SPI_PUSHR_PCS(1) ; //假设片选PCS1为高,关片选
        SPI1_MCR |= SPI_MCR_HALT_MASK;   //停止SPI数据传输

    //为了便于说明,我没用子函数,而是一个一个去写。
    我今天最想说
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-21 13:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    16

    主题

    124

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    249
    最后登录
    2023-10-24
     楼主| 发表于 2016-4-22 11:01:09 | 显示全部楼层
    小恩GG 发表于 2016-4-22 09:58
    查询方式的的确是一个字节发完,CS会自动被拉高。
    但是中断方式,连续发送,也会等整个帧发完CS再拉上去。
    ...

    谢谢,我正在考虑要不要直接GPIO,您这么一说,那我正好试试去
    我今天最想说
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24871
    最后登录
    2025-7-18
    发表于 2016-4-22 12:22:46 | 显示全部楼层
    zico1998 发表于 2016-4-22 11:01
    谢谢,我正在考虑要不要直接GPIO,您这么一说,那我正好试试去

    好的,试过如果还有问题,再跟帖交流。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-31 10:09
  • 签到天数: 392 天

    连续签到: 1 天

    [LV.9]以坛为家II

    45

    主题

    1338

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3163
    最后登录
    2024-12-27
    发表于 2016-4-22 13:19:20 | 显示全部楼层
    我是直接控制的,比较好。
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 19:43 , Processed in 0.099876 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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