xref: /nrf52832-nimble/rt-thread/libcpu/c-sky/ck802/core_ck802.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * File      : core_ck802.h
3*10465441SEvalZero  * This file is part of RT-Thread RTOS
4*10465441SEvalZero  * COPYRIGHT (C) 2006 - 2017, RT-Thread Development Team
5*10465441SEvalZero  *
6*10465441SEvalZero  *  This program is free software; you can redistribute it and/or modify
7*10465441SEvalZero  *  it under the terms of the GNU General Public License as published by
8*10465441SEvalZero  *  the Free Software Foundation; either version 2 of the License, or
9*10465441SEvalZero  *  (at your option) any later version.
10*10465441SEvalZero  *
11*10465441SEvalZero  *  This program is distributed in the hope that it will be useful,
12*10465441SEvalZero  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*10465441SEvalZero  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*10465441SEvalZero  *  GNU General Public License for more details.
15*10465441SEvalZero  *
16*10465441SEvalZero  *  You should have received a copy of the GNU General Public License along
17*10465441SEvalZero  *  with this program; if not, write to the Free Software Foundation, Inc.,
18*10465441SEvalZero  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*10465441SEvalZero  *
20*10465441SEvalZero  * Change Logs:
21*10465441SEvalZero  * Date           Author       Notes
22*10465441SEvalZero  * 2017-01-01     Urey      first version
23*10465441SEvalZero  */
24*10465441SEvalZero 
25*10465441SEvalZero #ifndef __CORE_CK802_H_GENERIC
26*10465441SEvalZero #define __CORE_CK802_H_GENERIC
27*10465441SEvalZero 
28*10465441SEvalZero #include <stdint.h>
29*10465441SEvalZero 
30*10465441SEvalZero #ifdef __cplusplus
31*10465441SEvalZero extern "C" {
32*10465441SEvalZero #endif
33*10465441SEvalZero 
34*10465441SEvalZero /*******************************************************************************
35*10465441SEvalZero  *                 CSI definitions
36*10465441SEvalZero  ******************************************************************************/
37*10465441SEvalZero /**
38*10465441SEvalZero   \ingroup Ck802
39*10465441SEvalZero   @{
40*10465441SEvalZero  */
41*10465441SEvalZero 
42*10465441SEvalZero /*  CSI CK802 definitions */
43*10465441SEvalZero #define __CK802_CSI_VERSION_MAIN  (0x04U)                                      /*!< [31:16] CSI HAL main version */
44*10465441SEvalZero #define __CK802_CSI_VERSION_SUB   (0x1EU)                                      /*!< [15:0]  CSI HAL sub version */
45*10465441SEvalZero #define __CK802_CSI_VERSION       ((__CK802_CSI_VERSION_MAIN << 16U) | \
46*10465441SEvalZero                                    __CK802_CSI_VERSION_SUB           )        /*!< CSI HAL version number */
47*10465441SEvalZero 
48*10465441SEvalZero #define __CK80X                (0x02U)                                         /*!< CK80X Core */
49*10465441SEvalZero 
50*10465441SEvalZero /** __FPU_USED indicates whether an FPU is used or not.
51*10465441SEvalZero     This core does not support an FPU at all
52*10465441SEvalZero */
53*10465441SEvalZero #define __FPU_USED       0U
54*10465441SEvalZero 
55*10465441SEvalZero #if defined ( __GNUC__ )
56*10465441SEvalZero #if defined (__VFP_FP__) && !defined(__SOFTFP__)
57*10465441SEvalZero #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
58*10465441SEvalZero #endif
59*10465441SEvalZero #endif
60*10465441SEvalZero 
61*10465441SEvalZero #include "csi_gcc.h"
62*10465441SEvalZero 
63*10465441SEvalZero #ifdef __cplusplus
64*10465441SEvalZero }
65*10465441SEvalZero #endif
66*10465441SEvalZero 
67*10465441SEvalZero #endif /* __CORE_CK802_H_GENERIC */
68*10465441SEvalZero 
69*10465441SEvalZero #ifndef __CSI_GENERIC
70*10465441SEvalZero 
71*10465441SEvalZero #ifndef __CORE_CK802_H_DEPENDANT
72*10465441SEvalZero #define __CORE_CK802_H_DEPENDANT
73*10465441SEvalZero 
74*10465441SEvalZero #ifdef __cplusplus
75*10465441SEvalZero extern "C" {
76*10465441SEvalZero #endif
77*10465441SEvalZero 
78*10465441SEvalZero /* check device defines and use defaults */
79*10465441SEvalZero //#if defined __CHECK_DEVICE_DEFINES
80*10465441SEvalZero #ifndef __CK802_REV
81*10465441SEvalZero #define __CK802_REV               0x0000U
82*10465441SEvalZero //#warning "__CK802_REV not defined in device header file; using default!"
83*10465441SEvalZero #endif
84*10465441SEvalZero 
85*10465441SEvalZero #ifndef __NVIC_PRIO_BITS
86*10465441SEvalZero #define __NVIC_PRIO_BITS          2U
87*10465441SEvalZero //#warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
88*10465441SEvalZero #endif
89*10465441SEvalZero 
90*10465441SEvalZero #ifndef __Vendor_SysTickConfig
91*10465441SEvalZero #define __Vendor_SysTickConfig    0U
92*10465441SEvalZero //#warning "__Vendor_SysTickConfig not defined in device header file; using default!"
93*10465441SEvalZero #endif
94*10465441SEvalZero 
95*10465441SEvalZero #ifndef __GSR_GCR_PRESENT
96*10465441SEvalZero #define __GSR_GCR_PRESENT         0U
97*10465441SEvalZero //#warning "__GSR_GCR_PRESENT not defined in device header file; using default!"
98*10465441SEvalZero #endif
99*10465441SEvalZero 
100*10465441SEvalZero #ifndef __MGU_PRESENT
101*10465441SEvalZero #define __MGU_PRESENT             0U
102*10465441SEvalZero //#warning "__MGU_PRESENT not defined in device header file; using default!"
103*10465441SEvalZero #endif
104*10465441SEvalZero //#endif
105*10465441SEvalZero 
106*10465441SEvalZero /* IO definitions (access restrictions to peripheral registers) */
107*10465441SEvalZero /**
108*10465441SEvalZero     \defgroup CSI_glob_defs CSI Global Defines
109*10465441SEvalZero 
110*10465441SEvalZero     <strong>IO Type Qualifiers</strong> are used
111*10465441SEvalZero     \li to specify the access to peripheral variables.
112*10465441SEvalZero     \li for automatic generation of peripheral register debug information.
113*10465441SEvalZero */
114*10465441SEvalZero #ifdef __cplusplus
115*10465441SEvalZero #define   __I     volatile             /*!< Defines 'read only' permissions */
116*10465441SEvalZero #else
117*10465441SEvalZero #define   __I     volatile const       /*!< Defines 'read only' permissions */
118*10465441SEvalZero #endif
119*10465441SEvalZero #define     __O     volatile             /*!< Defines 'write only' permissions */
120*10465441SEvalZero #define     __IO    volatile             /*!< Defines 'read / write' permissions */
121*10465441SEvalZero 
122*10465441SEvalZero /* following defines should be used for structure members */
123*10465441SEvalZero #define     __IM     volatile const      /*! Defines 'read only' structure member permissions */
124*10465441SEvalZero #define     __OM     volatile            /*! Defines 'write only' structure member permissions */
125*10465441SEvalZero #define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
126*10465441SEvalZero 
127*10465441SEvalZero /*@} end of group CK802 */
128*10465441SEvalZero 
129*10465441SEvalZero /*******************************************************************************
130*10465441SEvalZero  *                 Register Abstraction
131*10465441SEvalZero   Core Register contain:
132*10465441SEvalZero   - Core Register
133*10465441SEvalZero   - Core NVIC Register
134*10465441SEvalZero   - Core SCB Register
135*10465441SEvalZero   - Core SysTick Register
136*10465441SEvalZero  ******************************************************************************/
137*10465441SEvalZero /**
138*10465441SEvalZero   \defgroup CSI_core_register Defines and Type Definitions
139*10465441SEvalZero   \brief Type definitions and defines for CK80X processor based devices.
140*10465441SEvalZero */
141*10465441SEvalZero 
142*10465441SEvalZero /**
143*10465441SEvalZero   \ingroup    CSI_core_register
144*10465441SEvalZero   \defgroup   CSI_CORE  Status and Control Registers
145*10465441SEvalZero   \brief      Core Register type definitions.
146*10465441SEvalZero   @{
147*10465441SEvalZero  */
148*10465441SEvalZero 
149*10465441SEvalZero /**
150*10465441SEvalZero   \brief  ���ʴ�����״̬�Ĵ���(PSR)�������嶨��.
151*10465441SEvalZero  */
152*10465441SEvalZero typedef union
153*10465441SEvalZero {
154*10465441SEvalZero     struct
155*10465441SEvalZero     {
156*10465441SEvalZero         uint32_t C: 1;                       /*!< bit:      0  �����룯��λλ */
157*10465441SEvalZero         uint32_t _reserved0: 5;              /*!< bit:  2.. 5  ���� */
158*10465441SEvalZero         uint32_t IE: 1;                      /*!< bit:      6  �ж���Ч����λ */
159*10465441SEvalZero         uint32_t IC: 1;                      /*!< bit:      7  �жϿ���λ */
160*10465441SEvalZero         uint32_t EE: 1;                      /*!< bit:      8  �쳣��Ч����λ */
161*10465441SEvalZero         uint32_t MM: 1;                      /*!< bit:      9  �������쳣�ڸ�λ */
162*10465441SEvalZero         uint32_t _reserved1: 6;              /*!< bit: 10..15  ���� */
163*10465441SEvalZero         uint32_t VEC: 8;                     /*!< bit: 16..23  �쳣�¼�����ֵ */
164*10465441SEvalZero         uint32_t _reserved2: 7;              /*!< bit: 24..30  ���� */
165*10465441SEvalZero         uint32_t S: 1;                       /*!< bit:     31  �����û�ģʽ����λ */
166*10465441SEvalZero     } b;                                   /*!< Structure    ������λ���� */
167*10465441SEvalZero     uint32_t w;                            /*!< Type         �����Ĵ������� */
168*10465441SEvalZero } PSR_Type;
169*10465441SEvalZero 
170*10465441SEvalZero /* PSR Register Definitions */
171*10465441SEvalZero #define PSR_S_Pos                          31U                                            /*!< PSR: S Position */
172*10465441SEvalZero #define PSR_S_Msk                          (1UL << PSR_S_Pos)                             /*!< PSR: S Mask */
173*10465441SEvalZero 
174*10465441SEvalZero #define PSR_VEC_Pos                        16U                                            /*!< PSR: VEC Position */
175*10465441SEvalZero #define PSR_VEC_Msk                        (0x7FUL << PSR_VEC_Pos)                        /*!< PSR: VEC Mask */
176*10465441SEvalZero 
177*10465441SEvalZero #define PSR_MM_Pos                         9U                                             /*!< PSR: MM Position */
178*10465441SEvalZero #define PSR_MM_Msk                         (1UL << PSR_MM_Pos)                            /*!< PSR: MM Mask */
179*10465441SEvalZero 
180*10465441SEvalZero #define PSR_EE_Pos                         8U                                             /*!< PSR: EE Position */
181*10465441SEvalZero #define PSR_EE_Msk                         (1UL << PSR_EE_Pos)                            /*!< PSR: EE Mask */
182*10465441SEvalZero 
183*10465441SEvalZero #define PSR_IC_Pos                         7U                                             /*!< PSR: IC Position */
184*10465441SEvalZero #define PSR_IC_Msk                         (1UL << PSR_IC_Pos)                            /*!< PSR: IC Mask */
185*10465441SEvalZero 
186*10465441SEvalZero #define PSR_IE_Pos                         6U                                             /*!< PSR: IE Position */
187*10465441SEvalZero #define PSR_IE_Msk                         (1UL << PSR_IE_Pos)                            /*!< PSR: IE Mask */
188*10465441SEvalZero 
189*10465441SEvalZero #define PSR_C_Pos                          0U                                             /*!< PSR: C Position */
190*10465441SEvalZero #define PSR_C_Msk                          (1UL << PSR_C_Pos)                             /*!< PSR: C Mask */
191*10465441SEvalZero 
192*10465441SEvalZero /**
193*10465441SEvalZero   \brief  ���ʸ��ٻ������üĴ���(CCR, CR<18, 0>)�������嶨��.
194*10465441SEvalZero  */
195*10465441SEvalZero typedef union
196*10465441SEvalZero {
197*10465441SEvalZero     struct
198*10465441SEvalZero     {
199*10465441SEvalZero         uint32_t MP: 1;                      /*!< bit:      0  �ڴ汣������λ */
200*10465441SEvalZero         uint32_t _reserved0: 6;              /*!< bit:  1.. 6  ���� */
201*10465441SEvalZero         uint32_t BE: 1;                      /*!< bit:      7  Endianģʽ */
202*10465441SEvalZero         uint32_t SCK: 3;                     /*!< bit:  8..10  ϵͳ�ʹ�������ʱ�ӱ� */
203*10465441SEvalZero         uint32_t _reserved1: 2;              /*!< bit: 11..12  ���� */
204*10465441SEvalZero         uint32_t BE_V2: 1;                   /*!< bit:     13  V2�汾��С�� */
205*10465441SEvalZero         uint32_t _reserved2: 18;             /*!< bit: 14..31  ���� */
206*10465441SEvalZero     } b;                                   /*!< Structure    ������λ���� */
207*10465441SEvalZero     uint32_t w;                            /*!< Type         �����Ĵ������� */
208*10465441SEvalZero } CCR_Type;
209*10465441SEvalZero 
210*10465441SEvalZero /* CCR Register Definitions */
211*10465441SEvalZero #define CCR_BE_V2_Pos                     13U                                            /*!< CCR: BE_V2 Position */
212*10465441SEvalZero #define CCR_BE_V2_Msk                     (0x1UL << CCR_ISR_Pos)                         /*!< CCR: BE_V2 Mask */
213*10465441SEvalZero 
214*10465441SEvalZero #define CCR_SCK_Pos                       8U                                             /*!< CCR: SCK Position */
215*10465441SEvalZero #define CCR_SCK_Msk                       (0x3UL << CCR_SCK_Pos)                         /*!< CCR: SCK Mask */
216*10465441SEvalZero 
217*10465441SEvalZero #define CCR_BE_Pos                        7U                                             /*!< CCR: BE Position */
218*10465441SEvalZero #define CCR_BE_Msk                        (0x1UL << CCR_BE_Pos)                          /*!< CCR: BE Mask */
219*10465441SEvalZero 
220*10465441SEvalZero #define CCR_MP_Pos                        0U                                             /*!< CCR: MP Position */
221*10465441SEvalZero #define CCR_MP_Msk                        (0x1UL << CCR_MP_Pos)                          /*!< CCR: MP Mask */
222*10465441SEvalZero 
223*10465441SEvalZero /**
224*10465441SEvalZero   \brief  ���ʿɸ߻��ͷ���Ȩ�����üĴ���(CAPR, CR<19,0>)�������嶨��..
225*10465441SEvalZero  */
226*10465441SEvalZero typedef union
227*10465441SEvalZero {
228*10465441SEvalZero     struct
229*10465441SEvalZero     {
230*10465441SEvalZero         uint32_t X0: 1;                      /*!< bit:      0  ����ִ����������λ */
231*10465441SEvalZero         uint32_t X1: 1;                      /*!< bit:      1  ����ִ����������λ */
232*10465441SEvalZero         uint32_t X2: 1;                      /*!< bit:      2  ����ִ����������λ */
233*10465441SEvalZero         uint32_t X3: 1;                      /*!< bit:      3  ����ִ����������λ */
234*10465441SEvalZero         uint32_t X4: 1;                      /*!< bit:      4  ����ִ����������λ */
235*10465441SEvalZero         uint32_t X5: 1;                      /*!< bit:      5  ����ִ����������λ */
236*10465441SEvalZero         uint32_t X6: 1;                      /*!< bit:      6  ����ִ����������λ */
237*10465441SEvalZero         uint32_t X7: 1;                      /*!< bit:      7  ����ִ����������λ */
238*10465441SEvalZero         uint32_t AP0: 2;                     /*!< bit:  8.. 9  ����Ȩ������λ */
239*10465441SEvalZero         uint32_t AP1: 2;                     /*!< bit: 10..11  ����Ȩ������λ */
240*10465441SEvalZero         uint32_t AP2: 2;                     /*!< bit: 12..13  ����Ȩ������λ */
241*10465441SEvalZero         uint32_t AP3: 2;                     /*!< bit: 14..15  ����Ȩ������λ */
242*10465441SEvalZero         uint32_t AP4: 2;                     /*!< bit: 16..17  ����Ȩ������λ */
243*10465441SEvalZero         uint32_t AP5: 2;                     /*!< bit: 18..19  ����Ȩ������λ */
244*10465441SEvalZero         uint32_t AP6: 2;                     /*!< bit: 20..21  ����Ȩ������λ */
245*10465441SEvalZero         uint32_t AP7: 2;                     /*!< bit: 22..23  ����Ȩ������λ */
246*10465441SEvalZero         uint32_t S0: 1;                      /*!< bit:     24  ��ȫ��������λ */
247*10465441SEvalZero         uint32_t S1: 1;                      /*!< bit:     25  ��ȫ��������λ */
248*10465441SEvalZero         uint32_t S2: 1;                      /*!< bit:     26  ��ȫ��������λ */
249*10465441SEvalZero         uint32_t S3: 1;                      /*!< bit:     27  ��ȫ��������λ */
250*10465441SEvalZero         uint32_t S4: 1;                      /*!< bit:     28  ��ȫ��������λ */
251*10465441SEvalZero         uint32_t S5: 1;                      /*!< bit:     29  ��ȫ��������λ */
252*10465441SEvalZero         uint32_t S6: 1;                      /*!< bit:     30  ��ȫ��������λ */
253*10465441SEvalZero         uint32_t S7: 1;                      /*!< bit:     31  ��ȫ��������λ */
254*10465441SEvalZero     } b;                                   /*!< Structure    ������λ���� */
255*10465441SEvalZero     uint32_t w;                            /*!< Type         �����Ĵ������� */
256*10465441SEvalZero } CAPR_Type;
257*10465441SEvalZero 
258*10465441SEvalZero /* CAPR Register Definitions */
259*10465441SEvalZero #define CAPR_S7_Pos                        31U                                            /*!< CAPR: S7 Position */
260*10465441SEvalZero #define CAPR_S7_Msk                        (1UL << CAPR_S7_Pos)                           /*!< CAPR: S7 Mask */
261*10465441SEvalZero 
262*10465441SEvalZero #define CAPR_S6_Pos                        30U                                            /*!< CAPR: S6 Position */
263*10465441SEvalZero #define CAPR_S6_Msk                        (1UL << CAPR_S6_Pos)                           /*!< CAPR: S6 Mask */
264*10465441SEvalZero 
265*10465441SEvalZero #define CAPR_S5_Pos                        29U                                            /*!< CAPR: S5 Position */
266*10465441SEvalZero #define CAPR_S5_Msk                        (1UL << CAPR_S5_Pos)                           /*!< CAPR: S5 Mask */
267*10465441SEvalZero 
268*10465441SEvalZero #define CAPR_S4_Pos                        28U                                            /*!< CAPR: S4 Position */
269*10465441SEvalZero #define CAPR_S4_Msk                        (1UL << CAPR_S4_Pos)                           /*!< CAPR: S4 Mask */
270*10465441SEvalZero 
271*10465441SEvalZero #define CAPR_S3_Pos                        27U                                            /*!< CAPR: S3 Position */
272*10465441SEvalZero #define CAPR_S3_Msk                        (1UL << CAPR_S3_Pos)                           /*!< CAPR: S3 Mask */
273*10465441SEvalZero 
274*10465441SEvalZero #define CAPR_S2_Pos                        26U                                            /*!< CAPR: S2 Position */
275*10465441SEvalZero #define CAPR_S2_Msk                        (1UL << CAPR_S2_Pos)                           /*!< CAPR: S2 Mask */
276*10465441SEvalZero 
277*10465441SEvalZero #define CAPR_S1_Pos                        25U                                            /*!< CAPR: S1 Position */
278*10465441SEvalZero #define CAPR_S1_Msk                        (1UL << CAPR_S1_Pos)                           /*!< CAPR: S1 Mask */
279*10465441SEvalZero 
280*10465441SEvalZero #define CAPR_S0_Pos                        24U                                            /*!< CAPR: S0 Position */
281*10465441SEvalZero #define CAPR_S0_Msk                        (1UL << CAPR_S0_Pos)                           /*!< CAPR: S0 Mask */
282*10465441SEvalZero 
283*10465441SEvalZero #define CAPR_AP7_Pos                       22U                                            /*!< CAPR: AP7 Position */
284*10465441SEvalZero #define CAPR_AP7_Msk                       (0x3UL << CAPR_AP7_Pos)                        /*!< CAPR: AP7 Mask */
285*10465441SEvalZero 
286*10465441SEvalZero #define CAPR_AP6_Pos                       20U                                            /*!< CAPR: AP6 Position */
287*10465441SEvalZero #define CAPR_AP6_Msk                       (0x3UL << CAPR_AP6_Pos)                        /*!< CAPR: AP6 Mask */
288*10465441SEvalZero 
289*10465441SEvalZero #define CAPR_AP5_Pos                       18U                                            /*!< CAPR: AP5 Position */
290*10465441SEvalZero #define CAPR_AP5_Msk                       (0x3UL << CAPR_AP5_Pos)                        /*!< CAPR: AP5 Mask */
291*10465441SEvalZero 
292*10465441SEvalZero #define CAPR_AP4_Pos                       16U                                            /*!< CAPR: AP4 Position */
293*10465441SEvalZero #define CAPR_AP4_Msk                       (0x3UL << CAPR_AP4_Pos)                        /*!< CAPR: AP4 Mask */
294*10465441SEvalZero 
295*10465441SEvalZero #define CAPR_AP3_Pos                       14U                                            /*!< CAPR: AP3 Position */
296*10465441SEvalZero #define CAPR_AP3_Msk                       (0x3UL << CAPR_AP3_Pos)                        /*!< CAPR: AP3 Mask */
297*10465441SEvalZero 
298*10465441SEvalZero #define CAPR_AP2_Pos                       12U                                            /*!< CAPR: AP2 Position */
299*10465441SEvalZero #define CAPR_AP2_Msk                       (0x3UL << CAPR_AP2_Pos)                        /*!< CAPR: AP2 Mask */
300*10465441SEvalZero 
301*10465441SEvalZero #define CAPR_AP1_Pos                       10U                                            /*!< CAPR: AP1 Position */
302*10465441SEvalZero #define CAPR_AP1_Msk                       (0x3UL << CAPR_AP1_Pos)                        /*!< CAPR: AP1 Mask */
303*10465441SEvalZero 
304*10465441SEvalZero #define CAPR_AP0_Pos                       8U                                             /*!< CAPR: AP0 Position */
305*10465441SEvalZero #define CAPR_AP0_Msk                       (0x3UL << CAPR_AP0_Pos)                        /*!< CAPR: AP0 Mask */
306*10465441SEvalZero 
307*10465441SEvalZero #define CAPR_X7_Pos                        7U                                             /*!< CAPR: X7 Position */
308*10465441SEvalZero #define CAPR_X7_Msk                        (0x1UL << CAPR_X7_Pos)                         /*!< CAPR: X7 Mask */
309*10465441SEvalZero 
310*10465441SEvalZero #define CAPR_X6_Pos                        6U                                             /*!< CAPR: X6 Position */
311*10465441SEvalZero #define CAPR_X6_Msk                        (0x1UL << CAPR_X6_Pos)                         /*!< CAPR: X6 Mask */
312*10465441SEvalZero 
313*10465441SEvalZero #define CAPR_X5_Pos                        5U                                             /*!< CAPR: X5 Position */
314*10465441SEvalZero #define CAPR_X5_Msk                        (0x1UL << CAPR_X5_Pos)                         /*!< CAPR: X5 Mask */
315*10465441SEvalZero 
316*10465441SEvalZero #define CAPR_X4_Pos                        4U                                             /*!< CAPR: X4 Position */
317*10465441SEvalZero #define CAPR_X4_Msk                        (0x1UL << CAPR_X4_Pos)                         /*!< CAPR: X4 Mask */
318*10465441SEvalZero 
319*10465441SEvalZero #define CAPR_X3_Pos                        3U                                             /*!< CAPR: X3 Position */
320*10465441SEvalZero #define CAPR_X3_Msk                        (0x1UL << CAPR_X3_Pos)                         /*!< CAPR: X3 Mask */
321*10465441SEvalZero 
322*10465441SEvalZero #define CAPR_X2_Pos                        2U                                             /*!< CAPR: X2 Position */
323*10465441SEvalZero #define CAPR_X2_Msk                        (0x1UL << CAPR_X2_Pos)                         /*!< CAPR: X2 Mask */
324*10465441SEvalZero 
325*10465441SEvalZero #define CAPR_X1_Pos                        1U                                             /*!< CAPR: X1 Position */
326*10465441SEvalZero #define CAPR_X1_Msk                        (0x1UL << CAPR_X1_Pos)                         /*!< CAPR: X1 Mask */
327*10465441SEvalZero 
328*10465441SEvalZero #define CAPR_X0_Pos                        0U                                             /*!< CAPR: X0 Position */
329*10465441SEvalZero #define CAPR_X0_Msk                        (0x1UL << CAPR_X0_Pos)                         /*!< CAPR: X0 Mask */
330*10465441SEvalZero 
331*10465441SEvalZero /**
332*10465441SEvalZero   \brief  ���ʱ��������ƼĴ���(PACR, CR<20,0>)�������嶨��.
333*10465441SEvalZero  */
334*10465441SEvalZero typedef union
335*10465441SEvalZero {
336*10465441SEvalZero     struct
337*10465441SEvalZero     {
338*10465441SEvalZero         uint32_t E: 1;                       /*!< bit:      0  ��������Ч���� */
339*10465441SEvalZero         uint32_t Size: 5;                    /*!< bit:  1.. 5  ��������С */
340*10465441SEvalZero         uint32_t _reserved0: 4;              /*!< bit:  6.. 9  ���� */
341*10465441SEvalZero         uint32_t base_addr: 22;              /*!< bit: 10..31  ��������ַ�ĸ�λ */
342*10465441SEvalZero     } b;                                   /*!< Structure    ������λ���� */
343*10465441SEvalZero     uint32_t w;                            /*!< Type         �����Ĵ������� */
344*10465441SEvalZero } PACR_Type;
345*10465441SEvalZero 
346*10465441SEvalZero /* PACR Register Definitions */
347*10465441SEvalZero #define PACR_BASE_ADDR_Pos                 10U                                            /*!< PACR: base_addr Position */
348*10465441SEvalZero #define PACK_BASE_ADDR_Msk                 (0x3FFFFFUL << PACR_BASE_ADDR_Pos)             /*!< PACR: base_addr Mask */
349*10465441SEvalZero 
350*10465441SEvalZero #define PACR_SIZE_Pos                      1U                                             /*!< PACR: Size Position */
351*10465441SEvalZero #define PACK_SIZE_Msk                      (0x1FUL << PACR_SIZE_Pos)                      /*!< PACR: Size Mask */
352*10465441SEvalZero 
353*10465441SEvalZero #define PACR_E_Pos                         0U                                             /*!< PACR: E Position */
354*10465441SEvalZero #define PACK_E_Msk                         (0x1UL << PACR_E_Pos)                          /*!< PACR: E Mask */
355*10465441SEvalZero 
356*10465441SEvalZero /**
357*10465441SEvalZero   \brief  ���ʱ�����ѡ��Ĵ���(PRSR,CR<21,0>)�������嶨��.
358*10465441SEvalZero  */
359*10465441SEvalZero typedef union
360*10465441SEvalZero {
361*10465441SEvalZero     struct
362*10465441SEvalZero     {
363*10465441SEvalZero         uint32_t RID: 3;                     /*!< bit:  0.. 2  ����������ֵ */
364*10465441SEvalZero         uint32_t _reserved0: 30;             /*!< bit:  3..31  ���� */
365*10465441SEvalZero     } b;                                   /*!< Structure    ������λ���� */
366*10465441SEvalZero     uint32_t w;                            /*!< Type         �����Ĵ������� */
367*10465441SEvalZero } PRSR_Type;
368*10465441SEvalZero 
369*10465441SEvalZero /* PRSR Register Definitions */
370*10465441SEvalZero #define PRSR_RID_Pos                       0U                                            /*!< PRSR: RID Position */
371*10465441SEvalZero #define PRSR_RID_Msk                       (0x7UL << PRSR_RID_Pos)                       /*!< PRSR: RID Mask */
372*10465441SEvalZero 
373*10465441SEvalZero /*@} end of group CSI_CORE */
374*10465441SEvalZero 
375*10465441SEvalZero 
376*10465441SEvalZero /**
377*10465441SEvalZero   \ingroup    CSI_core_register
378*10465441SEvalZero   \defgroup   CSI_NVIC Vectored Interrupt Controller (NVIC)
379*10465441SEvalZero   \brief      Type definitions for the NVIC Registers
380*10465441SEvalZero   @{
381*10465441SEvalZero  */
382*10465441SEvalZero 
383*10465441SEvalZero /**
384*10465441SEvalZero   \brief ����ʸ���жϿ������Ľṹ��.
385*10465441SEvalZero  */
386*10465441SEvalZero typedef struct
387*10465441SEvalZero {
388*10465441SEvalZero     __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  �ж�ʹ�����üĴ��� */
389*10465441SEvalZero     uint32_t RESERVED0[15U];
390*10465441SEvalZero     __IOM uint32_t IWER[1U];               /*!< Offset: 0x040 (R/W)  �жϵ͹��Ļ������üĴ��� */
391*10465441SEvalZero     uint32_t RESERVED1[15U];
392*10465441SEvalZero     __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  �ж�ʹ������Ĵ��� */
393*10465441SEvalZero     uint32_t RESERVED2[15U];
394*10465441SEvalZero     __IOM uint32_t IWDR[1U];               /*!< Offset: 0x0c0 (R/W)  �жϵ͹��Ļ�������Ĵ��� */
395*10465441SEvalZero     uint32_t RESERVED3[15U];
396*10465441SEvalZero     __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  �жϵȴ����üĴ��� */
397*10465441SEvalZero     uint32_t RESERVED4[15U];
398*10465441SEvalZero     __IOM uint32_t ISSR[1U];               /*!< Offset: 0x140 (R/W)  ��ȫ�ж�ʹ�����üĴ��� */
399*10465441SEvalZero     uint32_t RESERVED5[15U];
400*10465441SEvalZero     __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  �жϵȴ�����Ĵ��� */
401*10465441SEvalZero     uint32_t RESERVED6[31U];
402*10465441SEvalZero     __IOM uint32_t IABR[1U];               /*!< Offset: 0x200 (R/W)  �ж���Ӧ״̬�Ĵ��� */
403*10465441SEvalZero     uint32_t RESERVED7[63U];
404*10465441SEvalZero     __IOM uint32_t IPR[8U];                /*!< Offset: 0x300 (R/W)  �ж����ȼ����üĴ��� */
405*10465441SEvalZero     uint32_t RESERVED8[504U];
406*10465441SEvalZero     __IM  uint32_t ISR;                    /*!< Offset: 0xB00 (R/ )  �ж�״̬�Ĵ��� */
407*10465441SEvalZero     __IOM uint32_t IPTR;                   /*!< Offset: 0xB04 (R/W)  �ж����ȼ���ֵ�Ĵ��� */
408*10465441SEvalZero } NVIC_Type;
409*10465441SEvalZero 
410*10465441SEvalZero /*@} end of group CSI_NVIC */
411*10465441SEvalZero 
412*10465441SEvalZero /**
413*10465441SEvalZero   \ingroup  CSI_core_register
414*10465441SEvalZero   \defgroup CSI_SysTick     System Tick Timer (CORET)
415*10465441SEvalZero   \brief    Type definitions for the System Timer Registers.
416*10465441SEvalZero   @{
417*10465441SEvalZero  */
418*10465441SEvalZero 
419*10465441SEvalZero /**
420*10465441SEvalZero   \brief  ����ϵͳ��ʱ�������ݽṹ.
421*10465441SEvalZero  */
422*10465441SEvalZero typedef struct
423*10465441SEvalZero {
424*10465441SEvalZero     __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  ����״̬�Ĵ��� */
425*10465441SEvalZero     __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  ����ֵ�Ĵ��� */
426*10465441SEvalZero     __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  ��ǰֵ�Ĵ��� */
427*10465441SEvalZero     __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  У׼�Ĵ��� */
428*10465441SEvalZero } CORET_Type;
429*10465441SEvalZero 
430*10465441SEvalZero /* CORET Control / Status Register Definitions */
431*10465441SEvalZero #define CORET_CTRL_COUNTFLAG_Pos           16U                                            /*!< CORET CTRL: COUNTFLAG Position */
432*10465441SEvalZero #define CORET_CTRL_COUNTFLAG_Msk           (1UL << CORET_CTRL_COUNTFLAG_Pos)              /*!< CORET CTRL: COUNTFLAG Mask */
433*10465441SEvalZero 
434*10465441SEvalZero #define CORET_CTRL_CLKSOURCE_Pos            2U                                            /*!< CORET CTRL: CLKSOURCE Position */
435*10465441SEvalZero #define CORET_CTRL_CLKSOURCE_Msk           (1UL << CORET_CTRL_CLKSOURCE_Pos)              /*!< CORET CTRL: CLKSOURCE Mask */
436*10465441SEvalZero 
437*10465441SEvalZero #define CORET_CTRL_TICKINT_Pos              1U                                            /*!< CORET CTRL: TICKINT Position */
438*10465441SEvalZero #define CORET_CTRL_TICKINT_Msk             (1UL << CORET_CTRL_TICKINT_Pos)                /*!< CORET CTRL: TICKINT Mask */
439*10465441SEvalZero 
440*10465441SEvalZero #define CORET_CTRL_ENABLE_Pos               0U                                            /*!< CORET CTRL: ENABLE Position */
441*10465441SEvalZero #define CORET_CTRL_ENABLE_Msk              (1UL /*<< CORET_CTRL_ENABLE_Pos*/)             /*!< CORET CTRL: ENABLE Mask */
442*10465441SEvalZero 
443*10465441SEvalZero /* CORET Reload Register Definitions */
444*10465441SEvalZero #define CORET_LOAD_RELOAD_Pos               0U                                            /*!< CORET LOAD: RELOAD Position */
445*10465441SEvalZero #define CORET_LOAD_RELOAD_Msk              (0xFFFFFFUL /*<< CORET_LOAD_RELOAD_Pos*/)      /*!< CORET LOAD: RELOAD Mask */
446*10465441SEvalZero 
447*10465441SEvalZero /* CORET Current Register Definitions */
448*10465441SEvalZero #define CORET_VAL_CURRENT_Pos               0U                                            /*!< CORET VAL: CURRENT Position */
449*10465441SEvalZero #define CORET_VAL_CURRENT_Msk              (0xFFFFFFUL /*<< CORET_VAL_CURRENT_Pos*/)      /*!< CORET VAL: CURRENT Mask */
450*10465441SEvalZero 
451*10465441SEvalZero /* CORET Calibration Register Definitions */
452*10465441SEvalZero #define CORET_CALIB_NOREF_Pos               31U                                           /*!< CORET CALIB: NOREF Position */
453*10465441SEvalZero #define CORET_CALIB_NOREF_Msk              (1UL << CORET_CALIB_NOREF_Pos)                 /*!< CORET CALIB: NOREF Mask */
454*10465441SEvalZero 
455*10465441SEvalZero #define CORET_CALIB_SKEW_Pos                30U                                           /*!< CORET CALIB: SKEW Position */
456*10465441SEvalZero #define CORET_CALIB_SKEW_Msk               (1UL << CORET_CALIB_SKEW_Pos)                  /*!< CORET CALIB: SKEW Mask */
457*10465441SEvalZero 
458*10465441SEvalZero #define CORET_CALIB_TENMS_Pos               0U                                            /*!< CORET CALIB: TENMS Position */
459*10465441SEvalZero #define CORET_CALIB_TENMS_Msk              (0xFFFFFFUL /*<< CORET_CALIB_TENMS_Pos*/)      /*!< CORET CALIB: TENMS Mask */
460*10465441SEvalZero 
461*10465441SEvalZero /*@} end of group CSI_SysTick */
462*10465441SEvalZero 
463*10465441SEvalZero /**
464*10465441SEvalZero   \ingroup  CSI_core_register
465*10465441SEvalZero   \defgroup CSI_DCC
466*10465441SEvalZero   \brief    Type definitions for the DCC.
467*10465441SEvalZero   @{
468*10465441SEvalZero  */
469*10465441SEvalZero 
470*10465441SEvalZero /**
471*10465441SEvalZero   \brief  ����DCC�����ݽṹ.
472*10465441SEvalZero  */
473*10465441SEvalZero typedef struct
474*10465441SEvalZero {
475*10465441SEvalZero     uint32_t RESERVED0[13U];
476*10465441SEvalZero     __IOM uint32_t HCR;                    /*!< Offset: 0x034 (R/W) */
477*10465441SEvalZero     __IM uint32_t EHSR;                    /*!< Offset: 0x03C (R/ ) */
478*10465441SEvalZero     uint32_t RESERVED1[6U];
479*10465441SEvalZero     union
480*10465441SEvalZero     {
481*10465441SEvalZero         __IM uint32_t DERJW;                 /*!< Offset: 0x058 (R/ )  ���ݽ����Ĵ��� CPU��*/
482*10465441SEvalZero         __OM uint32_t DERJR;                 /*!< Offset: 0x058 ( /W)  ���ݽ����Ĵ��� CPUд*/
483*10465441SEvalZero     };
484*10465441SEvalZero 
485*10465441SEvalZero } DCC_Type;
486*10465441SEvalZero 
487*10465441SEvalZero #define DCC_HCR_JW_Pos                   18U                                            /*!< DCC HCR: jw_int_en Position */
488*10465441SEvalZero #define DCC_HCR_JW_Msk                   (1UL << DCC_HCR_JW_Pos)                        /*!< DCC HCR: jw_int_en Mask */
489*10465441SEvalZero 
490*10465441SEvalZero #define DCC_HCR_JR_Pos                   19U                                            /*!< DCC HCR: jr_int_en Position */
491*10465441SEvalZero #define DCC_HCR_JR_Msk                   (1UL << DCC_HCR_JR_Pos)                        /*!< DCC HCR: jr_int_en Mask */
492*10465441SEvalZero 
493*10465441SEvalZero #define DCC_EHSR_JW_Pos                  1U                                             /*!< DCC EHSR: jw_vld Position */
494*10465441SEvalZero #define DCC_EHSR_JW_Msk                  (1UL << DCC_EHSR_JW_Pos)                       /*!< DCC EHSR: jw_vld Mask */
495*10465441SEvalZero 
496*10465441SEvalZero #define DCC_EHSR_JR_Pos                  2U                                             /*!< DCC EHSR: jr_vld Position */
497*10465441SEvalZero #define DCC_EHSR_JR_Msk                  (1UL << DCC_EHSR_JR_Pos)                       /*!< DCC EHSR: jr_vld Mask */
498*10465441SEvalZero 
499*10465441SEvalZero /*@} end of group CSI_DCC */
500*10465441SEvalZero 
501*10465441SEvalZero 
502*10465441SEvalZero /**
503*10465441SEvalZero   \ingroup    CSI_core_register
504*10465441SEvalZero   \defgroup   CSI_core_bitfield     Core register bit field macros
505*10465441SEvalZero   \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
506*10465441SEvalZero   @{
507*10465441SEvalZero  */
508*10465441SEvalZero 
509*10465441SEvalZero /**
510*10465441SEvalZero   \brief   Mask and shift a bit field value for use in a register bit range.
511*10465441SEvalZero   \param[in] field  Name of the register bit field.
512*10465441SEvalZero   \param[in] value  Value of the bit field.
513*10465441SEvalZero   \return           Masked and shifted value.
514*10465441SEvalZero */
515*10465441SEvalZero #define _VAL2FLD(field, value)    ((value << field ## _Pos) & field ## _Msk)
516*10465441SEvalZero 
517*10465441SEvalZero /**
518*10465441SEvalZero   \brief     Mask and shift a register value to extract a bit filed value.
519*10465441SEvalZero   \param[in] field  Name of the register bit field.
520*10465441SEvalZero   \param[in] value  Value of register.
521*10465441SEvalZero   \return           Masked and shifted bit field value.
522*10465441SEvalZero */
523*10465441SEvalZero #define _FLD2VAL(field, value)    ((value & field ## _Msk) >> field ## _Pos)
524*10465441SEvalZero 
525*10465441SEvalZero /*@} end of group CSI_core_bitfield */
526*10465441SEvalZero 
527*10465441SEvalZero /**
528*10465441SEvalZero   \ingroup    CSI_core_register
529*10465441SEvalZero   \defgroup   CSI_core_base     Core Definitions
530*10465441SEvalZero   \brief      Definitions for base addresses, unions, and structures.
531*10465441SEvalZero   @{
532*10465441SEvalZero  */
533*10465441SEvalZero 
534*10465441SEvalZero /* Memory mapping of CK802 Hardware */
535*10465441SEvalZero #define TCIP_BASE           (0xE000E000UL)                            /*!< Titly Coupled IP Base Address */
536*10465441SEvalZero #define CORET_BASE          (TCIP_BASE +  0x0010UL)                   /*!< CORET Base Address */
537*10465441SEvalZero #define NVIC_BASE           (TCIP_BASE +  0x0100UL)                   /*!< NVIC Base Address */
538*10465441SEvalZero #define DCC_BASE            (0xE0011000UL)                            /*!< DCC Base Address */
539*10465441SEvalZero 
540*10465441SEvalZero #define CORET               ((CORET_Type   *)     CORET_BASE  )       /*!< SysTick configuration struct */
541*10465441SEvalZero #define NVIC                ((NVIC_Type    *)     NVIC_BASE   )       /*!< NVIC configuration struct */
542*10465441SEvalZero #define DCC                 ((DCC_Type     *)     DCC_BASE    )       /*!< DCC configuration struct */
543*10465441SEvalZero 
544*10465441SEvalZero /*@} */
545*10465441SEvalZero 
546*10465441SEvalZero #ifdef __cplusplus
547*10465441SEvalZero }
548*10465441SEvalZero #endif
549*10465441SEvalZero 
550*10465441SEvalZero #endif /* __CORE_CK802_H_DEPENDANT */
551*10465441SEvalZero 
552*10465441SEvalZero #endif /* __CSI_GENERIC */
553