14
14
* limitations under the License.
15
15
*/
16
16
#include "rtl8195a.h"
17
- #include "system_8195a.h"
18
- #if defined ( __CC_ARM ) /* ARM Compiler 4/5 */
17
+
18
+ #if defined(__CC_ARM )
19
+ #include "cmsis_armcc.h"
20
+ #elif defined(__GNUC__ )
21
+ #include "cmsis_gcc.h"
22
+ #else
23
+ #include <cmsis_iar.h>
24
+ #endif
25
+
26
+
27
+ #if defined(__CC_ARM ) || \
28
+ (defined (__ARMCC_VERSION ) && __ARMCC_VERSION >= 6010050 )
29
+
30
+ extern uint32_t Image$$ARM_LIB_STACK$$ZI$$Limit ;
19
31
extern uint8_t Image$$RW_IRAM1$$ZI$$Base [];
20
- #define __bss_start__ Image$$RW_IRAM1$$ZI$$Base
21
32
extern uint8_t Image$$RW_IRAM1$$ZI$$Limit [];
22
- #define __bss_end__ Image$$RW_IRAM1$$ZI$$Limit
23
- #elif defined (__ARMCC_VERSION ) && (__ARMCC_VERSION >= 6010050 ) /* ARM Compiler 6 */
24
- extern uint8_t Image$$RW_IRAM1$$ZI$$Base [];
25
33
#define __bss_start__ Image$$RW_IRAM1$$ZI$$Base
26
- extern uint8_t Image$$RW_IRAM1$$ZI$$Limit [];
27
- #define __bss_end__ Image$$RW_IRAM1$$ZI$$Limit
34
+ #define __bss_end__ Image$$RW_IRAM1$$ZI$$Limit
35
+
36
+ #elif defined (__ICCARM__ )
28
37
29
- #elif defined ( __ICCARM__ )
30
38
#pragma section=".ram.bss"
31
- #pragma section=".rom.bss"
32
- #pragma section=".ram.start.table"
33
- #pragma section=".ram_image1.bss"
34
- #pragma section=".image2.start.table1"
35
- #pragma section=".image2.start.table2"
36
39
40
+ extern uint32_t CSTACK$$Limit ;
37
41
uint8_t * __bss_start__ ;
38
42
uint8_t * __bss_end__ ;
39
43
@@ -42,30 +46,29 @@ void __iar_data_init_app(void)
42
46
__bss_start__ = (uint8_t * )__section_begin (".ram.bss" );
43
47
__bss_end__ = (uint8_t * )__section_end (".ram.bss" );
44
48
}
49
+
45
50
#else
46
- extern uint8_t __bss_start__ [];
47
- extern uint8_t __bss_end__ [];
48
- extern uint8_t __image1_bss_start__ [];
49
- extern uint8_t __image1_bss_end__ [];
50
- extern uint8_t __image2_entry_func__ [];
51
- extern uint8_t __image2_validate_code__ [];
51
+
52
+ extern uint32_t __StackTop ;
53
+ extern uint8_t __bss_sram1_start__ [];
54
+ extern uint8_t __bss_sram1_end__ [];
55
+ extern uint8_t __bss_sram2_start__ [];
56
+ extern uint8_t __bss_sram2_end__ [];
57
+
52
58
#endif
53
59
54
60
extern VECTOR_Func NewVectorTable [];
55
61
extern void SystemCoreClockUpdate (void );
56
62
extern void PLAT_Start (void );
57
63
extern void PLAT_Main (void );
58
- extern HAL_TIMER_OP HalTimerOp ;
59
-
60
- IMAGE2_START_RAM_FUN_SECTION const RAM_START_FUNCTION gImage2EntryFun0 = {
61
- PLAT_Start
62
- };
63
64
64
- IMAGE1_VALID_PATTEN_SECTION const uint8_t RAM_IMG1_VALID_PATTEN [] = {
65
- 0x23 , 0x79 , 0x16 , 0x88 , 0xff , 0xff , 0xff , 0xff
65
+ IMAGE2_START_RAM_FUN_SECTION
66
+ const RAM_START_FUNCTION gImage2EntryFun0 = {
67
+ PLAT_Start
66
68
};
67
69
68
- IMAGE2_VALID_PATTEN_SECTION const uint8_t RAM_IMG2_VALID_PATTEN [20 ] = {
70
+ IMAGE2_VALID_PATTEN_SECTION
71
+ const uint8_t IMAGE2_SIGNATURE [20 ] = {
69
72
'R' , 'T' , 'K' , 'W' , 'i' , 'n' , 0x0 , 0xff ,
70
73
(FW_VERSION & 0xff ), ((FW_VERSION >> 8 )& 0xff ),
71
74
(FW_SUBVERSION & 0xff ), ((FW_SUBVERSION >> 8 )& 0xff ),
@@ -93,7 +96,7 @@ void TRAP_NMIHandler(void)
93
96
#endif
94
97
}
95
98
96
- #if defined ( __ICCARM__ )
99
+ #if defined (__ICCARM__ )
97
100
void __TRAP_HardFaultHandler_Patch (uint32_t addr )
98
101
{
99
102
uint32_t cfsr ;
@@ -102,15 +105,15 @@ void __TRAP_HardFaultHandler_Patch(uint32_t addr)
102
105
uint32_t stackpc ;
103
106
uint16_t asmcode ;
104
107
105
- cfsr = HAL_READ32 (0xE000ED28 , 0x0 );
108
+ cfsr = __HAL_READ32 (0xE000ED28 , 0x0 );
106
109
107
110
// Violation to memory access protection
108
111
if (cfsr & 0x82 ) {
109
112
110
- bfar = HAL_READ32 (0xE000ED38 , 0x0 );
113
+ bfar = __HAL_READ32 (0xE000ED38 , 0x0 );
111
114
112
115
// invalid access to wifi register, usually happened in LPS 32K or IPS
113
- if (bfar >= WIFI_REG_BASE && bfar < WIFI_REG_BASE + 0x40000 ) {
116
+ if (bfar >= WLAN_BASE && bfar < WLAN_BASE + 0x40000 ) {
114
117
115
118
//__BKPT(0);
116
119
@@ -125,18 +128,18 @@ void __TRAP_HardFaultHandler_Patch(uint32_t addr)
125
128
* However, the fault assembly code (Ex. LDR or ADR) is not actually executed,
126
129
* So the register value is un-predictable.
127
130
**/
128
- stackpc = HAL_READ32 (addr , 0x18 );
129
- asmcode = HAL_READ16 (stackpc , 0 );
131
+ stackpc = __HAL_READ32 (addr , 0x18 );
132
+ asmcode = __HAL_READ16 (stackpc , 0 );
130
133
if ((asmcode & 0xF800 ) > 0xE000 ) {
131
134
// 32-bit instruction, (opcode[15:11] = 0b11111, 0b11110, 0b11101)
132
- HAL_WRITE32 (addr , 0x18 , stackpc + 4 );
135
+ __HAL_WRITE32 (addr , 0x18 , stackpc + 4 );
133
136
} else {
134
137
// 16-bit instruction
135
- HAL_WRITE32 (addr , 0x18 , stackpc + 2 );
138
+ __HAL_WRITE32 (addr , 0x18 , stackpc + 2 );
136
139
}
137
140
138
141
// clear Hard Fault Status Register
139
- HAL_WRITE32 (0xE000ED2C , 0x0 , HAL_READ32 (0xE000ED2C , 0x0 ));
142
+ __HAL_WRITE32 (0xE000ED2C , 0x0 , __HAL_READ32 (0xE000ED2C , 0x0 ));
140
143
return ;
141
144
}
142
145
}
@@ -155,8 +158,11 @@ void TRAP_HardFaultHandler_Patch(void)
155
158
#endif
156
159
157
160
// Override original Interrupt Vector Table
158
- INFRA_START_SECTION void TRAP_OverrideTable (uint32_t stackp )
161
+ void TRAP_OverrideTable (uint32_t stackp )
159
162
{
163
+ // Set MSP
164
+ __set_MSP (stackp );
165
+
160
166
// Override NMI Handler
161
167
NewVectorTable [2 ] = (VECTOR_Func ) TRAP_NMIHandler ;
162
168
@@ -165,85 +171,59 @@ INFRA_START_SECTION void TRAP_OverrideTable(uint32_t stackp)
165
171
#endif
166
172
}
167
173
168
- INFRA_START_SECTION void PLAT_Init (void )
174
+ // Image2 Entry Function
175
+ void PLAT_Start (void )
169
176
{
170
177
uint32_t val ;
171
178
172
- //Set SPS lower voltage
173
- val = __RTK_CTRL_READ32 (REG_SYS_EFUSE_SYSCFG0 );
174
- val &= 0xf0ffffff ;
175
- val |= 0x6000000 ;
176
- __RTK_CTRL_WRITE32 (REG_SYS_EFUSE_SYSCFG0 , val );
177
-
178
- //xtal buffer driving current
179
- val = __RTK_CTRL_READ32 (REG_SYS_XTAL_CTRL1 );
180
- val &= ~(BIT_MASK_SYS_XTAL_DRV_RF1 << BIT_SHIFT_SYS_XTAL_DRV_RF1 );
181
- val |= BIT_SYS_XTAL_DRV_RF1 (1 );
182
- __RTK_CTRL_WRITE32 (REG_SYS_XTAL_CTRL1 , val );
183
- }
184
-
185
- //3 Image 2
186
- extern _LONG_CALL_ void * __rtl_memset_v1_00 (void * m , int c , size_t n );
187
-
188
- //extern uint32_t mbed_stack_isr_start;
189
- //extern uint32_t mbed_stack_isr_size;
190
- INFRA_START_SECTION void PLAT_Start (void )
191
- {
192
- u8 isFlashEn ;
193
- #if defined ( __ICCARM__ )
179
+ #if defined (__ICCARM__ )
194
180
__iar_data_init_app ();
195
181
#endif
182
+
196
183
// Clear RAM BSS
197
- __rtl_memset_v1_00 ((void * )__bss_start__ , 0 , __bss_end__ - __bss_start__ );
184
+ #ifdef __GNUC__
185
+ __memset ((void * )__bss_sram1_start__ , 0 , __bss_sram1_end__ - __bss_sram1_start__ );
186
+ __memset ((void * )__bss_sram2_start__ , 0 , __bss_sram2_end__ - __bss_sram2_start__ );
187
+ #else
188
+ __memset ((void * )__bss_start__ , 0 , __bss_end__ - __bss_start__ );
189
+ #endif
198
190
191
+ #if defined (__CC_ARM )
192
+ TRAP_OverrideTable ((uint32_t )& Image$$ARM_LIB_STACK$$ZI$$Limit );
193
+ #elif defined (__ICCARM__ )
194
+ TRAP_OverrideTable ((uint32_t )& CSTACK$$Limit );
195
+ #elif defined (__GNUC__ )
196
+ TRAP_OverrideTable ((uint32_t )& __StackTop );
197
+ #else
199
198
TRAP_OverrideTable (0x1FFFFFFC );
200
- /* add by Ian --for mbed isr stack address setting */
201
- __set_MSP (0x1fffffbc );
202
-
203
-
204
- #ifdef CONFIG_SPIC_MODULE
205
- if ((HAL_PERI_ON_READ32 (REG_SOC_FUNC_EN ) & BIT_SOC_FLASH_EN ) != 0 ) {
206
- isFlashEn = 1 ;
207
- } else {
208
- isFlashEn = 0 ;
209
- }
210
199
#endif
211
200
212
- #ifdef CONFIG_TIMER_MODULE
213
201
HalTimerOpInit_Patch (& HalTimerOp );
214
- #endif
215
-
216
- //DBG_8195A("===== Enter Image 2 ====\n");
217
-
218
-
219
202
SystemCoreClockUpdate ();
220
203
221
- if (isFlashEn ) {
222
- #if CONFIG_SPIC_EN && SPIC_CALIBRATION_IN_NVM
223
- SpicNVMCalLoadAll ();
224
- #endif
225
- SpicReadIDRtl8195A ();
226
- // turn off SPIC for power saving
227
- SpicDisableRtl8195A ();
228
- }
204
+ // Set SPS lower voltage
205
+ val = __RTK_CTRL_READ32 (REG_SYS_EFUSE_SYSCFG0 );
206
+ val &= 0xf0ffffff ;
207
+ val |= 0x6000000 ;
208
+ __RTK_CTRL_WRITE32 (REG_SYS_EFUSE_SYSCFG0 , val );
209
+
210
+ // xtal buffer driving current
211
+ val = __RTK_CTRL_READ32 (REG_SYS_XTAL_CTRL1 );
212
+ val &= ~(BIT_MASK_SYS_XTAL_DRV_RF1 << BIT_SHIFT_SYS_XTAL_DRV_RF1 );
213
+ val |= BIT_SYS_XTAL_DRV_RF1 (1 );
214
+ __RTK_CTRL_WRITE32 (REG_SYS_XTAL_CTRL1 , val );
229
215
216
+ // Initialize SPIC, then disable it for power saving.
217
+ if ((HAL_PERI_ON_READ32 (REG_SOC_FUNC_EN ) & BIT_SOC_FLASH_EN ) != 0 ) {
218
+ SpicNVMCalLoadAll ();
219
+ SpicReadIDRtl8195A ();
220
+ SpicDisableRtl8195A ();
221
+ }
230
222
231
- PLAT_Init ();
232
223
#ifdef CONFIG_TIMER_MODULE
233
- Calibration32k ();
234
-
235
- #ifdef CONFIG_WDG
236
- #ifdef CONFIG_WDG_TEST
237
- WDGInit ();
238
- #endif //CONFIG_WDG_TEST
239
- #endif //CONFIG_WDG
240
- #endif //CONFIG_TIMER_MODULE
241
-
242
- #ifdef CONFIG_SOC_PS_MODULE
243
- //InitSoCPM();
244
- #endif
245
- /* GPIOA_7 does not pull high at power on. It causes SDIO Device
246
- * hardware to enable automatically and occupy GPIOA[7:0] */
224
+ Calibration32k ();
225
+ #endif
226
+
247
227
#ifndef CONFIG_SDIO_DEVICE_EN
248
228
SDIO_DEV_Disable ();
249
229
#endif
@@ -256,37 +236,41 @@ extern void SVC_Handler(void);
256
236
extern void PendSV_Handler (void );
257
237
extern void SysTick_Handler (void );
258
238
239
+ // The Main App entry point
259
240
#if defined (__CC_ARM )
260
241
__asm void ARM_PLAT_Main (void )
261
242
{
262
- IMPORT SystemInit
263
- IMPORT __main
264
- BL SystemInit
265
- BL __main
243
+ IMPORT SystemInit
244
+ IMPORT __main
245
+ BL SystemInit
246
+ BL __main
247
+ }
248
+ #elif defined (__ICCARM__ )
249
+ extern void __iar_program_start (void );
250
+
251
+ void IAR_PLAT_Main (void )
252
+ {
253
+ SystemInit ();
254
+ __iar_program_start ();
266
255
}
267
256
#endif
268
257
269
- extern void __iar_program_start ( void );
270
- // The Main App entry point
271
258
void PLAT_Main (void )
272
259
{
273
260
TRAP_Init ((void * )SVC_Handler , (void * )PendSV_Handler , (void * )SysTick_Handler );
274
261
275
- #if defined (__ICCARM__ )
276
- //IAR_PLAT_Main();
277
- SystemInit ();
278
- __iar_program_start ();
279
- #elif defined (__CC_ARM )
280
- ARM_PLAT_Main ();
281
-
282
- #elif defined (__GNUC__ )
283
- __asm (
284
- "ldr r0, =SystemInit \n"
262
+ #if defined (__CC_ARM )
263
+ ARM_PLAT_Main ();
264
+ #elif defined (__ICCARM__ )
265
+ IAR_PLAT_Main ();
266
+ #else
267
+ __asm ("ldr r0, =SystemInit \n"
285
268
"blx r0 \n"
286
269
"ldr r0, =_start \n"
287
270
"bx r0 \n"
288
271
);
289
272
#endif
273
+
290
274
// Never reached
291
- for (;;);
275
+ for (;;);
292
276
}
0 commit comments