查看: 1646|回复: 4

[分享] LPC55S16继续点灯

[复制链接]
  • TA的每日心情
    擦汗
    4 天前
  • 签到天数: 590 天

    [LV.9]以坛为家II

    31

    主题

    1345

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3582
    最后登录
    2024-4-25
    发表于 2020-10-17 17:04:47 | 显示全部楼层 |阅读模式


    1.jpg

    继上次分享点灯有段时间了,今天我接上了我预留的Arduino接口。对接使用相同接口的拓展板。完成一次点灯。此款板子上的RGB灯是由P9813驱动芯片驱动的。串行接口。这里我们用到的是IIC的接口。

    2.png

    就是这两个接口。

    下面看下效果。

    3.gif

    同时附带上代码。

    /*

    *Copyright 2019 NXP

    *All rights reserved.

    *

    *SPDX-License-Identifier: BSD-3-Clause

    */


    #include "board.h"


    #include "pin_mux.h"

    #include "fsl_power.h"


    //#include "rgb_led.h"

    /*******************************************************************************

    *Definitions

    ******************************************************************************/

    #define BOARD_LED_PORTBOARD_LED_BLUE_GPIO_PORT

    #define BOARD_LED_PIN  BOARD_LED_BLUE_GPIO_PIN


    #define BOARD_LED_PORT1BOARD_LED_RED_GPIO_PORT

    #define BOARD_LED_PIN1  BOARD_LED_RED_GPIO_PIN


    #define BOARD_LED_PORT2BOARD_LED_GREEN_GPIO_PORT

    #define BOARD_LED_PIN2  BOARD_LED_GREEN_GPIO_PIN


    /*******************************************************************************

    *Prototypes

    ******************************************************************************/

    #define SDA_High()      GPIO_PinWrite(GPIO, 1U, 20U, 1U)

    #define SDA_Low()       GPIO_PinWrite(GPIO, 1U, 20U, 0U)

          

    #define SCL_High()       GPIO_PinWrite(GPIO, 1U, 21U, 1U)

    #define SCL_Low()  GPIO_PinWrite(GPIO, 1U, 21U, 0U)

    /*******************************************************************************

    *Variables

    ******************************************************************************/

    volatile uint32_t g_systickCounter;


    /*******************************************************************************

    *Code

    ******************************************************************************/

    void SysTick_Handler(void)

    {

       if (g_systickCounter != 0U)

        {

           g_systickCounter--;

        }

    }


    void SysTick_DelayTicks(uint32_t n)

    {

       g_systickCounter = n*1000;

       while (g_systickCounter != 0U)

        {

        }

    }


    void delay_us(uint32_t n)

    {

           g_systickCounter= n;

       while (g_systickCounter != 0U)

        {

        }

    }



    //发送前32位'0'起始帧

    void RGBLED_Send32Zero(void)

    {

            u8 i;

            SDA_Low();

            for(i=0;i<32;i++)

            {

               SCL_Low();

           delay_us(200);

           SCL_High();

           delay_us(200);              

            }

            

    }


    //反转前两位的灰度值

    u8 RGBLED_TakeAntiCode(u8 dat)

    {

           u8tmp = 0;

          

           tmp= ((~dat) & 0xC0) >> 6;

           returntmp;

    }


    //发送灰度数据

    void RGBLED_DatSend(u32 dx)

    {

           u8i;

            

           for(i=0;i<32;i++)

           {

                  if((dx& 0x80000000) !=0)

                  {

                         SDA_High();

                  }

                  else

                  {

                         SDA_Low();

                  }

                

                  

                  dx<<=1;

                  SCL_Low();delay_us(200);

                  SCL_High();delay_us(200);

           }      

    //     SDA_High();

    }


    //数据处理与发送

    //r;红色值 0~255

    //g:绿色值 0~255

    //b:蓝色值 0~255  

    void RGBLED_DataDealWithAndSend(u8 r,u8g,u8 b)

    {

            

           u32dx=0;

          

           dx|= (u32)0x03 << 30;  //前两位'1'位标志位

           dx|= (u32)RGBLED_TakeAntiCode(b) << 28;

           dx|= (u32)RGBLED_TakeAntiCode(g) << 26;

           dx|= (u32)RGBLED_TakeAntiCode(r) << 24;

          

           dx|= (u32)b << 16;

           dx|= (u32)g << 8;

           dx|= r;

          

           RGBLED_DatSend(dx);//发送数据

    }

    //RGB灯控制函数

    //r;红色值 0~255

    //g:绿色值 0~255

    //b:蓝色值 0~255

    void RGBLED_Show(u8 r,u8 g,u8 b)

    {

           RGBLED_Send32Zero();//发送前32位'0'起始帧

           RGBLED_DataDealWithAndSend(r,g, b);//发送32bit灰度数据

       RGBLED_DataDealWithAndSend(r, g, b);

    }


    /*!

    *@brief Main function

    */

    int main(void)

    {

           staticu8 t = 0;

       /* Init output LED GPIO. */

       GPIO_PortInit(GPIO, BOARD_LED_PORT);

       /* Board pin init */

       /* set BOD VBAT level to 1.65V */

       POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv,kPOWER_BodHystLevel50mv, false);

       BOARD_InitPins();

       SystemCoreClockUpdate();

          

       /* Set systick reload value to generate 1ms interrupt */

       if (SysTick_Config(SystemCoreClock / 1000000U))

        {

           while (1)

           {

           }

        }


           RGBLED_Show(0,0,0);

          

       while (1)

        {

                  if(GPIO_PinRead(GPIO,1U,16U)== 1)

                  {

                         delay_us(200);

                         if(GPIO_PinRead(GPIO,1U,16U)== 1)

                         {

                                t++;

                                if(t> 4)

                                {

                                       t= 0;

                                }

                                       

                         }

    //                   RGBLED_Show(255,0,0);

                  }

                  

                  switch(t)

                  {

                         case1:

                                RGBLED_Show(255,0,0);

                                break;

                         case2:

                                RGBLED_Show(0,255,0);

                                break;

                         case3:

                                RGBLED_Show(0,0,255);

                                break;

                         case4:

                                RGBLED_Show(255,255,255);

                                break;

                         default:

                                break;

                               

                  }

                  

           /* Delay 1000 ms */

           SysTick_DelayTicks(500U);

           GPIO_PortToggle(GPIO, BOARD_LED_PORT, 1u << BOARD_LED_PIN);

                  SysTick_DelayTicks(500U);

                  GPIO_PortToggle(GPIO,BOARD_LED_PORT2, 1u << BOARD_LED_PIN2);

                  SysTick_DelayTicks(500U);

                  GPIO_PortToggle(GPIO,BOARD_LED_PORT1, 1u << BOARD_LED_PIN1);

                  

        }

    }


    这是主函数。还要修改下其Pin_mux.c文件。如下:

    /*

    *Copyright 2017-2020 NXP

    *All rights reserved.

    *

    *SPDX-License-Identifier: BSD-3-Clause

    */


    /***********************************************************************************************************************

    *This file was generated by the MCUXpresso Config Tools. Any manual edits madeto this file

    *will be overwritten if the respective MCUXpresso Config Tools is used to updatethis file.

    **********************************************************************************************************************/


    /* clang-format off */

    /*

    *TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************

    !!GlobalInfo

    product: Pins v8.0

    processor: LPC55S16

    package_id: LPC55S16JBD100

    mcu_data: ksdk2_0

    processor_version: 0.8.6

    board: LPCXpresso55S16

    * BECAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********

    */

    /* clang-format on */


    #include "fsl_common.h"

    #include "fsl_gpio.h"

    #include "fsl_iocon.h"

    #include "pin_mux.h"


    /* FUNCTION************************************************************************************************************

    *

    *Function Name : BOARD_InitBootPins

    *Description   : Calls initializationfunctions.

    *

    *END ****************************************************************************************************************/

    void BOARD_InitBootPins(void)

    {

       BOARD_InitPins();

    }


    /* clang-format off */

    /*

    *TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************

    BOARD_InitPins:

    - options: {callFromInitBoot: 'true',prefix: BOARD_, coreID: cm33_core0, enableClock: 'true'}

    - pin_list:

      -{pin_num: '21', peripheral: SWD, signal: SWO, pin_signalIO0_10/FC6_SCK/CT_INP10/CTIMER2_MAT0/FC1_TXD_SCL_MISO_WS/SCT0_OUT2/SWO/SECURE_GPIO0_10/ADC0_1,mode: inactive,

       slew_rate: standard, invert: disabled, open_drain: disabled, asw:disabled}

      -{pin_num: '5', peripheral: GPIO, signal: 'PIO1, 6', pin_signalIO1_6/FC0_TXD_SCL_MISO_WS/CTIMER2_MAT1/SCT_GPI3, direction: OUTPUT, mode:pullUp, slew_rate: standard,

       invert: disabled, open_drain: disabled}

    * BECAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********

    */

    /* clang-format on */


    /* FUNCTION************************************************************************************************************

    *

    *Function Name : BOARD_InitPins

    *Description   : Configures pin routingand optionally pin electrical features.

    *

    *END ****************************************************************************************************************/

    /* Function assigned for the Cortex-M33 */

    void BOARD_InitPins(void)

    {

       /* Enables the clock for the I/O controller.: Enable Clock. */

       CLOCK_EnableClock(kCLOCK_Iocon);


       /* Enables the clock for the GPIO1 module */

       CLOCK_EnableClock(kCLOCK_Gpio1);


       gpio_pin_config_t LED_BLUE_config = {

           .pinDirection = kGPIO_DigitalOutput,

           .outputLogic = 0U

       };

          

           gpio_pin_config_tLED_RED_config = {

           .pinDirection = kGPIO_DigitalOutput,

           .outputLogic = 0U

       };

          

           gpio_pin_config_tLED_GREEN_config = {

           .pinDirection = kGPIO_DigitalOutput,

           .outputLogic = 0U

       };

          

           gpio_pin_config_tport1_pin20 = {

                  .pinDirection= kGPIO_DigitalOutput,

                  .outputLogic= 1U

           };

           gpio_pin_config_tport1_pin21 = {

                  .pinDirection= kGPIO_DigitalOutput,

                  .outputLogic= 1U

       };

       /* Initialize GPIO functionality on pin PIO1_6 (pin 5)  */

       GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_PORT,BOARD_LED_BLUE_PIN, &LED_BLUE_config);

           GPIO_PinInit(BOARD_LED_RED_GPIO,BOARD_LED_RED_PORT, BOARD_LED_RED_PIN, &LED_RED_config);

           GPIO_PinInit(BOARD_LED_GREEN_GPIO,BOARD_LED_GREEN_PORT, BOARD_LED_GREEN_PIN, &LED_GREEN_config);

           GPIO_PinInit(GPIO,1U,20U, &port1_pin20);

           GPIO_PinInit(GPIO,1U,21U, &port1_pin21);

       const uint32_t port0_pin10_config = (/* Pin is configured as SWO */

                                            IOCON_PIO_FUNC6 |

                                             /* Noaddition pin function */

                                            IOCON_PIO_MODE_INACT |

                                             /*Standard mode, output slew rate control is enabled */

                                            IOCON_PIO_SLEW_STANDARD |

                                             /*Input function is not inverted */

                                            IOCON_PIO_INV_DI |

                                             /*Enables digital function */

                                            IOCON_PIO_DIGITAL_EN |

                                             /*Open drain is disabled */

                                             IOCON_PIO_OPENDRAIN_DI|

                                             /*Analog switch is open (disabled) */

                                            IOCON_PIO_ASW_DI);

       /* PORT0 PIN10 (coords: 21) is configured as SWO */

       IOCON_PinMuxSet(IOCON, 0U, 10U, port0_pin10_config);


       const uint32_t LED_BLUE = (/* Pin is configured as PIO1_6 */

                                   IOCON_PIO_FUNC0|

                                   /* Selectspull-up function */

                                   IOCON_PIO_MODE_PULLUP |

                                   /* Standardmode, output slew rate control is enabled */

                                  IOCON_PIO_SLEW_STANDARD |

                                   /* Inputfunction is not inverted */

                                  IOCON_PIO_INV_DI |

                                   /* Enablesdigital function */

                                  IOCON_PIO_DIGITAL_EN |

                                   /* Open drain isdisabled */

                                   IOCON_PIO_OPENDRAIN_DI);

       /* PORT1 PIN6 (coords: 5) is configured as PIO1_6 */

       IOCON_PinMuxSet(IOCON, BOARD_LED_BLUE_PORT, BOARD_LED_BLUE_PIN,LED_BLUE);

          

          

       const uint32_t LED_RED = (/* Pin is configured as PIO1_6 */

                                   IOCON_PIO_FUNC0|

                                   /* Selectspull-up function */

                                  IOCON_PIO_MODE_PULLUP |

                                   /* Standard mode, output slew rate controlis enabled */

                                  IOCON_PIO_SLEW_STANDARD |

                                   /* Inputfunction is not inverted */

                                   IOCON_PIO_INV_DI|

                                   /* Enables digital function */

                                  IOCON_PIO_DIGITAL_EN |

                                   /* Open drain isdisabled */

                                  IOCON_PIO_OPENDRAIN_DI);

       /* PORT1 PIN6 (coords: 5) is configured as PIO1_6 */

       IOCON_PinMuxSet(IOCON, BOARD_LED_RED_PORT, BOARD_LED_RED_PIN, LED_RED);

          

           constuint32_t LED_GREEN = (/* Pin is configured as PIO1_6 */

                                   IOCON_PIO_FUNC0|

                                   /* Selectspull-up function */

                                  IOCON_PIO_MODE_PULLUP |

                                   /* Standardmode, output slew rate control is enabled */

                                  IOCON_PIO_SLEW_STANDARD |

                                   /* Input functionis not inverted */

                                   IOCON_PIO_INV_DI|

                                   /* Enablesdigital function */

                                  IOCON_PIO_DIGITAL_EN |

                                   /* Open drain isdisabled */

                                  IOCON_PIO_OPENDRAIN_DI);

       /* PORT1 PIN6 (coords: 5) is configured as PIO1_6 */

       IOCON_PinMuxSet(IOCON, BOARD_LED_GREEN_PORT, BOARD_LED_GREEN_PIN,LED_GREEN);

          

            const uint32_t port1_pin20_config = (/* Pin isconfigured as FC4_TXD_SCL_MISO_WS */

                                            IOCON_PIO_FUNC0 |

                                             /* No addition pin function */

                                            IOCON_PIO_MODE_PULLUP |

                                             /*Standard mode, output slew rate control is enabled */

                                            IOCON_PIO_SLEW_STANDARD |

                                             /*Input function is not inverted */

                                            IOCON_PIO_INV_DI |

                                             /*Enables digital function */

                                             IOCON_PIO_DIGITAL_EN |

                                             /*Open drain is disabled */

                                            IOCON_PIO_OPENDRAIN_DI);

       /* PORT1 PIN20 (coords: 4) is configured as FC4_TXD_SCL_MISO_WS */

       IOCON_PinMuxSet(IOCON, 1U, 20U, port1_pin20_config);


       const uint32_t port1_pin21_config = (/* Pin is configured asFC4_RXD_SDA_MOSI_DATA */

                                            IOCON_PIO_FUNC0 |

                                             /* Noaddition pin function */

                                            IOCON_PIO_MODE_PULLUP |

                                             /*Standard mode, output slew rate control is enabled */

                                            IOCON_PIO_SLEW_STANDARD |

                                             /* Input function isnot inverted */

                                            IOCON_PIO_INV_DI |

                                             /*Enables digital function */

                                            IOCON_PIO_DIGITAL_EN |

                                             /*Open drain is disabled */

                                            IOCON_PIO_OPENDRAIN_DI);

       /* PORT1 PIN21 (coords: 30) is configured as FC4_RXD_SDA_MOSI_DATA */

       IOCON_PinMuxSet(IOCON, 1U, 21U, port1_pin21_config);

          

           constuint32_t port1_pin16_config = (/* Pin is configured as FC4_RXD_SDA_MOSI_DATA */

                                             IOCON_PIO_FUNC0 |

                                             /* Noaddition pin function */

                                            IOCON_PIO_MODE_INACT |

                                             /*Standard mode, output slew rate control is enabled */

                                            IOCON_PIO_SLEW_STANDARD |

                                             /*Input function is not inverted */

                                            IOCON_PIO_INV_DI |

                                             /*Enables digital function */

                                            IOCON_PIO_DIGITAL_EN |

                                             /*Open drain is disabled */

                                            IOCON_PIO_OPENDRAIN_DI);

       /* PORT1 PIN21 (coords: 30) is configured as FC4_RXD_SDA_MOSI_DATA */

       IOCON_PinMuxSet(IOCON, 1U, 16U, port1_pin16_config);

    }

    /***********************************************************************************************************************

    *EOF

    **********************************************************************************************************************/

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

    使用道具 举报

  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
    发表于 2020-10-17 22:51:41 | 显示全部楼层
    赞。
    另外论坛贴代码,在那个工具栏扩折号标志里面贴会比较整齐好看
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    4 天前
  • 签到天数: 590 天

    [LV.9]以坛为家II

    31

    主题

    1345

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3582
    最后登录
    2024-4-25
     楼主| 发表于 2020-10-17 22:54:57 | 显示全部楼层
    day_day 发表于 2020-10-17 22:51
    赞。
    另外论坛贴代码,在那个工具栏扩折号标志里面贴会比较整齐好看

    好的,下次可以改进下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    836

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3975
    最后登录
    2024-4-16
    发表于 2020-10-18 11:20:56 | 显示全部楼层
    这块功能盖板 不是一般人有的啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    4 天前
  • 签到天数: 590 天

    [LV.9]以坛为家II

    31

    主题

    1345

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3582
    最后登录
    2024-4-25
     楼主| 发表于 2020-10-18 12:49:40 | 显示全部楼层
    mgn 发表于 2020-10-18 11:20
    这块功能盖板 不是一般人有的啊

    闲鱼上还有的卖,设计接口预留了,后面还能接很多其他这样的板子
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-26 14:57 , Processed in 0.131724 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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