1 /**************************************************************************//** 2 * @file hbi_reg.h 3 * @version V1.00 4 * @brief HBI register definition header file 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 * @copyright (C) 2021 Nuvoton Technology Corp. All rights reserved. 8 *****************************************************************************/ 9 #ifndef __HBI_REG_H__ 10 #define __HBI_REG_H__ 11 12 #if defined ( __CC_ARM ) 13 #pragma anon_unions 14 #endif 15 16 /** 17 @addtogroup REGISTER Control Register 18 @{ 19 */ 20 21 /** 22 @addtogroup Hyper Bus Interface Controller (HBI) 23 Memory Mapped Structure for HBI Controller 24 @{ */ 25 typedef struct 26 { 27 28 29 /** 30 * @var HBI_T::CMD 31 * Offset: 0x00 HyperBus Command and Status Register 32 * --------------------------------------------------------------------------------------------------- 33 * |Bits |Field |Descriptions 34 * | :----: | :----: | :---- | 35 * |[3:0] |HYPCMD |HyperBus Command and Status 36 * | | |Write 37 * | | |0001 = Reset HyperRAM. 38 * | | |0010 = Read HyperRAM regsiter (16-Bit, Read Data[15:0]. 39 * | | |0101 = Exit From Hybrid Sleep and deep power down. 40 * | | |0111 = Write HyperRAM regsiter (16-Bit, Write Data[15:0]. 41 * | | |1000 = Read 1 word (Read Data[15:0]) from HyperRAM. 42 * | | |1001 = Read 2 word (Read Data[31:0]) from HyperRAM. 43 * | | |1100 = Write 1 Byte (Write Data[7:0]) to HyperRAM. 44 * | | |1101 = Write 2 Bytes (Write Data[15:0]) to HyperRAM. 45 * | | |1110 = Write 3 Byte (Write Data[23:0]) to HyperRAM. 46 * | | |1111 = Write 4 Byte (Write Data[31:0]) to HyperRAM. 47 * | | |Other value = reserved. 48 * | | |Read 49 * | | |0000 = HyperBus interface is Idle. 50 * | | |Other value = HyperBus interface is busy. 51 * | | |Note: When an operation is Done, the read value automatically return to 4'b0000. 52 * @var HBI_T::CONFIG 53 * Offset: 0x04 HyperBus Configuration Register 54 * --------------------------------------------------------------------------------------------------- 55 * |Bits |Field |Descriptions 56 * | :----: | :----: | :---- | 57 * |[1:0] |CSST |Chip Select Setup Time to Next CK Rising Edge 58 * | | |This field indicates the setup time between the chip select and the next CK rising edge 59 * | | |00 = 1.5 HCLK cycles. 60 * | | |01 = 2.5 HCLK cycles. 61 * | | |10 = 3.5 HCLK cycles. 62 * | | |11 = 4.5 HCLK cycles. 63 * |[5:2] |ACCT |Initial Access Time 64 * | | |This field indicates the initial access cycles of the Hyper Bus transaction 65 * | | |0000 = 5 CK cycles. 66 * | | |0001 = 6 CK cycles. 67 * | | |0010 = 7 CK cycles. 68 * | | |1110 = 3 CK cycles. 69 * | | |1111 = 4 CK cycles. 70 * | | |Others = Reserved. 71 * | | |Note: This field must be set to the same value as 72 * | | |initial Latency in HyperRAM Configuration Register 0. 73 * |[7:6] |CSH |Chip Select Hold Time After CK Falling Edge 74 * | | |This field indicates the hold time between the last CK falling edge and chip select 75 * | | |00 = 0.5 HCLK cycles. 76 * | | |01 = 1.5 HCLK cycles. 77 * | | |10 = 2.5 HCLK cycles. 78 * | | |11 = 3.5 HCLK cycles. 79 * |[11:8] |CSHI |Chip Select High between Transaction 80 * | | |This field indicates the inactive period between two Hyper Bus transactions 81 * | | |0000 = 1 HCLK cycle. 82 * | | |0001 = 2 HCLK cycles. 83 * | | |0010 = 3 HCLK cycles. 84 * | | |0011 = 4 HCLK cycles. 85 * | | |... 86 * | | |1111 = 16 HCLK cycles. 87 * | | |Note : This field must meet the HyperRAM device specification of tCSHI. 88 * |[13:12] |BGSIZE |Burst Group Size 89 * | | |This field indicates the burst length on the Hyper Bus transaction 90 * | | |00 = 128 Bytes. 91 * | | |01 = 64 Bytes. 92 * | | |10 = 16 Bytes. 93 * | | |11 = 32 Bytes. 94 * | | |Note : This field must be set to the same value as Burst Length? in HyperRAM Configuration Regsiter 0. 95 * |[14] |ENDIAN |Endian Condition on the Hyper Bus Data Pipe 96 * | | |0 = Little-Endian. 97 * | | | Byte A = Bits[7:0] of a 16-Bit ..........word 98 * | | | Byte B = Bits[15:8] of a 16-Bit ..........word 99 * | | |1 = Big-Endia. 100 * | | | Byte A = Bits[15:8] of a 16-Bit ..........word 101 * | | | Byte B = Bits[7:0] of a 16-Bit ..........word 102 * |[15] |CKDIV |Hyper Bus Clock Divider 103 * | | | 0 = Hyper Bus Clock rate is HCLK/2. 104 * | | | 1 = Hyper Bus Clock rate is HCLK/4. 105 * |[26:16] |CSMAXLT |Chip Select Maximum Low Time 106 * | | | This field indicates the maximum Low period of the chip select (CS#) in one transaction 107 * | | | 00000000000 = 1 HCLK cycle. 108 * | | | 00000000001 = 2 HCLK cycles. 109 * | | | 00000000010 = 3 HCLK cycles. 110 * | | | 00000000011 = 4 HCLK cycles. 111 * | | | ... 112 * | | | 01011101100 = 749 HCLK cycles (3.9us @192 MHz). 113 * | | | ... 114 * | | | 11111111110 = 2047 HCLK cycles. 115 * | | | 11111111111 = 2048 HCLK cycles. 116 * | | | Note: This field inidcates the timing of HyperRAM Chip Select specification so that it has to relative the frequency of HCLK and the CLKDIV (HBI_CONFIG[15]). 117 * @var HBI_T::ADR 118 * Offset: 0x08 HyperBus Byte Address access Register 119 * --------------------------------------------------------------------------------------------------- 120 * |Bits |Field |Descriptions 121 * | :----: | :----: | :---- | 122 * |[31:0] |HBI_ADR |HyperBus Byte Address 123 * | | |Memory Space Range: 124 * | | | 0x0000_0000 ~ 0x01FF_FFFF 125 * | | |Register Space Range: 126 * | | | 0X0000_0000 = Identification Register 0 127 * | | | 0X0000_0002 = Identification Register 1 128 * | | | 0X0000_1000 = Configuration Register 0 129 * | | | 0X0000_1002 = Configuration Register 1 130 * | | |Note: 131 * | | |1. It is "Byte" address, not "word" address 132 * | | |2. Up to 32M Bytes of memory space is supported. 133 * @var HBI_T::WDATA 134 * Offset: 0x0C HyperBus 32-Bits Write Data Register 135 * --------------------------------------------------------------------------------------------------- 136 * |Bits |Field |Descriptions 137 * | :----: | :----: | :---- | 138 * |[31:0] |WDATA |HyperBus 32-Bits Write Data 139 * | | |To write 1 Byte to HyperRAM, Byte 0 (Data[7:0]) is used 140 * | | |To write 2 Bytes to HyperRAM, Byte 1~0 (Data[15:0]) is used 141 * | | |To write 3 Bytes to HyperRAM, Byte 2~0 (Data[23:0]) is used 142 * | | |To write 4 Bytes to HyperRAM, Byte 3~ (Data[31:0]) is used 143 * @var HBI_T::RDATA 144 * Offset: 0x10 HyperBus 32-Bits Read Data Register 145 * --------------------------------------------------------------------------------------------------- 146 * |Bits |Field |Descriptions 147 * | :----: | :----: | :---- | 148 * |[31:0] |RDATA |HyperBus 32-Bits Read Data 149 * | | |32-Bits Data for HyperBus Read 150 * | | |Note: The data order is depened on the ENDIAN (HBI_CONFIG[14]). Refer to 1.1.5.4 for detail information. 151 * @var HBI_T::INTEN 152 * Offset: 0x14 HyperBus Interrupt Enable Register 153 * --------------------------------------------------------------------------------------------------- 154 * |Bits |Field |Descriptions 155 * | :----: | :----: | :---- | 156 * |[0] |OPINTEN |HyperBus Operation Done Interrupt Enable 157 * | | |0 = Operation done interrupt is Disab led. 158 * | | |1 = Operation done interrupt is Enabled. 159 * @var HBI_T::INTSTS 160 * Offset: 0x18 HyperBus Interrupt Status Register 161 * --------------------------------------------------------------------------------------------------- 162 * |Bits |Field |Descriptions 163 * | :----: | :----: | :---- | 164 * |[0] |OPDONE |HyperBus Operation Done Interrupt 165 * | | |0 = HyperBus operation is busy. 166 * | | |1 = HyperBus operation is done. 167 */ 168 __IO uint32_t CMD ; /*!< [0x0000] HyperBus Command and Status Register */ 169 __IO uint32_t CONFIG; /*!< [0x0004] HyperBus Configuration Register */ 170 __IO uint32_t ADR; /*!< [0x0008] HyperBus Byte Address access Register */ 171 __IO uint32_t WDATA; /*!< [0x000C] HyperBus 32-Bits Write Data Register */ 172 __IO uint32_t RDATA; /*!< [0x0010] HyperBus 32-Bits Read Data Register */ 173 __IO uint32_t INTEN; /*!< [0x0014] HyperBus Interrupt Enable Register */ 174 __IO uint32_t INTSTS; /*!< [0x0018] HyperBus Interrupt Status Register */ 175 } HBI_T; 176 177 /** 178 @addtogroup HBI_CONST HBI Bit Field Definition 179 Constant Definitions for HBI Controller 180 @{ */ 181 182 #define HBI_CMD_HYPCMD_Pos (0) /*!< HBI_T::CMD: HYPCMD Position */ 183 #define HBI_CMD_HYPCMD_Msk (0xful << HBI_CMD_HYPCMD_Pos) /*!< HBI_T::CMD: HYPCMD Mask */ 184 185 #define HBI_CONFIG_CSST_Pos (0) /*!< HBI_T::CONFIG: CSST Position */ 186 #define HBI_CONFIG_CSST_Msk (0x3ul << HBI_CONFIG_CSST_Pos) /*!< HBI_T::CONFIG: CSST Mask */ 187 188 #define HBI_CONFIG_ACCT_Pos (2) /*!< HBI_T::CONFIG: ACCT Position */ 189 #define HBI_CONFIG_ACCT_Msk (0xful << HBI_CONFIG_ACCT_Pos) /*!< HBI_T::CONFIG: ACCT Mask */ 190 191 #define HBI_CONFIG_CSH_Pos (6) /*!< HBI_T::CONFIG: CSH Position */ 192 #define HBI_CONFIG_CSH_Msk (0x3ul << HBI_CONFIG_CSH_Pos) /*!< HBI_T::CONFIG: CSH Mask */ 193 194 #define HBI_CONFIG_CSHI_Pos (8) /*!< HBI_T::CONFIG: CSHI Position */ 195 #define HBI_CONFIG_CSHI_Msk (0xful << HBI_CONFIG_CSHI_Pos) /*!< HBI_T::CONFIG: CSHI Mask */ 196 197 #define HBI_CONFIG_BGSIZE_Pos (12) /*!< HBI_T::CONFIG: BGSIZE Position */ 198 #define HBI_CONFIG_BGSIZE_Msk (0x3ul << HBI_CONFIG_BGSIZE_Pos) /*!< HBI_T::CONFIG: BGSIZE Mask */ 199 200 #define HBI_CONFIG_ENDIAN_Pos (14) /*!< HBI_T::CONFIG: ENDIAN Position */ 201 #define HBI_CONFIG_ENDIAN_Msk (0x1ul << HBI_CONFIG_ENDIAN_Pos) /*!< HBI_T::CONFIG: ENDIAN Mask */ 202 203 #define HBI_CONFIG_CKDIV_Pos (15) /*!< HBI_T::CONFIG: CKDIV Position */ 204 #define HBI_CONFIG_CKDIV_Msk (0x1ul << HBI_CONFIG_CKDIV_Pos) /*!< HBI_T::CONFIG: CKDIV Mask */ 205 206 #define HBI_CONFIG_CSMAXLT_Pos (16) /*!< HBI_T::CONFIG: CSMAXLT Position */ 207 #define HBI_CONFIG_CSMAXLT_Msk (0x7fful << HBI_CONFIG_CSMAXLT_Pos) /*!< HBI_T::CONFIG: CSMAXLT Mask */ 208 209 #define HBI_ADR_ADR_Pos (0) /*!< HBI_T::ADR: ADR Position */ 210 #define HBI_ADR_ADR_Msk (0xfffffffful << HBI_ADR_ADR_Pos) /*!< HBI_T::ADR: ADR Mask */ 211 212 #define HBI_WDATA_WDATA_Pos (0) /*!< HBI_T::WDATA: WDATA Position */ 213 #define HBI_WDATA_WDATA_Msk (0xfffffffful << HBI_WDATA_WDATA_Pos) /*!< HBI_T::WDATA: WDATA Mask */ 214 215 #define HBI_RDATA_RDATA_Pos (0) /*!< HBI_T::RDATA: RDATA Position */ 216 #define HBI_RDATA_RDATA_Msk (0xfffffffful << HBI_RDATA_RDATA_Pos) /*!< HBI_T::RDATA: RDATA Mask */ 217 218 #define HBI_INTEN_OPINTEN_Pos (0) /*!< HBI_T::INTEN: OPINTEN Position */ 219 #define HBI_INTEN_OPINTEN_Msk (0x1ul << HBI_INTEN_OPINTEN_Pos) /*!< HBI_T::INTEN: OPINTEN Mask */ 220 221 #define HBI_INTSTS_OPDONE_Pos (0) /*!< HBI_T::INTSTS: OPDONE Position */ 222 #define HBI_INTSTS_OPDONE_Msk (0x1ul << HBI_INTSTS_OPDONE_Pos) /*!< HBI_T::INTSTS: OPDONE Mask */ 223 224 225 /**@}*/ /* HBI_CONST */ 226 /**@}*/ /* end of HBI register group */ 227 /**@}*/ /* end of REGISTER group */ 228 229 #if defined ( __CC_ARM ) 230 #pragma no_anon_unions 231 #endif 232 233 #endif /* __HBI_REG_H__ */ 234