/*
|
* Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and
|
* its subsidiaries and affiliates (collectly called MKSEMI).
|
*
|
* All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* 1. Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
*
|
* 2. Redistributions in binary form, except as embedded into an MKSEMI
|
* integrated circuit in a product or a software update for such product,
|
* must reproduce the above copyright notice, this list of conditions and
|
* the following disclaimer in the documentation and/or other materials
|
* provided with the distribution.
|
*
|
* 3. Neither the name of MKSEMI nor the names of its contributors may be used
|
* to endorse or promote products derived from this software without
|
* specific prior written permission.
|
*
|
* 4. This software, with or without modification, must only be used with a
|
* MKSEMI integrated circuit.
|
*
|
* 5. Any software provided in binary form under this license must not be
|
* reverse engineered, decompiled, modified and/or disassembled.
|
*
|
* THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
* MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
*/
|
|
#ifndef BOARD_H_
|
#define BOARD_H_
|
|
#include "mk_common.h"
|
#include "mk_trace.h"
|
#include "mk_gpio.h"
|
|
/* LGA CSP
|
IO00 - UART1 RX - UART1 RX
|
IO01 - UART1 TX - UART1 TX (trace port)
|
IO02 - Ranging Role - Ranging Role
|
IO03 - - ISP_EN
|
IO04 - - UCI Handshake S->H
|
IO05 - UART0_TX - UART0_TX | SPI_MISO
|
IO06 - UART0_RX - UART0_RX | SPI_MOSI
|
IO07 - LED - LED | SPI_CLK
|
IO08 - LED - LED | SPI_CS
|
IO09 - - EXT Flash
|
IO10 - - EXT Flash
|
IO11 - SPI_MOSI - EXT Flash
|
IO12 - SPI_MISO - EXT Flash
|
IO13 - SPI_CLK - EXT Flash
|
IO14 - SPI_CS - EXT Flash
|
IO15 - SWDIO - SWDIO
|
IO16 - SWDCLK - SWDCLK
|
IO17 - Button - UCI Handshake H->S
|
*/
|
|
/* Evaluation Kit */
|
#define BOARD_TYPE MK8000_EVK
|
|
/* Board buttons */
|
#define BOARD_SW_1 IO_PIN_17
|
|
/* Board leds */
|
#define BOARD_LED_1 IO_PIN_7
|
#define BOARD_LED_2 IO_PIN_8
|
|
/** UCI handshake pin, from host to slave */
|
#define HOST2SLAVE_HS_GPIO (IO_PIN_17)
|
|
/** UCI handshake pin, from slave to host */
|
#define SLAVE2HOST_HS_GPIO (IO_PIN_4)
|
|
#define CALIB_CH9 0
|
#define CALIB_CH5 1
|
#define CALIB_CH2 2
|
#define CALIB_CH_NUM 3
|
|
#define CALIB_CH(x) (x == 9 ? 0 : (x == 5 ? 1 : 2))
|
|
enum BOARD_NVM_ITEM_ID_T
|
{
|
BOARD_LOAD_CAP = 1,
|
BOARD_LOCAL_SHORT_ADDR = 2,
|
BOARD_PEER_SHORT_ADDR = 3,
|
BOARD_RANGING_SESSION_ID = 4,
|
BOARD_TX_POWER_FCC_LEVEL = 5,
|
BOARD_ANT_DELAYS = 6,
|
BOARD_DEV_ROLE = 7,
|
BOARD_DEV_ROLE_IDX = 8,
|
BOARD_PDOA_DELAYS = 9,
|
BOARD_PDOA_GAINS = 10,
|
BOARD_PDOA_ANT_SPACE = 11,
|
BOARD_PDOA_OFFSETS = 12,
|
BOARD_X32K_LOAD_CAP = 13,
|
};
|
|
/* Board parameters */
|
struct BOARD_PARAM_T
|
{
|
uint32_t flag;
|
uint8_t load_cap;
|
uint8_t tx_power_fcc[CALIB_CH_NUM]; // [CH9, CH5, CH2]
|
uint16_t ranging_session_id;
|
uint16_t local_short_addr;
|
uint16_t peer_short_addr;
|
int16_t ant_delays[CALIB_CH_NUM][4]; // [CH9, CH5, CH2][ANT0, ANT1, ANT2, ANT3], unit: 15.65ps
|
int16_t pdoa_delays[CALIB_CH_NUM][4]; // [CH9, CH5, CH2][ANT0, ANT1, ANT2, ANT3], uint: ps
|
int16_t pdoa_gains[CALIB_CH_NUM][4]; // [CH9, CH5, CH2][ANT0, ANT1, ANT2, ANT3]
|
int16_t pdoa_ant_space; // unit: 0.1mm
|
int16_t pdoa_offsets[2]; // [azimuth, elevation], unit: 0.1degree
|
uint8_t dev_role;
|
uint8_t dev_role_idx;
|
uint8_t x32k_load_cap;
|
};
|
|
#if defined(__cplusplus)
|
extern "C" {
|
#endif
|
|
extern struct BOARD_PARAM_T board_param;
|
|
/**
|
* @brief Configure clock.
|
*
|
*/
|
void board_clock_run(void);
|
|
/**
|
* @brief Configure pin routing and optionally pin electrical features.
|
*
|
*/
|
void board_pins_config(void);
|
|
/**
|
* @brief Configure debug trace port.
|
* @param[in] port Trace port
|
*
|
*/
|
void board_debug_console_open(enum TRACE_PORT_T port);
|
|
/**
|
* @brief Load default calibration parameters.
|
*
|
*/
|
void board_calibration_params_default(void);
|
|
/**
|
* @brief Load calibration parameters from NVM.
|
*
|
*/
|
void board_calibration_params_load(void);
|
|
/**
|
* @brief Write calibration item into NVM.
|
* @param[in] id calibration item ID
|
* @param[in] param pointer of the parameter to be written
|
* @param[in] param_len parameter length
|
* @return TRUE sucess or FALSE fail
|
*/
|
uint8_t board_calibration_param_write(uint8_t id, uint8_t *param, uint8_t param_len);
|
|
/**
|
* @brief Correct ranging result, correction formula depends on the antenna design
|
*
|
* @param [inout] distance Pointer of ranging distance result
|
* @param [inout] azimuth Pointer of azimuth result
|
* @param [inout] elevation Pointer of elevation result
|
*/
|
void board_ranging_result_correct(uint16_t *distance, int16_t *azimuth, int16_t *elevation);
|
|
/**
|
* @brief Configure button GPIO.
|
* @param[in] irq_handler button interrupt process handler
|
*
|
*/
|
void board_button_init(GPIO_IRQ_HANDLER_T irq_handler);
|
/**
|
* @brief Configure button GPIO.
|
* @param[in] irq_handler 5v input interrupt process handler
|
*
|
*/
|
void board_5V_input_init(GPIO_IRQ_HANDLER_T irq_handler);
|
/**
|
* @brief Configure button GPIO.
|
* @param[in] irq_handler accelerate input interrupt process handler
|
*
|
*/
|
void board_acceleration_detection_init(GPIO_IRQ_HANDLER_T irq_handler);
|
/**
|
* @brief Configure LED GPIO.
|
*
|
*/
|
void board_led_init(void);
|
|
/**
|
* @brief LED on.
|
* @param[in] idx LED index
|
*
|
*/
|
void board_led_on(enum IO_PIN_T idx);
|
|
/**
|
* @brief LED off.
|
* @param[in] idx LED index
|
*
|
*/
|
void board_led_off(enum IO_PIN_T idx);
|
|
/**
|
* @brief LED toggle.
|
* @param[in] idx LED index
|
*
|
*/
|
void board_led_toggle(enum IO_PIN_T idx);
|
|
/**
|
* @brief Configure peripherals on board (for board function extension).
|
*
|
*/
|
void board_configure(void);
|
|
/**
|
* @brief Prepare to enter power down mode.
|
*
|
*/
|
void board_prepare_for_power_down(void);
|
|
/**
|
* @brief Restore board setting from power down mode.
|
*
|
*/
|
void board_restore_from_power_down(void);
|
/**
|
* @brief Change uart1 gps to debug.
|
*
|
*/
|
void uart1_change_from_gps_to_debug(void);
|
/**
|
* @brief Change uart1 debug to gps.
|
*
|
*/
|
void uart1_change_from_debug_to_gps(void);
|
#if defined(__cplusplus)
|
}
|
#endif
|
|
#endif /* BOARD_H_ */
|