reg_fsmc.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. ////////////////////////////////////////////////////////////////////////////////
  2. /// @file reg_fsmc.h
  3. /// @author AE TEAM
  4. /// @brief THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE SERIES OF
  5. /// MM32 FIRMWARE LIBRARY.
  6. ////////////////////////////////////////////////////////////////////////////////
  7. /// @attention
  8. ///
  9. /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
  10. /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
  11. /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
  12. /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
  13. /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
  14. /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
  15. ///
  16. /// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
  17. ////////////////////////////////////////////////////////////////////////////////
  18. // Define to prevent recursive inclusion
  19. #ifndef __REG_FSMC_H
  20. #define __REG_FSMC_H
  21. // Files includes
  22. #include <stdint.h>
  23. #include <stdbool.h>
  24. #include "types.h"
  25. #if defined ( __CC_ARM )
  26. #pragma anon_unions
  27. #endif
  28. ////////////////////////////////////////////////////////////////////////////////
  29. /// @brief FLASH Base Address Definition
  30. ////////////////////////////////////////////////////////////////////////////////
  31. #define FSMC_BANK1_ADDR (0x60000000UL )
  32. #define FSMC_BANK2_ADDR (0x60000000UL + 0x4000000 )
  33. #define FSMC_BANK3_ADDR (0x60000000UL + 0x8000000 )
  34. #define FSMC_BANK4_ADDR (0x60000000UL + 0xc000000 )
  35. #define FSMC_BASE (0x60000000UL + 0x40000000) ///< Base Address: 0xA0000000
  36. ////////////////////////////////////////////////////////////////////////////////
  37. /// @brief FSMC Registers Structure Definition
  38. ////////////////////////////////////////////////////////////////////////////////
  39. typedef struct {
  40. __IO u32 Reservedoffset0x00; ///< Reserved Register offset: 0x00
  41. __IO u32 Reservedoffset0x04; ///< Reserved Register offset: 0x04
  42. __IO u32 Reservedoffset0x08; ///< Reserved Register offset: 0x08
  43. __IO u32 Reservedoffset0x0c; ///< Reserved Register offset: 0x0c
  44. __IO u32 Reservedoffset0x10; ///< Reserved Register offset: 0x10
  45. __IO u32 Reservedoffset0x14; ///< Reserved Register offset: 0x14
  46. __IO u32 Reservedoffset0x18; ///< Reserved Register offset: 0x18
  47. __IO u32 Reservedoffset0x1c; ///< Reserved Register offset: 0x1c
  48. __IO u32 Reservedoffset0x20; ///< Reserved Register offset: 0x20
  49. __IO u32 Reservedoffset0x24; ///< Reserved Register offset: 0x24
  50. __IO u32 Reservedoffset0x28; ///< Reserved Register offset: 0x28
  51. __IO u32 Reservedoffset0x2c; ///< Reserved Register offset: 0x2c
  52. __IO u32 Reservedoffset0x30; ///< Reserved Register offset: 0x30
  53. __IO u32 Reservedoffset0x34; ///< Reserved Register offset: 0x34
  54. __IO u32 Reservedoffset0x38; ///< Reserved Register offset: 0x38
  55. __IO u32 Reservedoffset0x3c; ///< Reserved Register offset: 0x3c
  56. __IO u32 Reservedoffset0x40; ///< Reserved Register offset: 0x40
  57. __IO u32 Reservedoffset0x44; ///< Reserved Register offset: 0x44
  58. __IO u32 Reservedoffset0x48; ///< Reserved Register offset: 0x48
  59. __IO u32 Reservedoffset0x4c; ///< Reserved Register offset: 0x4c
  60. __IO u32 Reservedoffset0x50; ///< Reserved Register offset: 0x50
  61. __IO u32 SMSKR; ///< SMSKR control Register offset: 0x54
  62. __IO u32 Reservedoffset0x58; ///< Reserved Register offset: 0x58
  63. __IO u32 Reservedoffset0x5c; ///< Reserved Register offset: 0x5c
  64. __IO u32 Reservedoffset0x60; ///< Reserved Register offset: 0x60
  65. __IO u32 Reservedoffset0x64; ///< Reserved Register offset: 0x64
  66. __IO u32 Reservedoffset0x68; ///< Reserved Register offset: 0x68
  67. __IO u32 Reservedoffset0x6c; ///< Reserved Register offset: 0x6c
  68. __IO u32 Reservedoffset0x70; ///< Reserved Register offset: 0x70
  69. __IO u32 Reservedoffset0x74; ///< Reserved Register offset: 0x74
  70. __IO u32 Reservedoffset0x78; ///< Reserved Register offset: 0x78
  71. __IO u32 Reservedoffset0x7c; ///< Reserved Register offset: 0x7c
  72. __IO u32 Reservedoffset0x80; ///< Reserved Register offset: 0x80
  73. __IO u32 Reservedoffset0x84; ///< Reserved Register offset: 0x84
  74. __IO u32 Reservedoffset0x88; ///< Reserved Register offset: 0x88
  75. __IO u32 Reservedoffset0x8c; ///< Reserved Register offset: 0x8c
  76. __IO u32 Reservedoffset0x90; ///< Reserved Register offset: 0x90
  77. __IO u32 SMTMGR_SET0; ///< SMTMGR_SET Register 0 offset: 0x94
  78. __IO u32 SMTMGR_SET1; ///< SMTMGR_SET Register 1 offset: 0x98
  79. __IO u32 SMTMGR_SET2; ///< SMTMGR_SET Register 2 offset: 0x9c
  80. __IO u32 Reservedoffset0xA0; ///< Reserved Register offset: 0xa0
  81. __IO u32 SMCTLR; ///< Reserved Register offset: 0xa4
  82. __IO u32 Reservedoffset0xA8; ///< Reserved Register offset: 0xa8
  83. __IO u32 Reservedoffset0xAC; ///< Reserved Register offset: 0xac
  84. } FSMC_TypeDef;
  85. ////////////////////////////////////////////////////////////////////////////////
  86. /// @brief FSMC type pointer Definition
  87. ////////////////////////////////////////////////////////////////////////////////
  88. #define FSMC ((FSMC_TypeDef*) FSMC_BASE)
  89. ////////////////////////////////////////////////////////////////////////////////
  90. /// @brief FSMC_SMSKR Register Bit Definition
  91. ////////////////////////////////////////////////////////////////////////////////
  92. #define FSMC_SMSKR_REG_SELECT_Pos (8)
  93. #define FSMC_SMSKR_REG_SELECT0 (0x00U << FSMC_SMSKR_REG_SELECT_Pos) ///< timing parameter configures the register group 0
  94. #define FSMC_SMSKR_REG_SELECT1 (0x01U << FSMC_SMSKR_REG_SELECT_Pos) ///< timing parameter configures the register group 1
  95. #define FSMC_SMSKR_REG_SELECT2 (0x02U << FSMC_SMSKR_REG_SELECT_Pos) ///< timing parameter configures the register group 2
  96. #define FSMC_SMSKR_MEM_TYPE_Pos (5)
  97. #define FSMC_SMSKR_MEM_TYPE0 (0x00U << FSMC_SMSKR_MEM_TYPE_Pos) ///< SDRAM
  98. #define FSMC_SMSKR_MEM_TYPE1 (0x01U << FSMC_SMSKR_MEM_TYPE_Pos) ///< SRAM
  99. #define FSMC_SMSKR_MEM_TYPE2 (0x02U << FSMC_SMSKR_MEM_TYPE_Pos) ///< FLASH
  100. #define FSMC_SMSKR_MEM_SIZE_Pos (0)
  101. #define FSMC_SMSKR_MEM_SIZE_64K (0x01U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 64KB
  102. #define FSMC_SMSKR_MEM_SIZE_128K (0x02U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 128KB
  103. #define FSMC_SMSKR_MEM_SIZE_256K (0x03U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 256KB
  104. #define FSMC_SMSKR_MEM_SIZE_512K (0x04U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 512KB
  105. #define FSMC_SMSKR_MEM_SIZE_1M (0x05U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 1MB
  106. #define FSMC_SMSKR_MEM_SIZE_2M (0x06U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 2MB
  107. #define FSMC_SMSKR_MEM_SIZE_4M (0x07U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 4MB
  108. #define FSMC_SMSKR_MEM_SIZE_8M (0x08U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 8MB
  109. #define FSMC_SMSKR_MEM_SIZE_16M (0x09U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 16MB
  110. #define FSMC_SMSKR_MEM_SIZE_32M (0x10U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 32MB
  111. #define FSMC_SMSKR_MEM_SIZE_64M (0x11U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 64MB
  112. #define FSMC_SMSKR_MEM_SIZE_128M (0x12U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 128MB
  113. #define FSMC_SMSKR_MEM_SIZE_256M (0x13U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 256MB
  114. #define FSMC_SMSKR_MEM_SIZE_512M (0x14U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 512MB
  115. #define FSMC_SMSKR_MEM_SIZE_1G (0x15U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 1GB
  116. #define FSMC_SMSKR_MEM_SIZE_2G (0x16U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 2GB
  117. #define FSMC_SMSKR_MEM_SIZE_4G (0x17U << FSMC_SMSKR_MEM_SIZE_Pos) ///< external DEVICE size 4GB
  118. ////////////////////////////////////////////////////////////////////////////////
  119. /// @brief FSMC_SMTMGR_SET0/1/2 Register Bit Definition
  120. ////////////////////////////////////////////////////////////////////////////////
  121. #define FSMC_SMTMGR_SET_SM_READ_PIPE_Pos (28)
  122. #define FSMC_SMTMGR_SET_SM_READ_PIPE (0x03U << FSMC_SMTMGR_SET_SM_READ_PIPE_Pos) ///< The period of the latched read data
  123. #define FSMC_SMTMGR_SET_LOW_FREG_SYNC_DEVICE_Pos (27)
  124. #define FSMC_SMTMGR_SET_LOW_FREG_SYNC_DEVICE (0x01U << FSMC_SMTMGR_SET_LOW_FREG_SYNC_DEVICE_Pos) ///< Access low frequency synchronization devices
  125. #define FSMC_SMTMGR_SET_READ_MODE_Pos (26)
  126. #define FSMC_SMTMGR_SET_READ_MODE (0x01U << FSMC_SMTMGR_SET_READ_MODE_Pos) ///< The Hready_RESP signal is from an external DEVICE
  127. #define FSMC_SMTMGR_SET_T_WP_Pos (10)
  128. #define FSMC_SMTMGR_SET_T_WP (0x3FU << FSMC_SMTMGR_SET_T_WP_Pos) ///< Write pulse width 64 clock cycles
  129. #define FSMC_SMTMGR_SET_T_WR_Pos (8)
  130. #define FSMC_SMTMGR_SET_T_WR (0x03U << FSMC_SMTMGR_SET_T_WR_Pos) ///< Address/data retention time for write operations is 3 clock cycles
  131. #define FSMC_SMTMGR_SET_T_AS_Pos (6)
  132. #define FSMC_SMTMGR_SET_T_AS (0x03U << FSMC_SMTMGR_SET_T_AS_Pos) ///< The address establishment time of write operation is 3 clock cycles
  133. #define FSMC_SMTMGR_SET_T_RC_Pos (0)
  134. #define FSMC_SMTMGR_SET_T_RC (0x3FU << FSMC_SMTMGR_SET_T_RC_Pos) ///< Read operation cycle 64 clock cycles
  135. ////////////////////////////////////////////////////////////////////////////////
  136. /// @brief FSMC_SMCTLR Register Bit Definition
  137. ////////////////////////////////////////////////////////////////////////////////
  138. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET2_Pos (13)
  139. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET2 (0x07U << FSMC_SMCTLR_SM_DATA_WIDTH_SET2_Pos)
  140. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET2_16 (0x00U << FSMC_SMCTLR_SM_DATA_WIDTH_SET2_Pos) ///< Memory data bus bit width 16 bits
  141. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET2_32 (0x01U << FSMC_SMCTLR_SM_DATA_WIDTH_SET2_Pos) ///< Memory data bus bit width 32 bits
  142. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET2_64 (0x02U << FSMC_SMCTLR_SM_DATA_WIDTH_SET2_Pos) ///< Memory data bus bit width 64 bits
  143. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET2_128 (0x03U << FSMC_SMCTLR_SM_DATA_WIDTH_SET2_Pos) ///< Memory data bus bit width 128 bits
  144. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET2_8 (0x04U << FSMC_SMCTLR_SM_DATA_WIDTH_SET2_Pos) ///< Memory data bus bit width 8 bits
  145. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET1_Pos (10)
  146. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET1 (0x07U << FSMC_SMCTLR_SM_DATA_WIDTH_SET1_Pos)
  147. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET1_16 (0x00U << FSMC_SMCTLR_SM_DATA_WIDTH_SET1_Pos) ///< Memory data bus bit width 16 bits
  148. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET1_32 (0x01U << FSMC_SMCTLR_SM_DATA_WIDTH_SET1_Pos) ///< Memory data bus bit width 32 bits
  149. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET1_64 (0x02U << FSMC_SMCTLR_SM_DATA_WIDTH_SET1_Pos) ///< Memory data bus bit width 64 bits
  150. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET1_128 (0x03U << FSMC_SMCTLR_SM_DATA_WIDTH_SET1_Pos) ///< Memory data bus bit width 128 bits
  151. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET1_8 (0x04U << FSMC_SMCTLR_SM_DATA_WIDTH_SET1_Pos) ///< Memory data bus bit width 8 bits
  152. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET0_Pos (7)
  153. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET0 (0x07U << FSMC_SMCTLR_SM_DATA_WIDTH_SET0_Pos)
  154. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET0_16 (0x00U << FSMC_SMCTLR_SM_DATA_WIDTH_SET0_Pos) ///< Memory data bus bit width 16 bits
  155. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET0_32 (0x01U << FSMC_SMCTLR_SM_DATA_WIDTH_SET0_Pos) ///< Memory data bus bit width 32 bits
  156. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET0_64 (0x02U << FSMC_SMCTLR_SM_DATA_WIDTH_SET0_Pos) ///< Memory data bus bit width 64 bits
  157. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET0_128 (0x03U << FSMC_SMCTLR_SM_DATA_WIDTH_SET0_Pos) ///< Memory data bus bit width 128 bits
  158. #define FSMC_SMCTLR_SM_DATA_WIDTH_SET0_8 (0x04U << FSMC_SMCTLR_SM_DATA_WIDTH_SET0_Pos) ///< Memory data bus bit width 8 bits
  159. /// @}
  160. /// @}
  161. /// @}
  162. ////////////////////////////////////////////////////////////////////////////////
  163. #endif //__REG_FSMC_H
  164. ////////////////////////////////////////////////////////////////////////////////