查看: 3220|回复: 6

[已解决] LPC54608 如何不使能SPI的cs,自己用IO来控制

[复制链接]

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
发表于 2017-12-6 14:19:39 | 显示全部楼层 |阅读模式
如题:LPC54608 如何不使能SPI的自身硬件cs,我想自己用IO来控制。单独找一个GPIO连接我外设的片选信号,然后通过对GPIO进行01操作来控制片选信号。问题是:怎么关掉或者不使能SPI自身硬件的CS呢?另外我的SPI初始化时候,以下红色部分是配置硬件CS信号的,是cs0 cs1 cs2或者cs3的    SPI_MasterGetDefaultConfig(&userConfig);
    srcFreq = EXAMPLE_SPI_MASTER_CLK_FREQ;
    userConfig.sselNum = (spi_ssel_t)EXAMPLE_SPI_SSEL;
    SPI_MasterInit(EXAMPLE_SPI_MASTER, &userConfig, srcFreq);
那么我用IO来控制了,红色部分代码该如何配置?因为用IO来控制,就没用到SPI自身的cs0~cs3了,直接注释掉还是怎样?


最佳答案

paulkiyt 发表于 2017-12-7 09:52 好的,谢谢! 另外我想问一下,flexcom的时钟在SDK里配置的都是12M: CLOCK_AttachClk(kFRO12M_to_FLEXCOM ... 你好,请看手册里面: [attach]439574[/attach] 你可以选择图中规定的 ...
回复

使用道具 举报

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20124
最后登录
2024-5-3
发表于 2017-12-6 17:00:13 | 显示全部楼层
楼主你好!
在pin_mux.c中,函数BOARD_InitPins。

    const uint32_t port3_pin30_config = (/* Pin is configured as FC9_CTS_SDA_SSEL0 */
                                         IOCON_PIO_FUNC1 |
                                         /* Selects pull-up function */
                                         IOCON_PIO_MODE_PULLUP |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Input filter disabled */
                                         IOCON_PIO_INPFILT_OFF |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI);
    /* PORT3 PIN30 (coords: K13) is configured as FC9_CTS_SDA_SSEL0 */
    IOCON_PinMuxSet(IOCON, 3U, 30U, port3_pin30_config);
这个是配置SSEL0的引脚功能的。
你可以重新选择个GPIO当做你的SSEL,这样时间你可以自己通过添加延时去控制。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    擦汗
    2021-7-5 15:45
  • 签到天数: 664 天

    [LV.9]以坛为家II

    42

    主题

    1594

    帖子

    19

    金牌会员

    Rank: 6Rank: 6

    积分
    5388
    最后登录
    2021-12-22
    发表于 2017-12-6 17:05:32 | 显示全部楼层
    pinMux设置pin用途为GPIO后.  应该就已经禁止了它用于CS了. sselNum就无效了.

    建议最好用过直接使用寄存器编程, 不然改driver会很麻烦. 通常对于不支持的非标准方式, 只好直接寄存器编程不用driver.

    所以首先是判断你的器件是否合乎说明书中SPI的几种标准方式.    最严重的不符合  甚至只好全用GPIO模仿.

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    61

    主题

    233

    帖子

    7

    高级会员

    Rank: 4

    积分
    750
    最后登录
    2021-1-25
     楼主| 发表于 2017-12-6 17:07:12 | 显示全部楼层
    小恩GG 发表于 2017-12-6 17:00
    楼主你好!
    在pin_mux.c中,函数BOARD_InitPins。

    你好,如果我选择PORT2_PIN2作为为的片选引脚,也就是配置成GPIO  
    是不是如下配置:

    const uint32_t port2_pin22_config = (
                                            IOCON_PIO_FUNC0 |
                                             /* Selects pull-up function */
                                             IOCON_PIO_MODE_PULLUP |
                                             /* Input function is not inverted */
                                             IOCON_PIO_INV_DI |
                                             /* Enables digital function */
                                             IOCON_PIO_DIGITAL_EN |
                                             /* Input filter disabled */
                                             IOCON_PIO_INPFILT_OFF |
                                             /* Standard mode, output slew rate control is enabled */
                                             IOCON_PIO_SLEW_STANDARD |
                                             /* Open drain is disabled */
                                             IOCON_PIO_OPENDRAIN_DI);
        IOCON_PinMuxSet(IOCON, 2U, 2U, port2_pin2_config);


    那  userConfig.sselNum = (spi_ssel_t)EXAMPLE_SPI_SSEL;
    这个地方需要注释掉吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20124
    最后登录
    2024-5-3
    发表于 2017-12-7 09:21:13 | 显示全部楼层
    paulkiyt 发表于 2017-12-6 17:07
    你好,如果我选择PORT2_PIN2作为为的片选引脚,也就是配置成GPIO  
    是不是如下配置:

    留着也可以,反正SPI的CS引脚你已经换成其他引脚了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    61

    主题

    233

    帖子

    7

    高级会员

    Rank: 4

    积分
    750
    最后登录
    2021-1-25
     楼主| 发表于 2017-12-7 09:52:47 | 显示全部楼层
    小恩GG 发表于 2017-12-7 09:21
    留着也可以,反正SPI的CS引脚你已经换成其他引脚了。

    好的,谢谢!
    另外我想问一下,flexcom的时钟在SDK里配置的都是12M: CLOCK_AttachClk(kFRO12M_to_FLEXCOMM9);
    然后mcu主频时钟设置的是 48M :BOARD_BootClockFROHF48M();
    如果我想提高flexcom的时钟到24M,怎么设置?因为我的外设SPI接口需要10M,那么SPI接口时钟起码在20M以上。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20124
    最后登录
    2024-5-3
    发表于 2017-12-7 10:28:25 | 显示全部楼层
    paulkiyt 发表于 2017-12-7 09:52
    好的,谢谢!
    另外我想问一下,flexcom的时钟在SDK里配置的都是12M: CLOCK_AttachClk(kFRO12M_to_FLEXCOM ...

    你好,请看手册里面:
    51.jpg
    你可以选择图中规定的时钟源为flexcommon。
    你要换其他时钟,你可以在这些里面选择:
        kFRO12M_to_FLEXCOMM0 = MUX_A(CM_FXCOMCLKSEL0, 0),
        kFRO_HF_to_FLEXCOMM0 = MUX_A(CM_FXCOMCLKSEL0, 1),
        kAUDIO_PLL_to_FLEXCOMM0 = MUX_A(CM_FXCOMCLKSEL0, 2),
        kMCLK_to_FLEXCOMM0 = MUX_A(CM_FXCOMCLKSEL0, 3),
        kFRG_to_FLEXCOMM0 = MUX_A(CM_FXCOMCLKSEL0, 4),
        kNONE_to_FLEXCOMM0 = MUX_A(CM_FXCOMCLKSEL0, 7),


    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-4 09:45 , Processed in 0.136791 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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