1 /*
2  * Copyright (c) 2015, Freescale Semiconductor, Inc.
3  * Copyright 2016-2018 NXP
4  * All rights reserved.
5  *
6  *
7  * SPDX-License-Identifier: BSD-3-Clause
8  */
9 
10 #ifndef _BOARD_H_
11 #define _BOARD_H_
12 
13 #include "clock_config.h"
14 #include "fsl_gpio.h"
15 #include "fsl_port.h"
16 
17 /*******************************************************************************
18  * Definitions
19  ******************************************************************************/
20 
21 /* The board name */
22 #define BOARD_NAME "FRDM-K64F"
23 
24 /* The UART to use for debug messages. */
25 #define BOARD_DEBUG_UART_TYPE     kSerialPort_Uart
26 #define BOARD_DEBUG_UART_BASEADDR (uint32_t) UART0
27 #define BOARD_DEBUG_UART_INSTANCE 0U
28 #define BOARD_DEBUG_UART_CLKSRC   SYS_CLK
29 #define BOARD_DEBUG_UART_CLK_FREQ CLOCK_GetCoreSysClkFreq()
30 #define BOARD_UART_IRQ            UART0_RX_TX_IRQn
31 #define BOARD_UART_IRQ_HANDLER    UART0_RX_TX_IRQHandler
32 
33 #ifndef BOARD_DEBUG_UART_BAUDRATE
34 #define BOARD_DEBUG_UART_BAUDRATE 115200
35 #endif /* BOARD_DEBUG_UART_BAUDRATE */
36 
37 /*! @brief The ENET PHY address. */
38 #define BOARD_ENET0_PHY_ADDRESS (0x00U) /* Phy address of enet port 0. */
39 
40 /* Define the port interrupt number for the board switches */
41 #ifndef BOARD_SW2_GPIO
42 #define BOARD_SW2_GPIO GPIOC
43 #endif
44 #ifndef BOARD_SW2_PORT
45 #define BOARD_SW2_PORT PORTC
46 #endif
47 #ifndef BOARD_SW2_GPIO_PIN
48 #define BOARD_SW2_GPIO_PIN 6U
49 #endif
50 #define BOARD_SW2_IRQ         PORTC_IRQn
51 #define BOARD_SW2_IRQ_HANDLER PORTC_IRQHandler
52 #define BOARD_SW2_NAME        "SW2"
53 
54 #ifndef BOARD_SW3_GPIO
55 #define BOARD_SW3_GPIO GPIOA
56 #endif
57 #ifndef BOARD_SW3_PORT
58 #define BOARD_SW3_PORT PORTA
59 #endif
60 #ifndef BOARD_SW3_GPIO_PIN
61 #define BOARD_SW3_GPIO_PIN 4U
62 #endif
63 #define BOARD_SW3_IRQ         PORTA_IRQn
64 #define BOARD_SW3_IRQ_HANDLER PORTA_IRQHandler
65 #define BOARD_SW3_NAME        "SW3"
66 
67 #define LLWU_SW_GPIO        BOARD_SW2_GPIO
68 #define LLWU_SW_PORT        BOARD_SW2_PORT
69 #define LLWU_SW_GPIO_PIN    BOARD_SW2_GPIO_PIN
70 #define LLWU_SW_IRQ         BOARD_SW2_IRQ
71 #define LLWU_SW_IRQ_HANDLER BOARD_SW2_IRQ_HANDLER
72 #define LLWU_SW_NAME        BOARD_SW2_NAME
73 
74 /* Board led color mapping */
75 #define LOGIC_LED_ON  0U
76 #define LOGIC_LED_OFF 1U
77 #ifndef BOARD_LED_RED_GPIO
78 #define BOARD_LED_RED_GPIO GPIOB
79 #endif
80 #define BOARD_LED_RED_GPIO_PORT PORTB
81 #ifndef BOARD_LED_RED_GPIO_PIN
82 #define BOARD_LED_RED_GPIO_PIN 22U
83 #endif
84 #ifndef BOARD_LED_GREEN_GPIO
85 #define BOARD_LED_GREEN_GPIO GPIOE
86 #endif
87 #define BOARD_LED_GREEN_GPIO_PORT PORTE
88 #ifndef BOARD_LED_GREEN_GPIO_PIN
89 #define BOARD_LED_GREEN_GPIO_PIN 26U
90 #endif
91 #ifndef BOARD_LED_BLUE_GPIO
92 #define BOARD_LED_BLUE_GPIO GPIOB
93 #endif
94 #define BOARD_LED_BLUE_GPIO_PORT PORTB
95 #ifndef BOARD_LED_BLUE_GPIO_PIN
96 #define BOARD_LED_BLUE_GPIO_PIN 21U
97 #endif
98 
99 #define BOARD_ARDUINO_INT_IRQ   (PORTC_IRQn)
100 #define BOARD_ARDUINO_I2C_IRQ   (I2C0_IRQn)
101 #define BOARD_ARDUINO_I2C_INDEX (0)
102 
103 #define LED_RED_INIT(output)                                           \
104     GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PIN, output); \
105     BOARD_LED_RED_GPIO->PDDR |= (1U << BOARD_LED_RED_GPIO_PIN)                         /*!< Enable target LED_RED */
106 #define LED_RED_ON()  GPIO_PortClear(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN) /*!< Turn on target LED_RED */
107 #define LED_RED_OFF() GPIO_PortSet(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN)   /*!< Turn off target LED_RED */
108 #define LED_RED_TOGGLE() \
109     GPIO_PortToggle(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN) /*!< Toggle on target LED_RED */
110 
111 #define LED_GREEN_INIT(output)                                             \
112     GPIO_PinWrite(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, output); \
113     BOARD_LED_GREEN_GPIO->PDDR |= (1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Enable target LED_GREEN */
114 #define LED_GREEN_ON() \
115     GPIO_PortClear(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn on target LED_GREEN */
116 #define LED_GREEN_OFF() \
117     GPIO_PortSet(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn off target LED_GREEN */
118 #define LED_GREEN_TOGGLE() \
119     GPIO_PortToggle(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Toggle on target LED_GREEN */
120 
121 #define LED_BLUE_INIT(output)                                            \
122     GPIO_PinWrite(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, output); \
123     BOARD_LED_BLUE_GPIO->PDDR |= (1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Enable target LED_BLUE */
124 #define LED_BLUE_ON()                                                                                 \
125     GPIO_PortClear(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Turn on target LED_BLUE \ \
126                                                                         */
127 #define LED_BLUE_OFF()                                                                               \
128     GPIO_PortSet(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Turn off target LED_BLUE \ \
129                                                                       */
130 #define LED_BLUE_TOGGLE() \
131     GPIO_PortToggle(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Toggle on target LED_BLUE */
132 
133 #define BOARD_ACCEL_I2C_BASEADDR   I2C0
134 #define BOARD_ACCEL_I2C_CLOCK_FREQ CLOCK_GetFreq(I2C0_CLK_SRC)
135 
136 /* ERPC DSPI configuration */
137 #define ERPC_BOARD_SPI_SLAVE_READY_USE_GPIO (1)
138 #define ERPC_BOARD_DSPI_BASEADDR            SPI0
139 #define ERPC_BOARD_DSPI_BAUDRATE            500000U
140 #define ERPC_BOARD_DSPI_CLKSRC              DSPI0_CLK_SRC
141 #define ERPC_BOARD_DSPI_CLK_FREQ            CLOCK_GetFreq(DSPI0_CLK_SRC)
142 #define ERPC_BOARD_DSPI_INT_GPIO            GPIOB
143 #define ERPC_BOARD_DSPI_INT_PORT            PORTB
144 #define ERPC_BOARD_DSPI_INT_PIN             2U
145 #define ERPC_BOARD_DSPI_INT_PIN_IRQ         PORTB_IRQn
146 #define ERPC_BOARD_DSPI_INT_PIN_IRQ_HANDLER PORTB_IRQHandler
147 
148 /* DAC base address */
149 #define BOARD_DAC_BASEADDR DAC0
150 
151 /* Board accelerometer driver */
152 #define BOARD_ACCEL_FXOS
153 
154 #if defined(__cplusplus)
155 extern "C" {
156 #endif /* __cplusplus */
157 
158 /*******************************************************************************
159  * API
160  ******************************************************************************/
161 void BOARD_InitDebugConsole(void);
162 #if defined(SDK_I2C_BASED_COMPONENT_USED) && SDK_I2C_BASED_COMPONENT_USED
163 void BOARD_I2C_Init(I2C_Type *base, uint32_t clkSrc_Hz);
164 status_t BOARD_I2C_Send(I2C_Type *base,
165                         uint8_t deviceAddress,
166                         uint32_t subAddress,
167                         uint8_t subaddressSize,
168                         uint8_t *txBuff,
169                         uint8_t txBuffSize);
170 status_t BOARD_I2C_Receive(I2C_Type *base,
171                            uint8_t deviceAddress,
172                            uint32_t subAddress,
173                            uint8_t subaddressSize,
174                            uint8_t *rxBuff,
175                            uint8_t rxBuffSize);
176 void BOARD_Accel_I2C_Init(void);
177 status_t BOARD_Accel_I2C_Send(uint8_t deviceAddress, uint32_t subAddress, uint8_t subaddressSize, uint32_t txBuff);
178 status_t BOARD_Accel_I2C_Receive(
179     uint8_t deviceAddress, uint32_t subAddress, uint8_t subaddressSize, uint8_t *rxBuff, uint8_t rxBuffSize);
180 #endif /* SDK_I2C_BASED_COMPONENT_USED */
181 #if defined(__cplusplus)
182 }
183 #endif /* __cplusplus */
184 
185 #endif /* _BOARD_H_ */
186