1 /*
2  * Copyright 2019 NXP
3  * All rights reserved.
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_gpio.h"
13 
14 /*******************************************************************************
15  * Definitions
16  ******************************************************************************/
17 
18 /* The board name */
19 #define BOARD_NAME "FRDM-K32L2B"
20 
21 /* The LPUART to use for debug messages. */
22 #define BOARD_DEBUG_UART_TYPE kSerialPort_Uart
23 #define BOARD_DEBUG_UART_BASEADDR (uint32_t) LPUART0
24 #define BOARD_DEBUG_UART_INSTANCE 0U
25 #define BOARD_DEBUG_UART_CLKSRC kCLOCK_McgIrc48MClk
26 #define BOARD_DEBUG_UART_CLK_FREQ CLOCK_GetFreq(kCLOCK_McgIrc48MClk)
27 #define BOARD_UART_IRQ LPUART0_IRQn
28 #define BOARD_UART_IRQ_HANDLER LPUART0_IRQHandler
29 
30 #ifndef BOARD_DEBUG_UART_BAUDRATE
31 #define BOARD_DEBUG_UART_BAUDRATE 115200
32 #endif /* BOARD_DEBUG_UART_BAUDRATE */
33 
34 #define BOARD_ADC_USE_ALT_VREF 1U
35 
36 #define BOARD_TPM_BASEADDR TPM0
37 #define BOARD_TPM_CHANNEL 5U
38 
39 /*! @brief The bubble level demo information */
40 #define BOARD_BUBBLE_TPM_BASEADDR TPM0
41 #define BOARD_TPM_X_CHANNEL 4U
42 #define BOARD_TPM_Y_CHANNEL 5U
43 #define BOARD_MMA8451_ADDR 0x1D
44 #define BOARD_ACCEL_ADDR BOARD_MMA8451_ADDR
45 #define BOARD_ACCEL_BAUDRATE 100
46 #define BOARD_ACCEL_I2C_BASEADDR I2C0
47 #define BOARD_ACCEL_I2C_CLOCK_FREQ CLOCK_GetFreq(I2C0_CLK_SRC)
48 
49 /*! @brief The rtc instance used for board. */
50 #define BOARD_RTC_FUNC_BASEADDR RTC
51 
52 /*! @brief The Compare instance/channel used for board */
53 #define BOARD_CMP_BASEADDR CMP0
54 #define BOARD_CMP_CHANNEL 0U
55 
56 /*! @brief The i2c instance used for i2c connection by default */
57 #define BOARD_I2C_BASEADDR I2C1
58 
59 /*! @brief The spi instance used for board. */
60 #define BOARD_SPI_BASEADDR SPI1
61 
62 /*! @brief Define the port interrupt number for the board switches */
63 #ifndef BOARD_SW1_GPIO
64 #define BOARD_SW1_GPIO GPIOA
65 #endif
66 #ifndef BOARD_SW1_PORT
67 #define BOARD_SW1_PORT PORTA
68 #endif
69 #ifndef BOARD_SW1_GPIO_PIN
70 #define BOARD_SW1_GPIO_PIN 4U
71 #endif
72 #define BOARD_SW1_IRQ PORTA_IRQn
73 #define BOARD_SW1_IRQ_HANDLER PORTA_IRQHandler
74 #define BOARD_SW1_NAME "SW1"
75 
76 #ifndef BOARD_SW3_GPIO
77 #define BOARD_SW3_GPIO GPIOC
78 #endif
79 #ifndef BOARD_SW3_PORT
80 #define BOARD_SW3_PORT PORTC
81 #endif
82 #ifndef BOARD_SW3_GPIO_PIN
83 #define BOARD_SW3_GPIO_PIN 3U
84 #endif
85 #define BOARD_SW3_IRQ PORTC_PORTD_IRQn
86 #define BOARD_SW3_IRQ_HANDLER PORTC_PORTD_IRQHandler
87 #define BOARD_SW3_NAME "SW3"
88 
89 #define LLWU_SW_GPIO BOARD_SW3_GPIO
90 #define LLWU_SW_PORT BOARD_SW3_PORT
91 #define LLWU_SW_GPIO_PIN BOARD_SW3_GPIO_PIN
92 #define LLWU_SW_IRQ BOARD_SW3_IRQ
93 #define LLWU_SW_IRQ_HANDLER BOARD_SW3_IRQ_HANDLER
94 #define LLWU_SW_NAME BOARD_SW3_NAME
95 
96 /* Board led color mapping */
97 #define LOGIC_LED_ON 0U
98 #define LOGIC_LED_OFF 1U
99 #ifndef BOARD_LED_RED_GPIO
100 #define BOARD_LED_RED_GPIO GPIOE
101 #endif
102 #define BOARD_LED_RED_GPIO_PORT PORTE
103 #ifndef BOARD_LED_RED_GPIO_PIN
104 #define BOARD_LED_RED_GPIO_PIN 31U
105 #endif
106 #ifndef BOARD_LED_GREEN_GPIO
107 #define BOARD_LED_GREEN_GPIO GPIOD
108 #endif
109 #define BOARD_LED_GREEN_GPIO_PORT PORTD
110 #ifndef BOARD_LED_GREEN_GPIO_PIN
111 #define BOARD_LED_GREEN_GPIO_PIN 5U
112 #endif
113 
114 #define LED_RED_INIT(output)                                           \
115     GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PIN, output); \
116     BOARD_LED_RED_GPIO->PDDR |= (1U << BOARD_LED_RED_GPIO_PIN)                        /*!< Enable target LED_RED */
117 #define LED_RED_ON() GPIO_PortClear(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN) /*!< Turn on target LED_RED */
118 #define LED_RED_OFF() GPIO_PortSet(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN)  /*!< Turn off target LED_RED */
119 #define LED_RED_TOGGLE() \
120     GPIO_PortToggle(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN) /*!< Toggle on target LED_RED */
121 
122 #define LED_GREEN_INIT(output)                                             \
123     GPIO_PinWrite(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, output); \
124     BOARD_LED_GREEN_GPIO->PDDR |= (1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Enable target LED_GREEN */
125 #define LED_GREEN_ON() \
126     GPIO_PortClear(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn on target LED_GREEN */
127 #define LED_GREEN_OFF() \
128     GPIO_PortSet(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn off target LED_GREEN */
129 #define LED_GREEN_TOGGLE() \
130     GPIO_PortToggle(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Toggle on target LED_GREEN */
131 
132 /* ERPC SPI configuration */
133 #define ERPC_BOARD_SPI_BASEADDR SPI1
134 #define ERPC_BOARD_SPI_BAUDRATE 500000U
135 #define ERPC_BOARD_SPI_CLKSRC SPI1_CLK_SRC
136 #define ERPC_BOARD_SPI_CLK_FREQ CLOCK_GetFreq(SPI1_CLK_SRC)
137 #define ERPC_BOARD_SPI_INT_GPIO GPIOC
138 #define ERPC_BOARD_SPI_INT_PORT PORTC
139 #define ERPC_BOARD_SPI_INT_PIN 1U
140 #define ERPC_BOARD_SPI_INT_PIN_IRQ PORTC_PORTD_IRQn
141 #define ERPC_BOARD_SPI_INT_PIN_IRQ_HANDLER PORTC_PORTD_IRQHandler
142 
143 /* DAC base address */
144 #define BOARD_DAC_BASEADDR DAC0
145 
146 /* Board accelerometer driver */
147 #define BOARD_ACCEL_MMA
148 
149 #if defined(__cplusplus)
150 extern "C" {
151 #endif /* __cplusplus */
152 
153 /*******************************************************************************
154  * API
155  ******************************************************************************/
156 
157 void BOARD_InitDebugConsole(void);
158 #if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED
159 void BOARD_I2C_Init(I2C_Type *base, uint32_t clkSrc_Hz);
160 status_t BOARD_I2C_Send(I2C_Type *base,
161                         uint8_t deviceAddress,
162                         uint32_t subAddress,
163                         uint8_t subaddressSize,
164                         uint8_t *txBuff,
165                         uint8_t txBuffSize);
166 status_t BOARD_I2C_Receive(I2C_Type *base,
167                            uint8_t deviceAddress,
168                            uint32_t subAddress,
169                            uint8_t subaddressSize,
170                            uint8_t *rxBuff,
171                            uint8_t rxBuffSize);
172 void BOARD_Accel_I2C_Init(void);
173 status_t BOARD_Accel_I2C_Send(uint8_t deviceAddress, uint32_t subAddress, uint8_t subaddressSize, uint32_t txBuff);
174 status_t BOARD_Accel_I2C_Receive(
175     uint8_t deviceAddress, uint32_t subAddress, uint8_t subaddressSize, uint8_t *rxBuff, uint8_t rxBuffSize);
176 #endif /* SDK_I2C_BASED_COMPONENT_USED */
177 
178 #if defined(__cplusplus)
179 }
180 #endif /* __cplusplus */
181 
182 #endif /* _BOARD_H_ */
183