]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e16.h
Starting point for the SAMD20 demo.
[freertos] / FreeRTOS / Demo / CORTEX_M0+_Atmel_SAMD20_XPlained / RTOSDemo / src / ASF / sam0 / utils / cmsis / samd20 / include / samd20e16.h
1 /**\r
2  * \file\r
3  *\r
4  * \brief Header file for SAMD20E16\r
5  *\r
6  * Copyright (c) 2013 Atmel Corporation. All rights reserved.\r
7  *\r
8  * \asf_license_start\r
9  *\r
10  * \page License\r
11  *\r
12  * Redistribution and use in source and binary forms, with or without\r
13  * modification, are permitted provided that the following conditions are met:\r
14  *\r
15  * 1. Redistributions of source code must retain the above copyright notice,\r
16  *    this list of conditions and the following disclaimer.\r
17  *\r
18  * 2. Redistributions in binary form must reproduce the above copyright notice,\r
19  *    this list of conditions and the following disclaimer in the documentation\r
20  *    and/or other materials provided with the distribution.\r
21  *\r
22  * 3. The name of Atmel may not be used to endorse or promote products derived\r
23  *    from this software without specific prior written permission.\r
24  *\r
25  * 4. This software may only be redistributed and used in connection with an\r
26  *    Atmel microcontroller product.\r
27  *\r
28  * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED\r
29  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
30  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
31  * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR\r
32  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
36  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r
37  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
38  * POSSIBILITY OF SUCH DAMAGE.\r
39  *\r
40  * \asf_license_stop\r
41  *\r
42  */\r
43 \r
44 #ifndef _SAMD20E16_\r
45 #define _SAMD20E16_\r
46 \r
47 /**\r
48  * \ingroup SAMD20_definitions\r
49  * \addtogroup SAMD20E16_definitions SAMD20E16 definitions\r
50  * This file defines all structures and symbols for SAMD20E16:\r
51  *   - registers and bitfields\r
52  *   - peripheral base address\r
53  *   - peripheral ID\r
54  *   - PIO definitions\r
55 */\r
56 /*@{*/\r
57 \r
58 #ifdef __cplusplus\r
59  extern "C" {\r
60 #endif\r
61 \r
62 #if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))\r
63 #include <stdint.h>\r
64 #ifndef __cplusplus\r
65 typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */\r
66 typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */\r
67 typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */\r
68 #else\r
69 typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */\r
70 typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */\r
71 typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */\r
72 #endif\r
73 typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */\r
74 typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */\r
75 typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */\r
76 typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */\r
77 typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */\r
78 typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */\r
79 #define CAST(type, value) ((type *)(value))\r
80 #define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */\r
81 #else\r
82 #define CAST(type, value) (value)\r
83 #define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */\r
84 #endif\r
85 \r
86 /* ************************************************************************** */\r
87 /**  CMSIS DEFINITIONS FOR SAMD20E16 */\r
88 /* ************************************************************************** */\r
89 /** \defgroup SAMD20E16_cmsis CMSIS Definitions */\r
90 /*@{*/\r
91 \r
92 /** Interrupt Number Definition */\r
93 typedef enum IRQn\r
94 {\r
95   /******  Cortex-M0+ Processor Exceptions Numbers *******************************/\r
96   NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */\r
97   HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */\r
98   SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */\r
99   PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */\r
100   SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */\r
101   /******  SAMD20E16-specific Interrupt Numbers ***********************/\r
102   PM_IRQn                  =  0, /**<  0 SAMD20E16 Power Manager (PM) */\r
103   SYSCTRL_IRQn             =  1, /**<  1 SAMD20E16 System Control (SYSCTRL) */\r
104   WDT_IRQn                 =  2, /**<  2 SAMD20E16 Watchdog Timer (WDT) */\r
105   RTC_IRQn                 =  3, /**<  3 SAMD20E16 Real-Time Counter (RTC) */\r
106   EIC_IRQn                 =  4, /**<  4 SAMD20E16 External Interrupt Controller (EIC) */\r
107   NVMCTRL_IRQn             =  5, /**<  5 SAMD20E16 Non-Volatile Memory Controller (NVMCTRL) */\r
108   EVSYS_IRQn               =  6, /**<  6 SAMD20E16 Event System Interface (EVSYS) */\r
109   SERCOM0_IRQn             =  7, /**<  7 SAMD20E16 Serial Communication Interface 0 (SERCOM0) */\r
110   SERCOM1_IRQn             =  8, /**<  8 SAMD20E16 Serial Communication Interface 1 (SERCOM1) */\r
111   SERCOM2_IRQn             =  9, /**<  9 SAMD20E16 Serial Communication Interface 2 (SERCOM2) */\r
112   SERCOM3_IRQn             = 10, /**< 10 SAMD20E16 Serial Communication Interface 3 (SERCOM3) */\r
113   TC0_IRQn                 = 13, /**< 13 SAMD20E16 Basic Timer Counter 0 (TC0) */\r
114   TC1_IRQn                 = 14, /**< 14 SAMD20E16 Basic Timer Counter 1 (TC1) */\r
115   TC2_IRQn                 = 15, /**< 15 SAMD20E16 Basic Timer Counter 2 (TC2) */\r
116   TC3_IRQn                 = 16, /**< 16 SAMD20E16 Basic Timer Counter 3 (TC3) */\r
117   TC4_IRQn                 = 17, /**< 17 SAMD20E16 Basic Timer Counter 4 (TC4) */\r
118   TC5_IRQn                 = 18, /**< 18 SAMD20E16 Basic Timer Counter 5 (TC5) */\r
119   ADC_IRQn                 = 21, /**< 21 SAMD20E16 Analog Digital Converter (ADC) */\r
120   AC_IRQn                  = 22, /**< 22 SAMD20E16 Analog Comparators (AC) */\r
121   DAC_IRQn                 = 23, /**< 23 SAMD20E16 Digital Analog Converter (DAC) */\r
122 \r
123   PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */\r
124 } IRQn_Type;\r
125 \r
126 typedef struct _DeviceVectors\r
127 {\r
128   /* Stack pointer */\r
129   void* pvStack;\r
130 \r
131   /* Cortex-M handlers */\r
132   void* pfnReset_Handler;\r
133   void* pfnNMI_Handler;\r
134   void* pfnHardFault_Handler;\r
135   void* pfnReservedM12;\r
136   void* pfnReservedM11;\r
137   void* pfnReservedM10;\r
138   void* pfnReservedM9;\r
139   void* pfnReservedM8;\r
140   void* pfnReservedM7;\r
141   void* pfnReservedM6;\r
142   void* pfnSVC_Handler;\r
143   void* pfnReservedM4;\r
144   void* pfnReservedM3;\r
145   void* pfnPendSV_Handler;\r
146   void* pfnSysTick_Handler;\r
147 \r
148   /* Peripheral handlers */\r
149   void* pfnPM_Handler;                    /*  0 Power Manager */\r
150   void* pfnSYSCTRL_Handler;               /*  1 System Control */\r
151   void* pfnWDT_Handler;                   /*  2 Watchdog Timer */\r
152   void* pfnRTC_Handler;                   /*  3 Real-Time Counter */\r
153   void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */\r
154   void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */\r
155   void* pfnEVSYS_Handler;                 /*  6 Event System Interface */\r
156   void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */\r
157   void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */\r
158   void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */\r
159   void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */\r
160   void* pfnReserved11;\r
161   void* pfnReserved12;\r
162   void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */\r
163   void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */\r
164   void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */\r
165   void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */\r
166   void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */\r
167   void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */\r
168   void* pfnReserved19;\r
169   void* pfnReserved20;\r
170   void* pfnADC_Handler;                   /* 21 Analog Digital Converter */\r
171   void* pfnAC_Handler;                    /* 22 Analog Comparators */\r
172   void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */\r
173 } DeviceVectors;\r
174 \r
175 /* Cortex-M0+ processor handlers */\r
176 void Reset_Handler               ( void );\r
177 void NMI_Handler                 ( void );\r
178 void HardFault_Handler           ( void );\r
179 void SVC_Handler                 ( void );\r
180 void PendSV_Handler              ( void );\r
181 void SysTick_Handler             ( void );\r
182 \r
183 /* Peripherals handlers */\r
184 void PM_Handler                  ( void );\r
185 void SYSCTRL_Handler             ( void );\r
186 void WDT_Handler                 ( void );\r
187 void RTC_Handler                 ( void );\r
188 void EIC_Handler                 ( void );\r
189 void NVMCTRL_Handler             ( void );\r
190 void EVSYS_Handler               ( void );\r
191 void SERCOM0_Handler             ( void );\r
192 void SERCOM1_Handler             ( void );\r
193 void SERCOM2_Handler             ( void );\r
194 void SERCOM3_Handler             ( void );\r
195 void TC0_Handler                 ( void );\r
196 void TC1_Handler                 ( void );\r
197 void TC2_Handler                 ( void );\r
198 void TC3_Handler                 ( void );\r
199 void TC4_Handler                 ( void );\r
200 void TC5_Handler                 ( void );\r
201 void ADC_Handler                 ( void );\r
202 void AC_Handler                  ( void );\r
203 void DAC_Handler                 ( void );\r
204 \r
205 /*\r
206  * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals\r
207  */\r
208 \r
209 #define LITTLE_ENDIAN          1        \r
210 #define __CM0PLUS_REV          1         /*!< Core revision r0p1 */\r
211 #define __MPU_PRESENT          0         /*!< MPU present or not */\r
212 #define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */\r
213 #define __VTOR_PRESENT         1         /*!< VTOR present or not */\r
214 #define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */\r
215 \r
216 /**\r
217  * \brief CMSIS includes\r
218  */\r
219 \r
220 #include <core_cm0plus.h>\r
221 #if !defined DONT_USE_CMSIS_INIT\r
222 #include "system_samd20.h"\r
223 #endif /* DONT_USE_CMSIS_INIT */\r
224 \r
225 /*@}*/\r
226 \r
227 /* ************************************************************************** */\r
228 /**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20E16 */\r
229 /* ************************************************************************** */\r
230 /** \defgroup SAMD20E16_api Peripheral Software API */\r
231 /*@{*/\r
232 \r
233 #include "component/component_ac.h"\r
234 #include "component/component_adc.h"\r
235 #include "component/component_dac.h"\r
236 #include "component/component_dsu.h"\r
237 #include "component/component_eic.h"\r
238 #include "component/component_evsys.h"\r
239 #include "component/component_gclk.h"\r
240 #include "component/component_nvmctrl.h"\r
241 #include "component/component_pac.h"\r
242 #include "component/component_pm.h"\r
243 #include "component/component_port.h"\r
244 #include "component/component_rtc.h"\r
245 #include "component/component_sercom.h"\r
246 #include "component/component_sysctrl.h"\r
247 #include "component/component_tc.h"\r
248 #include "component/component_wdt.h"\r
249 /*@}*/\r
250 \r
251 /* ************************************************************************** */\r
252 /**  REGISTERS ACCESS DEFINITIONS FOR SAMD20E16 */\r
253 /* ************************************************************************** */\r
254 /** \defgroup SAMD20E16_reg Registers Access Definitions */\r
255 /*@{*/\r
256 \r
257 #include "instance/instance_ac.h"\r
258 #include "instance/instance_adc.h"\r
259 #include "instance/instance_dac.h"\r
260 #include "instance/instance_dsu.h"\r
261 #include "instance/instance_eic.h"\r
262 #include "instance/instance_evsys.h"\r
263 #include "instance/instance_gclk.h"\r
264 #include "instance/instance_nvmctrl.h"\r
265 #include "instance/instance_pac0.h"\r
266 #include "instance/instance_pac1.h"\r
267 #include "instance/instance_pac2.h"\r
268 #include "instance/instance_pm.h"\r
269 #include "instance/instance_port.h"\r
270 #include "instance/instance_rtc.h"\r
271 #include "instance/instance_sercom0.h"\r
272 #include "instance/instance_sercom1.h"\r
273 #include "instance/instance_sercom2.h"\r
274 #include "instance/instance_sercom3.h"\r
275 #include "instance/instance_sysctrl.h"\r
276 #include "instance/instance_tc0.h"\r
277 #include "instance/instance_tc1.h"\r
278 #include "instance/instance_tc2.h"\r
279 #include "instance/instance_tc3.h"\r
280 #include "instance/instance_tc4.h"\r
281 #include "instance/instance_tc5.h"\r
282 #include "instance/instance_wdt.h"\r
283 /*@}*/\r
284 \r
285 /* ************************************************************************** */\r
286 /**  PERIPHERAL ID DEFINITIONS FOR SAMD20E16 */\r
287 /* ************************************************************************** */\r
288 /** \defgroup SAMD20E16_id Peripheral Ids Definitions */\r
289 /*@{*/\r
290 \r
291 // Peripheral instances on HPB0 bridge\r
292 #define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */\r
293 #define ID_PM             1 /**< \brief Power Manager (PM) */\r
294 #define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */\r
295 #define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */\r
296 #define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */\r
297 #define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */\r
298 #define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */\r
299 \r
300 // Peripheral instances on HPB1 bridge\r
301 #define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */\r
302 #define ID_DSU           33 /**< \brief Device Service Unit (DSU) */\r
303 #define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */\r
304 #define ID_PORT          35 /**< \brief Port Module (PORT) */\r
305 \r
306 // Peripheral instances on HPB2 bridge\r
307 #define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */\r
308 #define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */\r
309 #define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */\r
310 #define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */\r
311 #define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */\r
312 #define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */\r
313 #define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */\r
314 #define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */\r
315 #define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */\r
316 #define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */\r
317 #define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */\r
318 #define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */\r
319 #define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */\r
320 #define ID_AC            81 /**< \brief Analog Comparators (AC) */\r
321 #define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */\r
322 \r
323 #define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */\r
324 /*@}*/\r
325 \r
326 /* ************************************************************************** */\r
327 /**  BASE ADDRESS DEFINITIONS FOR SAMD20E16 */\r
328 /* ************************************************************************** */\r
329 /** \defgroup SAMD20E16_base Peripheral Base Address Definitions */\r
330 /*@{*/\r
331 \r
332 #if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)\r
333 #define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */\r
334 #define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */\r
335 #define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */\r
336 #define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */\r
337 #define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */\r
338 #define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */\r
339 #define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */\r
340 #define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */\r
341 #define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */\r
342 #define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */\r
343 #define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */\r
344 #define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */\r
345 #define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */\r
346 #define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */\r
347 #define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */\r
348 #define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */\r
349 #define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */\r
350 #define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */\r
351 #define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */\r
352 #define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */\r
353 #define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */\r
354 #define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */\r
355 #define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */\r
356 #define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */\r
357 #define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */\r
358 #define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */\r
359 #define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */\r
360 #define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */\r
361 #define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */\r
362 #define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */\r
363 #define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */\r
364 #define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */\r
365 #define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */\r
366 #else\r
367 #define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */\r
368 #define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */\r
369 #define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */\r
370 \r
371 #define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */\r
372 #define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */\r
373 #define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */\r
374 \r
375 #define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */\r
376 #define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */\r
377 #define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */\r
378 \r
379 #define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */\r
380 #define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */\r
381 #define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */\r
382 \r
383 #define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */\r
384 #define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */\r
385 #define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */\r
386 \r
387 #define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */\r
388 #define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */\r
389 #define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */\r
390 \r
391 #define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */\r
392 #define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */\r
393 #define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */\r
394 \r
395 #define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */\r
396 #define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */\r
397 #define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */\r
398 #define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */\r
399 #define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */\r
400 #define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */\r
401 #define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */\r
402 #define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */\r
403 #define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */\r
404 \r
405 #define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */\r
406 #define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */\r
407 #define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */\r
408 #define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */\r
409 #define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */\r
410 \r
411 #define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */\r
412 #define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */\r
413 #define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */\r
414 \r
415 #define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */\r
416 #define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */\r
417 #define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */\r
418 #define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */\r
419 \r
420 #define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */\r
421 #define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */\r
422 #define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */\r
423 \r
424 #define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */\r
425 #define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */\r
426 #define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */\r
427 #define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */\r
428 #define SERCOM_INST_NUM   4                         /**< \brief (SERCOM) Number of instances */\r
429 #define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3 } /**< \brief (SERCOM) Instances List */\r
430 \r
431 #define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */\r
432 #define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */\r
433 #define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */\r
434 \r
435 #define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */\r
436 #define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */\r
437 #define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */\r
438 #define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */\r
439 #define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */\r
440 #define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */\r
441 #define TC_INST_NUM       6                         /**< \brief (TC) Number of instances */\r
442 #define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5 } /**< \brief (TC) Instances List */\r
443 \r
444 #define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */\r
445 #define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */\r
446 #define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */\r
447 \r
448 #endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */\r
449 /*@}*/\r
450 \r
451 /* ************************************************************************** */\r
452 /**  PORT DEFINITIONS FOR SAMD20E16 */\r
453 /* ************************************************************************** */\r
454 /** \defgroup SAMD20E16_port PORT Definitions */\r
455 /*@{*/\r
456 \r
457 #include "pio/pio_samd20e16.h"\r
458 /*@}*/\r
459 \r
460 /* ************************************************************************** */\r
461 /**  MEMORY MAPPING DEFINITIONS FOR SAMD20E16 */\r
462 /* ************************************************************************** */\r
463 \r
464 #define FLASH_SIZE            0x10000 /* 64 kB */\r
465 #define FLASH_PAGE_SIZE       64\r
466 #define FLASH_NB_OF_PAGES     1024\r
467 #define FLASH_USER_PAGE_SIZE  64\r
468 #define HRAMC0_SIZE           0x2000 /* 8 kB */\r
469 #define FLASH_ADDR            (0x00000000U) /**< FLASH base address */\r
470 #define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */\r
471 #define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */\r
472 \r
473 /* ************************************************************************** */\r
474 /**  ELECTRICAL DEFINITIONS FOR SAMD20E16 */\r
475 /* ************************************************************************** */\r
476 \r
477 \r
478 #ifdef __cplusplus\r
479 }\r
480 #endif\r
481 \r
482 /*@}*/\r
483 \r
484 #endif /* SAMD20E16_H */\r