1 /*
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2018 NXP
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef _BOARD_H_
9 #define _BOARD_H_
10 
11 #include "clock_config.h"
12 #include "fsl_common.h"
13 #include "fsl_gpio.h"
14 
15 /*******************************************************************************
16  * Definitions
17  ******************************************************************************/
18 /*! @brief The board name */
19 #define BOARD_NAME "LPCXPRESSO51U68"
20 
21 #define BOARD_EXTCLKINRATE (0)
22 
23 /*! @brief The UART to use for debug messages. */
24 #define BOARD_DEBUG_UART_TYPE       kSerialPort_Uart
25 #define BOARD_DEBUG_UART_BASEADDR   (uint32_t) USART0
26 #define BOARD_DEBUG_UART_INSTANCE   0U
27 #define BOARD_DEBUG_UART_CLK_FREQ   CLOCK_GetFlexCommClkFreq(0)
28 #define BOARD_DEBUG_UART_CLK_ATTACH kFRO12M_to_FLEXCOMM0
29 #define BOARD_DEBUG_UART_RST        kFC0_RST_SHIFT_RSTn
30 #define BOARD_UART_IRQ              FLEXCOMM0_IRQn
31 #define BOARD_UART_IRQ_HANDLER      FLEXCOMM0_IRQHandler
32 
33 #define BOARD_DEBUG_SPI_CLK_FREQ 12000000
34 
35 #ifndef BOARD_DEBUG_UART_BAUDRATE
36 #define BOARD_DEBUG_UART_BAUDRATE 115200
37 #endif /* BOARD_DEBUG_UART_BAUDRATE */
38 
39 #ifndef BOARD_LED_RED_GPIO
40 #define BOARD_LED_RED_GPIO GPIO
41 #endif
42 #define BOARD_LED_RED_GPIO_PORT 0U
43 #ifndef BOARD_LED_RED_GPIO_PIN
44 #define BOARD_LED_RED_GPIO_PIN 29U
45 #endif
46 #ifndef BOARD_LED_GREEN_GPIO
47 #define BOARD_LED_GREEN_GPIO GPIO
48 #endif
49 #define BOARD_LED_GREEN_GPIO_PORT 1U
50 #ifndef BOARD_LED_GREEN_GPIO_PIN
51 #define BOARD_LED_GREEN_GPIO_PIN 10U
52 #endif
53 #ifndef BOARD_LED_BLUE_GPIO
54 #define BOARD_LED_BLUE_GPIO GPIO
55 #endif
56 #define BOARD_LED_BLUE_GPIO_PORT 1U
57 #ifndef BOARD_LED_BLUE_GPIO_PIN
58 #define BOARD_LED_BLUE_GPIO_PIN 9U
59 #endif
60 
61 #ifndef BOARD_SW1_GPIO
62 #define BOARD_SW1_GPIO GPIO
63 #endif
64 #define BOARD_SW1_GPIO_PORT 0U
65 #ifndef BOARD_SW1_GPIO_PIN
66 #define BOARD_SW1_GPIO_PIN 24U
67 #endif
68 #define BOARD_SW1_NAME        "SW1"
69 #define BOARD_SW3_IRQ         PIN_INT0_IRQn
70 #define BOARD_SW3_IRQ_HANDLER PIN_INT0_IRQHandler
71 
72 #ifndef BOARD_SW2_GPIO
73 #define BOARD_SW2_GPIO GPIO
74 #endif
75 #define BOARD_SW2_GPIO_PORT 0U
76 #ifndef BOARD_SW2_GPIO_PIN
77 #define BOARD_SW2_GPIO_PIN 31U
78 #endif
79 #define BOARD_SW2_NAME        "SW2"
80 #define BOARD_SW3_IRQ         PIN_INT0_IRQn
81 #define BOARD_SW3_IRQ_HANDLER PIN_INT0_IRQHandler
82 
83 #ifndef BOARD_SW3_GPIO
84 #define BOARD_SW3_GPIO GPIO
85 #endif
86 #define BOARD_SW3_GPIO_PORT 0U
87 #ifndef BOARD_SW3_GPIO_PIN
88 #define BOARD_SW3_GPIO_PIN 4U
89 #endif
90 #define BOARD_SW3_NAME              "SW3"
91 #define BOARD_SW3_IRQ               PIN_INT0_IRQn
92 #define BOARD_SW3_IRQ_HANDLER       PIN_INT0_IRQHandler
93 #define BOARD_SW3_GPIO_PININT_INDEX 0
94 
95 #define BOARD_ARDUINO_INT_IRQ   (GINT0_IRQn)
96 #define BOARD_ARDUINO_I2C_IRQ   (FLEXCOMM4_IRQn)
97 #define BOARD_ARDUINO_I2C_INDEX (4)
98 /* Board led color mapping */
99 #define LOGIC_LED_ON  0U
100 #define LOGIC_LED_OFF 1U
101 
102 #define LED_RED_INIT(output)                                                          \
103     GPIO_PinInit(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PORT, BOARD_LED_RED_GPIO_PIN, \
104                  &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_RED */
105 #define LED_RED_ON()                                            \
106     GPIO_PortClear(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PORT, \
107                    1U << BOARD_LED_RED_GPIO_PIN) /*!< Turn on target LED_RED */
108 #define LED_RED_OFF()                                         \
109     GPIO_PortSet(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PORT, \
110                  1U << BOARD_LED_RED_GPIO_PIN) /*!< Turn off target LED_RED */
111 #define LED_RED_TOGGLE()                                         \
112     GPIO_PortToggle(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PORT, \
113                     1U << BOARD_LED_RED_GPIO_PIN) /*!< Toggle on target LED_RED */
114 
115 #define LED_GREEN_INIT(output)                                                              \
116     GPIO_PinInit(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PORT, BOARD_LED_GREEN_GPIO_PIN, \
117                  &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_GREEN */
118 #define LED_GREEN_ON()                                              \
119     GPIO_PortClear(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PORT, \
120                    1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn on target LED_GREEN */
121 #define LED_GREEN_OFF()                                           \
122     GPIO_PortSet(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PORT, \
123                  1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn off target LED_GREEN */
124 #define LED_GREEN_TOGGLE()                                           \
125     GPIO_PortToggle(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PORT, \
126                     1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Toggle on target LED_GREEN */
127 
128 #define LED_BLUE_INIT(output)                                                            \
129     GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PORT, BOARD_LED_BLUE_GPIO_PIN, \
130                  &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_BLUE */
131 #define LED_BLUE_ON()                                             \
132     GPIO_PortClear(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PORT, \
133                    1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Turn on target LED_BLUE */
134 #define LED_BLUE_OFF()                                          \
135     GPIO_PortSet(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PORT, \
136                  1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Turn off target LED_BLUE */
137 #define LED_BLUE_TOGGLE()                                          \
138     GPIO_PortToggle(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PORT, \
139                     1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Toggle on target LED_BLUE */
140 
141 #define BOARD_CODEC_I2C_BASEADDR   I2C4
142 #define BOARD_CODEC_I2C_INSTANCE   4U
143 #define BOARD_CODEC_I2C_CLOCK_FREQ 12000000
144 
145 #if defined(__cplusplus)
146 extern "C" {
147 #endif /* __cplusplus */
148 
149 /*******************************************************************************
150  * API
151  ******************************************************************************/
152 
153 status_t BOARD_InitDebugConsole(void);
154 #if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED
155 void BOARD_I2C_Init(I2C_Type *base, uint32_t clkSrc_Hz);
156 status_t BOARD_I2C_Send(I2C_Type *base,
157                         uint8_t deviceAddress,
158                         uint32_t subAddress,
159                         uint8_t subaddressSize,
160                         uint8_t *txBuff,
161                         uint8_t txBuffSize);
162 status_t BOARD_I2C_Receive(I2C_Type *base,
163                            uint8_t deviceAddress,
164                            uint32_t subAddress,
165                            uint8_t subaddressSize,
166                            uint8_t *rxBuff,
167                            uint8_t rxBuffSize);
168 void BOARD_Codec_I2C_Init(void);
169 status_t BOARD_Codec_I2C_Send(
170     uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, const uint8_t *txBuff, uint8_t txBuffSize);
171 status_t BOARD_Codec_I2C_Receive(
172     uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, uint8_t *rxBuff, uint8_t rxBuffSize);
173 #endif /* SDK_I2C_BASED_COMPONENT_USED */
174 #if defined(__cplusplus)
175 }
176 #endif /* __cplusplus */
177 
178 #endif /* _BOARD_H_ */
179