core_ck802.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2017-01-01 Urey first version
  9. */
  10. #ifndef __CORE_CK802_H_GENERIC
  11. #define __CORE_CK802_H_GENERIC
  12. #include <stdint.h>
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16. /*******************************************************************************
  17. * CSI definitions
  18. ******************************************************************************/
  19. /**
  20. \ingroup Ck802
  21. @{
  22. */
  23. /* CSI CK802 definitions */
  24. #define __CK802_CSI_VERSION_MAIN (0x04U) /*!< [31:16] CSI HAL main version */
  25. #define __CK802_CSI_VERSION_SUB (0x1EU) /*!< [15:0] CSI HAL sub version */
  26. #define __CK802_CSI_VERSION ((__CK802_CSI_VERSION_MAIN << 16U) | \
  27. __CK802_CSI_VERSION_SUB ) /*!< CSI HAL version number */
  28. #define __CK80X (0x02U) /*!< CK80X Core */
  29. /** __FPU_USED indicates whether an FPU is used or not.
  30. This core does not support an FPU at all
  31. */
  32. #define __FPU_USED 0U
  33. #if defined ( __GNUC__ )
  34. #if defined (__VFP_FP__) && !defined(__SOFTFP__)
  35. #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
  36. #endif
  37. #endif
  38. #include "csi_gcc.h"
  39. #ifdef __cplusplus
  40. }
  41. #endif
  42. #endif /* __CORE_CK802_H_GENERIC */
  43. #ifndef __CSI_GENERIC
  44. #ifndef __CORE_CK802_H_DEPENDANT
  45. #define __CORE_CK802_H_DEPENDANT
  46. #ifdef __cplusplus
  47. extern "C" {
  48. #endif
  49. /* check device defines and use defaults */
  50. //#if defined __CHECK_DEVICE_DEFINES
  51. #ifndef __CK802_REV
  52. #define __CK802_REV 0x0000U
  53. //#warning "__CK802_REV not defined in device header file; using default!"
  54. #endif
  55. #ifndef __NVIC_PRIO_BITS
  56. #define __NVIC_PRIO_BITS 2U
  57. //#warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
  58. #endif
  59. #ifndef __Vendor_SysTickConfig
  60. #define __Vendor_SysTickConfig 0U
  61. //#warning "__Vendor_SysTickConfig not defined in device header file; using default!"
  62. #endif
  63. #ifndef __GSR_GCR_PRESENT
  64. #define __GSR_GCR_PRESENT 0U
  65. //#warning "__GSR_GCR_PRESENT not defined in device header file; using default!"
  66. #endif
  67. #ifndef __MGU_PRESENT
  68. #define __MGU_PRESENT 0U
  69. //#warning "__MGU_PRESENT not defined in device header file; using default!"
  70. #endif
  71. //#endif
  72. /* IO definitions (access restrictions to peripheral registers) */
  73. /**
  74. \defgroup CSI_glob_defs CSI Global Defines
  75. <strong>IO Type Qualifiers</strong> are used
  76. \li to specify the access to peripheral variables.
  77. \li for automatic generation of peripheral register debug information.
  78. */
  79. #ifdef __cplusplus
  80. #define __I volatile /*!< Defines 'read only' permissions */
  81. #else
  82. #define __I volatile const /*!< Defines 'read only' permissions */
  83. #endif
  84. #define __O volatile /*!< Defines 'write only' permissions */
  85. #define __IO volatile /*!< Defines 'read / write' permissions */
  86. /* following defines should be used for structure members */
  87. #define __IM volatile const /*! Defines 'read only' structure member permissions */
  88. #define __OM volatile /*! Defines 'write only' structure member permissions */
  89. #define __IOM volatile /*! Defines 'read / write' structure member permissions */
  90. /*@} end of group CK802 */
  91. /*******************************************************************************
  92. * Register Abstraction
  93. Core Register contain:
  94. - Core Register
  95. - Core NVIC Register
  96. - Core SCB Register
  97. - Core SysTick Register
  98. ******************************************************************************/
  99. /**
  100. \defgroup CSI_core_register Defines and Type Definitions
  101. \brief Type definitions and defines for CK80X processor based devices.
  102. */
  103. /**
  104. \ingroup CSI_core_register
  105. \defgroup CSI_CORE Status and Control Registers
  106. \brief Core Register type definitions.
  107. @{
  108. */
  109. /**
  110. \brief 访问处理器状态寄存器(PSR)的联合体定义.
  111. */
  112. typedef union
  113. {
  114. struct
  115. {
  116. uint32_t C: 1; /*!< bit: 0 条件码/进位位 */
  117. uint32_t _reserved0: 5; /*!< bit: 2.. 5 保留 */
  118. uint32_t IE: 1; /*!< bit: 6 中断有效控制位 */
  119. uint32_t IC: 1; /*!< bit: 7 中断控制位 */
  120. uint32_t EE: 1; /*!< bit: 8 异常有效控制位 */
  121. uint32_t MM: 1; /*!< bit: 9 不对齐异常掩盖位 */
  122. uint32_t _reserved1: 6; /*!< bit: 10..15 保留 */
  123. uint32_t VEC: 8; /*!< bit: 16..23 异常事件向量值 */
  124. uint32_t _reserved2: 7; /*!< bit: 24..30 保留 */
  125. uint32_t S: 1; /*!< bit: 31 超级用户模式设置位 */
  126. } b; /*!< Structure 用来按位访问 */
  127. uint32_t w; /*!< Type 整个寄存器访问 */
  128. } PSR_Type;
  129. /* PSR Register Definitions */
  130. #define PSR_S_Pos 31U /*!< PSR: S Position */
  131. #define PSR_S_Msk (1UL << PSR_S_Pos) /*!< PSR: S Mask */
  132. #define PSR_VEC_Pos 16U /*!< PSR: VEC Position */
  133. #define PSR_VEC_Msk (0x7FUL << PSR_VEC_Pos) /*!< PSR: VEC Mask */
  134. #define PSR_MM_Pos 9U /*!< PSR: MM Position */
  135. #define PSR_MM_Msk (1UL << PSR_MM_Pos) /*!< PSR: MM Mask */
  136. #define PSR_EE_Pos 8U /*!< PSR: EE Position */
  137. #define PSR_EE_Msk (1UL << PSR_EE_Pos) /*!< PSR: EE Mask */
  138. #define PSR_IC_Pos 7U /*!< PSR: IC Position */
  139. #define PSR_IC_Msk (1UL << PSR_IC_Pos) /*!< PSR: IC Mask */
  140. #define PSR_IE_Pos 6U /*!< PSR: IE Position */
  141. #define PSR_IE_Msk (1UL << PSR_IE_Pos) /*!< PSR: IE Mask */
  142. #define PSR_C_Pos 0U /*!< PSR: C Position */
  143. #define PSR_C_Msk (1UL << PSR_C_Pos) /*!< PSR: C Mask */
  144. /**
  145. \brief 访问高速缓存配置寄存器(CCR, CR<18, 0>)的联合体定义.
  146. */
  147. typedef union
  148. {
  149. struct
  150. {
  151. uint32_t MP: 1; /*!< bit: 0 内存保护设置位 */
  152. uint32_t _reserved0: 6; /*!< bit: 1.. 6 保留 */
  153. uint32_t BE: 1; /*!< bit: 7 Endian模式 */
  154. uint32_t SCK: 3; /*!< bit: 8..10 系统和处理器的时钟比 */
  155. uint32_t _reserved1: 2; /*!< bit: 11..12 保留 */
  156. uint32_t BE_V2: 1; /*!< bit: 13 V2版本大小端 */
  157. uint32_t _reserved2: 18; /*!< bit: 14..31 保留 */
  158. } b; /*!< Structure 用来按位访问 */
  159. uint32_t w; /*!< Type 整个寄存器访问 */
  160. } CCR_Type;
  161. /* CCR Register Definitions */
  162. #define CCR_BE_V2_Pos 13U /*!< CCR: BE_V2 Position */
  163. #define CCR_BE_V2_Msk (0x1UL << CCR_ISR_Pos) /*!< CCR: BE_V2 Mask */
  164. #define CCR_SCK_Pos 8U /*!< CCR: SCK Position */
  165. #define CCR_SCK_Msk (0x3UL << CCR_SCK_Pos) /*!< CCR: SCK Mask */
  166. #define CCR_BE_Pos 7U /*!< CCR: BE Position */
  167. #define CCR_BE_Msk (0x1UL << CCR_BE_Pos) /*!< CCR: BE Mask */
  168. #define CCR_MP_Pos 0U /*!< CCR: MP Position */
  169. #define CCR_MP_Msk (0x1UL << CCR_MP_Pos) /*!< CCR: MP Mask */
  170. /**
  171. \brief 访问可高缓和访问权限配置寄存器(CAPR, CR<19,0>)的联合体定义..
  172. */
  173. typedef union
  174. {
  175. struct
  176. {
  177. uint32_t X0: 1; /*!< bit: 0 不可执行属性设置位 */
  178. uint32_t X1: 1; /*!< bit: 1 不可执行属性设置位 */
  179. uint32_t X2: 1; /*!< bit: 2 不可执行属性设置位 */
  180. uint32_t X3: 1; /*!< bit: 3 不可执行属性设置位 */
  181. uint32_t X4: 1; /*!< bit: 4 不可执行属性设置位 */
  182. uint32_t X5: 1; /*!< bit: 5 不可执行属性设置位 */
  183. uint32_t X6: 1; /*!< bit: 6 不可执行属性设置位 */
  184. uint32_t X7: 1; /*!< bit: 7 不可执行属性设置位 */
  185. uint32_t AP0: 2; /*!< bit: 8.. 9 访问权限设置位 */
  186. uint32_t AP1: 2; /*!< bit: 10..11 访问权限设置位 */
  187. uint32_t AP2: 2; /*!< bit: 12..13 访问权限设置位 */
  188. uint32_t AP3: 2; /*!< bit: 14..15 访问权限设置位 */
  189. uint32_t AP4: 2; /*!< bit: 16..17 访问权限设置位 */
  190. uint32_t AP5: 2; /*!< bit: 18..19 访问权限设置位 */
  191. uint32_t AP6: 2; /*!< bit: 20..21 访问权限设置位 */
  192. uint32_t AP7: 2; /*!< bit: 22..23 访问权限设置位 */
  193. uint32_t S0: 1; /*!< bit: 24 安全属性设置位 */
  194. uint32_t S1: 1; /*!< bit: 25 安全属性设置位 */
  195. uint32_t S2: 1; /*!< bit: 26 安全属性设置位 */
  196. uint32_t S3: 1; /*!< bit: 27 安全属性设置位 */
  197. uint32_t S4: 1; /*!< bit: 28 安全属性设置位 */
  198. uint32_t S5: 1; /*!< bit: 29 安全属性设置位 */
  199. uint32_t S6: 1; /*!< bit: 30 安全属性设置位 */
  200. uint32_t S7: 1; /*!< bit: 31 安全属性设置位 */
  201. } b; /*!< Structure 用来按位访问 */
  202. uint32_t w; /*!< Type 整个寄存器访问 */
  203. } CAPR_Type;
  204. /* CAPR Register Definitions */
  205. #define CAPR_S7_Pos 31U /*!< CAPR: S7 Position */
  206. #define CAPR_S7_Msk (1UL << CAPR_S7_Pos) /*!< CAPR: S7 Mask */
  207. #define CAPR_S6_Pos 30U /*!< CAPR: S6 Position */
  208. #define CAPR_S6_Msk (1UL << CAPR_S6_Pos) /*!< CAPR: S6 Mask */
  209. #define CAPR_S5_Pos 29U /*!< CAPR: S5 Position */
  210. #define CAPR_S5_Msk (1UL << CAPR_S5_Pos) /*!< CAPR: S5 Mask */
  211. #define CAPR_S4_Pos 28U /*!< CAPR: S4 Position */
  212. #define CAPR_S4_Msk (1UL << CAPR_S4_Pos) /*!< CAPR: S4 Mask */
  213. #define CAPR_S3_Pos 27U /*!< CAPR: S3 Position */
  214. #define CAPR_S3_Msk (1UL << CAPR_S3_Pos) /*!< CAPR: S3 Mask */
  215. #define CAPR_S2_Pos 26U /*!< CAPR: S2 Position */
  216. #define CAPR_S2_Msk (1UL << CAPR_S2_Pos) /*!< CAPR: S2 Mask */
  217. #define CAPR_S1_Pos 25U /*!< CAPR: S1 Position */
  218. #define CAPR_S1_Msk (1UL << CAPR_S1_Pos) /*!< CAPR: S1 Mask */
  219. #define CAPR_S0_Pos 24U /*!< CAPR: S0 Position */
  220. #define CAPR_S0_Msk (1UL << CAPR_S0_Pos) /*!< CAPR: S0 Mask */
  221. #define CAPR_AP7_Pos 22U /*!< CAPR: AP7 Position */
  222. #define CAPR_AP7_Msk (0x3UL << CAPR_AP7_Pos) /*!< CAPR: AP7 Mask */
  223. #define CAPR_AP6_Pos 20U /*!< CAPR: AP6 Position */
  224. #define CAPR_AP6_Msk (0x3UL << CAPR_AP6_Pos) /*!< CAPR: AP6 Mask */
  225. #define CAPR_AP5_Pos 18U /*!< CAPR: AP5 Position */
  226. #define CAPR_AP5_Msk (0x3UL << CAPR_AP5_Pos) /*!< CAPR: AP5 Mask */
  227. #define CAPR_AP4_Pos 16U /*!< CAPR: AP4 Position */
  228. #define CAPR_AP4_Msk (0x3UL << CAPR_AP4_Pos) /*!< CAPR: AP4 Mask */
  229. #define CAPR_AP3_Pos 14U /*!< CAPR: AP3 Position */
  230. #define CAPR_AP3_Msk (0x3UL << CAPR_AP3_Pos) /*!< CAPR: AP3 Mask */
  231. #define CAPR_AP2_Pos 12U /*!< CAPR: AP2 Position */
  232. #define CAPR_AP2_Msk (0x3UL << CAPR_AP2_Pos) /*!< CAPR: AP2 Mask */
  233. #define CAPR_AP1_Pos 10U /*!< CAPR: AP1 Position */
  234. #define CAPR_AP1_Msk (0x3UL << CAPR_AP1_Pos) /*!< CAPR: AP1 Mask */
  235. #define CAPR_AP0_Pos 8U /*!< CAPR: AP0 Position */
  236. #define CAPR_AP0_Msk (0x3UL << CAPR_AP0_Pos) /*!< CAPR: AP0 Mask */
  237. #define CAPR_X7_Pos 7U /*!< CAPR: X7 Position */
  238. #define CAPR_X7_Msk (0x1UL << CAPR_X7_Pos) /*!< CAPR: X7 Mask */
  239. #define CAPR_X6_Pos 6U /*!< CAPR: X6 Position */
  240. #define CAPR_X6_Msk (0x1UL << CAPR_X6_Pos) /*!< CAPR: X6 Mask */
  241. #define CAPR_X5_Pos 5U /*!< CAPR: X5 Position */
  242. #define CAPR_X5_Msk (0x1UL << CAPR_X5_Pos) /*!< CAPR: X5 Mask */
  243. #define CAPR_X4_Pos 4U /*!< CAPR: X4 Position */
  244. #define CAPR_X4_Msk (0x1UL << CAPR_X4_Pos) /*!< CAPR: X4 Mask */
  245. #define CAPR_X3_Pos 3U /*!< CAPR: X3 Position */
  246. #define CAPR_X3_Msk (0x1UL << CAPR_X3_Pos) /*!< CAPR: X3 Mask */
  247. #define CAPR_X2_Pos 2U /*!< CAPR: X2 Position */
  248. #define CAPR_X2_Msk (0x1UL << CAPR_X2_Pos) /*!< CAPR: X2 Mask */
  249. #define CAPR_X1_Pos 1U /*!< CAPR: X1 Position */
  250. #define CAPR_X1_Msk (0x1UL << CAPR_X1_Pos) /*!< CAPR: X1 Mask */
  251. #define CAPR_X0_Pos 0U /*!< CAPR: X0 Position */
  252. #define CAPR_X0_Msk (0x1UL << CAPR_X0_Pos) /*!< CAPR: X0 Mask */
  253. /**
  254. \brief 访问保护区控制寄存器(PACR, CR<20,0>)的联合体定义.
  255. */
  256. typedef union
  257. {
  258. struct
  259. {
  260. uint32_t E: 1; /*!< bit: 0 保护区有效设置 */
  261. uint32_t Size: 5; /*!< bit: 1.. 5 保护区大小 */
  262. uint32_t _reserved0: 4; /*!< bit: 6.. 9 保留 */
  263. uint32_t base_addr: 22; /*!< bit: 10..31 保护区地址的高位 */
  264. } b; /*!< Structure 用来按位访问 */
  265. uint32_t w; /*!< Type 整个寄存器访问 */
  266. } PACR_Type;
  267. /* PACR Register Definitions */
  268. #define PACR_BASE_ADDR_Pos 10U /*!< PACR: base_addr Position */
  269. #define PACK_BASE_ADDR_Msk (0x3FFFFFUL << PACR_BASE_ADDR_Pos) /*!< PACR: base_addr Mask */
  270. #define PACR_SIZE_Pos 1U /*!< PACR: Size Position */
  271. #define PACK_SIZE_Msk (0x1FUL << PACR_SIZE_Pos) /*!< PACR: Size Mask */
  272. #define PACR_E_Pos 0U /*!< PACR: E Position */
  273. #define PACK_E_Msk (0x1UL << PACR_E_Pos) /*!< PACR: E Mask */
  274. /**
  275. \brief 访问保护区选择寄存器(PRSR,CR<21,0>)的联合体定义.
  276. */
  277. typedef union
  278. {
  279. struct
  280. {
  281. uint32_t RID: 3; /*!< bit: 0.. 2 保护区索引值 */
  282. uint32_t _reserved0: 30; /*!< bit: 3..31 保留 */
  283. } b; /*!< Structure 用来按位访问 */
  284. uint32_t w; /*!< Type 整个寄存器访问 */
  285. } PRSR_Type;
  286. /* PRSR Register Definitions */
  287. #define PRSR_RID_Pos 0U /*!< PRSR: RID Position */
  288. #define PRSR_RID_Msk (0x7UL << PRSR_RID_Pos) /*!< PRSR: RID Mask */
  289. /*@} end of group CSI_CORE */
  290. /**
  291. \ingroup CSI_core_register
  292. \defgroup CSI_NVIC Vectored Interrupt Controller (NVIC)
  293. \brief Type definitions for the NVIC Registers
  294. @{
  295. */
  296. /**
  297. \brief 访问矢量中断控制器的结构体.
  298. */
  299. typedef struct
  300. {
  301. __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) 中断使能设置寄存器 */
  302. uint32_t RESERVED0[15U];
  303. __IOM uint32_t IWER[1U]; /*!< Offset: 0x040 (R/W) 中断低功耗唤醒设置寄存器 */
  304. uint32_t RESERVED1[15U];
  305. __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) 中断使能清除寄存器 */
  306. uint32_t RESERVED2[15U];
  307. __IOM uint32_t IWDR[1U]; /*!< Offset: 0x0c0 (R/W) 中断低功耗唤醒清除寄存器 */
  308. uint32_t RESERVED3[15U];
  309. __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) 中断等待设置寄存器 */
  310. uint32_t RESERVED4[15U];
  311. __IOM uint32_t ISSR[1U]; /*!< Offset: 0x140 (R/W) 安全中断使能设置寄存器 */
  312. uint32_t RESERVED5[15U];
  313. __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) 中断等待清除寄存器 */
  314. uint32_t RESERVED6[31U];
  315. __IOM uint32_t IABR[1U]; /*!< Offset: 0x200 (R/W) 中断响应状态寄存器 */
  316. uint32_t RESERVED7[63U];
  317. __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) 中断优先级设置寄存器 */
  318. uint32_t RESERVED8[504U];
  319. __IM uint32_t ISR; /*!< Offset: 0xB00 (R/ ) 中断状态寄存器 */
  320. __IOM uint32_t IPTR; /*!< Offset: 0xB04 (R/W) 中断优先级阈值寄存器 */
  321. } NVIC_Type;
  322. /*@} end of group CSI_NVIC */
  323. /**
  324. \ingroup CSI_core_register
  325. \defgroup CSI_SysTick System Tick Timer (CORET)
  326. \brief Type definitions for the System Timer Registers.
  327. @{
  328. */
  329. /**
  330. \brief 访问系统计时器的数据结构.
  331. */
  332. typedef struct
  333. {
  334. __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) 控制状态寄存器 */
  335. __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) 回填值寄存器 */
  336. __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) 当前值寄存器 */
  337. __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) 校准寄存器 */
  338. } CORET_Type;
  339. /* CORET Control / Status Register Definitions */
  340. #define CORET_CTRL_COUNTFLAG_Pos 16U /*!< CORET CTRL: COUNTFLAG Position */
  341. #define CORET_CTRL_COUNTFLAG_Msk (1UL << CORET_CTRL_COUNTFLAG_Pos) /*!< CORET CTRL: COUNTFLAG Mask */
  342. #define CORET_CTRL_CLKSOURCE_Pos 2U /*!< CORET CTRL: CLKSOURCE Position */
  343. #define CORET_CTRL_CLKSOURCE_Msk (1UL << CORET_CTRL_CLKSOURCE_Pos) /*!< CORET CTRL: CLKSOURCE Mask */
  344. #define CORET_CTRL_TICKINT_Pos 1U /*!< CORET CTRL: TICKINT Position */
  345. #define CORET_CTRL_TICKINT_Msk (1UL << CORET_CTRL_TICKINT_Pos) /*!< CORET CTRL: TICKINT Mask */
  346. #define CORET_CTRL_ENABLE_Pos 0U /*!< CORET CTRL: ENABLE Position */
  347. #define CORET_CTRL_ENABLE_Msk (1UL /*<< CORET_CTRL_ENABLE_Pos*/) /*!< CORET CTRL: ENABLE Mask */
  348. /* CORET Reload Register Definitions */
  349. #define CORET_LOAD_RELOAD_Pos 0U /*!< CORET LOAD: RELOAD Position */
  350. #define CORET_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< CORET_LOAD_RELOAD_Pos*/) /*!< CORET LOAD: RELOAD Mask */
  351. /* CORET Current Register Definitions */
  352. #define CORET_VAL_CURRENT_Pos 0U /*!< CORET VAL: CURRENT Position */
  353. #define CORET_VAL_CURRENT_Msk (0xFFFFFFUL /*<< CORET_VAL_CURRENT_Pos*/) /*!< CORET VAL: CURRENT Mask */
  354. /* CORET Calibration Register Definitions */
  355. #define CORET_CALIB_NOREF_Pos 31U /*!< CORET CALIB: NOREF Position */
  356. #define CORET_CALIB_NOREF_Msk (1UL << CORET_CALIB_NOREF_Pos) /*!< CORET CALIB: NOREF Mask */
  357. #define CORET_CALIB_SKEW_Pos 30U /*!< CORET CALIB: SKEW Position */
  358. #define CORET_CALIB_SKEW_Msk (1UL << CORET_CALIB_SKEW_Pos) /*!< CORET CALIB: SKEW Mask */
  359. #define CORET_CALIB_TENMS_Pos 0U /*!< CORET CALIB: TENMS Position */
  360. #define CORET_CALIB_TENMS_Msk (0xFFFFFFUL /*<< CORET_CALIB_TENMS_Pos*/) /*!< CORET CALIB: TENMS Mask */
  361. /*@} end of group CSI_SysTick */
  362. /**
  363. \ingroup CSI_core_register
  364. \defgroup CSI_DCC
  365. \brief Type definitions for the DCC.
  366. @{
  367. */
  368. /**
  369. \brief 访问DCC的数据结构.
  370. */
  371. typedef struct
  372. {
  373. uint32_t RESERVED0[13U];
  374. __IOM uint32_t HCR; /*!< Offset: 0x034 (R/W) */
  375. __IM uint32_t EHSR; /*!< Offset: 0x03C (R/ ) */
  376. uint32_t RESERVED1[6U];
  377. union
  378. {
  379. __IM uint32_t DERJW; /*!< Offset: 0x058 (R/ ) 数据交换寄存器 CPU读*/
  380. __OM uint32_t DERJR; /*!< Offset: 0x058 ( /W) 数据交换寄存器 CPU写*/
  381. };
  382. } DCC_Type;
  383. #define DCC_HCR_JW_Pos 18U /*!< DCC HCR: jw_int_en Position */
  384. #define DCC_HCR_JW_Msk (1UL << DCC_HCR_JW_Pos) /*!< DCC HCR: jw_int_en Mask */
  385. #define DCC_HCR_JR_Pos 19U /*!< DCC HCR: jr_int_en Position */
  386. #define DCC_HCR_JR_Msk (1UL << DCC_HCR_JR_Pos) /*!< DCC HCR: jr_int_en Mask */
  387. #define DCC_EHSR_JW_Pos 1U /*!< DCC EHSR: jw_vld Position */
  388. #define DCC_EHSR_JW_Msk (1UL << DCC_EHSR_JW_Pos) /*!< DCC EHSR: jw_vld Mask */
  389. #define DCC_EHSR_JR_Pos 2U /*!< DCC EHSR: jr_vld Position */
  390. #define DCC_EHSR_JR_Msk (1UL << DCC_EHSR_JR_Pos) /*!< DCC EHSR: jr_vld Mask */
  391. /*@} end of group CSI_DCC */
  392. /**
  393. \ingroup CSI_core_register
  394. \defgroup CSI_core_bitfield Core register bit field macros
  395. \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
  396. @{
  397. */
  398. /**
  399. \brief Mask and shift a bit field value for use in a register bit range.
  400. \param[in] field Name of the register bit field.
  401. \param[in] value Value of the bit field.
  402. \return Masked and shifted value.
  403. */
  404. #define _VAL2FLD(field, value) ((value << field ## _Pos) & field ## _Msk)
  405. /**
  406. \brief Mask and shift a register value to extract a bit filed value.
  407. \param[in] field Name of the register bit field.
  408. \param[in] value Value of register.
  409. \return Masked and shifted bit field value.
  410. */
  411. #define _FLD2VAL(field, value) ((value & field ## _Msk) >> field ## _Pos)
  412. /*@} end of group CSI_core_bitfield */
  413. /**
  414. \ingroup CSI_core_register
  415. \defgroup CSI_core_base Core Definitions
  416. \brief Definitions for base addresses, unions, and structures.
  417. @{
  418. */
  419. /* Memory mapping of CK802 Hardware */
  420. #define TCIP_BASE (0xE000E000UL) /*!< Titly Coupled IP Base Address */
  421. #define CORET_BASE (TCIP_BASE + 0x0010UL) /*!< CORET Base Address */
  422. #define NVIC_BASE (TCIP_BASE + 0x0100UL) /*!< NVIC Base Address */
  423. #define DCC_BASE (0xE0011000UL) /*!< DCC Base Address */
  424. #define CORET ((CORET_Type *) CORET_BASE ) /*!< SysTick configuration struct */
  425. #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */
  426. #define DCC ((DCC_Type *) DCC_BASE ) /*!< DCC configuration struct */
  427. /*@} */
  428. #ifdef __cplusplus
  429. }
  430. #endif
  431. #endif /* __CORE_CK802_H_DEPENDANT */
  432. #endif /* __CSI_GENERIC */