828eco基于GD32H7mcu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

780 lines
67 KiB

5 months ago
/*!
\file gd32h75e_exmc.h
\brief definitions for the EXMC
\version 2025-08-07, V1.2.0, firmware for GD32H75E
*/
/*
Copyright (c) 2025, GigaDevice Semiconductor Inc.
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 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 the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 GD32H75E_EXMC_H
#define GD32H75E_EXMC_H
#include "gd32h75e.h"
/* EXMC definitions */
#define EXMC EXMC_BASE /*!< EXMC register base address */
/* registers definitions */
/* NOR/PSRAM */
#define EXMC_SNCTL0 REG32(EXMC + 0x00000000U) /*!< EXMC SRAM/NOR flash control register for region0 */
#define EXMC_SNTCFG0 REG32(EXMC + 0x00000004U) /*!< EXMC SRAM/NOR flash timing configuration register for region0 */
#define EXMC_SNWTCFG0 REG32(EXMC + 0x00000104U) /*!< EXMC SRAM/NOR flash write timing configuration register for region0 */
#define EXMC_SNCTL1 REG32(EXMC + 0x00000008U) /*!< EXMC SRAM/NOR flash control register for region1 */
#define EXMC_SNTCFG1 REG32(EXMC + 0x0000000CU) /*!< EXMC SRAM/NOR flash timing configuration register for region1 */
#define EXMC_SNWTCFG1 REG32(EXMC + 0x0000010CU) /*!< EXMC SRAM/NOR flash write timing configuration register for region1 */
#define EXMC_SNCTL2 REG32(EXMC + 0x00000010U) /*!< EXMC SRAM/NOR flash control register for region2 */
#define EXMC_SNTCFG2 REG32(EXMC + 0x00000014U) /*!< EXMC SRAM/NOR flash timing configuration register for region2 */
#define EXMC_SNWTCFG2 REG32(EXMC + 0x00000114U) /*!< EXMC SRAM/NOR flash write timing configuration register for region2 */
#define EXMC_SNCTL3 REG32(EXMC + 0x00000018U) /*!< EXMC SRAM/NOR flash control register for region3 */
#define EXMC_SNTCFG3 REG32(EXMC + 0x0000001CU) /*!< EXMC SRAM/NOR flash timing configuration register for region3 */
#define EXMC_SNWTCFG3 REG32(EXMC + 0x0000011CU) /*!< EXMC SRAM/NOR flash write timing configuration register for region3 */
/* NAND */
#define EXMC_NCTL REG32(EXMC + 0x00000080U) /*!< EXMC NAND control register */
#define EXMC_NINTEN REG32(EXMC + 0x00000084U) /*!< EXMC NAND interrupt enable register */
#define EXMC_NCTCFG REG32(EXMC + 0x00000088U) /*!< EXMC NAND common space timing configuration register */
#define EXMC_NATCFG REG32(EXMC + 0x0000008CU) /*!< EXMC NAND attribute space timing configuration register */
#define EXMC_NECC REG32(EXMC + 0x00000094U) /*!< EXMC NAND ECC register */
/* SDRAM */
#define EXMC_SDCTL0 REG32(EXMC + 0x00000140U) /*!< EXMC SDRAM control register for device0 */
#define EXMC_SDTCFG0 REG32(EXMC + 0x00000148U) /*!< EXMC SDRAM timing configuration register register for device0 */
#define EXMC_SDCTL1 REG32(EXMC + 0x00000144U) /*!< EXMC SDRAM control register for device1 */
#define EXMC_SDTCFG1 REG32(EXMC + 0x0000014CU) /*!< EXMC SDRAM timing configuration register register for device1 */
#define EXMC_SDCMD REG32(EXMC + 0x00000150U) /*!< EXMC SDRAM command register */
#define EXMC_SDARI REG32(EXMC + 0x00000154U) /*!< EXMC SDRAM auto-refresh interval register */
#define EXMC_SDSTAT REG32(EXMC + 0x00000158U) /*!< EXMC SDRAM status register */
#define EXMC_SDRSCTL REG32(EXMC + 0x00000180U) /*!< EXMC SDRAM read sample control register */
/* bits definitions */
/* EXMC_SNCTLx,x=0..3 */
#define EXMC_SNCTL_NRBKEN BIT(0) /*!< NOR region enable */
#define EXMC_SNCTL_NRMUX BIT(1) /*!< NOR region memory address/data multiplexing enable */
#define EXMC_SNCTL_NRTP BITS(2,3) /*!< NOR region memory type */
#define EXMC_SNCTL_NRW BITS(4,5) /*!< NOR region memory data bus width */
#define EXMC_SNCTL_NREN BIT(6) /*!< NOR flash access enable */
#define EXMC_SNCTL_SBRSTEN BIT(8) /*!< synchronous burst enable */
#define EXMC_SNCTL_NRWTPOL BIT(9) /*!< NWAIT signal polarity */
#define EXMC_SNCTL_NRWTCFG BIT(11) /*!< NWAIT signal configuration, only work in synchronous mode */
#define EXMC_SNCTL_WEN BIT(12) /*!< write enable */
#define EXMC_SNCTL_NRWTEN BIT(13) /*!< NWAIT signal enable */
#define EXMC_SNCTL_EXMODEN BIT(14) /*!< extended mode enable */
#define EXMC_SNCTL_ASYNCWTEN BIT(15) /*!< asynchronous wait enable */
#define EXMC_SNCTL_CPS BITS(16,18) /*!< CRAM page size */
#define EXMC_SNCTL_SYNCWR BIT(19) /*!< synchronous write configuration */
#define EXMC_SNCTL_CCK BIT(20) /*!< consecutive clock configuration */
#define EXMC_SNCTL_BKREMAP BITS(24,25) /*!< bank remap */
/* EXMC_SNTCFGx,x=0..3 */
#define EXMC_SNTCFG_ASET BITS(0,3) /*!< asynchronous address setup time */
#define EXMC_SNTCFG_AHLD BITS(4,7) /*!< asynchronous address hold time */
#define EXMC_SNTCFG_DSET BITS(8,15) /*!< asynchronous data setup time */
#define EXMC_SNTCFG_BUSLAT BITS(16,19) /*!< bus latency */
#define EXMC_SNTCFG_CKDIV BITS(20,23) /*!< synchronous clock divide ratio */
#define EXMC_SNTCFG_DLAT BITS(24,27) /*!< synchronous data latency for NOR flash */
#define EXMC_SNTCFG_ASYNCMOD BITS(28,29) /*!< asynchronous access mode */
/* EXMC_SNWTCFGx,x=0..3 */
#define EXMC_SNWTCFG_WASET BITS(0,3) /*!< asynchronous address setup time */
#define EXMC_SNWTCFG_WAHLD BITS(4,7) /*!< asynchronous address hold time */
#define EXMC_SNWTCFG_WDSET BITS(8,15) /*!< asynchronous data setup time */
#define EXMC_SNWTCFG_WBUSLAT BITS(16,19) /*!< bus latency */
#define EXMC_SNWTCFG_WASYNCMOD BITS(28,29) /*!< asynchronous access mode */
/* EXMC_NCTL */
#define EXMC_NCTL_NDWTEN BIT(1) /*!< wait function enable */
#define EXMC_NCTL_NDBKEN BIT(2) /*!< NAND bank enable */
#define EXMC_NCTL_NDW BITS(4,5) /*!< NAND bank memory data bus width */
#define EXMC_NCTL_ECCEN BIT(6) /*!< ECC enable */
#define EXMC_NCTL_CTR BITS(9,12) /*!< CLE to RE delay */
#define EXMC_NCTL_ATR BITS(13,16) /*!< ALE to RE delay */
#define EXMC_NCTL_ECCSZ BITS(17,19) /*!< ECC size */
/* EXMC_NINTEN */
#define EXMC_NINTEN_INTRS BIT(0) /*!< rising edge interrupt status bit */
#define EXMC_NINTEN_INTHS BIT(1) /*!< high-level interrupt status bit */
#define EXMC_NINTEN_INTFS BIT(2) /*!< falling edge interrupt status bit */
#define EXMC_NINTEN_INTREN BIT(3) /*!< rising edge detection interrupt enable bit */
#define EXMC_NINTEN_INTHEN BIT(4) /*!< high-level detection interrupt enable bit */
#define EXMC_NINTEN_INTFEN BIT(5) /*!< falling edge detection interrupt enable bit */
#define EXMC_NINTEN_FFEPT BIT(6) /*!< FIFO empty flag */
/* EXMC_NCTCFG */
#define EXMC_NCTCFG_COMSET BITS(0,7) /*!< common memory setup time */
#define EXMC_NCTCFG_COMWAIT BITS(8,15) /*!< common memory wait time */
#define EXMC_NCTCFG_COMHLD BITS(16,23) /*!< common memory hold time */
#define EXMC_NCTCFG_COMHIZ BITS(24,31) /*!< common memory data bus HiZ time */
/* EXMC_NATCFG */
#define EXMC_NATCFG_ATTSET BITS(0,7) /*!< attribute memory setup time */
#define EXMC_NATCFG_ATTWAIT BITS(8,15) /*!< attribute memory wait time */
#define EXMC_NATCFG_ATTHLD BITS(16,23) /*!< attribute memory hold time */
#define EXMC_NATCFG_ATTHIZ BITS(24,31) /*!< attribute memory data bus HiZ time */
/* EXMC_NECC */
#define EXMC_NECC_ECC BITS(0,31) /*!< ECC result */
/* EXMC_SDCTLx,(x=0,1) */
#define EXMC_SDCTL_CAW BITS(0,1) /*!< column address bit width */
#define EXMC_SDCTL_RAW BITS(2,3) /*!< row address bit width */
#define EXMC_SDCTL_SDW BITS(4,5) /*!< SDRAM data bus width */
#define EXMC_SDCTL_NBK BIT(6) /*!< number of banks */
#define EXMC_SDCTL_CL BIT(7,8) /*!< CAS Latency */
#define EXMC_SDCTL_WPEN BIT(9) /*!< write protection enable */
#define EXMC_SDCTL_SDCLK BITS(10,11) /*!< SDRAM clock configuration */
#define EXMC_SDCTL_BRSTRD BIT(12) /*!< burst read enable bit */
#define EXMC_SDCTL_PIPED BITS(13,14) /*!< pipeline delay */
#define EXMC_SDCTL_SDCLK_2 BIT(15) /*!< bit 2 SDCLK */
/* EXMC_SDTCFGx,(x=0,1) */
#define EXMC_SDTCFG_LMRD BITS(0,3) /*!< load mode register delay */
#define EXMC_SDTCFG_XSRD BITS(4,7) /*!< exit self-refresh delay */
#define EXMC_SDTCFG_RASD BITS(8,11) /*!< row address select delay */
#define EXMC_SDTCFG_ARFD BITS(12,15) /*!< auto refresh delay */
#define EXMC_SDTCFG_WRD BITS(16,19) /*!< write recovery delay */
#define EXMC_SDTCFG_RPD BITS(20,23) /*!< row precharge delay */
#define EXMC_SDTCFG_RCD BITS(24,27) /*!< row to column delay */
/* EXMC_SDCMD */
#define EXMC_SDCMD_CMD BITS(0,2) /*!< command */
#define EXMC_SDCMD_DS1 BIT(3) /*!< select device1 */
#define EXMC_SDCMD_DS0 BIT(4) /*!< select device0 */
#define EXMC_SDCMD_NARF BITS(5,8) /*!< number of successive auto-refresh */
#define EXMC_SDCMD_MRC BITS(9,21) /*!< mode register content */
/* EXMC_SDARI */
#define EXMC_SDARI_REC BIT(0) /*!< refresh error flag clear */
#define EXMC_SDARI_ARINTV BITS(1,13) /*!< auto-refresh interval */
#define EXMC_SDARI_REIE BIT(14) /*!< refresh error interrupt enable bit */
/* EXMC_SDSTAT */
#define EXMC_SDSDAT_REIF BIT(0) /*!< refresh error interrupt flag */
#define EXMC_SDSDAT_STA0 BITS(1,2) /*!< device0 status */
#define EXMC_SDSDAT_STA1 BITS(3,4) /*!< device1 status */
#define EXMC_SDSDAT_NRDY BIT(5) /*!< not ready status */
/* EXMC_SDRSCTL */
#define EXMC_SDRSCTL_RSEN BIT(0) /*!< read sample enable bit */
#define EXMC_SDRSCTL_SSCR BIT(1) /*!< select sample cycle of read data */
#define EXMC_SDRSCTL_SDSC BITS(4,7) /*!< select the delayed sample clock of read data */
/* constants definitions */
/* EXMC NOR/SRAM timing initialize structure */
typedef struct {
uint32_t asyn_access_mode; /*!< asynchronous access mode */
uint32_t syn_data_latency; /*!< configure the data latency */
uint32_t syn_clk_division; /*!< configure the clock divide ratio */
uint32_t bus_latency; /*!< configure the bus latency */
uint32_t asyn_data_setuptime; /*!< configure the data setup time, asynchronous access mode valid */
uint32_t asyn_address_holdtime; /*!< configure the address hold time, asynchronous access mode valid */
uint32_t asyn_address_setuptime; /*!< configure the address setup time, asynchronous access mode valid */
} exmc_norsram_timing_parameter_struct;
/* EXMC NOR/SRAM initialize structure */
typedef struct {
uint32_t norsram_region; /*!< select the region of EXMC NOR/PSRAM region */
uint32_t address_data_mux; /*!< specify whether the data bus and address bus are multiplexed */
uint32_t memory_type; /*!< specify the type of external memory */
uint32_t databus_width; /*!< specify the databus width of external memory */
uint32_t burst_mode; /*!< enable or disable the burst mode */
uint32_t nwait_polarity; /*!< specify the polarity of NWAIT signal from memory */
uint32_t nwait_config; /*!< NWAIT signal configuration */
uint32_t memory_write; /*!< enable or disable the write operation */
uint32_t nwait_signal; /*!< enable or disable the NWAIT signal while in synchronous bust mode */
uint32_t extended_mode; /*!< enable or disable the extended mode */
uint32_t asyn_wait; /*!< enable or disable the asynchronous wait function */
uint32_t cram_page_size; /*!< specify CRAM page size */
uint32_t write_mode; /*!< the write mode, synchronous mode or asynchronous mode */
exmc_norsram_timing_parameter_struct
*read_write_timing; /*!< timing parameters for read and write if the extendedmode is not used or the timing
parameters for read if the extendedmode is used */
exmc_norsram_timing_parameter_struct *write_timing; /*!< timing parameters for write when the extendedmode is used */
} exmc_norsram_parameter_struct;
/* EXMC NAND timing initialize structure */
typedef struct {
uint32_t databus_hiztime; /*!< configure the dadtabus HiZ time for write operation */
uint32_t holdtime; /*!< configure the address hold time(or the data hold time for write operation) */
uint32_t waittime; /*!< configure the minimum wait time */
uint32_t setuptime; /*!< configure the address setup time */
} exmc_nand_timing_parameter_struct;
/* EXMC NAND initialize structure */
typedef struct {
uint32_t ecc_size; /*!< the page size for the ECC calculation */
uint32_t atr_latency; /*!< configure the latency of ALE low to RB low */
uint32_t ctr_latency; /*!< configure the latency of CLE low to RB low */
uint32_t ecc_logic; /*!< enable or disable the ECC calculation logic */
uint32_t databus_width; /*!< the NAND flash databus width */
uint32_t wait_feature; /*!< enable or disable the wait feature */
exmc_nand_timing_parameter_struct *common_space_timing; /*!< the timing parameters for NAND flash common space */
exmc_nand_timing_parameter_struct *attribute_space_timing; /*!< the timing parameters for NAND flash attribute space */
} exmc_nand_parameter_struct;
/* EXMC SDRAM timing initialize structure */
typedef struct {
uint32_t row_to_column_delay; /*!< configure the row to column delay */
uint32_t row_precharge_delay; /*!< configure the row precharge delay */
uint32_t write_recovery_delay; /*!< configure the write recovery delay */
uint32_t auto_refresh_delay; /*!< configure the auto refresh delay */
uint32_t row_address_select_delay; /*!< configure the row address select delay */
uint32_t exit_selfrefresh_delay; /*!< configure the exit self-refresh delay */
uint32_t load_mode_register_delay; /*!< configure the load mode register delay */
} exmc_sdram_timing_parameter_struct;
/* EXMC SDRAM initialize structure */
typedef struct {
uint32_t sdram_device; /*!< device of SDRAM */
uint32_t pipeline_read_delay; /*!< the delay for reading data after CAS latency in CK_EXMC clock cycles */
uint32_t burst_read_switch; /*!< enable or disable the burst read */
uint32_t sdclock_config; /*!< the SDCLK memory clock for both SDRAM devices */
uint32_t write_protection; /*!< enable or disable SDRAM device write protection function */
uint32_t cas_latency; /*!< configure the SDRAM CAS latency */
uint32_t internal_bank_number; /*!< the number of internal bank */
uint32_t data_width; /*!< the databus width of SDRAM memory */
uint32_t row_address_width; /*!< the bit width of a row address */
uint32_t column_address_width; /*!< the bit width of a column address */
exmc_sdram_timing_parameter_struct *timing; /*!< the timing parameters for write and read SDRAM */
} exmc_sdram_parameter_struct;
/* EXMC SDRAM command initialize structure */
typedef struct {
uint32_t mode_register_content; /*!< the SDRAM mode register content */
uint32_t auto_refresh_number; /*!< the number of successive auto-refresh cycles will be send when CMD = 011 */
uint32_t bank_select; /*!< the bank which command will be sent to */
uint32_t command; /*!< the commands that will be sent to SDRAM */
} exmc_sdram_command_parameter_struct;
/* EXMC_register address */
#define EXMC_SNCTL(region) REG32(EXMC + 0x08U*((uint32_t)(region))) /*!< EXMC SRAM/NOR flash control registers, region = 0,1,2,3 */
#define EXMC_SNTCFG(region) REG32(EXMC + 0x04U + 0x08U*((uint32_t)(region))) /*!< EXMC SRAM/NOR flash timing configuration registers, region = 0,1,2,3 */
#define EXMC_SNWTCFG(region) REG32(EXMC + 0x104U + 0x08U*((uint32_t)(region))) /*!< EXMC SRAM/NOR flash write timing configuration registers, region = 0,1,2,3 */
#define EXMC_SDCTL(device) REG32(EXMC + 0x140U + 0x4U*(((uint32_t)(device)) - 0x4U)) /*!< EXMC SDRAM control registers,device = 0,1 */
#define EXMC_SDTCFG(device) REG32(EXMC + 0x148U + 0x4U*(((uint32_t)(device)) - 0x4U)) /*!< EXMC SDRAM timing configuration registers,device = 0,1 */
/* bank remap */
#define SNCTL_BKREMAP(regval) (BITS(24,25) & ((uint32_t)(regval) << 24))
#define EXMC_BANK_REMAP_DEFAULT SNCTL_BKREMAP(0) /*!< default mapping */
#define EXMC_BANK_NORPSRAM_SDRAM_SWAP SNCTL_BKREMAP(1) /*!< swap NOR/PSRAM bank and SDRAM device 0 address mapping */
/* CRAM page size */
#define SNCTL_CPS(regval) (BITS(16,18) & ((uint32_t)(regval) << 16))
#define EXMC_CRAM_AUTO_SPLIT SNCTL_CPS(0) /*!< automatic burst split on page boundary crossing */
#define EXMC_CRAM_PAGE_SIZE_128_BYTES SNCTL_CPS(1) /*!< page size is 128 bytes */
#define EXMC_CRAM_PAGE_SIZE_256_BYTES SNCTL_CPS(2) /*!< page size is 256 bytes */
#define EXMC_CRAM_PAGE_SIZE_512_BYTES SNCTL_CPS(3) /*!< page size is 512 bytes */
#define EXMC_CRAM_PAGE_SIZE_1024_BYTES SNCTL_CPS(4) /*!< page size is 1024 bytes */
/* NOR region memory data bus width */
#define SNCTL_NRW(regval) (BITS(4,5) & ((uint32_t)(regval) << 4))
#define EXMC_NOR_DATABUS_WIDTH_8B SNCTL_NRW(0) /*!< NOR data width is 8 bits */
#define EXMC_NOR_DATABUS_WIDTH_16B SNCTL_NRW(1) /*!< NOR data width is 16 bits */
/* NOR region memory type */
#define SNCTL_NRTP(regval) (BITS(2,3) & ((uint32_t)(regval) << 2))
#define EXMC_MEMORY_TYPE_SRAM SNCTL_NRTP(0) /*!< SRAM,ROM */
#define EXMC_MEMORY_TYPE_PSRAM SNCTL_NRTP(1) /*!< PSRAM,CRAM */
#define EXMC_MEMORY_TYPE_NOR SNCTL_NRTP(2) /*!< NOR flash */
/* asynchronous access mode */
#define SNTCFG_ASYNCMOD(regval) (BITS(28,29) & ((uint32_t)(regval) << 28))
#define EXMC_ACCESS_MODE_A SNTCFG_ASYNCMOD(0) /*!< mode A access */
#define EXMC_ACCESS_MODE_B SNTCFG_ASYNCMOD(1) /*!< mode B access */
#define EXMC_ACCESS_MODE_C SNTCFG_ASYNCMOD(2) /*!< mode C access */
#define EXMC_ACCESS_MODE_D SNTCFG_ASYNCMOD(3) /*!< mode D access */
/* data latency for NOR flash */
#define SNTCFG_DLAT(regval) (BITS(24,27) & ((uint32_t)(regval) << 24))
#define EXMC_DATALAT_2_CLK SNTCFG_DLAT(0) /*!< data latency of first burst access is 2 EXMC_CLK */
#define EXMC_DATALAT_3_CLK SNTCFG_DLAT(1) /*!< data latency of first burst access is 3 EXMC_CLK */
#define EXMC_DATALAT_4_CLK SNTCFG_DLAT(2) /*!< data latency of first burst access is 4 EXMC_CLK */
#define EXMC_DATALAT_5_CLK SNTCFG_DLAT(3) /*!< data latency of first burst access is 5 EXMC_CLK */
#define EXMC_DATALAT_6_CLK SNTCFG_DLAT(4) /*!< data latency of first burst access is 6 EXMC_CLK */
#define EXMC_DATALAT_7_CLK SNTCFG_DLAT(5) /*!< data latency of first burst access is 7 EXMC_CLK */
#define EXMC_DATALAT_8_CLK SNTCFG_DLAT(6) /*!< data latency of first burst access is 8 EXMC_CLK */
#define EXMC_DATALAT_9_CLK SNTCFG_DLAT(7) /*!< data latency of first burst access is 9 EXMC_CLK */
#define EXMC_DATALAT_10_CLK SNTCFG_DLAT(8) /*!< data latency of first burst access is 10 EXMC_CLK */
#define EXMC_DATALAT_11_CLK SNTCFG_DLAT(9) /*!< data latency of first burst access is 11 EXMC_CLK */
#define EXMC_DATALAT_12_CLK SNTCFG_DLAT(10) /*!< data latency of first burst access is 12 EXMC_CLK */
#define EXMC_DATALAT_13_CLK SNTCFG_DLAT(11) /*!< data latency of first burst access is 13 EXMC_CLK */
#define EXMC_DATALAT_14_CLK SNTCFG_DLAT(12) /*!< data latency of first burst access is 14 EXMC_CLK */
#define EXMC_DATALAT_15_CLK SNTCFG_DLAT(13) /*!< data latency of first burst access is 15 EXMC_CLK */
#define EXMC_DATALAT_16_CLK SNTCFG_DLAT(14) /*!< data latency of first burst access is 16 EXMC_CLK */
#define EXMC_DATALAT_17_CLK SNTCFG_DLAT(15) /*!< data latency of first burst access is 17 EXMC_CLK */
/* synchronous clock divide ratio */
#define SNTCFG_CKDIV(regval) (BITS(20,23) & ((uint32_t)(regval) << 20))
#define EXMC_SYN_CLOCK_RATIO_DISABLE SNTCFG_CKDIV(0) /*!< no EXMC_CLK output */
#define EXMC_SYN_CLOCK_RATIO_2_CLK SNTCFG_CKDIV(1) /*!< EXMC_CLK period = 2*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_3_CLK SNTCFG_CKDIV(2) /*!< EXMC_CLK period = 3*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_4_CLK SNTCFG_CKDIV(3) /*!< EXMC_CLK period = 4*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_5_CLK SNTCFG_CKDIV(4) /*!< EXMC_CLK period = 5*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_6_CLK SNTCFG_CKDIV(5) /*!< EXMC_CLK period = 6*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_7_CLK SNTCFG_CKDIV(6) /*!< EXMC_CLK period = 7*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_8_CLK SNTCFG_CKDIV(7) /*!< EXMC_CLK period = 8*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_9_CLK SNTCFG_CKDIV(8) /*!< EXMC_CLK period = 9*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_10_CLK SNTCFG_CKDIV(9) /*!< EXMC_CLK period = 10*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_11_CLK SNTCFG_CKDIV(10) /*!< EXMC_CLK period = 11*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_12_CLK SNTCFG_CKDIV(11) /*!< EXMC_CLK period = 12*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_13_CLK SNTCFG_CKDIV(12) /*!< EXMC_CLK period = 13*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_14_CLK SNTCFG_CKDIV(13) /*!< EXMC_CLK period = 14*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_15_CLK SNTCFG_CKDIV(14) /*!< EXMC_CLK period = 15*CK_EXMC period */
#define EXMC_SYN_CLOCK_RATIO_16_CLK SNTCFG_CKDIV(15) /*!< EXMC_CLK period = 16*CK_EXMC period */
/* ECC size */
#define NCTL_ECCSZ(regval) (BITS(17,19) & ((uint32_t)(regval) << 17))
#define EXMC_ECC_SIZE_256BYTES NCTL_ECCSZ(0) /* ECC size is 256 bytes */
#define EXMC_ECC_SIZE_512BYTES NCTL_ECCSZ(1) /* ECC size is 512 bytes */
#define EXMC_ECC_SIZE_1024BYTES NCTL_ECCSZ(2) /* ECC size is 1024 bytes */
#define EXMC_ECC_SIZE_2048BYTES NCTL_ECCSZ(3) /* ECC size is 2048 bytes */
#define EXMC_ECC_SIZE_4096BYTES NCTL_ECCSZ(4) /* ECC size is 4096 bytes */
#define EXMC_ECC_SIZE_8192BYTES NCTL_ECCSZ(5) /* ECC size is 8192 bytes */
/* ALE to RE delay */
#define NCTL_ATR(regval) (BITS(13,16) & ((uint32_t)(regval) << 13))
#define EXMC_ALE_RE_DELAY_1_CK_EXMC NCTL_ATR(0) /* ALE to RE delay = 1*CK_EXMC */
#define EXMC_ALE_RE_DELAY_2_CK_EXMC NCTL_ATR(1) /* ALE to RE delay = 2*CK_EXMC */
#define EXMC_ALE_RE_DELAY_3_CK_EXMC NCTL_ATR(2) /* ALE to RE delay = 3*CK_EXMC */
#define EXMC_ALE_RE_DELAY_4_CK_EXMC NCTL_ATR(3) /* ALE to RE delay = 4*CK_EXMC */
#define EXMC_ALE_RE_DELAY_5_CK_EXMC NCTL_ATR(4) /* ALE to RE delay = 5*CK_EXMC */
#define EXMC_ALE_RE_DELAY_6_CK_EXMC NCTL_ATR(5) /* ALE to RE delay = 6*CK_EXMC */
#define EXMC_ALE_RE_DELAY_7_CK_EXMC NCTL_ATR(6) /* ALE to RE delay = 7*CK_EXMC */
#define EXMC_ALE_RE_DELAY_8_CK_EXMC NCTL_ATR(7) /* ALE to RE delay = 8*CK_EXMC */
#define EXMC_ALE_RE_DELAY_9_CK_EXMC NCTL_ATR(8) /* ALE to RE delay = 9*CK_EXMC */
#define EXMC_ALE_RE_DELAY_10_CK_EXMC NCTL_ATR(9) /* ALE to RE delay = 10*CK_EXMC */
#define EXMC_ALE_RE_DELAY_11_CK_EXMC NCTL_ATR(10) /* ALE to RE delay = 11*CK_EXMC */
#define EXMC_ALE_RE_DELAY_12_CK_EXMC NCTL_ATR(11) /* ALE to RE delay = 12*CK_EXMC */
#define EXMC_ALE_RE_DELAY_13_CK_EXMC NCTL_ATR(12) /* ALE to RE delay = 13*CK_EXMC */
#define EXMC_ALE_RE_DELAY_14_CK_EXMC NCTL_ATR(13) /* ALE to RE delay = 14*CK_EXMC */
#define EXMC_ALE_RE_DELAY_15_CK_EXMC NCTL_ATR(14) /* ALE to RE delay = 15*CK_EXMC */
#define EXMC_ALE_RE_DELAY_16_CK_EXMC NCTL_ATR(15) /* ALE to RE delay = 16*CK_EXMC */
/* CLE to RE delay */
#define NCTL_CTR(regval) (BITS(9,12) & ((uint32_t)(regval) << 9))
#define EXMC_CLE_RE_DELAY_1_CK_EXMC NCTL_CTR(0) /* CLE to RE delay = 1*CK_EXMC */
#define EXMC_CLE_RE_DELAY_2_CK_EXMC NCTL_CTR(1) /* CLE to RE delay = 2*CK_EXMC */
#define EXMC_CLE_RE_DELAY_3_CK_EXMC NCTL_CTR(2) /* CLE to RE delay = 3*CK_EXMC */
#define EXMC_CLE_RE_DELAY_4_CK_EXMC NCTL_CTR(3) /* CLE to RE delay = 4*CK_EXMC */
#define EXMC_CLE_RE_DELAY_5_CK_EXMC NCTL_CTR(4) /* CLE to RE delay = 5*CK_EXMC */
#define EXMC_CLE_RE_DELAY_6_CK_EXMC NCTL_CTR(5) /* CLE to RE delay = 6*CK_EXMC */
#define EXMC_CLE_RE_DELAY_7_CK_EXMC NCTL_CTR(6) /* CLE to RE delay = 7*CK_EXMC */
#define EXMC_CLE_RE_DELAY_8_CK_EXMC NCTL_CTR(7) /* CLE to RE delay = 8*CK_EXMC */
#define EXMC_CLE_RE_DELAY_9_CK_EXMC NCTL_CTR(8) /* CLE to RE delay = 9*CK_EXMC */
#define EXMC_CLE_RE_DELAY_10_CK_EXMC NCTL_CTR(9) /* CLE to RE delay = 10*CK_EXMC */
#define EXMC_CLE_RE_DELAY_11_CK_EXMC NCTL_CTR(10) /* CLE to RE delay = 11*CK_EXMC */
#define EXMC_CLE_RE_DELAY_12_CK_EXMC NCTL_CTR(11) /* CLE to RE delay = 12*CK_EXMC */
#define EXMC_CLE_RE_DELAY_13_CK_EXMC NCTL_CTR(12) /* CLE to RE delay = 13*CK_EXMC */
#define EXMC_CLE_RE_DELAY_14_CK_EXMC NCTL_CTR(13) /* CLE to RE delay = 14*CK_EXMC */
#define EXMC_CLE_RE_DELAY_15_CK_EXMC NCTL_CTR(14) /* CLE to RE delay = 15*CK_EXMC */
#define EXMC_CLE_RE_DELAY_16_CK_EXMC NCTL_CTR(15) /* CLE to RE delay = 16*CK_EXMC */
/* NAND bank memory data bus width */
#define NCTL_NDW(regval) (BITS(4,5) & ((uint32_t)(regval) << 4))
#define EXMC_NAND_DATABUS_WIDTH_8B NCTL_NDW(0) /*!< NAND data width is 8 bits */
#define EXMC_NAND_DATABUS_WIDTH_16B NCTL_NDW(1) /*!< NAND data width is 16 bits */
/* SDRAM pipeline delay */
#define SDCTL_PIPED(regval) (BITS(13,14) & ((uint32_t)(regval) << 13))
#define EXMC_PIPELINE_DELAY_0_CK_EXMC SDCTL_PIPED(0) /*!< 0 CK_EXMC clock cycle delay */
#define EXMC_PIPELINE_DELAY_1_CK_EXMC SDCTL_PIPED(1) /*!< 1 CK_EXMC clock cycle delay */
#define EXMC_PIPELINE_DELAY_2_CK_EXMC SDCTL_PIPED(2) /*!< 2 CK_EXMC clock cycle delay */
/* SDRAM clock configuration */
#define SDCTL_SDCLK(regval) (BITS(10,11) & ((uint32_t)(regval) << 10))
#define EXMC_SDCLK_DISABLE SDCTL_SDCLK(0) /*!< SDCLK memory clock disabled */
#define EXMC_SDCLK_PERIODS_2_CK_EXMC SDCTL_SDCLK(2) /*!< SDCLK memory period = 2*CK_EXMC */
#define EXMC_SDCLK_PERIODS_3_CK_EXMC SDCTL_SDCLK(3) /*!< SDCLK memory period = 3*CK_EXMC */
#define EXMC_SDCLK_PERIODS_4_CK_EXMC (EXMC_SDCTL_SDCLK_2 | SDCTL_SDCLK(2)) /*!< SDCLK memory period = 4*CK_EXMC */
#define EXMC_SDCLK_PERIODS_5_CK_EXMC (EXMC_SDCTL_SDCLK_2 | SDCTL_SDCLK(3)) /*!< SDCLK memory period = 5*CK_EXMC */
/* CAS latency */
#define SDCTL_CL(regval) (BITS(7,8) & ((uint32_t)(regval) << 7))
#define EXMC_CAS_LATENCY_1_SDCLK SDCTL_CL(1) /*!< CAS latency is 1 memory clock cycle */
#define EXMC_CAS_LATENCY_2_SDCLK SDCTL_CL(2) /*!< CAS latency is 2 memory clock cycle */
#define EXMC_CAS_LATENCY_3_SDCLK SDCTL_CL(3) /*!< CAS latency is 3 memory clock cycle */
/* SDRAM data bus width */
#define SDCTL_SDW(regval) (BITS(4,5) & ((uint32_t)(regval) << 4))
#define EXMC_SDRAM_DATABUS_WIDTH_8B SDCTL_SDW(0) /*!< SDRAM data width 8 bits */
#define EXMC_SDRAM_DATABUS_WIDTH_16B SDCTL_SDW(1) /*!< SDRAM data width 16 bits */
#define EXMC_SDRAM_DATABUS_WIDTH_32B SDCTL_SDW(2) /*!< SDRAM data width 32 bits */
/* SDRAM row address bit width */
#define SDCTL_RAW(regval) (BITS(2,3) & ((uint32_t)(regval) << 2))
#define EXMC_SDRAM_ROW_ADDRESS_11 SDCTL_RAW(0) /*!< row address bit width is 11 bits */
#define EXMC_SDRAM_ROW_ADDRESS_12 SDCTL_RAW(1) /*!< row address bit width is 12 bits */
#define EXMC_SDRAM_ROW_ADDRESS_13 SDCTL_RAW(2) /*!< row address bit width is 13 bits */
/* SDRAM column address bit width */
#define SDCTL_CAW(regval) (BITS(0,1) & ((uint32_t)(regval) << 0))
#define EXMC_SDRAM_COW_ADDRESS_8 SDCTL_CAW(0) /*!< column address bit width is 8 bits */
#define EXMC_SDRAM_COW_ADDRESS_9 SDCTL_CAW(1) /*!< column address bit width is 9 bits */
#define EXMC_SDRAM_COW_ADDRESS_10 SDCTL_CAW(2) /*!< column address bit width is 10 bits */
#define EXMC_SDRAM_COW_ADDRESS_11 SDCTL_CAW(3) /*!< column address bit width is 11 bits */
/* SDRAM number of successive auto-refresh */
#define SDCMD_NARF(regval) (BITS(5,8) & ((uint32_t)(regval) << 5))
#define EXMC_SDRAM_AUTO_REFLESH_1_SDCLK SDCMD_NARF(0) /*!< 1 auto-refresh cycle */
#define EXMC_SDRAM_AUTO_REFLESH_2_SDCLK SDCMD_NARF(1) /*!< 2 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_3_SDCLK SDCMD_NARF(2) /*!< 3 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_4_SDCLK SDCMD_NARF(3) /*!< 4 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_5_SDCLK SDCMD_NARF(4) /*!< 5 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_6_SDCLK SDCMD_NARF(5) /*!< 6 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_7_SDCLK SDCMD_NARF(6) /*!< 7 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_8_SDCLK SDCMD_NARF(7) /*!< 8 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_9_SDCLK SDCMD_NARF(8) /*!< 9 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_10_SDCLK SDCMD_NARF(9) /*!< 10 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_11_SDCLK SDCMD_NARF(10) /*!< 11 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_12_SDCLK SDCMD_NARF(11) /*!< 12 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_13_SDCLK SDCMD_NARF(12) /*!< 13 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_14_SDCLK SDCMD_NARF(13) /*!< 14 auto-refresh cycles */
#define EXMC_SDRAM_AUTO_REFLESH_15_SDCLK SDCMD_NARF(14) /*!< 15 auto-refresh cycles */
/* SDRAM command selection */
#define SDCMD_CMD(regval) (BITS(0,2) & ((uint32_t)(regval) << 0))
#define EXMC_SDRAM_NORMAL_OPERATION SDCMD_CMD(0) /*!< normal operation command */
#define EXMC_SDRAM_CLOCK_ENABLE SDCMD_CMD(1) /*!< clock enable command */
#define EXMC_SDRAM_PRECHARGE_ALL SDCMD_CMD(2) /*!< precharge all command */
#define EXMC_SDRAM_AUTO_REFRESH SDCMD_CMD(3) /*!< auto-refresh command */
#define EXMC_SDRAM_LOAD_MODE_REGISTER SDCMD_CMD(4) /*!< load mode register command */
#define EXMC_SDRAM_SELF_REFRESH SDCMD_CMD(5) /*!< self-refresh command */
#define EXMC_SDRAM_POWERDOWN_ENTRY SDCMD_CMD(6) /*!< power-down entry command */
/* SDRAM the delayed sample clock of read data */
#define SDRSCTL_SDSC(regval) (BITS(4,7) & ((uint32_t)(regval) << 4))
#define EXMC_SDRAM_0_DELAY_CELL SDRSCTL_SDSC(0) /*!< select the clock after 0 delay cell */
#define EXMC_SDRAM_1_DELAY_CELL SDRSCTL_SDSC(1) /*!< select the clock after 1 delay cell */
#define EXMC_SDRAM_2_DELAY_CELL SDRSCTL_SDSC(2) /*!< select the clock after 2 delay cell */
#define EXMC_SDRAM_3_DELAY_CELL SDRSCTL_SDSC(3) /*!< select the clock after 3 delay cell */
#define EXMC_SDRAM_4_DELAY_CELL SDRSCTL_SDSC(4) /*!< select the clock after 4 delay cell */
#define EXMC_SDRAM_5_DELAY_CELL SDRSCTL_SDSC(5) /*!< select the clock after 5 delay cell */
#define EXMC_SDRAM_6_DELAY_CELL SDRSCTL_SDSC(6) /*!< select the clock after 6 delay cell */
#define EXMC_SDRAM_7_DELAY_CELL SDRSCTL_SDSC(7) /*!< select the clock after 7 delay cell */
#define EXMC_SDRAM_8_DELAY_CELL SDRSCTL_SDSC(8) /*!< select the clock after 8 delay cell */
#define EXMC_SDRAM_9_DELAY_CELL SDRSCTL_SDSC(9) /*!< select the clock after 9 delay cell */
#define EXMC_SDRAM_10_DELAY_CELL SDRSCTL_SDSC(10) /*!< select the clock after 10 delay cell */
#define EXMC_SDRAM_11_DELAY_CELL SDRSCTL_SDSC(11) /*!< select the clock after 11 delay cell */
#define EXMC_SDRAM_12_DELAY_CELL SDRSCTL_SDSC(12) /*!< select the clock after 12 delay cell */
#define EXMC_SDRAM_13_DELAY_CELL SDRSCTL_SDSC(13) /*!< select the clock after 13 delay cell */
#define EXMC_SDRAM_14_DELAY_CELL SDRSCTL_SDSC(14) /*!< select the clock after 14 delay cell */
#define EXMC_SDRAM_15_DELAY_CELL SDRSCTL_SDSC(15) /*!< select the clock after 15 delay cell */
/* EXMC NOR/SRAM bank region definition */
#define EXMC_BANK0_NORSRAM_REGION0 ((uint32_t)0x00000000U) /*!< bank0 NOR/SRAM region0 */
#define EXMC_BANK0_NORSRAM_REGION1 ((uint32_t)0x00000001U) /*!< bank0 NOR/SRAM region1 */
#define EXMC_BANK0_NORSRAM_REGION2 ((uint32_t)0x00000002U) /*!< bank0 NOR/SRAM region2 */
#define EXMC_BANK0_NORSRAM_REGION3 ((uint32_t)0x00000003U) /*!< bank0 NOR/SRAM region3 */
/* EXMC consecutive clock */
#define EXMC_CLOCK_SYN_MODE ((uint32_t)0x00000000U) /*!< EXMC_CLK is generated only during synchronous access */
#define EXMC_CLOCK_UNCONDITIONALLY EXMC_SNCTL_CCK /*!< EXMC_CLK is generated unconditionally */
/* EXMC NOR/SRAM write mode */
#define EXMC_ASYN_WRITE ((uint32_t)0x00000000U) /*!< asynchronous write mode */
#define EXMC_SYN_WRITE EXMC_SNCTL_SYNCWR /*!< synchronous write mode */
/* EXMC NWAIT signal configuration */
#define EXMC_NWAIT_CONFIG_BEFORE ((uint32_t)0x00000000U) /*!< NWAIT signal is active one data cycle before wait state */
#define EXMC_NWAIT_CONFIG_DURING EXMC_SNCTL_NRWTCFG /*!< NWAIT signal is active during wait state */
/* EXMC NWAIT signal polarity configuration */
#define EXMC_NWAIT_POLARITY_LOW ((uint32_t)0x00000000U) /*!< low level is active of NWAIT */
#define EXMC_NWAIT_POLARITY_HIGH EXMC_SNCTL_NRWTPOL /*!< high level is active of NWAIT */
/* EXMC NAND bank definition */
#define EXMC_BANK2_NAND ((uint32_t)0x00000002U) /*!< NAND flash bank2 */
/* EXMC SDRAM bank definition */
#define EXMC_SDRAM_DEVICE0 ((uint32_t)0x00000004U) /*!< SDRAM device0 */
#define EXMC_SDRAM_DEVICE1 ((uint32_t)0x00000005U) /*!< SDRAM device1 */
/* EXMC SDRAM internal banks */
#define EXMC_SDRAM_2_INTER_BANK ((uint32_t)0x00000000U) /*!< 2 internal banks */
#define EXMC_SDRAM_4_INTER_BANK EXMC_SDCTL_NBK /*!< 4 internal banks */
/* SDRAM device0 select */
#define EXMC_SDRAM_DEVICE0_UNSELECT ((uint32_t)0x00000000U) /*!< SDRAM device0 unselect */
#define EXMC_SDRAM_DEVICE0_SELECT EXMC_SDCMD_DS0 /*!< SDRAM device0 select */
/* SDRAM device1 select */
#define EXMC_SDRAM_DEVICE1_UNSELECT ((uint32_t)0x00000000U) /*!< SDRAM device1 unselect */
#define EXMC_SDRAM_DEVICE1_SELECT EXMC_SDCMD_DS1 /*!< SDRAM device1 select */
/* SDRAM device status */
#define EXMC_SDRAM_DEVICE_NORMAL ((uint32_t)0x00000000U) /*!< normal status */
#define EXMC_SDRAM_DEVICE_SELF_REFRESH ((uint32_t)0x00000001U) /*!< self refresh status */
#define EXMC_SDRAM_DEVICE_POWER_DOWN ((uint32_t)0x00000002U) /*!< power down status */
/* sample cycle of read data */
#define EXMC_SDRAM_READSAMPLE_0_EXTRACK ((uint32_t)0x00000000U) /*!< add 0 extra CK_EXMC cycle to the read data sample clock besides the delay chain */
#define EXMC_SDRAM_READSAMPLE_1_EXTRACK EXMC_SDRSCTL_SSCR /*!< add 1 extra CK_EXMC cycle to the read data sample clock besides the delay chain */
/* EXMC flag bits */
#define EXMC_NAND_FLAG_RISE EXMC_NINTEN_INTRS /*!< rising edge interrupt status */
#define EXMC_NAND_FLAG_LEVEL EXMC_NINTEN_INTHS /*!< high-level interrupt status */
#define EXMC_NAND_FLAG_FALL EXMC_NINTEN_INTFS /*!< falling edge interrupt status */
#define EXMC_NAND_FLAG_FIFOE EXMC_NINTEN_FFEPT /*!< FIFO empty flag */
#define EXMC_SDRAM_FLAG_REFRESH EXMC_SDSDAT_REIF /*!< refresh error interrupt flag */
#define EXMC_SDRAM_FLAG_NREADY EXMC_SDSDAT_NRDY /*!< not ready status */
/* EXMC interrupt bits */
#define EXMC_NAND_INT_RISE EXMC_NINTEN_INTREN /*!< rising edge interrupt */
#define EXMC_NAND_INT_LEVEL EXMC_NINTEN_INTHEN /*!< high-level interrupt */
#define EXMC_NAND_INT_FALL EXMC_NINTEN_INTFEN /*!< falling edge interrupt */
#define EXMC_SDRAM_INT_REFRESH EXMC_SDARI_REIE /*!< refresh error interrupt */
/* EXMC interrupt flag bits */
#define EXMC_NAND_INT_FLAG_RISE EXMC_NINTEN_INTREN /*!< rising edge interrupt flag */
#define EXMC_NAND_INT_FLAG_LEVEL EXMC_NINTEN_INTHEN /*!< high-level interrupt flag */
#define EXMC_NAND_INT_FLAG_FALL EXMC_NINTEN_INTFEN /*!< falling edge interrupt flag */
#define EXMC_SDRAM_INT_FLAG_REFRESH EXMC_SDARI_REIE /*!< refresh error interrupt flag */
/* parameter check definitions */
#ifdef FW_DEBUG_ERR_REPORT
#define NOT_EXMC_BANK0_NORSRAM_REGION(xxx) (((xxx) != EXMC_BANK0_NORSRAM_REGION0) && ((xxx) != EXMC_BANK0_NORSRAM_REGION1) && \
((xxx) != EXMC_BANK0_NORSRAM_REGION2) && ((xxx) != EXMC_BANK0_NORSRAM_REGION3))
#define NOT_EXMC_ASYN_SYN_WRITE(xxx) (((xxx) != EXMC_ASYN_WRITE) && ((xxx) != EXMC_SYN_WRITE))
#define NOT_EXMC_ENABLE_DISABLE(xxx) (((xxx) != ENABLE) && ((xxx) != DISABLE))
#define NOT_EXMC_NWAIT_CONFIG(xxx) (((xxx) != EXMC_NWAIT_CONFIG_BEFORE) && ((xxx) != EXMC_NWAIT_CONFIG_DURING))
#define NOT_EXMC_NWAIT_POLARITY(xxx) (((xxx) != EXMC_NWAIT_POLARITY_LOW) && ((xxx) != EXMC_NWAIT_POLARITY_HIGH))
#define NOT_EXMC_NOR_DATABUS_WIDTH(xxx) (((xxx) != EXMC_NOR_DATABUS_WIDTH_8B) && ((xxx) != EXMC_NOR_DATABUS_WIDTH_16B))
#define NOT_EXMC_MEMORY_TYPE(xxx) (((xxx) != EXMC_MEMORY_TYPE_SRAM) && ((xxx) != EXMC_MEMORY_TYPE_PSRAM) && \
((xxx) != EXMC_MEMORY_TYPE_NOR))
#define NOT_EXMC_CRAM_PAGE_SIZE(xxx) (((xxx) != EXMC_CRAM_AUTO_SPLIT) && ((xxx) != EXMC_CRAM_PAGE_SIZE_128_BYTES) && \
((xxx) != EXMC_CRAM_PAGE_SIZE_256_BYTES) && ((xxx) != EXMC_CRAM_PAGE_SIZE_512_BYTES) && \
((xxx) != EXMC_CRAM_PAGE_SIZE_1024_BYTES))
#define NOT_EXMC_ACCESS_MODE(xxx) (((xxx) != EXMC_ACCESS_MODE_A) && ((xxx) != EXMC_ACCESS_MODE_B) && \
((xxx) != EXMC_ACCESS_MODE_C) && ((xxx) != EXMC_ACCESS_MODE_D))
#define NOT_EXMC_DATALAT_CLK(xxx) (((xxx) != EXMC_DATALAT_2_CLK) && ((xxx) != EXMC_DATALAT_3_CLK) && \
((xxx) != EXMC_DATALAT_4_CLK) && ((xxx) != EXMC_DATALAT_5_CLK) && \
((xxx) != EXMC_DATALAT_6_CLK) && ((xxx) != EXMC_DATALAT_7_CLK) && \
((xxx) != EXMC_DATALAT_8_CLK) && ((xxx) != EXMC_DATALAT_9_CLK) && \
((xxx) != EXMC_DATALAT_10_CLK) && ((xxx) != EXMC_DATALAT_11_CLK) && \
((xxx) != EXMC_DATALAT_12_CLK) && ((xxx) != EXMC_DATALAT_13_CLK) && \
((xxx) != EXMC_DATALAT_14_CLK) && ((xxx) != EXMC_DATALAT_15_CLK) && \
((xxx) != EXMC_DATALAT_16_CLK) && ((xxx) != EXMC_DATALAT_17_CLK))
#define NOT_EXMC_SYN_CLOCK_RATIO_CLK(xxx) (((xxx) != EXMC_SYN_CLOCK_RATIO_DISABLE) && ((xxx) != EXMC_SYN_CLOCK_RATIO_2_CLK) && \
((xxx) != EXMC_SYN_CLOCK_RATIO_3_CLK) && ((xxx) != EXMC_SYN_CLOCK_RATIO_4_CLK) && \
((xxx) != EXMC_SYN_CLOCK_RATIO_5_CLK) && ((xxx) != EXMC_SYN_CLOCK_RATIO_6_CLK) && \
((xxx) != EXMC_SYN_CLOCK_RATIO_7_CLK) && ((xxx) != EXMC_SYN_CLOCK_RATIO_8_CLK) && \
((xxx) != EXMC_SYN_CLOCK_RATIO_9_CLK) && ((xxx) != EXMC_SYN_CLOCK_RATIO_10_CLK) && \
((xxx) != EXMC_SYN_CLOCK_RATIO_11_CLK) && ((xxx) != EXMC_SYN_CLOCK_RATIO_12_CLK) && \
((xxx) != EXMC_SYN_CLOCK_RATIO_13_CLK) && ((xxx) != EXMC_SYN_CLOCK_RATIO_14_CLK) && \
((xxx) != EXMC_SYN_CLOCK_RATIO_15_CLK) && ((xxx) != EXMC_SYN_CLOCK_RATIO_16_CLK))
#define NOT_EXMC_NAND_ECC_SIZE(xxx) (((xxx) != EXMC_ECC_SIZE_256BYTES) && ((xxx) != EXMC_ECC_SIZE_512BYTES) && \
((xxx) != EXMC_ECC_SIZE_1024BYTES) && ((xxx) != EXMC_ECC_SIZE_2048BYTES) && \
((xxx) != EXMC_ECC_SIZE_4096BYTES) && ((xxx) != EXMC_ECC_SIZE_8192BYTES))
#define NOT_EXMC_NAND_ALE_RE_DELAY(xxx) (((xxx) != EXMC_ALE_RE_DELAY_1_CK_EXMC) && ((xxx) != EXMC_ALE_RE_DELAY_2_CK_EXMC) && \
((xxx) != EXMC_ALE_RE_DELAY_3_CK_EXMC) && ((xxx) != EXMC_ALE_RE_DELAY_4_CK_EXMC) && \
((xxx) != EXMC_ALE_RE_DELAY_5_CK_EXMC) && ((xxx) != EXMC_ALE_RE_DELAY_6_CK_EXMC) && \
((xxx) != EXMC_ALE_RE_DELAY_7_CK_EXMC) && ((xxx) != EXMC_ALE_RE_DELAY_8_CK_EXMC) && \
((xxx) != EXMC_ALE_RE_DELAY_9_CK_EXMC) && ((xxx) != EXMC_ALE_RE_DELAY_10_CK_EXMC) && \
((xxx) != EXMC_ALE_RE_DELAY_11_CK_EXMC) && ((xxx) != EXMC_ALE_RE_DELAY_12_CK_EXMC) && \
((xxx) != EXMC_ALE_RE_DELAY_13_CK_EXMC) && ((xxx) != EXMC_ALE_RE_DELAY_14_CK_EXMC) && \
((xxx) != EXMC_ALE_RE_DELAY_15_CK_EXMC) && ((xxx) != EXMC_ALE_RE_DELAY_16_CK_EXMC))
#define NOT_EXMC_NAND_CLE_RE_DELAY(xxx) (((xxx) != EXMC_CLE_RE_DELAY_1_CK_EXMC) && ((xxx) != EXMC_CLE_RE_DELAY_2_CK_EXMC) && \
((xxx) != EXMC_CLE_RE_DELAY_3_CK_EXMC) && ((xxx) != EXMC_CLE_RE_DELAY_4_CK_EXMC) && \
((xxx) != EXMC_CLE_RE_DELAY_5_CK_EXMC) && ((xxx) != EXMC_CLE_RE_DELAY_6_CK_EXMC) && \
((xxx) != EXMC_CLE_RE_DELAY_7_CK_EXMC) && ((xxx) != EXMC_CLE_RE_DELAY_8_CK_EXMC) && \
((xxx) != EXMC_CLE_RE_DELAY_9_CK_EXMC) && ((xxx) != EXMC_CLE_RE_DELAY_10_CK_EXMC) && \
((xxx) != EXMC_CLE_RE_DELAY_11_CK_EXMC) && ((xxx) != EXMC_CLE_RE_DELAY_12_CK_EXMC) && \
((xxx) != EXMC_CLE_RE_DELAY_13_CK_EXMC) && ((xxx) != EXMC_CLE_RE_DELAY_14_CK_EXMC) && \
((xxx) != EXMC_CLE_RE_DELAY_15_CK_EXMC) && ((xxx) != EXMC_CLE_RE_DELAY_16_CK_EXMC))
#define NOT_EXMC_NAND_DATABUS_WIDTH(xxx) (((xxx) != EXMC_NAND_DATABUS_WIDTH_8B) && ((xxx) != EXMC_NAND_DATABUS_WIDTH_16B))
#define NOT_EXMC_SDRAM_DEVICE(xxx) (((xxx) != EXMC_SDRAM_DEVICE0) && ((xxx) != EXMC_SDRAM_DEVICE1))
#define NOT_EXMC_SDRAM_PIPELINE_DELAY(xxx) (((xxx) != EXMC_PIPELINE_DELAY_0_CK_EXMC) && ((xxx) != EXMC_PIPELINE_DELAY_1_CK_EXMC) && \
((xxx) != EXMC_PIPELINE_DELAY_2_CK_EXMC))
#define NOT_EXMC_SDCLK(xxx) (((xxx) != EXMC_SDCLK_DISABLE) && ((xxx) != EXMC_SDCLK_PERIODS_2_CK_EXMC) && \
((xxx) != EXMC_SDCLK_PERIODS_3_CK_EXMC) && ((xxx) != EXMC_SDCLK_PERIODS_4_CK_EXMC) && \
((xxx) != EXMC_SDCLK_PERIODS_5_CK_EXMC))
#define NOT_EXMC_SDRAM_CAS_LATENCY(xxx) (((xxx) != EXMC_CAS_LATENCY_1_SDCLK) && ((xxx) != EXMC_CAS_LATENCY_2_SDCLK) && \
((xxx) != EXMC_CAS_LATENCY_3_SDCLK))
#define NOT_EXMC_SDRAM_INTER_BANK(xxx) (((xxx) != EXMC_SDRAM_2_INTER_BANK) && ((xxx) != EXMC_SDRAM_4_INTER_BANK))
#define NOT_EXMC_SDRAM_DATABUS_WIDTH(xxx) (((xxx) != EXMC_SDRAM_DATABUS_WIDTH_8B) && ((xxx) != EXMC_SDRAM_DATABUS_WIDTH_16B) && \
((xxx) != EXMC_SDRAM_DATABUS_WIDTH_32B))
#define NOT_EXMC_SDRAM_ROW_ADDRESS(xxx) (((xxx) != EXMC_SDRAM_ROW_ADDRESS_11) && ((xxx) != EXMC_SDRAM_ROW_ADDRESS_12) && \
((xxx) != EXMC_SDRAM_ROW_ADDRESS_13))
#define NOT_EXMC_SDRAM_COW_ADDRESS(xxx) (((xxx) != EXMC_SDRAM_COW_ADDRESS_8) && ((xxx) != EXMC_SDRAM_COW_ADDRESS_9) && \
((xxx) != EXMC_SDRAM_COW_ADDRESS_10) && ((xxx) != EXMC_SDRAM_COW_ADDRESS_11))
#define NOT_EXMC_BANK_REMAP(xxx) (((xxx) != EXMC_BANK_REMAP_DEFAULT) && ((xxx) != EXMC_BANK_NORPSRAM_SDRAM_SWAP))
#define NOT_EXMC_CLOCK_MODE(xxx) (((xxx) != EXMC_CLOCK_SYN_MODE) && ((xxx) != EXMC_CLOCK_UNCONDITIONALLY))
#define NOT_EXMC_SDRAM_DELAY_CELL(xxx) (((xxx) != EXMC_SDRAM_0_DELAY_CELL) && ((xxx) != EXMC_SDRAM_1_DELAY_CELL) && \
((xxx) != EXMC_SDRAM_2_DELAY_CELL) && ((xxx) != EXMC_SDRAM_3_DELAY_CELL) && \
((xxx) != EXMC_SDRAM_4_DELAY_CELL) && ((xxx) != EXMC_SDRAM_5_DELAY_CELL) && \
((xxx) != EXMC_SDRAM_6_DELAY_CELL) && ((xxx) != EXMC_SDRAM_7_DELAY_CELL) && \
((xxx) != EXMC_SDRAM_8_DELAY_CELL) && ((xxx) != EXMC_SDRAM_9_DELAY_CELL) && \
((xxx) != EXMC_SDRAM_10_DELAY_CELL) && ((xxx) != EXMC_SDRAM_11_DELAY_CELL) && \
((xxx) != EXMC_SDRAM_12_DELAY_CELL) && ((xxx) != EXMC_SDRAM_13_DELAY_CELL) && \
((xxx) != EXMC_SDRAM_14_DELAY_CELL) && ((xxx) != EXMC_SDRAM_15_DELAY_CELL))
#define NOT_EXMC_SDRAM_READSAMPLE(xxx) (((xxx) != EXMC_SDRAM_READSAMPLE_0_EXTRACK) && ((xxx) != EXMC_SDRAM_READSAMPLE_1_EXTRACK))
#define NOT_EXMC_SDRAM_AUTO_REFLESH(xxx) (((xxx) != EXMC_SDRAM_AUTO_REFLESH_1_SDCLK) && ((xxx) != EXMC_SDRAM_AUTO_REFLESH_2_SDCLK) && \
((xxx) != EXMC_SDRAM_AUTO_REFLESH_3_SDCLK) && ((xxx) != EXMC_SDRAM_AUTO_REFLESH_4_SDCLK) && \
((xxx) != EXMC_SDRAM_AUTO_REFLESH_5_SDCLK) && ((xxx) != EXMC_SDRAM_AUTO_REFLESH_6_SDCLK) && \
((xxx) != EXMC_SDRAM_AUTO_REFLESH_7_SDCLK) && ((xxx) != EXMC_SDRAM_AUTO_REFLESH_8_SDCLK) && \
((xxx) != EXMC_SDRAM_AUTO_REFLESH_9_SDCLK) && ((xxx) != EXMC_SDRAM_AUTO_REFLESH_10_SDCLK) && \
((xxx) != EXMC_SDRAM_AUTO_REFLESH_11_SDCLK) && ((xxx) != EXMC_SDRAM_AUTO_REFLESH_12_SDCLK) && \
((xxx) != EXMC_SDRAM_AUTO_REFLESH_13_SDCLK) && ((xxx) != EXMC_SDRAM_AUTO_REFLESH_14_SDCLK) && \
((xxx) != EXMC_SDRAM_AUTO_REFLESH_15_SDCLK))
#define NOT_EXMC_SDRAM_DEVICE_SELECT(xxx) (((xxx) != EXMC_SDRAM_DEVICE0_SELECT) && ((xxx) != EXMC_SDRAM_DEVICE1_SELECT))
#define NOT_EXMC_SDRAM_COMMAND(xxx) (((xxx) != EXMC_SDRAM_NORMAL_OPERATION) && ((xxx) != EXMC_SDRAM_CLOCK_ENABLE) && \
((xxx) != EXMC_SDRAM_PRECHARGE_ALL) && ((xxx) != EXMC_SDRAM_AUTO_REFRESH) && \
((xxx) != EXMC_SDRAM_LOAD_MODE_REGISTER) && ((xxx) != EXMC_SDRAM_SELF_REFRESH) && \
((xxx) != EXMC_SDRAM_POWERDOWN_ENTRY))
#define NOT_EXMC_BANK(xxx) (((xxx) != EXMC_BANK2_NAND) && ((xxx) != EXMC_SDRAM_DEVICE0) && \
((xxx) != EXMC_SDRAM_DEVICE1))
#define NOT_EXMC_NAND_SDRAM_FLAG(xxx) (((xxx) != EXMC_NAND_FLAG_RISE) && ((xxx) != EXMC_NAND_FLAG_LEVEL) && \
((xxx) != EXMC_NAND_FLAG_FALL) && ((xxx) != EXMC_NAND_FLAG_FIFOE) && \
((xxx) != EXMC_SDRAM_FLAG_REFRESH) && ((xxx) != EXMC_SDRAM_FLAG_NREADY))
#define NOT_EXMC_NAND_SDRAM_FLAG_CLR(xxx) (((xxx) != EXMC_NAND_FLAG_RISE) && ((xxx) != EXMC_NAND_FLAG_LEVEL) && \
((xxx) != EXMC_NAND_FLAG_FALL) && ((xxx) != EXMC_NAND_FLAG_FIFOE) && \
((xxx) != EXMC_SDRAM_FLAG_REFRESH))
#define NOT_EXMC_NAND_SDRAM_INT(xxx) (((xxx) != EXMC_NAND_INT_RISE) && ((xxx) != EXMC_NAND_INT_LEVEL) && \
((xxx) != EXMC_NAND_INT_FALL) && ((xxx) != EXMC_SDRAM_INT_REFRESH))
#define NOT_EXMC_NAND_SDRAM_INT_FLAG(xxx) (((xxx) != EXMC_NAND_INT_FLAG_RISE) && ((xxx) != EXMC_NAND_INT_FLAG_LEVEL) && \
((xxx) != EXMC_NAND_INT_FLAG_FALL) && ((xxx) != EXMC_SDRAM_INT_FLAG_REFRESH))
#endif /* FW_DEBUG_ERR_REPORT */
/* function declarations */
/* initialization functions */
/* NOR/SRAM */
/* deinitialize EXMC NOR/SRAM region */
void exmc_norsram_deinit(uint32_t exmc_norsram_region);
/* initialize exmc_norsram_parameter_struct with the default values */
void exmc_norsram_struct_para_init(exmc_norsram_parameter_struct *exmc_norsram_init_struct);
/* initialize EXMC NOR/SRAM region */
void exmc_norsram_init(exmc_norsram_parameter_struct *exmc_norsram_init_struct);
/* enable EXMC NOR/SRAM region */
void exmc_norsram_enable(uint32_t exmc_norsram_region);
/* disable EXMC NOR/SRAM region */
void exmc_norsram_disable(uint32_t exmc_norsram_region);
/* NAND */
/* deinitialize EXMC NAND bank */
void exmc_nand_deinit(void);
/* initialize exmc_nand_parameter_struct with the default values */
void exmc_nand_struct_para_init(exmc_nand_parameter_struct *exmc_nand_init_struct);
/* initialize EXMC NAND bank */
void exmc_nand_init(exmc_nand_parameter_struct *exmc_nand_init_struct);
/* enable EXMC NAND bank */
void exmc_nand_enable(void);
/* disable EXMC NAND bank */
void exmc_nand_disable(void);
/* SDRAM */
/* deinitialize EXMC SDRAM device */
void exmc_sdram_deinit(uint32_t exmc_sdram_device);
/* initialize exmc_sdram_parameter_struct with the default values */
void exmc_sdram_struct_para_init(exmc_sdram_parameter_struct *exmc_sdram_init_struct);
/* initialize EXMC SDRAM device */
void exmc_sdram_init(exmc_sdram_parameter_struct *exmc_sdram_init_struct);
/* configuration functions */
/* NOR/SRAM */
/* configure NOR/PSRAM and SDRAM remap */
void exmc_norsram_sdram_remap_config(uint32_t bank_remap);
/* get NOR/PSRAM and SDRAM remap configuration */
uint32_t exmc_norsram_sdram_remap_get(void);
/* configure consecutive clock mode (only supported in EXMC BANK0 REGION0) */
void exmc_norsram_consecutive_clock_config(uint32_t clock_mode);
/* configure CRAM page size */
void exmc_norsram_page_size_config(uint32_t exmc_norsram_region, uint32_t page_size);
/* NAND */
/* enable or disable the EXMC NAND ECC function */
void exmc_nand_ecc_config(ControlStatus newvalue);
/* get NAND ECC value */
uint32_t exmc_ecc_get(void);
/* SDRAM */
/* enable read sample function */
void exmc_sdram_readsample_enable(void);
/* disable read sample function */
void exmc_sdram_readsample_disable(void);
/* configure the delayed sample clock of read data */
void exmc_sdram_readsample_config(uint32_t delay_cell, uint32_t extra_clk);
/* configure the SDRAM memory command */
void exmc_sdram_command_config(exmc_sdram_command_parameter_struct *exmc_sdram_command_init_struct);
/* set auto-refresh interval */
void exmc_sdram_refresh_count_set(uint32_t exmc_count);
/* set the number of successive auto-refresh command */
void exmc_sdram_autorefresh_number_set(uint32_t exmc_number);
/* configure the write protection function */
void exmc_sdram_write_protection_config(uint32_t exmc_sdram_device, ControlStatus newvalue);
/* get the status of SDRAM device0 or device1 */
uint32_t exmc_sdram_bankstatus_get(uint32_t exmc_sdram_device);
/* interrupt & flag functions */
/* get EXMC flag status */
FlagStatus exmc_flag_get(uint32_t exmc_bank, uint32_t flag);
/* clear EXMC flag status */
void exmc_flag_clear(uint32_t exmc_bank, uint32_t flag);
/* enable EXMC interrupt */
void exmc_interrupt_enable(uint32_t exmc_bank, uint32_t interrupt);
/* disable EXMC interrupt */
void exmc_interrupt_disable(uint32_t exmc_bank, uint32_t interrupt);
/* get EXMC interrupt flag */
FlagStatus exmc_interrupt_flag_get(uint32_t exmc_bank, uint32_t interrupt);
/* clear EXMC interrupt flag */
void exmc_interrupt_flag_clear(uint32_t exmc_bank, uint32_t interrupt);
#endif /* GD32H75E_EXMC_H */