]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/T-HEAD_CB2201_CDK/csi/csi_driver/csky/hobbit1_2/include/soc.h
Introduce a port for T-HEAD CK802. A simple demo for T-HEAD CB2201 is also included.
[freertos] / FreeRTOS / Demo / T-HEAD_CB2201_CDK / csi / csi_driver / csky / hobbit1_2 / include / soc.h
1 /*
2  * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**************************************************************************//**
18  * @file     soc.h
19  * @brief    CSI Core Peripheral Access Layer Header File for
20  *           CSKYSOC Device Series
21  * @version  V1.0
22  * @date     02. June 2017
23  ******************************************************************************/
24
25
26 #ifndef SOC_H
27 #define SOC_H
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #ifndef SYSTEM_CLOCK
34 #define  SYSTEM_CLOCK    (24000000)
35 #endif
36
37 #ifndef IHS_VALUE
38 #define  IHS_VALUE    (8000000)
39 #endif
40
41 #ifndef EHS_VALUE
42 #define  EHS_VALUE    (8000000)
43 #endif
44 /* -------------------------  Interrupt Number Definition  ------------------------ */
45
46 typedef enum IRQn
47 {
48     /* ----------------------  CSKYCK801 Specific Interrupt Numbers  --------------------- */
49     GPIOA_IRQn                      =   0,       /* gpio Interrupt */
50     CORET_IRQn                      =   1,      /* core Timer Interrupt */
51     TIMA0_IRQn                      =   2,      /* timerA0 Interrupt */
52     TIMA1_IRQn                      =   3,      /* timerA1 Interrupt */
53     I2S_IRQn                        =   4,      /* i2s Interrupt */
54     WDT_IRQn                        =   5,      /* wdt Interrupt */
55     UART0_IRQn                      =   6,      /* uart0 Interrupt */
56     UART1_IRQn                      =   7,      /* uart1 Interrupt */
57     UART2_IRQn                      =   8,      /* uart2 Interrupt */
58     I2C0_IRQn                       =   9,      /* i2c0 Interrupt */
59     I2C1_IRQn                       =   10,     /* i2c1 Interrupt */
60     SPI1_IRQn                       =   11,     /* spi0 Interrupt */
61     SPI0_IRQn                       =   12,     /* spi1 Interrupt */
62     RTC_IRQn                        =   13,     /* rtc Interrupt */
63     EXTWAK_IRQn                     =   14,     /* extwakeup Interrupt */
64     ADC_IRQn                        =   15,     /* adc interrupt */
65     CMP_IRQn                        =   16,     /* cmp interrupt */
66     SEU_DMAC_IRQn                   =   17,     /* seu dmac Interrupt */
67     POWM_IRQn                       =   18,     /* powm Interrupt */
68     PWM_IRQn                        =   19,     /* pwm Interrupt */
69     SYS_RESET_IRQn                  =   20,     /* system reset Interrupt */
70     REV_IRQn                        =   21,     /* rev Interrupt */
71     NONSEU_DMAC_IRQn                =   22,     /* nonuseu dmac Interrupt */
72     TIMB0_IRQn                      =   23,     /* timerB0 Interrupt */
73     TIMB1_IRQn                      =   24,     /* timerB1 Interrupt */
74     RTC1_IRQn                       =   25,     /* rtc1 Interrupt */
75     AES_IRQn                        =   26,     /* aes Interrupt */
76     GPIOB_IRQn                       =   27,     /* trng Interrupt */
77     RSA_IRQn                        =   28,     /* rsa Interrupt */
78     SHA_IRQn                        =   29,     /* sha Interrupt */
79 }
80 IRQn_Type;
81
82
83 /* ================================================================================ */
84 /* ================      Processor and Core Peripheral Section     ================ */
85 /* ================================================================================ */
86
87 /* --------  Configuration of the CK801 Processor and Core Peripherals  ------- */
88 #define __CK802_REV               0x0000U   /* Core revision r0p0 */
89 #define __MGU_PRESENT             0         /* MGU present or not */
90 #define __NVIC_PRIO_BITS          2         /* Number of Bits used for Priority Levels */
91 #define __Vendor_SysTickConfig    0         /* Set to 1 if different SysTick Config is used */
92
93 #include "core_ck802.h"                     /* Processor and core peripherals */
94 #include "stdint.h"
95
96 typedef enum {
97     CKENUM_DMA_UART0_RX,
98     CKENUM_DMA_UART0_TX,
99     CKENUM_DMA_UART1_RX,
100     CKENUM_DMA_UART1_TX,
101     CKENUM_DMA_ADC_RX,
102     CKENUM_DMA_ADC_TX,
103     CKENUM_DMA_SPI1_RX,
104     CKENUM_DMA_SPI1_TX,
105     CKENUM_DMA_SPI0_RX,
106     CKENUM_DMA_SPI0_TX,
107     CKENUM_DMA_IIC_RX,
108     CKENUM_DMA_IIC_TX,
109     CKENUM_DMA_IIC1_RX,
110     CKENUM_DMA_IIC1_TX,
111     CKENUM_DMA_IIS_RX,
112     CKENUM_DMA_IIS_TX,
113     CKENUM_DMA_MEMORY
114 } ckenum_dma_device_e;
115
116 /* ================================================================================ */
117 /* ================       Device Specific Peripheral Section       ================ */
118 /* ================================================================================ */
119 #if 0
120
121 /* ================================================================================ */
122 /* ============== Universal Asyncronous Receiver / Transmitter (UART) ============= */
123 /* ================================================================================ */
124 typedef struct {
125     union {
126         __IM uint32_t RBR;           /* Offset: 0x000 (R/ )  Receive buffer register */
127         __OM uint32_t THR;           /* Offset: 0x000 ( /W)  Transmission hold register */
128         __IOM uint32_t DLL;          /* Offset: 0x000 (R/W)  Clock frequency division low section register */
129     };
130     union {
131         __IOM uint32_t DLH;          /* Offset: 0x004 (R/W)  Clock frequency division high section register */
132         __IOM uint32_t IER;          /* Offset: 0x004 (R/W)  Interrupt enable register */
133     };
134     __IM uint32_t IIR;             /* Offset: 0x008 (R/ )  Interrupt indicia register */
135     __IOM uint32_t LCR;            /* Offset: 0x00C (R/W)  Transmission control register */
136     __IOM uint32_t MCR;            /* Offset: 0x010 (R/W)  Modem control register */
137     __IM uint32_t LSR;             /* Offset: 0x014 (R/ )  Transmission state register */
138     __IM uint32_t MSR;             /* Offset: 0x018 (R/ )  Modem state register */
139     uint32_t RESERVED1[24];
140     __IM uint32_t USR;             /* Offset: 0x07c (R/ )  UART state register */
141 } CSKY_UART_TypeDef;
142
143
144 /* ================================================================================ */
145 /* ==============            Inter-Integrated Circuit (IIC)           ============= */
146 /* ================================================================================ */
147 typedef struct {
148     __IOM uint32_t IC_CON;                    /* Offset: 0x000 (R/W)  Receive buffer register */
149     __IOM uint32_t IC_TAR;                    /* Offset: 0x004 (R/W)  Transmission hold register */
150     __IOM uint32_t IC_SAR;                    /* Offset: 0x008 (R/W)  Clock frequency division low section register */
151     __IOM uint32_t IC_HS_MADDR;               /* Offset: 0x00c (R/W)  Clock frequency division high section register */
152     __IOM uint32_t IC_DATA_CMD;               /* Offset: 0x010 (R/W)  Interrupt enable register */
153     __IOM uint32_t IC_SS_SCL_HCNT;            /* Offset: 0x014 (R/W)  Interrupt indicia register */
154     __IOM uint32_t IC_SS_SCL_LCNT;            /* Offset: 0x018 (R/W)  Transmission control register */
155     __IOM uint32_t IC_FS_SCL_HCNT;            /* Offset: 0x01c (R/W)  Modem control register */
156     __IOM uint32_t IC_FS_SCL_LCNT;            /* Offset: 0x020 (R/W)  Transmission state register */
157     __IOM uint32_t IC_HS_SCL_HCNT;            /* Offset: 0x024 (R/W)  Transmission state register */
158     __IOM uint32_t IC_HS_SCL_LCNT;            /* Offset: 0x028 (R/W)  Transmission state register */
159     __IOM uint32_t IC_INTR_STAT;              /* Offset: 0x02c (R)  Transmission state register */
160     __IOM uint32_t IC_INTR_MASK;              /* Offset: 0x030 (R/W)  Transmission state register */
161     __IOM uint32_t IC_RAW_INTR_STAT;          /* Offset: 0x034 (R)  Transmission state register */
162     __IOM uint32_t IC_RX_TL;                  /* Offset: 0x038 (R/W)  Transmission state register */
163     __IOM uint32_t IC_TX_TL;                  /* Offset: 0x03c (R/W)  Transmission state register */
164     __IOM uint32_t IC_CLR_INTR;               /* Offset: 0x040 (R)  Transmission state register */
165     __IOM uint32_t IC_CLR_RX_UNDER;           /* Offset: 0x044 (R)  Transmission state register */
166     __IOM uint32_t IC_CLR_RX_OVER;            /* Offset: 0x048 (R)  Transmission state register */
167     __IOM uint32_t IC_CLR_TX_OVER;            /* Offset: 0x04c (R)  Transmission state register */
168     __IOM uint32_t IC_CLR_RD_REQ;             /* Offset: 0x050 (R)  Transmission state register */
169     __IOM uint32_t IC_CLR_TX_ABRT;            /* Offset: 0x054 (R)  Transmission state register */
170     __IOM uint32_t IC_CLR_RX_DONE;            /* Offset: 0x058 (R)  Transmission state register */
171     __IOM uint32_t IC_CLR_ACTIVITY;           /* Offset: 0x05c (R)  Transmission state register */
172     __IOM uint32_t IC_CLR_STOP_DET;           /* Offset: 0x060 (R)  Transmission state register */
173     __IOM uint32_t IC_CLR_START_DET;          /* Offset: 0x064 (R)  Transmission state register */
174     __IOM uint32_t IC_CLR_GEN_CALL;           /* Offset: 0x068 (R)  Transmission state register */
175     __IOM uint32_t IC_ENABLE;                 /* Offset: 0x06c (R/W)  Transmission state register */
176     __IOM uint32_t IC_STATUS;                 /* Offset: 0x070 (R)  Transmission state register */
177     __IOM uint32_t IC_TXFLR;                  /* Offset: 0x074 (R)  Transmission state register */
178     __IOM uint32_t IC_RXFLR;                  /* Offset: 0x078 (R)  Transmission state register */
179     uint32_t RESERVED;                        /* Offset: 0x014 (R/ )  Transmission state register */
180     __IOM uint32_t IC_TX_ABRT_SOURCE;         /* Offset: 0x080 (R/W)  Transmission state register */
181     __IOM uint32_t IC_SAR1;                   /* Offset: 0x084 (R/W)  Transmission state register */
182     __IOM uint32_t IC_DMA_CR;                 /* Offset: 0x088 (R/W)  Transmission state register */
183     __IOM uint32_t IC_DMA_TDLR;               /* Offset: 0x08c (R/W)  Transmission state register */
184     __IOM uint32_t IC_DMA_RDLR;               /* Offset: 0x090 (R/W)  Transmission state register */
185     __IOM uint32_t IC_SAR2;                   /* Offset: 0x094 (R/W)  Transmission state register */
186     __IOM uint32_t IC_SAR3;                   /* Offset: 0x098 (R/W)  Transmission state register */
187     __IOM uint32_t IC_MULTI_SLAVE;            /* Offset: 0x09c (R/W)  Transmission state register */
188     __IOM uint32_t IC_GEN_CALL_EN;            /* Offset: 0x0a0 (R/W)  Transmission state register */
189
190 } CSKY_IIC_TypeDef;
191
192
193 /* ================================================================================ */
194 /* ==============                          TIMER                      ============= */
195 /* ================================================================================ */
196 typedef struct {
197     __IOM uint32_t TxLoadCount;               /* Offset: 0x000 (R/W)  Receive buffer register */
198     __IOM uint32_t TxCurrentValue;            /* Offset: 0x004 (R)  Transmission hold register */
199     __IOM uint32_t TxControl;                 /* Offset: 0x008 (R/W)  Clock frequency division low section register */
200     __IOM uint32_t TxEOI;                     /* Offset: 0x00c (R)  Clock frequency division high section register */
201     __IOM uint32_t TxIntStatus;               /* Offset: 0x010 (R)  Interrupt enable register */
202
203 } CSKY_TIMER_TypeDef;
204
205 /* ================================================================================ */
206 /* ==============                    TIMER  Control                   ============= */
207 /* ================================================================================ */
208 typedef struct {
209     __IOM uint32_t TimersIntStatus;            /* Offset: 0x000 (R)  Interrupt indicia register */
210     __IOM uint32_t TimerEOI;                   /* Offset: 0x004 (R)  Transmission control register */
211     __IOM uint32_t TimerRawIntStatus;          /* Offset: 0x008 (R)  Modem control register */
212
213 } CSKY_TIMER_Control_TypeDef;
214
215
216 /* ================================================================================ */
217 /* ==============                        GPIO                         ============= */
218 /* ================================================================================ */
219 typedef struct {
220     __IOM uint32_t SWPORT_DR;                 /* Offset: 0x000 (R/W)  Interrupt indicia register */
221     __IOM uint32_t SWPORT_DDR;                /* Offset: 0x004 (R/W)  Interrupt indicia register */
222     __IOM uint32_t PORT_CTL;                  /* Offset: 0x008 (R/W)  Interrupt indicia register */
223 } CKStruct_GPIO, *PCKStruct_GPIO;
224
225 typedef struct {
226     __IOM uint32_t SHA_CON;                     /* Offset: 0x000 (R/W)  Control register */
227     __IOM uint32_t SHA_INTSTATE;                /* Offset: 0x004 (R/W)  Instatus register */
228     __IOM uint32_t SHA_H0L;                     /* Offset: 0x008 (R/W)  H0L register */
229     __IOM uint32_t SHA_H1L;                     /* Offset: 0x00c (R/W)  H1L register */
230     __IOM uint32_t SHA_H2L;                     /* Offset: 0x010 (R/W)  H2L register */
231     __IOM uint32_t SHA_H3L;                     /* Offset: 0x014 (R/W)  H3L register */
232     __IOM uint32_t SHA_H4L;                     /* Offset: 0x018 (R/W)  H4L register */
233     __IOM uint32_t SHA_H5L;                     /* Offset: 0x01c (R/W)  H5L register */
234     __IOM uint32_t SHA_H6L;                     /* Offset: 0x020 (R/W)  H6L register */
235     __IOM uint32_t SHA_H7L;                     /* Offset: 0x024 (R/W)  H7L register */
236     __IOM uint32_t SHA_H0H;                     /* Offset: 0x028 (R/W)  H0H register */
237     __IOM uint32_t SHA_H1H;                     /* Offset: 0x02c (R/W)  H1H register */
238     __IOM uint32_t SHA_H2H;                     /* Offset: 0x030 (R/W)  H2H register */
239     __IOM uint32_t SHA_H3H;                     /* Offset: 0x034 (R/W)  H3H register */
240     __IOM uint32_t SHA_H4H;                     /* Offset: 0x038 (R/W)  H4H register */
241     __IOM uint32_t SHA_H5H;                     /* Offset: 0x03c (R/W)  H5H register */
242     __IOM uint32_t SHA_H6H;                     /* Offset: 0x040 (R/W)  H6H register */
243     __IOM uint32_t SHA_H7H;                     /* Offset: 0x044 (R/W)  H7H register */
244     __IOM uint32_t SHA_DATA1;                   /* Offset: 0x048 (R/W)  DATA1 register */
245     uint32_t REV[15];
246     __IOM uint32_t SHA_DATA2;                   /* Offset: 0x088 (R/W)  DATA2 register */
247 } CSKY_SHA_TypeDef;
248
249
250 #endif
251
252 #define CONFIG_PMU_NUM  1
253 #define CONFIG_CRC_NUM  1
254 #define CONFIG_EFLASH_NUM  1
255 #define CONFIG_IIC_NUM  2
256 #define CONFIG_TRNG_NUM 1
257 #define CONFIG_AES_NUM  1
258 #define CONFIG_RSA_NUM  1
259 #define CONFIG_SHA_NUM  1
260 #define CONFIG_SPI_NUM  2
261 #define CONFIG_PWM_NUM  6
262 #define CONFIG_TIMER_NUM 4
263 #define CONFIG_RTC_NUM 2
264 #define CONFIG_WDT_NUM 1
265 #define CONFIG_DMAC_NUM 2
266 #define CONFIG_GPIO_NUM            2
267 #define CONFIG_GPIO_PIN_NUM        32
268 #define CONFIG_USART_NUM 3
269 #define CONFIG_ETH_NUM 2
270
271 /* ================================================================================ */
272 /* ================              Peripheral memory map             ================ */
273 /* ================================================================================ */
274 /* --------------------------  CHIP memory map  ------------------------------- */
275 #define CSKY_EFLASH_BASE           (0x10000000UL)
276 #define CSKY_SRAM_BASE             (0x60000000UL)
277
278 /* AHB */
279 #define CSKY_AHB_ARB_BASE          (0x40000000UL)
280 #define CSKY_DMAC0_BASE            (0x40001000UL)
281 #define CSKY_CLKGEN_BASE           (0x40002000UL)
282 #define CSKY_CRC_BASE              (0x40003000UL)
283 #define CSKY_DMAC1_BASE            (0x40004000UL)
284 #define CSKY_OTP_BASE              (0x4003F000UL)
285 #define CSKY_AES_BASE              (0x40006000UL)
286 #define CSKY_SRAM_SASC_BASE        (0x40007000UL)
287 #define CSKY_SHA_BASE              (0x40008000UL)
288 #define CSKY_TRNG_BASE             (0x40009000UL)
289 #define CSKY_RSA_BASE              (0x4000a000UL)
290 #define CSKY_EFLASH_CONTROL_BASE   (0x4003f000UL)
291 #define CSKY_APB0_BRIDGE_BASE      (0x50000000UL)
292 #define CSKY_APB1_BRIDGE_BASE      (0x50010000UL)
293
294 /* APB0 */
295 #define CSKY_WDT_BASE              (0x50001000UL)
296 #define CSKY_SPI0_BASE             (0x50002000UL)
297 #define CSKY_RTC0_BASE             (0x50003000UL)
298 #define CSKY_UART0_BASE            (0x50004000UL)
299 #define CSKY_UART1_BASE            (0x50005000UL)
300 #define CSKY_GPIO0_BASE            (0x50006000UL)
301 #define CSKY_I2C0_BASE             (0x50007000UL)
302 #define CSKY_I2S_BASE              (0x50008000UL)
303 #define CSKY_GPIO1_BASE            (0x50009000UL)
304 #define CSKY_SIPC_BASE             (0x5000a000UL)
305
306 /* APB1 */
307 #define CSKY_TIM0_BASE             (0x50011000UL)
308 #define CSKY_SPI1_BASE             (0x50012000UL)
309 #define CSKY_I2C1_BASE             (0x50013000UL)
310 #define CSKY_PWM_BASE              (0x50014000UL)
311 #define CSKY_UART2_BASE            (0x50015000UL)
312 #define CSKY_ADC_CTL_BASE          (0x50016000UL)
313 #define CSKY_CMP_CTL_BASE          (0x50017000UL)
314 #define CSKY_ETB_BASE              (0x50018000UL)
315 #define CSKY_TIM1_BASE             (0x50019000UL)
316 #define CSKY_RTC1_BASE             (0x5001a000UL)
317
318 #define SHA_CONTEXT_SIZE       224
319
320 /* ================================================================================ */
321 /* ================             Peripheral declaration             ================ */
322 /* ================================================================================ */
323 #define CSKY_UART1                 ((   CSKY_UART_TypeDef *)    CSKY_UART1_BASE)
324 #define CSKY_SHA                   ((   CSKY_SHA_TypeDef *)     CSKY_SHA_BASE)
325
326 #include <config.h>
327
328
329 #ifdef __cplusplus
330 }
331 #endif
332
333 #endif  /* SOC_H */