继上次分享点灯有段时间了,今天我接上了我预留的Arduino接口。对接使用相同接口的拓展板。完成一次点灯。此款板子上的RGB灯是由P9813驱动芯片驱动的。串行接口。这里我们用到的是IIC的接口。
就是这两个接口。
下面看下效果。
同时附带上代码。
/*
*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
**********************************************************************************************************************/
|