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