269 lines
10 KiB
C
269 lines
10 KiB
C
/**
|
|
****************************************************************************************
|
|
*
|
|
* @file rom.h
|
|
*
|
|
* @brief Header file - Drivers defined in ROM
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
|
|
#ifndef _ROM_H_
|
|
#define _ROM_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Address Pointer of APIs
|
|
enum ROM_POINTER {
|
|
ROM_BOOTLOADER = 0x000001b9,
|
|
ROM_PUART_CONF = 0x0000032d,
|
|
ROM_PUART_GETC = 0x00000379,
|
|
ROM_PUART_PUTC = 0x00000387,
|
|
ROM_PUART_WAIT = 0x00000393,
|
|
ROM_PUART_INIT = 0x000003a3,
|
|
ROM_UARTSYNC = 0x00000469,
|
|
ROM_UARTPARSE = 0x000004a9,
|
|
ROM_SYSJUMPTO = 0x00000731,
|
|
ROM_BTMR_DELAY = 0x00000749,
|
|
ROM_XO16M_EN = 0x00000777,
|
|
ROM_EXTCLK_EN = 0x0000079b,
|
|
ROM_DPLL_EN = 0x000007bd,
|
|
ROM_DEEPSLEEP = 0x000007df,
|
|
ROM_RSTCLR = 0x00000845,
|
|
ROM_RCC_FSHCLK_SET = 0x00000877,
|
|
ROM_IWDT_CONF = 0x000008d1,
|
|
ROM_RC16M_CALIB = 0x000008fd,
|
|
ROM_TRIMVALLOAD = 0x0000097d,
|
|
ROM_FSHC_XIP_CONF = 0x00000abd,
|
|
ROM_FSHC_SUSPEND_CONF = 0x00000ae1,
|
|
ROM_FSHC_HPM_CONF = 0x00000b1f,
|
|
ROM_FSHC_EN_CMD = 0x00000b59,
|
|
ROM_FSHC_WR_STA = 0x00000b73,
|
|
ROM_FSHC_RD_STA = 0x00000b9d,
|
|
ROM_FSHC_WR_CFG = 0x00000bcd,
|
|
ROM_FSHC_WR_FIFO = 0x00000beb,
|
|
ROM_FSHC_RD_CFG = 0x00000c21,
|
|
ROM_FSHC_RD_FIFO = 0x00000c41,
|
|
ROM_FSHC_ERASE = 0x00000c63,
|
|
ROM_FSHC_WRITE = 0x00000cb9,
|
|
ROM_FSHC_READ = 0x00000d1d,
|
|
ROM_FLASHINIT = 0x00000d6d,
|
|
ROM_FSHC_CAPDLY_CFG = 0x00000dc9,
|
|
ROM_FSHC_QUAD_MODE = 0x00000e25,
|
|
ROM_PUYA_QUADHPMXIPMODE = 0x00000e41,
|
|
ROM_PUYA_ENTER_HPM = 0x00000e61,
|
|
ROM_PUYA_EXIT_HPM = 0x00000ead,
|
|
ROM_XMEMCPY = 0x00000f19,
|
|
ROM_XMEMMOVE = 0x00000f59,
|
|
ROM_XMEMSET = 0x00000f75,
|
|
ROM_XMEMCMP = 0x00000fa3,
|
|
};
|
|
|
|
/// Flash Data length type
|
|
typedef uint32_t flen_t;
|
|
|
|
|
|
/*
|
|
* APIs : Memory Operation
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Same as memcpy, direct copy uint32_t if aligned
|
|
#define xmemcpy ((void (*)(void *dst, const void *src, uint32_t size))ROM_XMEMCPY)
|
|
|
|
/// Same as memmove, reverse copy or inner call xmemcpy
|
|
#define xmemmove ((void (*)(void * dst, const void * src, uint32_t size))ROM_XMEMMOVE)
|
|
|
|
/// Same as xmemset, fill cccc to uint32_t when address aligned
|
|
#define xmemset ((void (*)(void *m, uint8_t c, uint32_t size))ROM_XMEMSET)
|
|
|
|
/// Same as memcmp, direct compare uint32_t if aligned
|
|
#define xmemcmp ((int (*)(const void *m1, const void *m2, uint32_t size))ROM_XMEMCMP)
|
|
|
|
|
|
/*
|
|
* APIs : Core Utility
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Core enter deep sleep mode, inner call __wfi
|
|
#define deepsleep ((void (*)(void))ROM_DEEPSLEEP)
|
|
|
|
/// Clear states of Core reset and wakeup, return the reason and source
|
|
/// @see enum rst_src_bfs
|
|
#define rstrsn ((uint16_t (*)(void))ROM_RSTCLR)
|
|
|
|
/// Jump to the running 'addr' of application, SP PC STACK reinited
|
|
#define sysJumpTo ((void (*)(uint32_t addr))ROM_SYSJUMPTO)
|
|
|
|
/// Enable xosc16m Oscillator mode, wait 2ms for stable
|
|
#define xo16m_en ((void (*)(void))ROM_XO16M_EN)
|
|
|
|
/// Enable extarnal clock mode, through XOSC16M_IN PAD into chip
|
|
#define extclk_en ((void (*)(void))ROM_EXTCLK_EN)
|
|
|
|
/// Enable dpll power and clk, wait 50us for stable
|
|
#define dpll_en ((void (*)(void))ROM_DPLL_EN)
|
|
|
|
/// Delay via basic timer, wait 'tcnt' count in 'tpsc' prescaler
|
|
/// eg. btmr_delay(16, 1000) means delay 1Ms when sysclk is 16MHz
|
|
#define btmr_delay ((void (*)(uint16_t tpsc, uint16_t tcnt))ROM_BTMR_DELAY)
|
|
/// time must great than 1
|
|
#if (SYS_CLK == 1)
|
|
#define bootDelayMs(time) btmr_delay(32000, time)
|
|
#define bootDelayUs(time) btmr_delay(32, time)
|
|
#elif (SYS_CLK == 2)
|
|
#define bootDelayMs(time) btmr_delay(48000, time)
|
|
#define bootDelayUs(time) btmr_delay(48, time)
|
|
#elif (SYS_CLK == 3)
|
|
#define bootDelayMs(time) btmr_delay(64000, time)
|
|
#define bootDelayUs(time) btmr_delay(64, time)
|
|
#else
|
|
#define bootDelayMs(time) btmr_delay(16000, time)
|
|
#define bootDelayUs(time) btmr_delay(16, time)
|
|
#endif //SYS_CLK
|
|
|
|
/// Config IWDT, disable if 'load' equl 0
|
|
#define iwdt_conf ((uint32_t (*)(uint32_t load))ROM_IWDT_CONF)
|
|
|
|
/// Calib rc16m, return trim value(range 0~63)
|
|
#define rc16m_calib ((uint8_t (*)(void))ROM_RC16M_CALIB)
|
|
|
|
|
|
/*
|
|
* APIs : Boot Uart(UART1)
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Csc PA6 PA7 as pUart PIN
|
|
#define pUart_init ((void (*)(void))ROM_PUART_INIT)
|
|
|
|
/// Config pUart params
|
|
#define pUart_conf ((void (*)(uint16_t cfg_BRR, uint16_t cfg_LCR))ROM_PUART_CONF)
|
|
|
|
/// Get one data from pUart RXD(Blocking)
|
|
#define pUart_getc ((uint8_t (*)(void))ROM_PUART_GETC)
|
|
|
|
/// Put one byte via pUart TXD(Blocking)
|
|
#define pUart_putc ((void (*)(uint8_t ch))ROM_PUART_PUTC)
|
|
|
|
/// Wait pUart finished(not busy)
|
|
#define pUart_wait ((void (*)(void))ROM_PUART_WAIT)
|
|
|
|
|
|
/*
|
|
* APIs: Flash Controlor(FSHC) Driver
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Set Fshc Clock Selection @see enum fsh_clk_sel
|
|
#define rcc_fshclk_set ((void (*)(uint8_t fclk_sel))ROM_RCC_FSHCLK_SET)
|
|
|
|
/// Config XIP mode
|
|
#define fshc_xip_conf ((void (*)(uint8_t rdCmd, uint8_t adrBits, uint32_t dlySet))ROM_FSHC_XIP_CONF)
|
|
|
|
/// Config HPM mode
|
|
#define fshc_hpm_conf ((void (*)(bool en, uint8_t crIdx, uint8_t crCmd))ROM_FSHC_HPM_CONF)
|
|
|
|
/// Config Suspend/Resume
|
|
#define fshc_suspend_conf ((void (*)(uint8_t susCmd, uint8_t rsmCmd, uint16_t susTime, uint32_t rsmTime))ROM_FSHC_SUSPEND_CONF)
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Send control/enable command without value
|
|
*
|
|
* @param[in] cmd Command opcode(eg. FSH_CMD_RST_EN FSH_CMD_RESET FSH_CMD_EXIT_HMP
|
|
* FSH_CMD_WR_EN FSH_CMD_WR_STA_EN)
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
#define fshc_en_cmd ((void (*)(uint8_t cmd))ROM_FSHC_EN_CMD)
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Write value to flash state register
|
|
*
|
|
* @param[in] cmd Command opcode(eg. FSH_CMD_WR_STA)
|
|
* @param[in] len Length of value, range 1~4 Bytes
|
|
* @param[in] val State value, valid range 8/16/24/32bits by 'len'
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
#define fshc_wr_sta ((void (*)(uint8_t cmd, uint8_t len, uint32_t val))ROM_FSHC_WR_STA)
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Read value from flash state register
|
|
*
|
|
* @param[in] cmd Command opcode(eg. FSH_CMD_RD_ID FSH_CMD_RD_STA0 FSH_CMD_RD_STA1)
|
|
* @param[in] len Length of value, range 1~4 Bytes
|
|
*
|
|
* @return value State value, valid range 8/16/24/32bits by 'len'
|
|
****************************************************************************************
|
|
*/
|
|
#define fshc_rd_sta ((uint32_t (*)(uint8_t cmd, uint8_t len))ROM_FSHC_RD_STA)
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Perpare write data to flash
|
|
*
|
|
* @param[in] cmd fshc access cmd (example read cmd: 0x03)
|
|
* @param[in] offset access flash addr offset
|
|
* @param[in] len access flash data len, unit is byte
|
|
* @param[in] sctrl access flash mode config(example: spi mode, dual mode...)
|
|
* @param[in] acbit dummy cycle
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
#define fshc_wr_cfg ((void (*)(uint8_t cmd, uint32_t offset, flen_t len, uint16_t sctrl, uint16_t acbit))ROM_FSHC_WR_CFG)
|
|
|
|
/// Fill 'data'(unit in uint32_t, length='wlen') to Fshc Write-FiFo in 'fcmd' mode
|
|
#define fshc_wr_fifo ((flen_t (*)(const uint32_t *data, flen_t wlen, uint16_t fcmd))fshc_wr_fifo)
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Perpare read data from flash
|
|
*
|
|
* @param[in] cmd fshc access cmd (example read cmd: 0x03)
|
|
* @param[in] offset access flash addr offset
|
|
* @param[in] len access flash data len, unit is byte
|
|
* @param[in] sctrl access flash mode config(example: spi mode, dual mode...)
|
|
* @param[in] acbit dummy cycle
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
#define fshc_rd_cfg ((void (*)(uint8_t cmd, uint32_t offset, flen_t len, uint16_t sctrl, uint16_t acbit))ROM_FSHC_RD_CFG)
|
|
|
|
/// Get data from Fshc Read-FiFo to 'buff'(unit in uint32_t, length='wlen') in 'fcmd' mode
|
|
#define fshc_rd_fifo ((flen_t (*)(uint32_t *buff, flen_t wlen, uint16_t fcmd))ROM_FSHC_RD_FIFO)
|
|
|
|
/// Erase Flash in 'fcmd' config, inner call fshc_en_cmd() fshc_wr_cfg()
|
|
#define fshc_erase ((void (*)(uint32_t offset, uint16_t fcmd))ROM_FSHC_ERASE)
|
|
|
|
/// Read Flash in 'fcmd' config, inner call fshc_rd_cfg() fshc_rd_fifo()
|
|
#define fshc_read ((flen_t (*)(uint32_t offset, uint32_t *buff, flen_t wlen, uint16_t fcmd))ROM_FSHC_READ)
|
|
|
|
/// Write Flash in 'fcmd' config, inner call fshc_en_cmd() fshc_wr_cfg()fshc_wr_fifo()
|
|
#define fshc_write ((flen_t (*)(uint32_t offset, const uint32_t *data, flen_t wlen, uint16_t fcmd))ROM_FSHC_WRITE)
|
|
|
|
/// Config Flash Cap Dealy cell(0~7, default 5), auto search if 'dly' > 7
|
|
#define fshc_capdly_cfg ((uint8_t (*)(uint8_t dly))ROM_FSHC_CAPDLY_CFG)
|
|
|
|
/// Config Flash Access Mode, enter/exit Quad mode with special 'val'
|
|
#define fshc_quad_mode ((void (*)(uint16_t val))ROM_FSHC_QUAD_MODE)
|
|
|
|
/// BoYa Flash enter HPM mode
|
|
#define boya_enter_hpm ((void (*)(void))ROM_PUYA_ENTER_HPM)
|
|
|
|
/// BoYa Flash exit HPM Mode
|
|
#define boya_exit_hpm ((void (*)(void))ROM_PUYA_EXIT_HPM)
|
|
|
|
|
|
#endif // _ROM_H_
|