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 #include "samv71.h"
00031
00032 typedef void (*intfunc) (void);
00033 typedef union { intfunc __fun; void * __ptr; } intvec_elem;
00034
00035 extern int Image$$ARM_LIB_STACK$$ZI$$Limit;
00036 extern int Image$$Vector_region$$Base;
00037 extern int Image$$Vector_region$$Limit;
00038
00039 extern void __main( void );
00040 __INLINE void Reset_Handler( void );
00041
00042 int __low_level_init(void);
00043
00044 void Dummy_Handler(void);
00045
00046 #pragma weak NMI_Handler=Dummy_Handler
00047 #pragma weak HardFault_Handler=Dummy_Handler
00048 #pragma weak MemManage_Handler=Dummy_Handler
00049 #pragma weak BusFault_Handler=Dummy_Handler
00050 #pragma weak UsageFault_Handler=Dummy_Handler
00051 #pragma weak SVC_Handler=Dummy_Handler
00052 #pragma weak DebugMon_Handler=Dummy_Handler
00053 #pragma weak PendSV_Handler=Dummy_Handler
00054 #pragma weak SysTick_Handler=Dummy_Handler
00055
00056
00057 #pragma weak SUPC_Handler=Dummy_Handler
00058 #pragma weak RSTC_Handler=Dummy_Handler
00059 #pragma weak RTC_Handler=Dummy_Handler
00060 #pragma weak RTT_Handler=Dummy_Handler
00061 #pragma weak WDT_Handler=Dummy_Handler
00062 #pragma weak PMC_Handler=Dummy_Handler
00063 #pragma weak EFC_Handler=Dummy_Handler
00064 #pragma weak UART0_Handler=Dummy_Handler
00065 #pragma weak UART1_Handler=Dummy_Handler
00066 #pragma weak PIOA_Handler=Dummy_Handler
00067 #pragma weak PIOB_Handler=Dummy_Handler
00068 #ifdef _SAMV71_PIOC_INSTANCE_
00069 #pragma weak PIOC_Handler=Dummy_Handler
00070 #endif
00071 #pragma weak USART0_Handler=Dummy_Handler
00072 #pragma weak USART1_Handler=Dummy_Handler
00073 #pragma weak USART2_Handler=Dummy_Handler
00074 #pragma weak PIOD_Handler=Dummy_Handler
00075 #ifdef _SAMV71_PIOE_INSTANCE_
00076 #pragma weak PIOE_Handler=Dummy_Handler
00077 #endif
00078 #ifdef _SAMV71_HSMCI_INSTANCE_
00079 #pragma weak HSMCI_Handler=Dummy_Handler
00080 #endif
00081 #pragma weak TWIHS0_Handler=Dummy_Handler
00082 #pragma weak TWIHS1_Handler=Dummy_Handler
00083 #pragma weak SPI0_Handler=Dummy_Handler
00084 #pragma weak SSC_Handler=Dummy_Handler
00085 #pragma weak TC0_Handler=Dummy_Handler
00086 #pragma weak TC1_Handler=Dummy_Handler
00087 #pragma weak TC2_Handler=Dummy_Handler
00088 #ifdef _SAMV71_TC1_INSTANCE_
00089 #pragma weak TC3_Handler=Dummy_Handler
00090 #endif
00091 #ifdef _SAMV71_TC1_INSTANCE_
00092 #pragma weak TC4_Handler=Dummy_Handler
00093 #endif
00094 #ifdef _SAMV71_TC1_INSTANCE_
00095 #pragma weak TC5_Handler=Dummy_Handler
00096 #endif
00097 #pragma weak AFEC0_Handler=Dummy_Handler
00098 #ifdef _SAMV71_DACC_INSTANCE_
00099 #pragma weak DACC_Handler=Dummy_Handler
00100 #endif
00101 #pragma weak PWM0_Handler=Dummy_Handler
00102 #pragma weak ICM_Handler=Dummy_Handler
00103 #pragma weak ACC_Handler=Dummy_Handler
00104 #pragma weak USBHS_Handler=Dummy_Handler
00105 #pragma weak MCAN0_Handler=Dummy_Handler
00106 #pragma weak MCAN0_Line1_Handler=Dummy_Handler
00107 #pragma weak MCAN1_Handler=Dummy_Handler
00108 #pragma weak MCAN1_Line1_Handler=Dummy_Handler
00109 #pragma weak GMAC_Handler=Dummy_Handler
00110 #pragma weak GMACQ1_Handler=Dummy_Handler
00111 #pragma weak GMACQ2_Handler=Dummy_Handler
00112 #pragma weak AFEC1_Handler=Dummy_Handler
00113 #ifdef _SAMV71_TWIHS2_INSTANCE_
00114 #pragma weak TWIHS2_Handler=Dummy_Handler
00115 #endif
00116 #pragma weak SPI1_Handler=Dummy_Handler
00117 #pragma weak QSPI_Handler=Dummy_Handler
00118 #pragma weak UART2_Handler=Dummy_Handler
00119 #pragma weak UART3_Handler=Dummy_Handler
00120 #pragma weak UART4_Handler=Dummy_Handler
00121 #ifdef _SAMV71_TC2_INSTANCE_
00122 #pragma weak TC6_Handler=Dummy_Handler
00123 #endif
00124 #ifdef _SAMV71_TC2_INSTANCE_
00125 #pragma weak TC7_Handler=Dummy_Handler
00126 #endif
00127 #ifdef _SAMV71_TC2_INSTANCE_
00128 #pragma weak TC8_Handler=Dummy_Handler
00129 #endif
00130 #pragma weak TC9_Handler=Dummy_Handler
00131 #pragma weak TC10_Handler=Dummy_Handler
00132 #pragma weak TC11_Handler=Dummy_Handler
00133 #pragma weak MLB_Handler=Dummy_Handler
00134 #pragma weak AES_Handler=Dummy_Handler
00135 #pragma weak TRNG_Handler=Dummy_Handler
00136 #pragma weak XDMAC_Handler=Dummy_Handler
00137 #pragma weak ISI_Handler=Dummy_Handler
00138 #pragma weak PWM1_Handler=Dummy_Handler
00139 #pragma weak FPU_Handler=Dummy_Handler
00140 #ifdef _SAMV71_SDRAMC_INSTANCE_
00141 #pragma weak SDRAMC_Handler=Dummy_Handler
00142 #endif
00143 #pragma weak RSWDT_Handler=Dummy_Handler
00144 #pragma weak CCF_Handler=Dummy_Handler
00145 #pragma weak CCW_Handler=Dummy_Handler
00146
00147
00148
00149
00150
00151 #pragma arm section rodata = "vectors"
00152
00153 const intvec_elem __vector_table[] =
00154 {
00155 (intfunc)&Image$$ARM_LIB_STACK$$ZI$$Limit,
00156 Reset_Handler,
00157 NMI_Handler,
00158 HardFault_Handler,
00159 MemManage_Handler,
00160 BusFault_Handler,
00161 UsageFault_Handler,
00162 (0UL), (0UL), (0UL), (0UL),
00163 SVC_Handler,
00164 DebugMon_Handler,
00165 (0UL),
00166 PendSV_Handler,
00167 SysTick_Handler,
00168
00169 SUPC_Handler,
00170 RSTC_Handler,
00171 RTC_Handler,
00172 RTT_Handler,
00173 WDT_Handler,
00174 PMC_Handler,
00175 EFC_Handler,
00176 UART0_Handler,
00177 UART1_Handler,
00178 (0UL),
00179 PIOA_Handler,
00180 PIOB_Handler,
00181 PIOC_Handler,
00182 USART0_Handler,
00183 USART1_Handler,
00184 USART2_Handler,
00185 PIOD_Handler,
00186 PIOE_Handler,
00187 HSMCI_Handler,
00188 TWIHS0_Handler,
00189 TWIHS1_Handler,
00190 SPI0_Handler,
00191 SSC_Handler,
00192 TC0_Handler,
00193 TC1_Handler,
00194 TC2_Handler,
00195 TC3_Handler,
00196 TC4_Handler,
00197 TC5_Handler,
00198 AFEC0_Handler,
00199 DACC_Handler,
00200 PWM0_Handler,
00201 ICM_Handler,
00202 ACC_Handler,
00203 USBHS_Handler,
00204 MCAN0_Handler,
00205 MCAN0_Line1_Handler,
00206 MCAN1_Handler,
00207 MCAN1_Line1_Handler,
00208 GMAC_Handler,
00209 AFEC1_Handler,
00210 TWIHS2_Handler,
00211 SPI1_Handler,
00212 QSPI_Handler,
00213 UART2_Handler,
00214 UART3_Handler,
00215 UART4_Handler,
00216 TC6_Handler,
00217 TC7_Handler,
00218 TC8_Handler,
00219 TC9_Handler,
00220 TC10_Handler,
00221 TC11_Handler,
00222 MLB_Handler,
00223 (0UL),
00224 (0UL),
00225 AES_Handler,
00226 TRNG_Handler,
00227 XDMAC_Handler,
00228 ISI_Handler,
00229 PWM1_Handler,
00230 (0UL),
00231 SDRAMC_Handler,
00232 RSWDT_Handler,
00233 };
00234 #pragma arm section
00235
00236
00237 void LowLevelInit(void);
00238
00239 #ifdef ENABLE_TCM
00240
00241
00242
00243
00244 __STATIC_INLINE void TCM_Enable(void)
00245 {
00246
00247 __DSB();
00248 __ISB();
00249 SCB->ITCMCR = (SCB_ITCMCR_EN_Msk | SCB_ITCMCR_RMW_Msk | SCB_ITCMCR_RETEN_Msk);
00250 SCB->DTCMCR = ( SCB_DTCMCR_EN_Msk | SCB_DTCMCR_RMW_Msk | SCB_DTCMCR_RETEN_Msk);
00251 __DSB();
00252 __ISB();
00253 }
00254 #endif
00255
00256
00257
00258
00259
00260 __STATIC_INLINE void TCM_Disable(void)
00261 {
00262
00263 __DSB();
00264 __ISB();
00265 SCB->ITCMCR &= ~(uint32_t)SCB_ITCMCR_EN_Msk;
00266 SCB->DTCMCR &= ~(uint32_t)SCB_ITCMCR_EN_Msk;
00267 __DSB();
00268 __ISB();
00269 }
00270
00271 __STATIC_INLINE uint32_t GetGPNVMStatus(uint8_t bit)
00272 {
00273 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_GGPB );
00274 return EFC->EEFC_FRR;
00275 }
00276
00277
00278
00279
00280
00281 void Reset_Handler(void)
00282 {
00283 uint32_t *pSrc = (uint32_t*)&Image$$Vector_region$$Base;
00284
00285 #ifdef ENABLE_TCM
00286 #ifndef FFT_DEMO
00287
00288 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB | EEFC_FCR_FARG(8));
00289 #else
00290
00291 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_SGPB | EEFC_FCR_FARG(8));
00292 #endif
00293 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_SGPB | EEFC_FCR_FARG(7));
00294
00295 TCM_Enable();
00296 #else
00297 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB | EEFC_FCR_FARG(8));
00298 EFC->EEFC_FCR = (EEFC_FCR_FKEY_PASSWD | EEFC_FCR_FCMD_CGPB | EEFC_FCR_FARG(7));
00299
00300 TCM_Disable();
00301 #endif
00302
00303
00304 LowLevelInit();
00305 SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);
00306
00307
00308 __main();
00309
00310
00311 while ( 1 );
00312 }
00313
00314
00315
00316
00317 void Dummy_Handler(void)
00318 {
00319 while (1) {
00320 }
00321 }
00322