00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "samv71.h"
00032
00033
00034 extern uint32_t _sfixed;
00035 extern uint32_t _efixed;
00036 extern uint32_t _etext;
00037 extern uint32_t _srelocate;
00038 extern uint32_t _erelocate;
00039 extern uint32_t _szero;
00040 extern uint32_t _ezero;
00041 extern uint32_t _sstack;
00042 extern uint32_t _estack;
00043
00044
00045 int main(void);
00046
00047
00048 void __libc_init_array(void);
00049 void LowLevelInit(void);
00050
00051
00052
00053 void Dummy_Handler(void);
00054
00055 #pragma weak NMI_Handler=Dummy_Handler
00056 #pragma weak HardFault_Handler=Dummy_Handler
00057 #pragma weak MemManage_Handler=Dummy_Handler
00058 #pragma weak BusFault_Handler=Dummy_Handler
00059 #pragma weak UsageFault_Handler=Dummy_Handler
00060 #pragma weak SVC_Handler=Dummy_Handler
00061 #pragma weak DebugMon_Handler=Dummy_Handler
00062 #pragma weak PendSV_Handler=Dummy_Handler
00063 #pragma weak SysTick_Handler=Dummy_Handler
00064
00065
00066 #pragma weak SUPC_Handler=Dummy_Handler
00067 #pragma weak RSTC_Handler=Dummy_Handler
00068 #pragma weak RTC_Handler=Dummy_Handler
00069 #pragma weak RTT_Handler=Dummy_Handler
00070 #pragma weak WDT_Handler=Dummy_Handler
00071 #pragma weak PMC_Handler=Dummy_Handler
00072 #pragma weak EFC_Handler=Dummy_Handler
00073 #pragma weak UART0_Handler=Dummy_Handler
00074 #pragma weak UART1_Handler=Dummy_Handler
00075 #pragma weak PIOA_Handler=Dummy_Handler
00076 #pragma weak PIOB_Handler=Dummy_Handler
00077 #ifdef _SAMV71_PIOC_INSTANCE_
00078 #pragma weak PIOC_Handler=Dummy_Handler
00079 #endif
00080 #pragma weak USART0_Handler=Dummy_Handler
00081 #pragma weak USART1_Handler=Dummy_Handler
00082 #pragma weak USART2_Handler=Dummy_Handler
00083 #pragma weak PIOD_Handler=Dummy_Handler
00084 #ifdef _SAMV71_PIOE_INSTANCE_
00085 #pragma weak PIOE_Handler=Dummy_Handler
00086 #endif
00087 #ifdef _SAMV71_HSMCI_INSTANCE_
00088 #pragma weak HSMCI_Handler=Dummy_Handler
00089 #endif
00090 #pragma weak TWIHS0_Handler=Dummy_Handler
00091 #pragma weak TWIHS1_Handler=Dummy_Handler
00092 #pragma weak SPI0_Handler=Dummy_Handler
00093 #pragma weak SSC_Handler=Dummy_Handler
00094 #pragma weak TC0_Handler=Dummy_Handler
00095 #pragma weak TC1_Handler=Dummy_Handler
00096 #pragma weak TC2_Handler=Dummy_Handler
00097 #ifdef _SAMV71_TC1_INSTANCE_
00098 #pragma weak TC3_Handler=Dummy_Handler
00099 #endif
00100 #ifdef _SAMV71_TC1_INSTANCE_
00101 #pragma weak TC4_Handler=Dummy_Handler
00102 #endif
00103 #ifdef _SAMV71_TC1_INSTANCE_
00104 #pragma weak TC5_Handler=Dummy_Handler
00105 #endif
00106 #pragma weak AFEC0_Handler=Dummy_Handler
00107 #ifdef _SAMV71_DACC_INSTANCE_
00108 #pragma weak DACC_Handler=Dummy_Handler
00109 #endif
00110 #pragma weak PWM0_Handler=Dummy_Handler
00111 #pragma weak ICM_Handler=Dummy_Handler
00112 #pragma weak ACC_Handler=Dummy_Handler
00113 #pragma weak USBHS_Handler=Dummy_Handler
00114 #pragma weak MCAN0_Handler=Dummy_Handler
00115 #pragma weak MCAN0_Line1_Handler=Dummy_Handler
00116 #pragma weak MCAN1_Handler=Dummy_Handler
00117 #pragma weak MCAN1_Line1_Handler=Dummy_Handler
00118 #pragma weak GMAC_Handler=Dummy_Handler
00119 #pragma weak GMACQ1_Handler=Dummy_Handler
00120 #pragma weak GMACQ2_Handler=Dummy_Handler
00121 #pragma weak AFEC1_Handler=Dummy_Handler
00122 #ifdef _SAMV71_TWIHS2_INSTANCE_
00123 #pragma weak TWIHS2_Handler=Dummy_Handler
00124 #endif
00125 #pragma weak SPI1_Handler=Dummy_Handler
00126 #pragma weak QSPI_Handler=Dummy_Handler
00127 #pragma weak UART2_Handler=Dummy_Handler
00128 #pragma weak UART3_Handler=Dummy_Handler
00129 #pragma weak UART4_Handler=Dummy_Handler
00130 #ifdef _SAMV71_TC2_INSTANCE_
00131 #pragma weak TC6_Handler=Dummy_Handler
00132 #endif
00133 #ifdef _SAMV71_TC2_INSTANCE_
00134 #pragma weak TC7_Handler=Dummy_Handler
00135 #endif
00136 #ifdef _SAMV71_TC2_INSTANCE_
00137 #pragma weak TC8_Handler=Dummy_Handler
00138 #endif
00139 #pragma weak TC9_Handler=Dummy_Handler
00140 #pragma weak TC10_Handler=Dummy_Handler
00141 #pragma weak TC11_Handler=Dummy_Handler
00142 #pragma weak MLB_Handler=Dummy_Handler
00143 #pragma weak AES_Handler=Dummy_Handler
00144 #pragma weak TRNG_Handler=Dummy_Handler
00145 #pragma weak XDMAC_Handler=Dummy_Handler
00146 #pragma weak ISI_Handler=Dummy_Handler
00147 #pragma weak PWM1_Handler=Dummy_Handler
00148 #pragma weak FPU_Handler=Dummy_Handler
00149 #ifdef _SAMV71_SDRAMC_INSTANCE_
00150 #pragma weak SDRAMC_Handler=Dummy_Handler
00151 #endif
00152 #pragma weak RSWDT_Handler=Dummy_Handler
00153 #pragma weak CCF_Handler=Dummy_Handler
00154 #pragma weak CCW_Handler=Dummy_Handler
00155
00156
00157
00158 __attribute__ ((section(".vectors")))
00159 const DeviceVectors exception_table = {
00160
00161
00162 .pvStack = (void*) (&_estack),
00163
00164 .pfnReset_Handler = (void*) Reset_Handler,
00165 .pfnNMI_Handler = (void*) NMI_Handler,
00166 .pfnHardFault_Handler = (void*) HardFault_Handler,
00167 .pfnMemManage_Handler = (void*) MemManage_Handler,
00168 .pfnBusFault_Handler = (void*) BusFault_Handler,
00169 .pfnUsageFault_Handler = (void*) UsageFault_Handler,
00170 .pfnReserved1_Handler = (void*) (0UL),
00171 .pfnReserved2_Handler = (void*) (0UL),
00172 .pfnReserved3_Handler = (void*) (0UL),
00173 .pfnReserved4_Handler = (void*) (0UL),
00174 .pfnSVC_Handler = (void*) SVC_Handler,
00175 .pfnDebugMon_Handler = (void*) DebugMon_Handler,
00176 .pfnReserved5_Handler = (void*) (0UL),
00177 .pfnPendSV_Handler = (void*) PendSV_Handler,
00178 .pfnSysTick_Handler = (void*) SysTick_Handler,
00179
00180
00181 .pfnSUPC_Handler = (void*) SUPC_Handler,
00182 .pfnRSTC_Handler = (void*) RSTC_Handler,
00183 .pfnRTC_Handler = (void*) RTC_Handler,
00184 .pfnRTT_Handler = (void*) RTT_Handler,
00185 .pfnWDT_Handler = (void*) WDT_Handler,
00186 .pfnPMC_Handler = (void*) PMC_Handler,
00187 .pfnEFC_Handler = (void*) EFC_Handler,
00188 .pfnUART0_Handler = (void*) UART0_Handler,
00189 .pfnUART1_Handler = (void*) UART1_Handler,
00190 .pvReserved9 = (void*) (0UL),
00191 .pfnPIOA_Handler = (void*) PIOA_Handler,
00192 .pfnPIOB_Handler = (void*) PIOB_Handler,
00193 #ifdef _SAMV71_PIOC_INSTANCE_
00194 .pfnPIOC_Handler = (void*) PIOC_Handler,
00195 #else
00196 .pvReserved12 = (void*) (0UL),
00197 #endif
00198 .pfnUSART0_Handler = (void*) USART0_Handler,
00199 .pfnUSART1_Handler = (void*) USART1_Handler,
00200 .pfnUSART2_Handler = (void*) USART2_Handler,
00201 .pfnPIOD_Handler = (void*) PIOD_Handler,
00202 #ifdef _SAMV71_PIOE_INSTANCE_
00203 .pfnPIOE_Handler = (void*) PIOE_Handler,
00204 #else
00205 .pvReserved17 = (void*) (0UL),
00206 #endif
00207 #ifdef _SAMV71_HSMCI_INSTANCE_
00208 .pfnHSMCI_Handler = (void*) HSMCI_Handler,
00209 #else
00210 .pvReserved18 = (void*) (0UL),
00211 #endif
00212 .pfnTWIHS0_Handler = (void*) TWIHS0_Handler,
00213 .pfnTWIHS1_Handler = (void*) TWIHS1_Handler,
00214 .pfnSPI0_Handler = (void*) SPI0_Handler,
00215 .pfnSSC_Handler = (void*) SSC_Handler,
00216 .pfnTC0_Handler = (void*) TC0_Handler,
00217 .pfnTC1_Handler = (void*) TC1_Handler,
00218 .pfnTC2_Handler = (void*) TC2_Handler,
00219 #ifdef _SAMV71_TC1_INSTANCE_
00220 .pfnTC3_Handler = (void*) TC3_Handler,
00221 #else
00222 .pvReserved26 = (void*) (0UL),
00223 #endif
00224 #ifdef _SAMV71_TC1_INSTANCE_
00225 .pfnTC4_Handler = (void*) TC4_Handler,
00226 #else
00227 .pvReserved27 = (void*) (0UL),
00228 #endif
00229 #ifdef _SAMV71_TC1_INSTANCE_
00230 .pfnTC5_Handler = (void*) TC5_Handler,
00231 #else
00232 .pvReserved28 = (void*) (0UL),
00233 #endif
00234 .pfnAFEC0_Handler = (void*) AFEC0_Handler,
00235 #ifdef _SAMV71_DACC_INSTANCE_
00236 .pfnDACC_Handler = (void*) DACC_Handler,
00237 #else
00238 .pvReserved30 = (void*) (0UL),
00239 #endif
00240 .pfnPWM0_Handler = (void*) PWM0_Handler,
00241 .pfnICM_Handler = (void*) ICM_Handler,
00242 .pfnACC_Handler = (void*) ACC_Handler,
00243 .pfnUSBHS_Handler = (void*) USBHS_Handler,
00244 .pfnMCAN0_Handler = (void*) MCAN0_Handler,
00245 .pfnMCAN0_Line1_Handler = (void*) MCAN0_Line1_Handler,
00246 .pfnMCAN1_Handler = (void*) MCAN1_Handler,
00247 .pfnMCAN1_Line1_Handler = (void*) MCAN1_Line1_Handler,
00248 .pfnGMAC_Handler = (void*) GMAC_Handler,
00249 .pfnAFEC1_Handler = (void*) AFEC1_Handler,
00250 #ifdef _SAMV71_TWIHS2_INSTANCE_
00251 .pfnTWIHS2_Handler = (void*) TWIHS2_Handler,
00252 #else
00253 .pvReserved41 = (void*) (0UL),
00254 #endif
00255 .pfnSPI1_Handler = (void*) SPI1_Handler,
00256 .pfnQSPI_Handler = (void*) QSPI_Handler,
00257 .pfnUART2_Handler = (void*) UART2_Handler,
00258 .pfnUART3_Handler = (void*) UART3_Handler,
00259 .pfnUART4_Handler = (void*) UART4_Handler,
00260 #ifdef _SAMV71_TC2_INSTANCE_
00261 .pfnTC6_Handler = (void*) TC6_Handler,
00262 #else
00263 .pvReserved47 = (void*) (0UL),
00264 #endif
00265 #ifdef _SAMV71_TC2_INSTANCE_
00266 .pfnTC7_Handler = (void*) TC7_Handler,
00267 #else
00268 .pvReserved48 = (void*) (0UL),
00269 #endif
00270 #ifdef _SAMV71_TC2_INSTANCE_
00271 .pfnTC8_Handler = (void*) TC8_Handler,
00272 #else
00273 .pvReserved49 = (void*) (0UL),
00274 #endif
00275 .pfnTC9_Handler = (void*) TC9_Handler,
00276 .pfnTC10_Handler = (void*) TC10_Handler,
00277 .pfnTC11_Handler = (void*) TC11_Handler,
00278 .pfnMLB_Handler = (void*) MLB_Handler,
00279 .pvReserved54 = (void*) (0UL),
00280 .pvReserved55 = (void*) (0UL),
00281 .pfnAES_Handler = (void*) AES_Handler,
00282 .pfnTRNG_Handler = (void*) TRNG_Handler,
00283 .pfnXDMAC_Handler = (void*) XDMAC_Handler,
00284 .pfnISI_Handler = (void*) ISI_Handler,
00285 .pfnPWM1_Handler = (void*) PWM1_Handler,
00286 .pvReserved61 = (void*) (0UL),
00287 #ifdef _SAMV71_SDRAMC_INSTANCE_
00288 .pfnSDRAMC_Handler = (void*) SDRAMC_Handler,
00289 #else
00290 .pvReserved62 = (void*) (0UL),
00291 #endif
00292 .pfnRSWDT_Handler = (void*) RSWDT_Handler
00293 };
00294
00295
00296 #ifdef ENABLE_TCM
00297
00298
00299
00300
00301 __STATIC_INLINE void TCM_Enable(void)
00302 {
00303
00304 __DSB();
00305 __ISB();
00306 SCB->ITCMCR = (SCB_ITCMCR_EN_Msk | SCB_ITCMCR_RMW_Msk
00307 | SCB_ITCMCR_RETEN_Msk);
00308 SCB->DTCMCR = ( SCB_DTCMCR_EN_Msk | SCB_DTCMCR_RMW_Msk
00309 | SCB_DTCMCR_RETEN_Msk);
00310 __DSB();
00311 __ISB();
00312 }
00313 #endif
00314
00315
00316
00317
00318
00319 __STATIC_INLINE void TCM_Disable(void)
00320 {
00321
00322 __DSB();
00323 __ISB();
00324 SCB->ITCMCR &= ~(uint32_t)SCB_ITCMCR_EN_Msk;
00325 SCB->DTCMCR &= ~(uint32_t)SCB_ITCMCR_EN_Msk;
00326 __DSB();
00327 __ISB();
00328 }
00329
00330
00331
00332
00333
00334 void Reset_Handler(void)
00335 {
00336 uint32_t *pSrc, *pDest;
00337
00338
00339 pSrc = &_etext;
00340 pDest = &_srelocate;
00341
00342 if (pSrc != pDest) {
00343 for (; pDest < &_erelocate;) {
00344 *pDest++ = *pSrc++;
00345 }
00346 }
00347
00348
00349 for (pDest = &_szero; pDest < &_ezero;) {
00350 *pDest++ = 0;
00351 }
00352
00353
00354 pSrc = (uint32_t *) & _sfixed;
00355 SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);
00356
00357 #ifdef ENABLE_TCM
00358 #ifndef FFT_DEMO
00359
00360 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB
00361 | EEFC_FCR_FARG(8));
00362 #else
00363
00364 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_SGPB
00365 | EEFC_FCR_FARG(8));
00366 #endif
00367 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_SGPB
00368 | EEFC_FCR_FARG(7));
00369
00370 TCM_Enable();
00371 #else
00372 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB
00373 | EEFC_FCR_FARG(8));
00374 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB
00375 | EEFC_FCR_FARG(7));
00376
00377 TCM_Disable();
00378 #endif
00379
00380 LowLevelInit();
00381
00382 __libc_init_array();
00383
00384
00385 main();
00386
00387
00388 while (1);
00389 }
00390
00391
00392
00393
00394 void Dummy_Handler(void)
00395 {
00396 while (1) {
00397 }
00398 }
00399
00400