请选择 进入手机版 | 继续访问电脑版
查看: 7330|回复: 6

[原创] 【经验分享】LPC43XX SSP片选引脚的灵活控制

[复制链接]

该用户从未签到

648

主题

6301

帖子

0

超级版主

Rank: 8Rank: 8

积分
19555
最后登录
2024-3-29
发表于 2016-10-13 16:44:36 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2016-10-13 17:04 编辑

    该文作为LPC小经验资料收集。
    很多网友在使用LPC43xx SSP模块的时候发现,每发送一个byte,CS都会拉低,然后又拉高,如下图:
19.jpg

   但是实际使用中,比如外部接flash芯片,往往需要一帧多个byte的数据片选,然后再拉高,但是由于CS引脚配置为SSP模块的引脚之后,控制完全是由SSP硬件实现,所以就不会非常灵活,在这种情况下,为了实现CS引脚的灵活控制,通常会将CS引脚配置GPIO输出模式,未发送数据的时候,输出高电平,需要发送数据的时候,把CS引脚拉低,发送完所需要的字节数之后,再拉高。
这里以lpcopen code为例,给出如何实现CS引脚从SSP功能转为GPIO功能的代码修改,LPC43XX的lpcopen代码下载链接:
  1. http://www.nxp.com/zh-Hans/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m4/lpc4300-cortex-m4-m0/lpcopen-software-development-platform-lpc43xx:LPCOPEN-SOFTWARE-FOR-LPC43XX
复制代码


配置修改点有如下几点:
1. board.c, lpc_board_keil_mcb_4357中, 函数void Board_SSP_Init(LPC_SSP_T *pSSP)
这里修改SSP1:
  1. void Board_SSP_Init(LPC_SSP_T *pSSP)
  2. {
  3.         if (pSSP == LPC_SSP0) {
  4.                 /* Set up clock and power for SSP0 module */
  5.                 /* Configure SSP0 pins*/
  6.                 Chip_SCU_PinMuxSet(0x3, 3, (SCU_PINIO_FAST | SCU_MODE_FUNC2));        /* P3.3 connected to SCL/SCLK        SCU_MODE_FUNC2=SSP0 SCK0 */
  7.                 Chip_SCU_PinMuxSet(0x3, 6, (SCU_PINIO_FAST | SCU_MODE_FUNC2));        /* P3.6 connected to nCS                SCU_MODE_FUNC2=SSP0 SSEL0 */
  8.                 Chip_SCU_PinMuxSet(0x3, 7, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2));        /* P3.7 connected to SO                SCU_MODE_FUNC2=SSP0 MISO0 */
  9.                 Chip_SCU_PinMuxSet(0x3, 8, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2));        /* P3.8 connected to nSI        SCU_MODE_FUNC2=SSP0 MOSI0 */
  10.         }
  11.         else if (pSSP == LPC_SSP1) {
  12.                 /* Set up clock and power for SSP1 module */
  13.                 /* Configure SSP1 pins*/
  14.                 Chip_SCU_PinMuxSet(0xF, 4, (SCU_PINIO_FAST | SCU_MODE_FUNC0));        /* PF.4 connected to SCL/SCLK        SCU_MODE_FUNC0 = SSP1 SCK1 */
  15. //                Chip_SCU_PinMuxSet(0xF, 5, (SCU_PINIO_FAST | SCU_MODE_FUNC2));        /* PF.5 connected to nCS                SCU_MODE_FUNC2 = SSP1 SSEL1 */
  16. //GPIO CS BEGIN
  17.                 Chip_SCU_PinMuxSet(0xF, 5, (SCU_MODE_PULLUP| SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC4));        /* PF.5 connected to nCS                SCU_MODE_FUNC2 = GPIO */
  18.                 Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 7, 19);//PF_5  mux4 = GPIO7[19]
  19.                 Chip_GPIO_SetPinState(LPC_GPIO_PORT, 7, 19, 1);
  20. //GPIO CS END
  21.                 Chip_SCU_PinMuxSet(0xF, 6, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2));        /* PF.6 connected to SO                          SCU_MODE_FUNC2 = SSP1 MISO1 */
  22.                 Chip_SCU_PinMuxSet(0xF, 7, (SCU_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC2));        /* PF.7 connected to nSI                  SCU_MODE_FUNC2 = SSP1 MOSI1 */
  23.         }
  24.         else {
  25.                 return;
  26.         }
  27. }
复制代码
屏蔽原来配置PF_5作为SSP CS引脚的代码:
Chip_SCU_PinMuxSet(0xF, 5, (SCU_PINIO_FAST | SCU_MODE_FUNC2));
添加:
Chip_SCU_PinMuxSet(0xF, 5, (SCU_MODE_PULLUP| SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC4));        /* PF.5 connected to nCS                SCU_MODE_FUNC2 = GPIO */
                Chip_GPIO_SetPinDIROutput(LPC_GPIO_PORT, 7, 19);//PF_5  mux4 GPIO7[19],配置GPIO为输出
                Chip_GPIO_SetPinState(LPC_GPIO_PORT, 7, 19, 1); //输出为高

2. 具体控制的时候,以polling模式为例:
  1.                         xf_setup.length = 5;
  2.                         xf_setup.tx_data = Tx_Buf;
  3.                         xf_setup.rx_data = Rx_Buf;
  4.                         Tx_Buf[0]=0x21; // one byte program command
  5.                         Tx_Buf[1]=0x31;// two bytes address
  6.                         Tx_Buf[2]=0x32;// two bytes address
  7.                         Tx_Buf[3]=0x41; // two bytes data
  8.                         Tx_Buf[4]=0x42;// two bytes data
  9.                                         xf_setup.rx_cnt = xf_setup.tx_cnt = 0;
  10.                                         Chip_GPIO_SetPinState(LPC_GPIO_PORT, 7, 19, 0); //发送前GPIO拉低CS
  11.             Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup);
  12.                                         Chip_GPIO_SetPinState(LPC_GPIO_PORT, 7, 19, 1);//发送后GPIO拉高CS
复制代码
最后测试的波形如下:

20.jpg
实现LPC SSP CS引脚的灵活控制。
小小经验收集,为后续遇到类似问题的网友提供便利。
回复

使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2016-10-13 17:18:42 | 显示全部楼层
    用一个引脚控制就好,要不很麻烦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    [LV.10]以坛为家III

    66

    主题

    4888

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6142
    最后登录
    2024-3-27
    发表于 2016-10-13 18:01:22 | 显示全部楼层
    最好CS脚都用GPIO控制,不要硬件控制
    开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-10-13 21:55:20 | 显示全部楼层
    同感,GPIO控制灵活,谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-24 08:34
  • 签到天数: 1 天

    [LV.1]初来乍到

    9

    主题

    104

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    337
    最后登录
    2021-2-26
    发表于 2016-10-14 22:42:34 | 显示全部楼层
    只能这样了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-26 09:26
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    121
    最后登录
    2021-10-25
    发表于 2017-7-24 14:28:41 | 显示全部楼层
    还没用到,先学
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-12-18 10:54
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    40

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    977
    最后登录
    2024-3-10
    发表于 2020-9-19 14:48:47 | 显示全部楼层
    谢谢~~
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-3-29 15:40 , Processed in 0.131072 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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