]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_ATSAM3S-EK2_Atmel_Studio/src/asf/sam/utils/cmsis/sam3s8/source/templates/gcc/startup_sam3sd8.c
Add demo for SAM3S-EK2.
[freertos] / FreeRTOS / Demo / CORTEX_ATSAM3S-EK2_Atmel_Studio / src / asf / sam / utils / cmsis / sam3s8 / source / templates / gcc / startup_sam3sd8.c
1 /**\r
2  * \file\r
3  *\r
4  * \brief Startup file for SAM3SD8.\r
5  *\r
6  * Copyright (c) 2011 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 #include "exceptions.h"\r
45 #include "sam3s8.h"\r
46 #include "system_sam3sd8.h"\r
47 \r
48 /* Initialize segments */\r
49 extern uint32_t _sfixed;\r
50 extern uint32_t _efixed;\r
51 extern uint32_t _etext;\r
52 extern uint32_t _srelocate;\r
53 extern uint32_t _erelocate;\r
54 extern uint32_t _szero;\r
55 extern uint32_t _ezero;\r
56 extern uint32_t _sstack;\r
57 extern uint32_t _estack;\r
58 \r
59 /** \cond DOXYGEN_SHOULD_SKIP_THIS */\r
60 int main(void);\r
61 /** \endcond */\r
62 \r
63 void __libc_init_array(void);\r
64 \r
65 /* Exception Table */\r
66 __attribute__ ((section(".vectors")))\r
67 IntFunc exception_table[] = {\r
68 \r
69         /* Configure Initial Stack Pointer, using linker-generated symbols */\r
70         (IntFunc) (&_estack),\r
71         Reset_Handler,\r
72 \r
73         NMI_Handler,\r
74         HardFault_Handler,\r
75         MemManage_Handler,\r
76         BusFault_Handler,\r
77         UsageFault_Handler,\r
78         0, 0, 0, 0,         /*  Reserved */\r
79         SVC_Handler,\r
80         DebugMon_Handler,\r
81         0,                  /*  Reserved */\r
82         PendSV_Handler,\r
83         SysTick_Handler,\r
84 \r
85         /* Configurable interrupts */\r
86         SUPC_Handler,    /* 0  Supply Controller */\r
87         RSTC_Handler,    /* 1  Reset Controller */\r
88         RTC_Handler,     /* 2  Real Time Clock */\r
89         RTT_Handler,     /* 3  Real Time Timer */\r
90         WDT_Handler,     /* 4  Watchdog Timer */\r
91         PMC_Handler,     /* 5  PMC */\r
92         EFC_Handler,     /* 6  EFC */\r
93         Dummy_Handler,   /* 7  Reserved */\r
94         UART0_Handler,   /* 8  UART0 */\r
95         UART1_Handler,   /* 9  UART1 */\r
96         SMC_Handler,     /* 10 SMC */\r
97         PIOA_Handler,    /* 11 Parallel IO Controller A */\r
98         PIOB_Handler,    /* 12 Parallel IO Controller B */\r
99         PIOC_Handler,    /* 13 Parallel IO Controller C */\r
100         USART0_Handler,  /* 14 USART 0 */\r
101         USART1_Handler,  /* 15 USART 1 */\r
102         Dummy_Handler,   /* 16 Reserved */\r
103         Dummy_Handler,   /* 17 Reserved */\r
104         HSMCI_Handler,   /* 18 HSMCI */\r
105         TWI0_Handler,    /* 19 TWI 0 */\r
106         TWI1_Handler,    /* 20 TWI 1 */\r
107         SPI_Handler,     /* 21 SPI */\r
108         SSC_Handler,     /* 22 SSC */\r
109         TC0_Handler,     /* 23 Timer Counter 0 */\r
110         TC1_Handler,     /* 24 Timer Counter 1 */\r
111         TC2_Handler,     /* 25 Timer Counter 2 */\r
112         TC3_Handler,     /* 26 Timer Counter 3 */\r
113         TC4_Handler,     /* 27 Timer Counter 4 */\r
114         TC5_Handler,     /* 28 Timer Counter 5 */\r
115         ADC_Handler,     /* 29 ADC controller */\r
116         DACC_Handler,    /* 30 DACC controller */\r
117         PWM_Handler,     /* 31 PWM */\r
118         CRCCU_Handler,   /* 32 CRC Calculation Unit */\r
119         ACC_Handler,     /* 33 Analog Comparator */\r
120         UDP_Handler,     /* 34 USB Device Port */\r
121         Dummy_Handler    /* 35 not used */\r
122 };\r
123 \r
124 /* TEMPORARY PATCH FOR SCB */\r
125 #define SCB_VTOR_TBLBASE_Pos               29                            /*!< SCB VTOR: TBLBASE Position */\r
126 #define SCB_VTOR_TBLBASE_Msk               (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */\r
127 \r
128 /**\r
129  * \brief This is the code that gets called on processor reset.\r
130  * To initialize the device, and call the main() routine.\r
131  */\r
132 void Reset_Handler(void)\r
133 {\r
134         uint32_t *pSrc, *pDest;\r
135 \r
136         /* Initialize the relocate segment */\r
137         pSrc = &_etext;\r
138         pDest = &_srelocate;\r
139 \r
140         if (pSrc != pDest) {\r
141                 for (; pDest < &_erelocate;) {\r
142                         *pDest++ = *pSrc++;\r
143                 }\r
144         }\r
145 \r
146         /* Clear the zero segment */\r
147         for (pDest = &_szero; pDest < &_ezero;) {\r
148                 *pDest++ = 0;\r
149         }\r
150 \r
151         /* Set the vector table base address */\r
152         pSrc = (uint32_t *) & _sfixed;\r
153         SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);\r
154 \r
155         if (((uint32_t) pSrc >= IRAM_ADDR) && ((uint32_t) pSrc < IRAM_ADDR + IRAM_SIZE)) {\r
156                 SCB->VTOR |= 1 << SCB_VTOR_TBLBASE_Pos;\r
157         }\r
158 \r
159         /* Initialize the C library */\r
160         __libc_init_array();\r
161 \r
162         /* Branch to main function */\r
163         main();\r
164 \r
165         /* Infinite loop */\r
166         while (1);\r
167 }\r