mirror of https://github.com/ARMmbed/mbed-os.git
Merge branch 'master' of https://github.com/mbedmicro/mbed
commit
27431a156c
|
@ -52,7 +52,7 @@ Typedef definitions
|
|||
/*******************************************************************************
|
||||
Macro definitions
|
||||
*******************************************************************************/
|
||||
#define DUMMY_ACCESS (*(volatile unsigned long *)(OSTM0CNT))
|
||||
#define DUMMY_ACCESS OSTM0CNT
|
||||
|
||||
/* #define CACHE_WRITEBACK */
|
||||
|
||||
|
|
|
@ -515,10 +515,10 @@ extern "C" {
|
|||
if (RZA_IO_RegRead_16(
|
||||
&g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
|
||||
/* read */
|
||||
__nop();
|
||||
__NOP();
|
||||
} else {
|
||||
/* write */
|
||||
__nop();
|
||||
__NOP();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -629,7 +629,7 @@ extern "C" {
|
|||
if (RZA_IO_RegRead_16(
|
||||
&g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
|
||||
/* read */
|
||||
__nop();
|
||||
__NOP();
|
||||
} else {
|
||||
/* write */
|
||||
EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
|
||||
|
|
|
@ -56,7 +56,7 @@ Typedef definitions
|
|||
/*******************************************************************************
|
||||
Macro definitions
|
||||
*******************************************************************************/
|
||||
#define DUMMY_ACCESS (*(volatile unsigned long *)(OSTM0CNT))
|
||||
#define DUMMY_ACCESS OSTM0CNT
|
||||
|
||||
/* #define CACHE_WRITEBACK */
|
||||
|
||||
|
|
|
@ -237,6 +237,7 @@ void USBHALHost::_usbisr(void) {
|
|||
|
||||
void USBHALHost::UsbIrqhandler() {
|
||||
uint32_t int_status = ohciwrapp_reg_r(OHCI_REG_INTERRUPTSTATUS) & ohciwrapp_reg_r(OHCI_REG_INTERRUPTENABLE);
|
||||
uint32_t data;
|
||||
|
||||
if (int_status != 0) { //Is there something to actually process?
|
||||
// Root hub status change interrupt
|
||||
|
@ -254,7 +255,8 @@ void USBHALHost::UsbIrqhandler() {
|
|||
wait_ms(150);
|
||||
|
||||
//Hub 0 (root hub), Port 1 (count starts at 1), Low or High speed
|
||||
deviceConnected(0, 1, ohciwrapp_reg_r(OHCI_REG_RHPORTSTATUS1) & OR_RH_PORT_LSDA);
|
||||
data = ohciwrapp_reg_r(OHCI_REG_RHPORTSTATUS1) & OR_RH_PORT_LSDA;
|
||||
deviceConnected(0, 1, data);
|
||||
}
|
||||
|
||||
//Root device disconnected
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#ifndef MBED_H
|
||||
#define MBED_H
|
||||
|
||||
#define MBED_LIBRARY_VERSION 94
|
||||
#define MBED_LIBRARY_VERSION 95
|
||||
|
||||
#include "platform.h"
|
||||
|
||||
|
|
|
@ -459,6 +459,10 @@ extern "C" void __iar_argc_argv() {
|
|||
// Linker defined symbol used by _sbrk to indicate where heap should start.
|
||||
extern "C" int __end__;
|
||||
|
||||
#if defined(TARGET_CORTEX_A)
|
||||
extern "C" uint32_t __HeapLimit;
|
||||
#endif
|
||||
|
||||
// Turn off the errno macro and use actual global variable instead.
|
||||
#undef errno
|
||||
extern "C" int errno;
|
||||
|
@ -474,6 +478,8 @@ extern "C" caddr_t _sbrk(int incr) {
|
|||
|
||||
#if defined(TARGET_ARM7)
|
||||
if (new_heap >= stack_ptr) {
|
||||
#elif defined(TARGET_CORTEX_A)
|
||||
if (new_heap >= (unsigned char*)&__HeapLimit) { /* __HeapLimit is end of heap section */
|
||||
#else
|
||||
if (new_heap >= (unsigned char*)__get_MSP()) {
|
||||
#endif
|
||||
|
|
|
@ -116,3 +116,17 @@ void us_ticker_remove_event(ticker_event_t *obj) {
|
|||
|
||||
__enable_irq();
|
||||
}
|
||||
|
||||
int us_ticker_get_next_timestamp(timestamp_t *timestamp) {
|
||||
int ret = 0;
|
||||
|
||||
/* if head is NULL, there are no pending events */
|
||||
__disable_irq();
|
||||
if (head != NULL) {
|
||||
*timestamp = head->timestamp;
|
||||
ret = 1;
|
||||
}
|
||||
__enable_irq();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ void us_ticker_irq_handler(void);
|
|||
|
||||
void us_ticker_insert_event(ticker_event_t *obj, timestamp_t timestamp, uint32_t id);
|
||||
void us_ticker_remove_event(ticker_event_t *obj);
|
||||
int us_ticker_get_next_timestamp(timestamp_t *timestamp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x1fffe0f7;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x1fffe0f8;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x1fffffff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x800;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x600;
|
||||
define symbol __ICFEDIT_size_heap__ = 0xC00;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __region_RAM2_start__ = 0x20000000;
|
||||
|
|
|
@ -7,12 +7,13 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
|
|||
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
|
||||
define symbol __ICFEDIT_region_ROM_end__ = 0x0007ffff;
|
||||
define symbol __ICFEDIT_region_NVIC_start__ = 0x1fff0000;
|
||||
define symbol __ICFEDIT_region_NVIC_end__ = 0x1fff0197;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff0198;
|
||||
define symbol __ICFEDIT_region_NVIC_end__ = 0x1fff03ff;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff0400;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x1fffffff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x4000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x4000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x8000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __region_RAM2_start__ = 0x20000000;
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x1ffffcbf;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x1ffffcc0;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x1fffffff;
|
||||
/*-Sizes-*/
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x200;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x200;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x400;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __region_RAM2_start__ = 0x20000000;
|
||||
|
|
|
@ -145,8 +145,8 @@ void SystemInit (void) {
|
|||
/* Switch to FEE Mode */
|
||||
/* MCG->C2: LOCRE0=0,??=0,RANGE0=0,HGO0=0,EREFS0=1,LP=0,IRCS=0 */
|
||||
MCG->C2 = (MCG_C2_RANGE0(0x00) | MCG_C2_EREFS0_MASK);
|
||||
/* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */
|
||||
OSC0->CR = OSC_CR_ERCLKEN_MASK;
|
||||
/* OSC0->CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=1,SC8P=1,SC16P=0 */
|
||||
OSC0->CR = OSC_CR_ERCLKEN_MASK | OSC_CR_SC8P_MASK | OSC_CR_SC4P_MASK;
|
||||
/* MCG->C1: CLKS=0,FRDIV=0,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
|
||||
MCG->C1 = (MCG_C1_CLKS(0x00) | MCG_C1_FRDIV(0x00) | MCG_C1_IRCLKEN_MASK);
|
||||
/* MCG->C4: DMX32=1,DRST_DRS=1 */
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x1ffff0bf;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x1ffff0c0;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x1fffffff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
||||
define symbol __ICFEDIT_size_heap__ = 0xA00;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x800;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x1000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __region_RAM2_start__ = 0x20000000;
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x1fffe0bf;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x1fffe0c0;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x1fffffff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x800;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x1000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x2000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __region_RAM2_start__ = 0x20000000;
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x1fff0197;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff0198;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x1fffffff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x4000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x8000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x10000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __region_RAM2_start__ = 0x20000000;
|
||||
|
|
|
@ -138,160 +138,7 @@ __vector_table
|
|||
DCD ENET_Transmit_IRQHandler ; Ethernet MAC Transmit Interrupt
|
||||
DCD ENET_Receive_IRQHandler ; Ethernet MAC Receive Interrupt
|
||||
DCD ENET_Error_IRQHandler ; Ethernet MAC Error and miscelaneous Interrupt
|
||||
DCD Default_Handler ; 102
|
||||
DCD Default_Handler ; 103
|
||||
DCD Default_Handler ; 104
|
||||
DCD Default_Handler ; 105
|
||||
DCD Default_Handler ; 106
|
||||
DCD Default_Handler ; 107
|
||||
DCD Default_Handler ; 108
|
||||
DCD Default_Handler ; 109
|
||||
DCD Default_Handler ; 110
|
||||
DCD Default_Handler ; 111
|
||||
DCD Default_Handler ; 112
|
||||
DCD Default_Handler ; 113
|
||||
DCD Default_Handler ; 114
|
||||
DCD Default_Handler ; 115
|
||||
DCD Default_Handler ; 116
|
||||
DCD Default_Handler ; 117
|
||||
DCD Default_Handler ; 118
|
||||
DCD Default_Handler ; 119
|
||||
DCD Default_Handler ; 120
|
||||
DCD Default_Handler ; 121
|
||||
DCD Default_Handler ; 122
|
||||
DCD Default_Handler ; 123
|
||||
DCD Default_Handler ; 124
|
||||
DCD Default_Handler ; 125
|
||||
DCD Default_Handler ; 126
|
||||
DCD Default_Handler ; 127
|
||||
DCD Default_Handler ; 128
|
||||
DCD Default_Handler ; 129
|
||||
DCD Default_Handler ; 130
|
||||
DCD Default_Handler ; 131
|
||||
DCD Default_Handler ; 132
|
||||
DCD Default_Handler ; 133
|
||||
DCD Default_Handler ; 134
|
||||
DCD Default_Handler ; 135
|
||||
DCD Default_Handler ; 136
|
||||
DCD Default_Handler ; 137
|
||||
DCD Default_Handler ; 138
|
||||
DCD Default_Handler ; 139
|
||||
DCD Default_Handler ; 140
|
||||
DCD Default_Handler ; 141
|
||||
DCD Default_Handler ; 142
|
||||
DCD Default_Handler ; 143
|
||||
DCD Default_Handler ; 144
|
||||
DCD Default_Handler ; 145
|
||||
DCD Default_Handler ; 146
|
||||
DCD Default_Handler ; 147
|
||||
DCD Default_Handler ; 148
|
||||
DCD Default_Handler ; 149
|
||||
DCD Default_Handler ; 150
|
||||
DCD Default_Handler ; 151
|
||||
DCD Default_Handler ; 152
|
||||
DCD Default_Handler ; 153
|
||||
DCD Default_Handler ; 154
|
||||
DCD Default_Handler ; 155
|
||||
DCD Default_Handler ; 156
|
||||
DCD Default_Handler ; 157
|
||||
DCD Default_Handler ; 158
|
||||
DCD Default_Handler ; 159
|
||||
DCD Default_Handler ; 160
|
||||
DCD Default_Handler ; 161
|
||||
DCD Default_Handler ; 162
|
||||
DCD Default_Handler ; 163
|
||||
DCD Default_Handler ; 164
|
||||
DCD Default_Handler ; 165
|
||||
DCD Default_Handler ; 166
|
||||
DCD Default_Handler ; 167
|
||||
DCD Default_Handler ; 168
|
||||
DCD Default_Handler ; 169
|
||||
DCD Default_Handler ; 170
|
||||
DCD Default_Handler ; 171
|
||||
DCD Default_Handler ; 172
|
||||
DCD Default_Handler ; 173
|
||||
DCD Default_Handler ; 174
|
||||
DCD Default_Handler ; 175
|
||||
DCD Default_Handler ; 176
|
||||
DCD Default_Handler ; 177
|
||||
DCD Default_Handler ; 178
|
||||
DCD Default_Handler ; 179
|
||||
DCD Default_Handler ; 180
|
||||
DCD Default_Handler ; 181
|
||||
DCD Default_Handler ; 182
|
||||
DCD Default_Handler ; 183
|
||||
DCD Default_Handler ; 184
|
||||
DCD Default_Handler ; 185
|
||||
DCD Default_Handler ; 186
|
||||
DCD Default_Handler ; 187
|
||||
DCD Default_Handler ; 188
|
||||
DCD Default_Handler ; 189
|
||||
DCD Default_Handler ; 190
|
||||
DCD Default_Handler ; 191
|
||||
DCD Default_Handler ; 192
|
||||
DCD Default_Handler ; 193
|
||||
DCD Default_Handler ; 194
|
||||
DCD Default_Handler ; 195
|
||||
DCD Default_Handler ; 196
|
||||
DCD Default_Handler ; 197
|
||||
DCD Default_Handler ; 198
|
||||
DCD Default_Handler ; 199
|
||||
DCD Default_Handler ; 200
|
||||
DCD Default_Handler ; 201
|
||||
DCD Default_Handler ; 202
|
||||
DCD Default_Handler ; 203
|
||||
DCD Default_Handler ; 204
|
||||
DCD Default_Handler ; 205
|
||||
DCD Default_Handler ; 206
|
||||
DCD Default_Handler ; 207
|
||||
DCD Default_Handler ; 208
|
||||
DCD Default_Handler ; 209
|
||||
DCD Default_Handler ; 210
|
||||
DCD Default_Handler ; 211
|
||||
DCD Default_Handler ; 212
|
||||
DCD Default_Handler ; 213
|
||||
DCD Default_Handler ; 214
|
||||
DCD Default_Handler ; 215
|
||||
DCD Default_Handler ; 216
|
||||
DCD Default_Handler ; 217
|
||||
DCD Default_Handler ; 218
|
||||
DCD Default_Handler ; 219
|
||||
DCD Default_Handler ; 220
|
||||
DCD Default_Handler ; 221
|
||||
DCD Default_Handler ; 222
|
||||
DCD Default_Handler ; 223
|
||||
DCD Default_Handler ; 224
|
||||
DCD Default_Handler ; 225
|
||||
DCD Default_Handler ; 226
|
||||
DCD Default_Handler ; 227
|
||||
DCD Default_Handler ; 228
|
||||
DCD Default_Handler ; 229
|
||||
DCD Default_Handler ; 230
|
||||
DCD Default_Handler ; 231
|
||||
DCD Default_Handler ; 232
|
||||
DCD Default_Handler ; 233
|
||||
DCD Default_Handler ; 234
|
||||
DCD Default_Handler ; 235
|
||||
DCD Default_Handler ; 236
|
||||
DCD Default_Handler ; 237
|
||||
DCD Default_Handler ; 238
|
||||
DCD Default_Handler ; 239
|
||||
DCD Default_Handler ; 240
|
||||
DCD Default_Handler ; 241
|
||||
DCD Default_Handler ; 242
|
||||
DCD Default_Handler ; 243
|
||||
DCD Default_Handler ; 244
|
||||
DCD Default_Handler ; 245
|
||||
DCD Default_Handler ; 246
|
||||
DCD Default_Handler ; 247
|
||||
DCD Default_Handler ; 248
|
||||
DCD Default_Handler ; 249
|
||||
DCD Default_Handler ; 250
|
||||
DCD Default_Handler ; 251
|
||||
DCD Default_Handler ; 252
|
||||
DCD Default_Handler ; 253
|
||||
DCD Default_Handler ; 254
|
||||
DCD Default_Handler ; 255
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;Flash Configuration
|
||||
;;16-byte flash configuration field that stores default protection settings (loaded on reset)
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
; *(InRoot$$Sections)
|
||||
; .ANY (+RO)
|
||||
; }
|
||||
; RW_IRAM1 0x20000000 0x00004000 {
|
||||
; RW_IRAM1 0x20000000 0x00008000 {
|
||||
; .ANY (+RW +ZI)
|
||||
; }
|
||||
;}
|
||||
|
|
|
@ -9,8 +9,9 @@ define symbol __ICFEDIT_region_ROM_end__ = 0x0003FFFF;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x20002000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x20007FFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x1000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0xc00;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x1800;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __code_start_soft_device__ = 0x0;
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x100000FF;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x10000100;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x10007FDF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x800;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x2000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __CRP_start__ = 0x000002FC;
|
||||
|
|
|
@ -11,7 +11,7 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x100000BF;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000C0;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x10001FDF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x800;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x800;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x020000FF;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x02000100;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x02008FDF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x2000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1200;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x2400;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __CRP_start__ = 0x000002FC;
|
||||
|
|
|
@ -12,8 +12,9 @@ define symbol __ICFEDIT_region_RAM_start__ = 0x100000C8;
|
|||
define symbol __ICFEDIT_region_RAM_end__ = 0x10007FDF;
|
||||
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x800;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x1000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x2000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __CRP_start__ = 0x000002FC;
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x100000E7;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000E8;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x1000FFDF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x800;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x1000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x4000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __CRP_start__ = 0x000002FC;
|
||||
|
|
|
@ -20,8 +20,9 @@ define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_
|
|||
define region AHB_RAM_region = mem:[from _AHB_RAM_start__ to _AHB_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
define symbol __size_cstack__ = 0x800;
|
||||
define symbol __size_heap__ = 0x800;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x4000;
|
||||
define symbol __size_heap__ = 0x8000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -368,23 +368,46 @@ typedef struct { /*!< (@ 0x40028000) WKT Structure
|
|||
} LPC_WKT_TypeDef;
|
||||
/*@}*/ /* end of group LPC8xx_WKT */
|
||||
|
||||
|
||||
/*------------- Multi-Rate Timer(MRT) --------------------------------------------------*/
|
||||
typedef struct {
|
||||
__IO uint32_t INTVAL;
|
||||
__IO uint32_t TIMER;
|
||||
__IO uint32_t CTRL;
|
||||
__IO uint32_t STAT;
|
||||
} MRT_Channel_cfg_Type;
|
||||
|
||||
typedef struct {
|
||||
MRT_Channel_cfg_Type Channel[4];
|
||||
uint32_t Reserved0[1];
|
||||
__IO uint32_t IDLE_CH;
|
||||
__IO uint32_t IRQ_FLAG;
|
||||
//New, Copied from lpc824
|
||||
/**
|
||||
* @brief Multi-Rate Timer (MRT) (MRT)
|
||||
*/
|
||||
typedef struct { /*!< (@ 0x40004000) MRT Structure */
|
||||
__IO uint32_t INTVAL0; /*!< (@ 0x40004000) MRT0 Time interval value register. This value
|
||||
is loaded into the TIMER0 register. */
|
||||
__I uint32_t TIMER0; /*!< (@ 0x40004004) MRT0 Timer register. This register reads the
|
||||
value of the down-counter. */
|
||||
__IO uint32_t CTRL0; /*!< (@ 0x40004008) MRT0 Control register. This register controls
|
||||
the MRT0 modes. */
|
||||
__IO uint32_t STAT0; /*!< (@ 0x4000400C) MRT0 Status register. */
|
||||
__IO uint32_t INTVAL1; /*!< (@ 0x40004010) MRT0 Time interval value register. This value
|
||||
is loaded into the TIMER0 register. */
|
||||
__I uint32_t TIMER1; /*!< (@ 0x40004014) MRT0 Timer register. This register reads the
|
||||
value of the down-counter. */
|
||||
__IO uint32_t CTRL1; /*!< (@ 0x40004018) MRT0 Control register. This register controls
|
||||
the MRT0 modes. */
|
||||
__IO uint32_t STAT1; /*!< (@ 0x4000401C) MRT0 Status register. */
|
||||
__IO uint32_t INTVAL2; /*!< (@ 0x40004020) MRT0 Time interval value register. This value
|
||||
is loaded into the TIMER0 register. */
|
||||
__I uint32_t TIMER2; /*!< (@ 0x40004024) MRT0 Timer register. This register reads the
|
||||
value of the down-counter. */
|
||||
__IO uint32_t CTRL2; /*!< (@ 0x40004028) MRT0 Control register. This register controls
|
||||
the MRT0 modes. */
|
||||
__IO uint32_t STAT2; /*!< (@ 0x4000402C) MRT0 Status register. */
|
||||
__IO uint32_t INTVAL3; /*!< (@ 0x40004030) MRT0 Time interval value register. This value
|
||||
is loaded into the TIMER0 register. */
|
||||
__I uint32_t TIMER3; /*!< (@ 0x40004034) MRT0 Timer register. This register reads the
|
||||
value of the down-counter. */
|
||||
__IO uint32_t CTRL3; /*!< (@ 0x40004038) MRT0 Control register. This register controls
|
||||
the MRT0 modes. */
|
||||
__IO uint32_t STAT3; /*!< (@ 0x4000403C) MRT0 Status register. */
|
||||
__I uint32_t RESERVED0[45];
|
||||
__I uint32_t IDLE_CH; /*!< (@ 0x400040F4) Idle channel register. This register returns
|
||||
the number of the first idle channel. */
|
||||
__IO uint32_t IRQ_FLAG; /*!< (@ 0x400040F8) Global interrupt flag register */
|
||||
} LPC_MRT_TypeDef;
|
||||
|
||||
|
||||
/*------------- Universal Asynchronous Receiver Transmitter (USART) -----------*/
|
||||
/** @addtogroup LPC8xx_UART LPC8xx Universal Asynchronous Receiver/Transmitter
|
||||
@{
|
||||
|
|
|
@ -12,7 +12,7 @@ define symbol __ICFEDIT_region_RAM_start__ = 0x100000C0;
|
|||
define symbol __ICFEDIT_region_RAM_end__ = 0x100003FF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x100;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x100;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x200;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __CRP_start__ = 0x000002FC;
|
||||
|
|
|
@ -11,8 +11,8 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x100000BF;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000C0;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x10000FFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x200;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x400;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x800;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __CRP_start__ = 0x000002FC;
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
|
||||
/*-Specials-*/
|
||||
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
|
||||
define symbol __ICFEDIT_region_ROM_end__ = 0x00007FFF;
|
||||
define symbol __ICFEDIT_region_NVIC_start__ = 0x10000000;
|
||||
define symbol __ICFEDIT_region_NVIC_end__ = 0x100000BF;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000C0;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x10001FFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
||||
define symbol __ICFEDIT_size_heap__ = 0xA00;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __CRP_start__ = 0x000002FC;
|
||||
define symbol __CRP_end__ = 0x000002FF;
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__] - mem:[from __CRP_start__ to __CRP_end__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
|
||||
define region CRP_region = mem:[from __CRP_start__ to __CRP_end__];
|
||||
|
||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
initialize by copy { readwrite };
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
|
||||
place in ROM_region { readonly };
|
||||
place in RAM_region { readwrite,
|
||||
block HEAP, block CSTACK };
|
||||
place in CRP_region { section .crp };
|
|
@ -0,0 +1,216 @@
|
|||
/**************************************************
|
||||
*
|
||||
* Part one of the system initialization code, contains low-level
|
||||
* initialization, plain thumb variant.
|
||||
*
|
||||
* Copyright 2011 IAR Systems. All rights reserved.
|
||||
*
|
||||
* $Revision: 47876 $
|
||||
*
|
||||
**************************************************/
|
||||
|
||||
;
|
||||
; The modules in this file are included in the libraries, and may be replaced
|
||||
; by any user-defined modules that define the PUBLIC symbol _program_start or
|
||||
; a user defined start symbol.
|
||||
; To override the cstartup defined in the library, simply add your modified
|
||||
; version to the workbench project.
|
||||
;
|
||||
; The vector table is normally located at address 0.
|
||||
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
|
||||
; The name "__vector_table" has special meaning for C-SPY:
|
||||
; it is where the SP start value is found, and the NVIC vector
|
||||
; table register (VTOR) is initialized to this address if != 0.
|
||||
;
|
||||
; Cortex-M version
|
||||
;
|
||||
|
||||
|
||||
MODULE ?cstartup
|
||||
|
||||
;; Forward declaration of sections.
|
||||
SECTION CSTACK:DATA:NOROOT(3)
|
||||
|
||||
SECTION .intvec:CODE:NOROOT(2)
|
||||
|
||||
EXTERN __iar_program_start
|
||||
EXTERN SystemInit
|
||||
PUBLIC __vector_table
|
||||
PUBLIC __vector_table_0x1c
|
||||
PUBLIC __Vectors
|
||||
PUBLIC __Vectors_End
|
||||
PUBLIC __Vectors_Size
|
||||
|
||||
DATA
|
||||
|
||||
__vector_table
|
||||
DCD sfe(CSTACK)
|
||||
DCD Reset_Handler
|
||||
DCD NMI_Handler
|
||||
DCD HardFault_Handler
|
||||
DCD 0
|
||||
DCD 0
|
||||
DCD 0
|
||||
__vector_table_0x1c
|
||||
DCD 0
|
||||
DCD 0
|
||||
DCD 0
|
||||
DCD 0
|
||||
DCD SVC_Handler
|
||||
DCD 0
|
||||
DCD 0
|
||||
DCD PendSV_Handler
|
||||
DCD SysTick_Handler
|
||||
|
||||
; External Interrupts
|
||||
DCD SPI0_IRQHandler ; SPI0 controller
|
||||
DCD SPI1_IRQHandler ; SPI1 controller
|
||||
DCD 0 ; Reserved
|
||||
DCD UART0_IRQHandler ; UART0
|
||||
DCD UART1_IRQHandler ; UART1
|
||||
DCD UART2_IRQHandler ; UART2
|
||||
DCD 0 ; Reserved
|
||||
DCD I2C1_IRQHandler ; I2C1 controller
|
||||
DCD I2C0_IRQHandler ; I2C0 controller
|
||||
DCD SCT_IRQHandler ; Smart Counter Timer
|
||||
DCD MRT_IRQHandler ; Multi-Rate Timer
|
||||
DCD CMP_IRQHandler ; Comparator
|
||||
DCD WDT_IRQHandler ; PIO1 (0:11)
|
||||
DCD BOD_IRQHandler ; Brown Out Detect
|
||||
DCD Flash_IRQHandler ; Flash interrupt
|
||||
DCD WKT_IRQHandler ; Wakeup timer
|
||||
DCD ADC_SEQA_IRQHandler ; ADC sequence A completion
|
||||
DCD ADC_SEQB_IRQHandler ; ADC sequence B completion
|
||||
DCD ADC_THCMP_IRQHandler ; ADC threshold compare
|
||||
DCD ADC_OVR_IRQHandler ; ADC overrun
|
||||
DCD DMA__RQHandler ; DMA interrupt
|
||||
DCD I2C2_IRQHandler ; I2C2 controller
|
||||
DCD I2C3_IRQHandler ; I2C3 controller
|
||||
DCD 0 ; Reserved
|
||||
DCD PININT0_IRQHandler ; PIO INT0
|
||||
DCD PININT1_IRQHandler ; PIO INT1
|
||||
DCD PININT2_IRQHandler ; PIO INT2
|
||||
DCD PININT3_IRQHandler ; PIO INT3
|
||||
DCD PININT4_IRQHandler ; PIO INT4
|
||||
DCD PININT5_IRQHandler ; PIO INT5
|
||||
DCD PININT6_IRQHandler ; PIO INT6
|
||||
DCD PININT7_IRQHandler ; PIO INT7
|
||||
__Vectors_End
|
||||
|
||||
__Vectors EQU __vector_table
|
||||
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
;; Default interrupt handlers.
|
||||
;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
THUMB
|
||||
PUBWEAK Reset_Handler
|
||||
SECTION .text:CODE:NOROOT:REORDER(2)
|
||||
Reset_Handler
|
||||
LDR R0, =SystemInit
|
||||
BLX R0
|
||||
LDR R0, =__iar_program_start
|
||||
BX R0
|
||||
|
||||
PUBWEAK NMI_Handler
|
||||
PUBWEAK HardFault_Handler
|
||||
PUBWEAK SVC_Handler
|
||||
PUBWEAK PendSV_Handler
|
||||
PUBWEAK SysTick_Handler
|
||||
PUBWEAK SPI0_IRQHandler
|
||||
PUBWEAK SPI1_IRQHandler
|
||||
PUBWEAK UART0_IRQHandler
|
||||
PUBWEAK UART1_IRQHandler
|
||||
PUBWEAK UART2_IRQHandler
|
||||
PUBWEAK I2C1_IRQHandler
|
||||
PUBWEAK I2C0_IRQHandler
|
||||
PUBWEAK SCT_IRQHandler
|
||||
PUBWEAK MRT_IRQHandler
|
||||
PUBWEAK CMP_IRQHandler
|
||||
PUBWEAK WDT_IRQHandler
|
||||
PUBWEAK BOD_IRQHandler
|
||||
PUBWEAK Flash_IRQHandler
|
||||
PUBWEAK WKT_IRQHandler
|
||||
PUBWEAK ADC_SEQA_IRQHandler
|
||||
PUBWEAK ADC_SEQB_IRQHandler
|
||||
PUBWEAK ADC_THCMP_IRQHandler
|
||||
PUBWEAK ADC_OVR_IRQHandler
|
||||
PUBWEAK DMA__RQHandler
|
||||
PUBWEAK I2C2_IRQHandler
|
||||
PUBWEAK I2C3_IRQHandler
|
||||
PUBWEAK PININT0_IRQHandler
|
||||
PUBWEAK PININT1_IRQHandler
|
||||
PUBWEAK PININT2_IRQHandler
|
||||
PUBWEAK PININT3_IRQHandler
|
||||
PUBWEAK PININT4_IRQHandler
|
||||
PUBWEAK PININT5_IRQHandler
|
||||
PUBWEAK PININT6_IRQHandler
|
||||
PUBWEAK PININT7_IRQHandler
|
||||
|
||||
SECTION .text:CODE:REORDER:NOROOT(1)
|
||||
THUMB
|
||||
|
||||
NMI_Handler
|
||||
HardFault_Handler
|
||||
SVC_Handler
|
||||
PendSV_Handler
|
||||
SysTick_Handler
|
||||
SPI0_IRQHandler
|
||||
SPI1_IRQHandler
|
||||
UART0_IRQHandler
|
||||
UART1_IRQHandler
|
||||
UART2_IRQHandler
|
||||
I2C1_IRQHandler
|
||||
I2C0_IRQHandler
|
||||
SCT_IRQHandler
|
||||
MRT_IRQHandler
|
||||
CMP_IRQHandler
|
||||
WDT_IRQHandler
|
||||
BOD_IRQHandler
|
||||
Flash_IRQHandler
|
||||
WKT_IRQHandler
|
||||
ADC_SEQA_IRQHandler
|
||||
ADC_SEQB_IRQHandler
|
||||
ADC_THCMP_IRQHandler
|
||||
ADC_OVR_IRQHandler
|
||||
DMA__RQHandler
|
||||
I2C2_IRQHandler
|
||||
I2C3_IRQHandler
|
||||
PININT0_IRQHandler
|
||||
PININT1_IRQHandler
|
||||
PININT2_IRQHandler
|
||||
PININT3_IRQHandler
|
||||
PININT4_IRQHandler
|
||||
PININT5_IRQHandler
|
||||
PININT6_IRQHandler
|
||||
PININT7_IRQHandler
|
||||
Default_IRQHandler
|
||||
B Default_IRQHandler
|
||||
|
||||
SECTION .crp:CODE:ROOT(2)
|
||||
DATA
|
||||
/* Code Read Protection
|
||||
NO_ISP 0x4E697370 - Prevents sampling of pin PIO0_1 for entering ISP mode
|
||||
CRP1 0x12345678 - Write to RAM command cannot access RAM below 0x10000300.
|
||||
- Copy RAM to flash command can not write to Sector 0.
|
||||
- Erase command can erase Sector 0 only when all sectors
|
||||
are selected for erase.
|
||||
- Compare command is disabled.
|
||||
- Read Memory command is disabled.
|
||||
CRP2 0x87654321 - Read Memory is disabled.
|
||||
- Write to RAM is disabled.
|
||||
- "Go" command is disabled.
|
||||
- Copy RAM to flash is disabled.
|
||||
- Compare is disabled.
|
||||
CRP3 0x43218765 - Access to chip via the SWD pins is disabled. ISP entry
|
||||
by pulling PIO0_1 LOW is disabled if a valid user code is
|
||||
present in flash sector 0.
|
||||
Caution: If CRP3 is selected, no future factory testing can be
|
||||
performed on the device.
|
||||
*/
|
||||
DCD 0xFFFFFFFF
|
||||
|
||||
END
|
|
@ -1,13 +1,14 @@
|
|||
/* Linker script for mbed LPC1768 */
|
||||
/* Linker script for mbed RZ_A1H */
|
||||
|
||||
/* Linker script to configure memory regions. */
|
||||
MEMORY
|
||||
{
|
||||
FLASH (rx) : ORIGIN = 0x20000000, LENGTH = 512K
|
||||
RAM (rwx) : ORIGIN = 0x20080000, LENGTH = (1M)
|
||||
|
||||
USB_RAM(rwx) : ORIGIN = 0x20180000, LENGTH = 16K
|
||||
ETH_RAM(rwx) : ORIGIN = 0x20280000, LENGTH = 16K
|
||||
ROM (rx) : ORIGIN = 0x00000000, LENGTH = 0x02000000
|
||||
BOOT_LOADER (rx) : ORIGIN = 0x18000000, LENGTH = 0x00004000
|
||||
SFLASH (rx) : ORIGIN = 0x18004000, LENGTH = 0x07FFC000
|
||||
L_TTB (rw) : ORIGIN = 0x20000000, LENGTH = 0x00004000
|
||||
RAM (rwx) : ORIGIN = 0x20020000, LENGTH = 0x00700000
|
||||
RAM_NC (rwx) : ORIGIN = 0x20900000, LENGTH = 0x00100000
|
||||
}
|
||||
|
||||
/* Linker script to place sections and symbol values. Should be used together
|
||||
|
@ -40,9 +41,21 @@ ENTRY(Reset_Handler)
|
|||
|
||||
SECTIONS
|
||||
{
|
||||
.boot :
|
||||
{
|
||||
KEEP(*(.boot_loader))
|
||||
} > BOOT_LOADER
|
||||
|
||||
.text :
|
||||
{
|
||||
|
||||
Image$$VECTORS$$Base = .;
|
||||
* (RESET)
|
||||
Image$$VECTORS$$Limit = .;
|
||||
. += 0x00000400;
|
||||
|
||||
KEEP(*(.isr_vector))
|
||||
*(SVC_TABLE)
|
||||
*(.text*)
|
||||
|
||||
KEEP(*(.init))
|
||||
|
@ -62,31 +75,66 @@ SECTIONS
|
|||
*(SORT(.dtors.*))
|
||||
*(.dtors)
|
||||
|
||||
Image$$RO_DATA$$Base = .;
|
||||
*(.rodata*)
|
||||
Image$$RO_DATA$$Limit = .;
|
||||
|
||||
KEEP(*(.eh_frame*))
|
||||
} > FLASH
|
||||
} > SFLASH
|
||||
|
||||
.ARM.extab :
|
||||
{
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} > FLASH
|
||||
} > SFLASH
|
||||
|
||||
__exidx_start = .;
|
||||
.ARM.exidx :
|
||||
{
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
} > FLASH
|
||||
} > SFLASH
|
||||
__exidx_end = .;
|
||||
|
||||
|
||||
.copy.table :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__copy_table_start__ = .;
|
||||
LONG (__etext)
|
||||
LONG (__data_start__)
|
||||
LONG (__data_end__ - __data_start__)
|
||||
LONG (__etext2)
|
||||
LONG (__nc_data_start)
|
||||
LONG (__nc_data_end - __nc_data_start)
|
||||
__copy_table_end__ = .;
|
||||
} > SFLASH
|
||||
|
||||
.zero.table :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__zero_table_start__ = .;
|
||||
LONG (__bss_start__)
|
||||
LONG (__bss_end__ - __bss_start__)
|
||||
LONG (__nc_bss_start)
|
||||
LONG (__nc_bss_end - __nc_bss_start)
|
||||
__zero_table_end__ = .;
|
||||
} > SFLASH
|
||||
|
||||
__etext = .;
|
||||
|
||||
.ttb :
|
||||
{
|
||||
Image$$TTB$$ZI$$Base = .;
|
||||
. += 0x00004000;
|
||||
Image$$TTB$$ZI$$Limit = .;
|
||||
} > L_TTB
|
||||
|
||||
.data : AT (__etext)
|
||||
{
|
||||
Image$$RW_DATA$$Base = .;
|
||||
__data_start__ = .;
|
||||
Image$$RW_RAM1$$Base = .;
|
||||
*(vtable)
|
||||
*(.data*)
|
||||
Image$$RW_DATA$$Limit = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
/* preinit data */
|
||||
|
@ -116,13 +164,14 @@ SECTIONS
|
|||
} > RAM
|
||||
|
||||
|
||||
.bss :
|
||||
.bss ALIGN(0x400):
|
||||
{
|
||||
Image$$ZI_DATA$$Base = .;
|
||||
__bss_start__ = .;
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
Image$$RW_RAM1$$ZI$$Limit = . ;
|
||||
Image$$ZI_DATA$$Limit = .;
|
||||
} > RAM
|
||||
|
||||
|
||||
|
@ -142,6 +191,29 @@ SECTIONS
|
|||
*(.stack)
|
||||
} > RAM
|
||||
|
||||
__etext2 = __etext + SIZEOF(.data);
|
||||
.nc_data : AT (__etext2)
|
||||
{
|
||||
Image$$RW_DATA_NC$$Base = .;
|
||||
__nc_data_start = .;
|
||||
*(NC_DATA)
|
||||
|
||||
. = ALIGN(4);
|
||||
__nc_data_end = .;
|
||||
Image$$RW_DATA_NC$$Limit = .;
|
||||
} > RAM_NC
|
||||
|
||||
.nc_bss (NOLOAD) :
|
||||
{
|
||||
Image$$ZI_DATA_NC$$Base = .;
|
||||
__nc_bss_start = .;
|
||||
*(NC_BSS)
|
||||
|
||||
. = ALIGN(4);
|
||||
__nc_bss_end = .;
|
||||
Image$$ZI_DATA_NC$$Limit = .;
|
||||
} > RAM_NC
|
||||
|
||||
/* Set stack top to end of RAM, and stack limit move down by
|
||||
* size of stack_dummy section */
|
||||
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
|
||||
|
|
|
@ -1,125 +0,0 @@
|
|||
@/*******************************************************************************
|
||||
@* DISCLAIMER
|
||||
@* This software is supplied by Renesas Electronics Corporation and is only
|
||||
@* intended for use with Renesas products. No other uses are authorized. This
|
||||
@* software is owned by Renesas Electronics Corporation and is protected under
|
||||
@* all applicable laws, including copyright laws.
|
||||
@* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
|
||||
@* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
|
||||
@* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||||
@* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
|
||||
@* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
|
||||
@* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
|
||||
@* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
|
||||
@* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
|
||||
@* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
@* Renesas reserves the right, without notice, to make changes to this software
|
||||
@* and to discontinue the availability of this software. By using this software,
|
||||
@* you agree to the additional terms and conditions found by accessing the
|
||||
@* following link:
|
||||
@* http://www.renesas.com/disclaimer
|
||||
@* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
|
||||
@*******************************************************************************/
|
||||
@/*******************************************************************************
|
||||
@* File Name : irqfiq_handler.s
|
||||
@* $Rev: 823 $
|
||||
@* $Date:: 2014-04-21 16:45:10 +0900#$
|
||||
@* Description : IRQ, FIQ handler
|
||||
@*******************************************************************************/
|
||||
|
||||
|
||||
@ Standard definitions of mode bits and interrupt (I & F) flags in PSRs
|
||||
.EQU SYS_MODE, 0x1f
|
||||
|
||||
@ INTC ICCIAR register address
|
||||
.EQU INTC_ICCIAR_ADDR, 0xE820200C
|
||||
@ INTC ICCEOIR register address
|
||||
.EQU INTC_ICCEOIR_ADDR, 0xE8202010
|
||||
@ INTC ICDABR0 register address
|
||||
.EQU INTC_ICDABR0_ADDR, 0xE8201300
|
||||
@ INTC ICDIPR0 register address
|
||||
.EQU INTC_ICDIPR0_ADDR, 0xE8201400
|
||||
@ INTC ICCHPIR register address
|
||||
.EQU INTC_ICCHPIR_ADDR, 0xE8202018
|
||||
|
||||
@==================================================================
|
||||
@ Entry point for the FIQ handler
|
||||
@==================================================================
|
||||
@ PRESERVE8
|
||||
@ .section IRQ_FIQ_HANDLER, #execinstr
|
||||
.text
|
||||
.arm
|
||||
|
||||
@ IMPORT FiqHandler_Interrupt
|
||||
@ IMPORT INTC_Handler_Interrupt
|
||||
|
||||
.global irq_handler
|
||||
.global fiq_handler
|
||||
|
||||
|
||||
@******************************************************************************
|
||||
@ Function Name : fiq_handler
|
||||
@ Description : This function is the assembler function executed when the FIQ
|
||||
@ : interrupt is generated.
|
||||
@******************************************************************************
|
||||
fiq_handler:
|
||||
B FiqHandler_Interrupt
|
||||
|
||||
|
||||
@******************************************************************************
|
||||
@ Function Name : irq_handler
|
||||
@ Description : This function is the assembler function executed when the IRQ
|
||||
@ : interrupt is generated. After saving the stack pointer and
|
||||
@ : the stack for general registers and obtaining the INTC interrupt
|
||||
@ : source ID, calls the IntcIrqHandler_interrupt function written
|
||||
@ : in C language to execute the processing for the INTC interrupt
|
||||
@ : handler corresponding to the interrupt source ID.
|
||||
@ : After the INTC interrupt handler processing, restores
|
||||
@ : the stack pointer and the general registers from the stack and
|
||||
@ : returns from the IRQ interrupt processing.
|
||||
@******************************************************************************
|
||||
irq_handler:
|
||||
SUB lr, lr, #4
|
||||
SRSDB sp!, #SYS_MODE @;; Store LR_irq and SPSR_irq in system mode stack
|
||||
CPS #SYS_MODE @;; Switch to system mode
|
||||
PUSH {r0-r3, r12} @;; Store other AAPCS registers
|
||||
LDR r1, =INTC_ICCHPIR_ADDR
|
||||
LDR r3, [r1]
|
||||
LDR r2, =INTC_ICCIAR_ADDR
|
||||
LDR r0, [r2] @;; Read ICCIAR
|
||||
LDR r2, =0x000003FF
|
||||
AND r3, r0, r2
|
||||
CMP r3, r2
|
||||
BEQ end_of_handler
|
||||
CMP r3, #0
|
||||
BNE int_active
|
||||
LDR r2, =INTC_ICDABR0_ADDR
|
||||
LDR r3, [r2]
|
||||
AND r3, r3, #0x00000001
|
||||
CMP r3, #0
|
||||
BNE int_active
|
||||
LDR r2, =INTC_ICDIPR0_ADDR
|
||||
LDR r3, [r2]
|
||||
STR r3, [r2]
|
||||
B end_of_handler
|
||||
int_active:
|
||||
PUSH {r0}
|
||||
MOV r1, sp @;;
|
||||
AND r1, r1, #4 @;; Make alignment for stack
|
||||
SUB sp, sp, r1 @;;
|
||||
PUSH {r1, lr}
|
||||
BL INTC_Handler_Interrupt @;; First argument(r0) = ICCIAR read value
|
||||
POP {r1, lr}
|
||||
ADD sp, sp, r1
|
||||
POP {r0}
|
||||
LDR r2, =INTC_ICCEOIR_ADDR
|
||||
STR r0, [r2] @;; Write ICCEOIR
|
||||
end_of_handler:
|
||||
POP {r0-r3, r12} @;; Restore registers
|
||||
RFEIA sp! @;; Return from system mode stack using RFE
|
||||
|
||||
Literals3:
|
||||
.LTORG
|
||||
|
||||
|
||||
.END
|
|
@ -16,67 +16,90 @@
|
|||
* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
|
||||
*/
|
||||
.syntax unified
|
||||
|
||||
.extern _start
|
||||
|
||||
@ Standard definitions of mode bits and interrupt (I & F) flags in PSRs
|
||||
.equ USR_MODE, 0x10
|
||||
.equ FIQ_MODE, 0x11
|
||||
.equ IRQ_MODE, 0x12
|
||||
.equ SVC_MODE, 0x13
|
||||
.equ ABT_MODE, 0x17
|
||||
.equ UND_MODE, 0x1b
|
||||
.equ SYS_MODE, 0x1f
|
||||
.equ Thum_bit, 0x20 @ CPSR/SPSR Thumb bit
|
||||
.equ USR_MODE , 0x10
|
||||
.equ FIQ_MODE , 0x11
|
||||
.equ IRQ_MODE , 0x12
|
||||
.equ SVC_MODE , 0x13
|
||||
.equ ABT_MODE , 0x17
|
||||
.equ UND_MODE , 0x1b
|
||||
.equ SYS_MODE , 0x1f
|
||||
.equ Thum_bit , 0x20 @ CPSR/SPSR Thumb bit
|
||||
|
||||
/* Memory Model
|
||||
The HEAP starts at the end of the DATA section and grows upward.
|
||||
|
||||
The STACK starts at the end of the RAM and grows downward.
|
||||
|
||||
The HEAP and stack STACK are only checked at compile time:
|
||||
(DATA_SIZE + HEAP_SIZE + STACK_SIZE) < RAM_SIZE
|
||||
|
||||
This is just a check for the bare minimum for the Heap+Stack area before
|
||||
aborting compilation, it is not the run time limit:
|
||||
Heap_Size + Stack_Size = 0x80 + 0x80 = 0x100
|
||||
*/
|
||||
.equ GICI_BASE , 0xe8202000
|
||||
.equ ICCIAR_OFFSET , 0x0000000C
|
||||
.equ ICCEOIR_OFFSET , 0x00000010
|
||||
.equ ICCHPIR_OFFSET , 0x00000018
|
||||
.equ GICD_BASE , 0xe8201000
|
||||
.equ ICDISER0_OFFSET , 0x00000100
|
||||
.equ ICDICER0_OFFSET , 0x00000180
|
||||
.equ ICDISPR0_OFFSET , 0x00000200
|
||||
.equ ICDABR0_OFFSET , 0x00000300
|
||||
.equ ICDIPR0_OFFSET , 0x00000400
|
||||
|
||||
.equ Mode_USR , 0x10
|
||||
.equ Mode_FIQ , 0x11
|
||||
.equ Mode_IRQ , 0x12
|
||||
.equ Mode_SVC , 0x13
|
||||
.equ Mode_ABT , 0x17
|
||||
.equ Mode_UND , 0x1B
|
||||
.equ Mode_SYS , 0x1F
|
||||
|
||||
.equ I_Bit , 0x80 @ when I bit is set, IRQ is disabled
|
||||
.equ F_Bit , 0x40 @ when F bit is set, FIQ is disabled
|
||||
.equ T_Bit , 0x20 @ when T bit is set, core is in Thumb state
|
||||
|
||||
.equ GIC_ERRATA_CHECK_1, 0x000003FE
|
||||
.equ GIC_ERRATA_CHECK_2, 0x000003FF
|
||||
|
||||
.equ Sect_Normal , 0x00005c06 @ outer & inner wb/wa, non-shareable, executable, rw, domain 0, base addr 0
|
||||
.equ Sect_Normal_Cod , 0x0000dc06 @ outer & inner wb/wa, non-shareable, executable, ro, domain 0, base addr 0
|
||||
.equ Sect_Normal_RO , 0x0000dc16 @ as Sect_Normal_Cod, but not executable
|
||||
.equ Sect_Normal_RW , 0x00005c16 @ as Sect_Normal_Cod, but writeable and not executable
|
||||
.equ Sect_SO , 0x00000c12 @ strongly-ordered (therefore shareable), not executable, rw, domain 0, base addr 0
|
||||
.equ Sect_Device_RO , 0x00008c12 @ device, non-shareable, non-executable, ro, domain 0, base addr 0
|
||||
.equ Sect_Device_RW , 0x00000c12 @ as Sect_Device_RO, but writeable
|
||||
.equ Sect_Fault , 0x00000000 @ this translation will fault (the bottom 2 bits are important, the rest are ignored)
|
||||
|
||||
.equ RAM_BASE , 0x80000000
|
||||
.equ VRAM_BASE , 0x18000000
|
||||
.equ SRAM_BASE , 0x2e000000
|
||||
.equ ETHERNET , 0x1a000000
|
||||
.equ CS3_PERIPHERAL_BASE, 0x1c000000
|
||||
|
||||
|
||||
@ Stack Configuration
|
||||
|
||||
.EQU UND_Stack_Size , 0x00000100
|
||||
.EQU SVC_Stack_Size , 0x00008000
|
||||
.EQU ABT_Stack_Size , 0x00000100
|
||||
.EQU FIQ_Stack_Size , 0x00000100
|
||||
.EQU IRQ_Stack_Size , 0x00008000
|
||||
.EQU USR_Stack_Size , 0x00004000
|
||||
|
||||
.EQU ISR_Stack_Size, (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + FIQ_Stack_Size + IRQ_Stack_Size)
|
||||
|
||||
.section .stack
|
||||
.align 3
|
||||
#ifdef __STACK_SIZE
|
||||
.equ Stack_Size, __STACK_SIZE
|
||||
#else
|
||||
.equ Stack_Size, 0xc00
|
||||
#endif
|
||||
.globl __StackTop
|
||||
.globl __StackLimit
|
||||
__StackLimit:
|
||||
.space Stack_Size
|
||||
.space ISR_Stack_Size
|
||||
__initial_sp:
|
||||
.space USR_Stack_Size
|
||||
.size __StackLimit, . - __StackLimit
|
||||
__StackTop:
|
||||
.size __StackTop, . - __StackTop
|
||||
__AStackLimit:
|
||||
.space Stack_Size
|
||||
.size __AStackLimit, . - __AStackLimit
|
||||
__AStackTop:
|
||||
.size __AStackTop, . - __AStackTop
|
||||
__BStackLimit:
|
||||
.space Stack_Size
|
||||
.size __BStackLimit, . - __StackLimit
|
||||
__BStackTop:
|
||||
.size __BStackTop, . - __BStackTop
|
||||
__CStackLimit:
|
||||
.space Stack_Size
|
||||
.size __CStackLimit, . - __CStackLimit
|
||||
__CStackTop:
|
||||
.size __CStackTop, . - __CStackTop
|
||||
|
||||
|
||||
@ Heap Configuration
|
||||
|
||||
.EQU Heap_Size , 0x00080000
|
||||
|
||||
.section .heap
|
||||
.align 3
|
||||
#ifdef __HEAP_SIZE
|
||||
.equ Heap_Size, __HEAP_SIZE
|
||||
#else
|
||||
.equ Heap_Size, 0x800
|
||||
#endif
|
||||
.globl __HeapBase
|
||||
.globl __HeapLimit
|
||||
__HeapBase:
|
||||
|
@ -84,164 +107,426 @@ __HeapBase:
|
|||
.size __HeapBase, . - __HeapBase
|
||||
__HeapLimit:
|
||||
.size __HeapLimit, . - __HeapLimit
|
||||
|
||||
|
||||
|
||||
.section .isr_vector
|
||||
.align 2
|
||||
.globl __isr_vector
|
||||
__isr_vector:
|
||||
.long 0xe59ff018 // 0x00
|
||||
.long 0xe59ff018 // 0x04
|
||||
.long 0xe59ff018 // 0x08
|
||||
.long 0xe59ff018 // 0x0c
|
||||
.long 0xe59ff018 // 0x10
|
||||
.long 0xe59ff018 // 0x14
|
||||
.long 0xe59ff018 // 0x18
|
||||
.long 0xe59ff018 // 0x1c
|
||||
.long 0xe59ff018 // 0x00
|
||||
.long 0xe59ff018 // 0x04
|
||||
.long 0xe59ff018 // 0x08
|
||||
.long 0xe59ff018 // 0x0c
|
||||
.long 0xe59ff018 // 0x10
|
||||
.long 0xe59ff018 // 0x14
|
||||
.long 0xe59ff018 // 0x18
|
||||
.long 0xe59ff018 // 0x1c
|
||||
|
||||
.long Reset_Handler /* 0x20 */
|
||||
.long undefinedInstruction /* 0x24 */
|
||||
.long softwareInterrupt /* 0x28 */
|
||||
.long prefetchAboart /* 0x2c */
|
||||
.long dataAbort /* 0x30 */
|
||||
.long 0 /* Reserved */
|
||||
.long irq_handler /* IRQ */
|
||||
.long fiq_handler /* FIQ */
|
||||
.long Reset_Handler /* 0x20 */
|
||||
.long Undef_Handler /* 0x24 */
|
||||
.long SVC_Handler /* 0x28 */
|
||||
.long PAbt_Handler /* 0x2c */
|
||||
.long DAbt_Handler /* 0x30 */
|
||||
.long 0 /* Reserved */
|
||||
.long IRQ_Handler /* IRQ */
|
||||
.long FIQ_Handler /* FIQ */
|
||||
|
||||
|
||||
.size __isr_vector, . - __isr_vector
|
||||
|
||||
.text
|
||||
// .thumb
|
||||
// .thumb_func
|
||||
.align 2
|
||||
.globl Reset_Handler
|
||||
.type Reset_Handler, %function
|
||||
.globl Reset_Handler
|
||||
.type Reset_Handler, %function
|
||||
Reset_Handler:
|
||||
/* Loop to copy data from read only memory to RAM. The ranges
|
||||
* of copy from/to are specified by following symbols evaluated in
|
||||
* linker script.
|
||||
* _etext: End of code section, i.e., begin of data sections to copy from.
|
||||
* __data_start__/__data_end__: RAM address range that data should be
|
||||
* copied to. Both must be aligned to 4 bytes boundary. */
|
||||
@ Put any cores other than 0 to sleep
|
||||
mrc p15, 0, r0, c0, c0, 5 @ Read MPIDR
|
||||
ands r0, r0, #3
|
||||
|
||||
mrc p15, 0, r0, c1, c0, 0 @;; Read CP15 System Control register (SCTLR)
|
||||
bic r0, r0, #(0x1 << 12) @;; Clear I bit 12 to disable I Cache
|
||||
bic r0, r0, #(0x1 << 2) @;; Clear C bit 2 to disable D Cache
|
||||
bic r0, r0, #0x1 @;; Clear M bit 0 to disable MMU
|
||||
mcr p15, 0, r0, c1, c0, 0 @;; Write value back to CP15 System Control register
|
||||
|
||||
@;; SVC Mode(Default)
|
||||
LDR sp, =__AStackTop
|
||||
goToSleep:
|
||||
wfine
|
||||
bne goToSleep
|
||||
|
||||
CPS #IRQ_MODE @;; IRQ Mode
|
||||
LDR sp, =__BStackTop
|
||||
@ Enable access to NEON/VFP by enabling access to Coprocessors 10 and 11.
|
||||
@ Enables Full Access i.e. in both privileged and non privileged modes
|
||||
mrc p15, 0, r0, c1, c0, 2 @ Read Coprocessor Access Control Register (CPACR)
|
||||
orr r0, r0, #(0xF << 20) @ Enable access to CP 10 & 11
|
||||
mcr p15, 0, r0, c1, c0, 2 @ Write Coprocessor Access Control Register (CPACR)
|
||||
isb
|
||||
|
||||
CPS #FIQ_MODE @;; FIQ Mode
|
||||
LDR sp, =__CStackTop
|
||||
@ Switch on the VFP and NEON hardware
|
||||
mov r0, #0x40000000
|
||||
vmsr fpexc, r0 @ Write FPEXC register, EN bit set
|
||||
|
||||
@CPS #ABT_MODE @;; ABT Mode
|
||||
@LDR sp, =__StackTop
|
||||
mrc p15, 0, r0, c1, c0, 0 @ Read CP15 System Control register
|
||||
bic r0, r0, #(0x1 << 12) @ Clear I bit 12 to disable I Cache
|
||||
bic r0, r0, #(0x1 << 2) @ Clear C bit 2 to disable D Cache
|
||||
bic r0, r0, #0x1 @ Clear M bit 0 to disable MMU
|
||||
bic r0, r0, #(0x1 << 11) @ Clear Z bit 11 to disable branch prediction
|
||||
bic r0, r0, #(0x1 << 13) @ Clear V bit 13 to disable hivecs
|
||||
mcr p15, 0, r0, c1, c0, 0 @ Write value back to CP15 System Control register
|
||||
isb
|
||||
|
||||
CPS #SYS_MODE @;; SYS Mode
|
||||
@ Set Vector Base Address Register (VBAR) to point to this application's vector table
|
||||
ldr r0, =__isr_vector
|
||||
mcr p15, 0, r0, c12, c0, 0
|
||||
|
||||
@ Setup Stack for each exceptional mode
|
||||
/* ldr r0, =__StackTop */
|
||||
ldr r0, =__initial_sp
|
||||
|
||||
@; System mode Stack pointer is set up ARM_LIB_STACK in the __main()->__entry()
|
||||
LDR sp, =__StackTop
|
||||
@ Enter Undefined Instruction Mode and set its Stack Pointer
|
||||
msr cpsr_c, #(Mode_UND | I_Bit | F_Bit)
|
||||
mov sp, r0
|
||||
sub r0, r0, #UND_Stack_Size
|
||||
|
||||
ldr r1, =__etext
|
||||
ldr r2, =__data_start__
|
||||
ldr r3, =__data_end__
|
||||
@ Enter Abort Mode and set its Stack Pointer
|
||||
msr cpsr_c, #(Mode_ABT | I_Bit | F_Bit)
|
||||
mov sp, r0
|
||||
sub r0, r0, #ABT_Stack_Size
|
||||
|
||||
.Lflash_to_ram_loop:
|
||||
cmp r2, r3
|
||||
ittt lt
|
||||
ldrlt r0, [r1], #4
|
||||
strlt r0, [r2], #4
|
||||
blt .Lflash_to_ram_loop
|
||||
@ Enter FIQ Mode and set its Stack Pointer
|
||||
msr cpsr_c, #(Mode_FIQ | I_Bit | F_Bit)
|
||||
mov sp, r0
|
||||
sub r0, r0, #FIQ_Stack_Size
|
||||
|
||||
ldr r0, =set_low_vector
|
||||
blx r0
|
||||
ldr r0, =enable_VFP
|
||||
blx r0
|
||||
@ Enter IRQ Mode and set its Stack Pointer
|
||||
msr cpsr_c, #(Mode_IRQ | I_Bit | F_Bit)
|
||||
mov sp, r0
|
||||
sub r0, r0, #IRQ_Stack_Size
|
||||
|
||||
ldr r0, =SystemInit
|
||||
blx r0
|
||||
ldr r0, =_start
|
||||
bx r0
|
||||
@ Enter Supervisor Mode and set its Stack Pointer
|
||||
msr cpsr_c, #(Mode_SVC | I_Bit | F_Bit)
|
||||
mov sp, r0
|
||||
|
||||
set_low_vector:
|
||||
mrc p15, 0, r0, c1, c0, 0
|
||||
mov r1, #0xffffdfff
|
||||
and r0, r1
|
||||
mcr p15, 0, r0, c1, c0, 0
|
||||
@ Enter System Mode to complete initialization and enter kernel
|
||||
msr cpsr_c, #(Mode_SYS | I_Bit | F_Bit)
|
||||
mov sp, r0
|
||||
|
||||
mrc p15, 0, r0, c12, c0, 0 // vector set
|
||||
mov r0, #0x20000000
|
||||
mcr p15, 0, r0, c12, c0, 0 // vector set
|
||||
bx lr
|
||||
isb
|
||||
ldr r0, =RZ_A1_SetSramWriteEnable
|
||||
blx r0
|
||||
|
||||
.extern create_translation_table
|
||||
bl create_translation_table
|
||||
|
||||
@ USR/SYS stack pointer will be set during kernel init
|
||||
ldr r0, =SystemInit
|
||||
blx r0
|
||||
ldr r0, =InitMemorySubsystem
|
||||
blx r0
|
||||
|
||||
@ fp_init
|
||||
mov r0, #0x3000000
|
||||
vmsr fpscr, r0
|
||||
|
||||
|
||||
@ data sections copy
|
||||
ldr r4, =__copy_table_start__
|
||||
ldr r5, =__copy_table_end__
|
||||
|
||||
.L_loop0:
|
||||
cmp r4, r5
|
||||
bge .L_loop0_done
|
||||
ldr r1, [r4]
|
||||
ldr r2, [r4, #4]
|
||||
ldr r3, [r4, #8]
|
||||
|
||||
.L_loop0_0:
|
||||
subs r3, #4
|
||||
ittt ge
|
||||
ldrge r0, [r1, r3]
|
||||
strge r0, [r2, r3]
|
||||
bge .L_loop0_0
|
||||
|
||||
adds r4, #12
|
||||
b .L_loop0
|
||||
|
||||
.L_loop0_done:
|
||||
|
||||
@ bss sections clear
|
||||
ldr r3, =__zero_table_start__
|
||||
ldr r4, =__zero_table_end__
|
||||
|
||||
.L_loop2:
|
||||
cmp r3, r4
|
||||
bge .L_loop2_done
|
||||
ldr r1, [r3]
|
||||
ldr r2, [r3, #4]
|
||||
movs r0, 0
|
||||
|
||||
.L_loop2_0:
|
||||
subs r2, #4
|
||||
itt ge
|
||||
strge r0, [r1, r2]
|
||||
bge .L_loop2_0
|
||||
|
||||
adds r3, #8
|
||||
b .L_loop2
|
||||
.L_loop2_done:
|
||||
|
||||
|
||||
ldr r0, =_start
|
||||
bx r0
|
||||
|
||||
ldr r0, sf_boot @ dummy to keep boot loader area
|
||||
loop_here:
|
||||
b loop_here
|
||||
|
||||
sf_boot:
|
||||
.word boot_loader
|
||||
|
||||
.equ VFPEnable, 0x40000000
|
||||
enable_VFP:
|
||||
;;
|
||||
mrc p15, 0, r0, c1, c0, 2 ;
|
||||
orr r0, r0, #(3 << 20) ;
|
||||
orr r0, r0, #(3 << 22) ;
|
||||
bic r0, r0, #(3 << 30) ;
|
||||
mcr p15, 0, r0, c1, c0, 2 ;
|
||||
isb ;
|
||||
;;
|
||||
mov r0, #VFPEnable
|
||||
vmsr fpexc, r0
|
||||
bx lr
|
||||
;;
|
||||
.pool
|
||||
.size Reset_Handler, . - Reset_Handler
|
||||
|
||||
|
||||
.text
|
||||
|
||||
Undef_Handler:
|
||||
.global Undef_Handler
|
||||
.func Undef_Handler
|
||||
.extern CUndefHandler
|
||||
SRSDB SP!, #Mode_UND
|
||||
PUSH {R0-R4, R12} /* Save APCS corruptible registers to UND mode stack */
|
||||
|
||||
MRS R0, SPSR
|
||||
TST R0, #T_Bit /* Check mode */
|
||||
MOVEQ R1, #4 /* R1 = 4 ARM mode */
|
||||
MOVNE R1, #2 /* R1 = 2 Thumb mode */
|
||||
SUB R0, LR, R1
|
||||
LDREQ R0, [R0] /* ARM mode - R0 points to offending instruction */
|
||||
BEQ undef_cont
|
||||
|
||||
/* Thumb instruction */
|
||||
/* Determine if it is a 32-bit Thumb instruction */
|
||||
LDRH R0, [R0]
|
||||
MOV R2, #0x1c
|
||||
CMP R2, R0, LSR #11
|
||||
BHS undef_cont /* 16-bit Thumb instruction */
|
||||
|
||||
/* 32-bit Thumb instruction. Unaligned - we need to reconstruct the offending instruction. */
|
||||
LDRH R2, [LR]
|
||||
ORR R0, R2, R0, LSL #16
|
||||
undef_cont:
|
||||
MOV R2, LR /* Set LR to third argument */
|
||||
|
||||
/* AND R12, SP, #4 */ /* Ensure stack is 8-byte aligned */
|
||||
MOV R3, SP /* Ensure stack is 8-byte aligned */
|
||||
AND R12, R3, #4
|
||||
SUB SP, SP, R12 /* Adjust stack */
|
||||
PUSH {R12, LR} /* Store stack adjustment and dummy LR */
|
||||
|
||||
/* R0 Offending instruction */
|
||||
/* R1 =2 (Thumb) or =4 (ARM) */
|
||||
BL CUndefHandler
|
||||
|
||||
POP {R12, LR} /* Get stack adjustment & discard dummy LR */
|
||||
ADD SP, SP, R12 /* Unadjust stack */
|
||||
|
||||
LDR LR, [SP, #24] /* Restore stacked LR and possibly adjust for retry */
|
||||
SUB LR, LR, R0
|
||||
LDR R0, [SP, #28] /* Restore stacked SPSR */
|
||||
MSR SPSR_cxsf, R0
|
||||
POP {R0-R4, R12} /* Restore stacked APCS registers */
|
||||
ADD SP, SP, #8 /* Adjust SP for already-restored banked registers */
|
||||
MOVS PC, LR
|
||||
.endfunc
|
||||
|
||||
PAbt_Handler:
|
||||
.global PAbt_Handler
|
||||
.func PAbt_Handler
|
||||
.extern CPAbtHandler
|
||||
SUB LR, LR, #4 /* Pre-adjust LR */
|
||||
SRSDB SP!, #Mode_ABT /* Save LR and SPRS to ABT mode stack */
|
||||
PUSH {R0-R4, R12} /* Save APCS corruptible registers to ABT mode stack */
|
||||
MRC p15, 0, R0, c5, c0, 1 /* IFSR */
|
||||
MRC p15, 0, R1, c6, c0, 2 /* IFAR */
|
||||
|
||||
MOV R2, LR /* Set LR to third argument */
|
||||
|
||||
/* AND R12, SP, #4 */ /* Ensure stack is 8-byte aligned */
|
||||
MOV R3, SP /* Ensure stack is 8-byte aligned */
|
||||
AND R12, R3, #4
|
||||
SUB SP, SP, R12 /* Adjust stack */
|
||||
PUSH {R12, LR} /* Store stack adjustment and dummy LR */
|
||||
|
||||
BL CPAbtHandler
|
||||
|
||||
POP {R12, LR} /* Get stack adjustment & discard dummy LR */
|
||||
ADD SP, SP, R12 /* Unadjust stack */
|
||||
|
||||
POP {R0-R4, R12} /* Restore stack APCS registers */
|
||||
RFEFD SP! /* Return from exception */
|
||||
.endfunc
|
||||
|
||||
DAbt_Handler:
|
||||
.global DAbt_Handler
|
||||
.func DAbt_Handler
|
||||
.extern CDAbtHandler
|
||||
SUB LR, LR, #8 /* Pre-adjust LR */
|
||||
SRSDB SP!, #Mode_ABT /* Save LR and SPRS to ABT mode stack */
|
||||
PUSH {R0-R4, R12} /* Save APCS corruptible registers to ABT mode stack */
|
||||
CLREX /* State of exclusive monitors unknown after taken data abort */
|
||||
MRC p15, 0, R0, c5, c0, 0 /* DFSR */
|
||||
MRC p15, 0, R1, c6, c0, 0 /* DFAR */
|
||||
|
||||
MOV R2, LR /* Set LR to third argument */
|
||||
|
||||
/* AND R12, SP, #4 */ /* Ensure stack is 8-byte aligned */
|
||||
MOV R3, SP /* Ensure stack is 8-byte aligned */
|
||||
AND R12, R3, #4
|
||||
SUB SP, SP, R12 /* Adjust stack */
|
||||
PUSH {R12, LR} /* Store stack adjustment and dummy LR */
|
||||
|
||||
BL CDAbtHandler
|
||||
|
||||
POP {R12, LR} /* Get stack adjustment & discard dummy LR */
|
||||
ADD SP, SP, R12 /* Unadjust stack */
|
||||
|
||||
POP {R0-R4, R12} /* Restore stacked APCS registers */
|
||||
RFEFD SP! /* Return from exception */
|
||||
.endfunc
|
||||
|
||||
FIQ_Handler:
|
||||
.global FIQ_Handler
|
||||
.func FIQ_Handler
|
||||
/* An FIQ might occur between the dummy read and the real read of the GIC in IRQ_Handler,
|
||||
* so if a real FIQ Handler is implemented, this will be needed before returning:
|
||||
*/
|
||||
/* LDR R1, =GICI_BASE
|
||||
LDR R0, [R1, #ICCHPIR_OFFSET] ; Dummy Read ICCHPIR (GIC CPU Interface register) to avoid GIC 390 errata 801120
|
||||
*/
|
||||
B .
|
||||
.endfunc
|
||||
|
||||
.extern SVC_Handler /* refer RTX function */
|
||||
|
||||
IRQ_Handler:
|
||||
.global IRQ_Handler
|
||||
.func IRQ_Handler
|
||||
.extern IRQCount
|
||||
.extern IRQTable
|
||||
.extern IRQNestLevel
|
||||
|
||||
/* prologue */
|
||||
SUB LR, LR, #4 /* Pre-adjust LR */
|
||||
SRSDB SP!, #Mode_SVC /* Save LR_IRQ and SPRS_IRQ to SVC mode stack */
|
||||
CPS #Mode_SVC /* Switch to SVC mode, to avoid a nested interrupt corrupting LR on a BL */
|
||||
PUSH {R0-R3, R12} /* Save remaining APCS corruptible registers to SVC stack */
|
||||
|
||||
/* AND R1, SP, #4 */ /* Ensure stack is 8-byte aligned */
|
||||
MOV R3, SP /* Ensure stack is 8-byte aligned */
|
||||
AND R1, R3, #4
|
||||
SUB SP, SP, R1 /* Adjust stack */
|
||||
PUSH {R1, LR} /* Store stack adjustment and LR_SVC to SVC stack */
|
||||
|
||||
LDR R0, =IRQNestLevel /* Get address of nesting counter */
|
||||
LDR R1, [R0]
|
||||
ADD R1, R1, #1 /* Increment nesting counter */
|
||||
STR R1, [R0]
|
||||
|
||||
/* identify and acknowledge interrupt */
|
||||
LDR R1, =GICI_BASE
|
||||
LDR R0, [R1, #ICCHPIR_OFFSET] /* Dummy Read ICCHPIR (GIC CPU Interface register) to avoid GIC 390 errata 801120 */
|
||||
LDR R0, [R1, #ICCIAR_OFFSET] /* Read ICCIAR (GIC CPU Interface register) */
|
||||
DSB /* Ensure that interrupt acknowledge completes before re-enabling interrupts */
|
||||
|
||||
/* Workaround GIC 390 errata 733075
|
||||
* If the ID is not 0, then service the interrupt as normal.
|
||||
* If the ID is 0 and active, then service interrupt ID 0 as normal.
|
||||
* If the ID is 0 but not active, then the GIC CPU interface may be locked-up, so unlock it
|
||||
* with a dummy write to ICDIPR0. This interrupt should be treated as spurious and not serviced.
|
||||
*/
|
||||
LDR R2, =GICD_BASE
|
||||
LDR R3, =GIC_ERRATA_CHECK_1
|
||||
CMP R0, R3
|
||||
BEQ unlock_cpu
|
||||
LDR R3, =GIC_ERRATA_CHECK_2
|
||||
CMP R0, R3
|
||||
BEQ unlock_cpu
|
||||
CMP R0, #0
|
||||
BNE int_active /* If the ID is not 0, then service the interrupt */
|
||||
LDR R3, [R2, #ICDABR0_OFFSET] /* Get the interrupt state */
|
||||
TST R3, #1
|
||||
BNE int_active /* If active, then service the interrupt */
|
||||
unlock_cpu:
|
||||
LDR R3, [R2, #ICDIPR0_OFFSET] /* Not active, so unlock the CPU interface */
|
||||
STR R3, [R2, #ICDIPR0_OFFSET] /* with a dummy write */
|
||||
DSB /* Ensure the write completes before continuing */
|
||||
B ret_irq /* Do not service the spurious interrupt */
|
||||
/* End workaround */
|
||||
|
||||
int_active:
|
||||
LDR R2, =IRQCount /* Read number of IRQs */
|
||||
LDR R2, [R2]
|
||||
CMP R0, R2 /* Clean up and return if no handler */
|
||||
BHS ret_irq /* In a single-processor system, spurious interrupt ID 1023 does not need any special handling */
|
||||
LDR R2, =IRQTable /* Get address of handler */
|
||||
LDR R2, [R2, R0, LSL #2]
|
||||
CMP R2, #0 /* Clean up and return if handler address is 0 */
|
||||
BEQ ret_irq
|
||||
PUSH {R0,R1}
|
||||
|
||||
CPSIE i /* Now safe to re-enable interrupts */
|
||||
BLX R2 /* Call handler. R0 will be IRQ number */
|
||||
CPSID i /* Disable interrupts again */
|
||||
|
||||
/* write EOIR (GIC CPU Interface register) */
|
||||
POP {R0,R1}
|
||||
DSB /* Ensure that interrupt source is cleared before we write the EOIR */
|
||||
ret_irq:
|
||||
/* epilogue */
|
||||
STR R0, [R1, #ICCEOIR_OFFSET]
|
||||
|
||||
LDR R0, =IRQNestLevel /* Get address of nesting counter */
|
||||
LDR R1, [R0]
|
||||
SUB R1, R1, #1 /* Decrement nesting counter */
|
||||
STR R1, [R0]
|
||||
|
||||
POP {R1, LR} /* Get stack adjustment and restore LR_SVC */
|
||||
ADD SP, SP, R1 /* Unadjust stack */
|
||||
|
||||
POP {R0-R3,R12} /* Restore stacked APCS registers */
|
||||
RFEFD SP! /* Return from exception */
|
||||
.endfunc
|
||||
|
||||
/* Macro to define default handlers. Default handler
|
||||
* will be weak symbol and just dead loops. They can be
|
||||
* overwritten by other handlers */
|
||||
.macro def_default_handler handler_name
|
||||
.align 1
|
||||
.thumb_func
|
||||
.weak \handler_name
|
||||
.type \handler_name, %function
|
||||
.macro def_default_handler handler_name
|
||||
.align 1
|
||||
.thumb_func
|
||||
.weak \handler_name
|
||||
.type \handler_name, %function
|
||||
\handler_name :
|
||||
b .
|
||||
.size \handler_name, . - \handler_name
|
||||
.endm
|
||||
b .
|
||||
.size \handler_name, . - \handler_name
|
||||
.endm
|
||||
|
||||
def_default_handler undefinedInstruction /* 0x24 */
|
||||
def_default_handler softwareInterrupt /* 0x28 */
|
||||
def_default_handler prefetchAboart /* 0x2c */
|
||||
def_default_handler dataAbort /* 0x30 */
|
||||
def_default_handler Default_Handler /* --- */
|
||||
|
||||
.global __disable_irq
|
||||
.global __enable_irq
|
||||
|
||||
.global __disable_fiq
|
||||
.global __enable_fiq
|
||||
|
||||
__disable_irq:
|
||||
mrs r0,apsr @ formerly cpsr
|
||||
and r0,r0,#0x80
|
||||
cpsid i
|
||||
bx lr
|
||||
|
||||
__enable_irq:
|
||||
cpsie i
|
||||
bx lr
|
||||
def_default_handler SVC_Handler
|
||||
|
||||
|
||||
__disable_fiq:
|
||||
cpsid f
|
||||
bx lr
|
||||
/* User Initial Stack & Heap */
|
||||
|
||||
__enable_fiq:
|
||||
cpsie f
|
||||
bx lr
|
||||
.ifdef __MICROLIB
|
||||
|
||||
.global __initial_sp
|
||||
.global __heap_base
|
||||
.global __heap_limit
|
||||
|
||||
.else
|
||||
|
||||
.extern __use_two_region_memory
|
||||
.global __user_initial_stackheap
|
||||
__user_initial_stackheap:
|
||||
|
||||
LDR R0, = __HeapBase
|
||||
LDR R1, =(__StackLimit + USR_Stack_Size)
|
||||
LDR R2, = (__HeapBase + Heap_Size)
|
||||
LDR R3, = __StackLimit
|
||||
BX LR
|
||||
|
||||
.endif
|
||||
|
||||
|
||||
|
||||
.end
|
||||
|
||||
.END
|
||||
|
|
|
@ -26,8 +26,14 @@
|
|||
* $Date:: $
|
||||
* @brief RZ_A1 serial flash boot loader
|
||||
******************************************************************************/
|
||||
#if defined (__CC_ARM)
|
||||
#pragma arm section rodata = "BOOT_LOADER"
|
||||
const char boot_loader[] __attribute__((used)) =
|
||||
|
||||
#else
|
||||
const char boot_loader[] __attribute__ ((section(".boot_loader"), used)) =
|
||||
|
||||
#endif
|
||||
{
|
||||
0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,
|
||||
0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,0x18,0xF0,0x9F,0xE5,
|
||||
|
@ -814,6 +820,7 @@ const char boot_loader[] __attribute__((used)) =
|
|||
0x00,0x02,0x00,0x18,0x00,0x00,0x02,0x20,0x04,0x00,0x9F,0xE5,0x10,0x0F,0x0C,0xEE,
|
||||
0x1E,0xFF,0x2F,0xE1,0x00,0x00,0x00,0x18,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
|
||||
};
|
||||
#if defined (__CC_ARM)
|
||||
#pragma arm section
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -72,16 +72,31 @@ extern uint32_t Image$$RO_DATA$$Base;
|
|||
extern uint32_t Image$$RW_DATA$$Base;
|
||||
extern uint32_t Image$$ZI_DATA$$Base;
|
||||
extern uint32_t Image$$TTB$$ZI$$Base;
|
||||
#if defined( __CC_ARM )
|
||||
#else
|
||||
extern uint32_t Image$$RW_DATA_NC$$Base;
|
||||
extern uint32_t Image$$ZI_DATA_NC$$Base;
|
||||
#endif
|
||||
|
||||
extern uint32_t Image$$VECTORS$$Limit;
|
||||
extern uint32_t Image$$RO_DATA$$Limit;
|
||||
extern uint32_t Image$$RW_DATA$$Limit;
|
||||
extern uint32_t Image$$ZI_DATA$$Limit;
|
||||
#if defined( __CC_ARM )
|
||||
#else
|
||||
extern uint32_t Image$$RW_DATA_NC$$Limit;
|
||||
extern uint32_t Image$$ZI_DATA_NC$$Limit;
|
||||
#endif
|
||||
|
||||
#define VECTORS_SIZE (((uint32_t)&Image$$VECTORS$$Limit >> 20) - ((uint32_t)&Image$$VECTORS$$Base >> 20) + 1)
|
||||
#define RO_DATA_SIZE (((uint32_t)&Image$$RO_DATA$$Limit >> 20) - ((uint32_t)&Image$$RO_DATA$$Base >> 20) + 1)
|
||||
#define RW_DATA_SIZE (((uint32_t)&Image$$RW_DATA$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA$$Base >> 20) + 1)
|
||||
#define ZI_DATA_SIZE (((uint32_t)&Image$$ZI_DATA$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA$$Base >> 20) + 1)
|
||||
#define VECTORS_SIZE (((uint32_t)&Image$$VECTORS$$Limit >> 20) - ((uint32_t)&Image$$VECTORS$$Base >> 20) + 1)
|
||||
#define RO_DATA_SIZE (((uint32_t)&Image$$RO_DATA$$Limit >> 20) - ((uint32_t)&Image$$RO_DATA$$Base >> 20) + 1)
|
||||
#define RW_DATA_SIZE (((uint32_t)&Image$$RW_DATA$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA$$Base >> 20) + 1)
|
||||
#define ZI_DATA_SIZE (((uint32_t)&Image$$ZI_DATA$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA$$Base >> 20) + 1)
|
||||
#if defined( __CC_ARM )
|
||||
#else
|
||||
#define RW_DATA_NC_SIZE (((uint32_t)&Image$$RW_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$RW_DATA_NC$$Base >> 20) + 1)
|
||||
#define ZI_DATA_NC_SIZE (((uint32_t)&Image$$ZI_DATA_NC$$Limit >> 20) - ((uint32_t)&Image$$ZI_DATA_NC$$Base >> 20) + 1)
|
||||
#endif
|
||||
|
||||
static uint32_t Sect_Normal; //outer & inner wb/wa, non-shareable, executable, rw, domain 0, base addr 0
|
||||
static uint32_t Sect_Normal_NC; //non-shareable, non-executable, rw, domain 0, base addr 0
|
||||
|
@ -147,7 +162,12 @@ void create_translation_table(void)
|
|||
__TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$VECTORS$$Base, VECTORS_SIZE, Sect_Normal_Cod);
|
||||
__TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_DATA$$Base, RW_DATA_SIZE, Sect_Normal_RW);
|
||||
__TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$ZI_DATA$$Base, ZI_DATA_SIZE, Sect_Normal_RW);
|
||||
#if defined( __CC_ARM )
|
||||
__TTSection (&Image$$TTB$$ZI$$Base, Renesas_RZ_A1_ONCHIP_SRAM_NC_BASE, 10, Sect_Normal_NC);
|
||||
#else
|
||||
__TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$RW_DATA_NC$$Base, RW_DATA_NC_SIZE, Sect_Normal_NC);
|
||||
__TTSection (&Image$$TTB$$ZI$$Base, (uint32_t)&Image$$ZI_DATA_NC$$Base, ZI_DATA_NC_SIZE, Sect_Normal_NC);
|
||||
#endif
|
||||
|
||||
/* Set location of level 1 page table
|
||||
; 31:14 - Translation table base addr (31:14-TTBCR.N, TTBCR.N is 0 out of reset)
|
||||
|
|
|
@ -41,12 +41,18 @@
|
|||
#include "RZ_A1_Init.h"
|
||||
|
||||
|
||||
#if defined(__ARMCC_VERSION)
|
||||
extern void $Super$$main(void);
|
||||
__asm void FPUEnable(void);
|
||||
#else
|
||||
void FPUEnable(void);
|
||||
|
||||
#endif
|
||||
|
||||
uint32_t IRQNestLevel;
|
||||
|
||||
|
||||
#if defined(__ARMCC_VERSION)
|
||||
/**
|
||||
* Initialize the cache.
|
||||
*
|
||||
|
@ -92,6 +98,45 @@ void InitMemorySubsystem(void) {
|
|||
}
|
||||
#pragma pop
|
||||
|
||||
#elif defined(__GNUC__)
|
||||
|
||||
void InitMemorySubsystem(void) {
|
||||
|
||||
/* This SVC is specific for reset where data / tlb / btac may contain undefined data, therefore before
|
||||
* enabling the cache you must invalidate the instruction cache, the data cache, TLB, and BTAC.
|
||||
* You are not required to invalidate the main TLB, even though it is recommended for safety
|
||||
* reasons. This ensures compatibility with future revisions of the processor. */
|
||||
|
||||
unsigned int l2_id;
|
||||
|
||||
/* Invalidate undefined data */
|
||||
__ca9u_inv_tlb_all();
|
||||
__v7_inv_icache_all();
|
||||
__v7_inv_dcache_all();
|
||||
__v7_inv_btac();
|
||||
|
||||
/* Don't use this function during runtime since caches may contain valid data. For a correct cache maintenance you may need to execute a clean and
|
||||
* invalidate in order to flush the valid data to the next level cache.
|
||||
*/
|
||||
__enable_mmu();
|
||||
|
||||
/* After MMU is enabled and data has been invalidated, enable caches and BTAC */
|
||||
__enable_caches();
|
||||
__enable_btac();
|
||||
|
||||
/* If present, you may also need to Invalidate and Enable L2 cache here */
|
||||
l2_id = PL310_GetID();
|
||||
if (l2_id)
|
||||
{
|
||||
PL310_InvAllByWay();
|
||||
PL310_Enable();
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
IRQHandler IRQTable[Renesas_RZ_A1_IRQ_MAX+1];
|
||||
|
||||
uint32_t IRQCount = sizeof IRQTable / 4;
|
||||
|
@ -237,8 +282,8 @@ void CPAbtHandler(uint32_t IFSR, uint32_t IFAR, uint32_t LR) {
|
|||
//this will be 2 when we have performed some maintenance and want to retry the instruction in thumb (state == 2)
|
||||
//this will be 4 when we have performed some maintenance and want to retry the instruction in arm (state == 4)
|
||||
uint32_t CUndefHandler(uint32_t opcode, uint32_t state, uint32_t LR) {
|
||||
const int THUMB = 2;
|
||||
const int ARM = 4;
|
||||
const unsigned int THUMB = 2;
|
||||
const unsigned int ARM = 4;
|
||||
//Lazy VFP/NEON initialisation and switching
|
||||
if ((state == ARM && ((opcode & 0x0C000000)) >> 26 == 0x03) ||
|
||||
(state == THUMB && ((opcode & 0xEC000000)) >> 26 == 0x3B)) {
|
||||
|
@ -252,6 +297,7 @@ uint32_t CUndefHandler(uint32_t opcode, uint32_t state, uint32_t LR) {
|
|||
while(1);
|
||||
}
|
||||
|
||||
#if defined(__ARMCC_VERSION)
|
||||
#pragma push
|
||||
#pragma arm
|
||||
//Critical section, called from undef handler, so systick is disabled
|
||||
|
@ -296,3 +342,43 @@ __asm void FPUEnable(void) {
|
|||
BX LR
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
#elif defined(__GNUC__)
|
||||
void FPUEnable(void)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
".align 2 \n\t"
|
||||
".arm \n\t"
|
||||
"mrc p15,0,r1,c1,c0,2 \n\t"
|
||||
"orr r1,r1,#0x00f00000 \n\t"
|
||||
"mcr p15,0,r1,c1,c0,2 \n\t"
|
||||
"vmrs r1,fpexc \n\t"
|
||||
"orr r1,r1,#0x40000000 \n\t"
|
||||
"vmsr fpexc,r1 \n\t"
|
||||
"mov r2,#0 \n\t"
|
||||
"vmov d0, r2,r2 \n\t"
|
||||
"vmov d1, r2,r2 \n\t"
|
||||
"vmov d2, r2,r2 \n\t"
|
||||
"vmov d3, r2,r2 \n\t"
|
||||
"vmov d4, r2,r2 \n\t"
|
||||
"vmov d5, r2,r2 \n\t"
|
||||
"vmov d6, r2,r2 \n\t"
|
||||
"vmov d7, r2,r2 \n\t"
|
||||
"vmov d8, r2,r2 \n\t"
|
||||
"vmov d9, r2,r2 \n\t"
|
||||
"vmov d10,r2,r2 \n\t"
|
||||
"vmov d11,r2,r2 \n\t"
|
||||
"vmov d12,r2,r2 \n\t"
|
||||
"vmov d13,r2,r2 \n\t"
|
||||
"vmov d14,r2,r2 \n\t"
|
||||
"vmov d15,r2,r2 \n\t"
|
||||
"vmrs r2,fpscr \n\t"
|
||||
"ldr r3,=0x00086060 \n\t"
|
||||
"and r2,r2,r3 \n\t"
|
||||
"vmsr fpscr,r2 \n\t"
|
||||
"bx lr \n\t"
|
||||
);
|
||||
}
|
||||
#else
|
||||
#endif
|
||||
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_NVIC_end__ = 0x200000EB;
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x200000EC;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x20004FFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x1700;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0xA00;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x1400;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
|
|
|
@ -15,7 +15,8 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]
|
|||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
define symbol __size_cstack__ = 0x800;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x400;
|
||||
define symbol __size_heap__ = 0x800;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
|
|
|
@ -15,8 +15,9 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]
|
|||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x800;
|
||||
define symbol __size_heap__ = 0x800;
|
||||
define symbol __size_heap__ = 0x1000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -16,7 +16,7 @@ define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]
|
|||
|
||||
/* Stack and Heap */
|
||||
define symbol __size_cstack__ = 0x800;
|
||||
define symbol __size_heap__ = 0x800;
|
||||
define symbol __size_heap__ = 0x1000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -15,6 +15,7 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]
|
|||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x1000;
|
||||
define symbol __size_heap__ = 0x2000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
|
|
|
@ -15,8 +15,9 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]
|
|||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
define symbol __size_cstack__ = 0x1000;
|
||||
define symbol __size_heap__ = 0x1700;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x800;
|
||||
define symbol __size_heap__ = 0x1000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -19,8 +19,9 @@ define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_
|
|||
define region CCMRAM_region = mem:[from __region_CCMRAM_start__ to __region_CCMRAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x2000;
|
||||
define symbol __size_heap__ = 0x2000;
|
||||
define symbol __size_heap__ = 0x4000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -18,8 +18,9 @@ define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]
|
|||
define region CCMRAM_region = mem:[from __region_CCMRAM_start__ to __region_CCMRAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
define symbol __size_cstack__ = 0x800;
|
||||
define symbol __size_heap__ = 0x1000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x600;
|
||||
define symbol __size_heap__ = 0xC00;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -13,8 +13,9 @@ define symbol __ICFEDIT_region_RAM_end__ = 0x2002FFFF;
|
|||
define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000;
|
||||
define symbol __ICFEDIT_region_CCMRAM_end__ = 0x1000FFFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x5FFF;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x5FFF;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x6000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0xC000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
|
||||
|
|
|
@ -15,8 +15,9 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]
|
|||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
define symbol __size_cstack__ = 0x400;
|
||||
define symbol __size_heap__ = 0x400;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x4000;
|
||||
define symbol __size_heap__ = 0x8000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -14,8 +14,9 @@ define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF;
|
|||
define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000;
|
||||
define symbol __ICFEDIT_region_CCMRAM_end__ = 0x1000FFFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x2000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x4000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x8000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
|
||||
|
|
|
@ -15,8 +15,9 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]
|
|||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
define symbol __size_cstack__ = 0x400;
|
||||
define symbol __size_heap__ = 0x400;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x4000;
|
||||
define symbol __size_heap__ = 0x8000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __NVIC_end__ = 0x20000197; /* to be aligned on 8 bytes
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x20000198;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x20017FFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x2000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x3000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x6000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
|
|
|
@ -15,8 +15,9 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]
|
|||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x4000;
|
||||
define symbol __size_heap__ = 0x4000;
|
||||
define symbol __size_heap__ = 0x8000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __ICFEDIT_region_RAM_end__ = 0x2002FFFF;
|
|||
define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000;
|
||||
define symbol __ICFEDIT_region_CCMRAM_end__ = 0x1000FFFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x400;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x200;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x6000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0xC000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
|
||||
|
|
|
@ -11,8 +11,9 @@ define symbol __NVIC_end__ = 0x20000187; /* Aligned on 8 bytes */
|
|||
define symbol __ICFEDIT_region_RAM_start__ = 0x20000188;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x2000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x4000;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x8000;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define symbol __region_RAM1_start__ = 0x10000000;
|
||||
|
|
|
@ -15,8 +15,9 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]
|
|||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
|
||||
|
||||
/* Stack and Heap */
|
||||
define symbol __size_cstack__ = 0x1000;
|
||||
define symbol __size_heap__ = 0x1000;
|
||||
/*Heap 1/4 of ram and stack 1/8*/
|
||||
define symbol __size_cstack__ = 0x2800;
|
||||
define symbol __size_heap__ = 0x5000;
|
||||
define block CSTACK with alignment = 8, size = __size_cstack__ { };
|
||||
define block HEAP with alignment = 8, size = __size_heap__ { };
|
||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
/* Copyright (c) 2009 - 2012 ARM LIMITED
|
||||
|
||||
All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
- Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
- Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
- Neither the name of ARM nor the names of its contributors may be used
|
||||
to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
*
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
---------------------------------------------------------------------------*/
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Functions
|
||||
*---------------------------------------------------------------------------*/
|
||||
.text
|
||||
.global __v7_all_cache
|
||||
/*
|
||||
* __STATIC_ASM void __v7_all_cache(uint32_t op) {
|
||||
*/
|
||||
__v7_all_cache:
|
||||
.arm
|
||||
|
||||
PUSH {R4-R11}
|
||||
|
||||
MRC p15, 1, R6, c0, c0, 1 // Read CLIDR
|
||||
ANDS R3, R6, #0x07000000 // Extract coherency level
|
||||
MOV R3, R3, LSR #23 // Total cache levels << 1
|
||||
BEQ Finished // If 0, no need to clean
|
||||
|
||||
MOV R10, #0 // R10 holds current cache level << 1
|
||||
Loop1: ADD R2, R10, R10, LSR #1 // R2 holds cache "Set" position
|
||||
MOV R1, R6, LSR R2 // Bottom 3 bits are the Cache-type for this level
|
||||
AND R1, R1, #7 // Isolate those lower 3 bits
|
||||
CMP R1, #2
|
||||
BLT Skip // No cache or only instruction cache at this level
|
||||
|
||||
MCR p15, 2, R10, c0, c0, 0 // Write the Cache Size selection register
|
||||
ISB // ISB to sync the change to the CacheSizeID reg
|
||||
MRC p15, 1, R1, c0, c0, 0 // Reads current Cache Size ID register
|
||||
AND R2, R1, #7 // Extract the line length field
|
||||
ADD R2, R2, #4 // Add 4 for the line length offset (log2 16 bytes)
|
||||
LDR R4, =0x3FF
|
||||
ANDS R4, R4, R1, LSR #3 // R4 is the max number on the way size (right aligned)
|
||||
CLZ R5, R4 // R5 is the bit position of the way size increment
|
||||
LDR R7, =0x7FFF
|
||||
ANDS R7, R7, R1, LSR #13 // R7 is the max number of the index size (right aligned)
|
||||
|
||||
Loop2: MOV R9, R4 // R9 working copy of the max way size (right aligned)
|
||||
|
||||
Loop3: ORR R11, R10, R9, LSL R5 // Factor in the Way number and cache number into R11
|
||||
ORR R11, R11, R7, LSL R2 // Factor in the Set number
|
||||
CMP R0, #0
|
||||
BNE Dccsw
|
||||
MCR p15, 0, R11, c7, c6, 2 // DCISW. Invalidate by Set/Way
|
||||
B cont
|
||||
Dccsw: CMP R0, #1
|
||||
BNE Dccisw
|
||||
MCR p15, 0, R11, c7, c10, 2 // DCCSW. Clean by Set/Way
|
||||
B cont
|
||||
Dccisw: MCR p15, 0, R11, c7, c14, 2 // DCCISW, Clean and Invalidate by Set/Way
|
||||
cont: SUBS R9, R9, #1 // Decrement the Way number
|
||||
BGE Loop3
|
||||
SUBS R7, R7, #1 // Decrement the Set number
|
||||
BGE Loop2
|
||||
Skip: ADD R10, R10, #2 // increment the cache number
|
||||
CMP R3, R10
|
||||
BGT Loop1
|
||||
|
||||
Finished:
|
||||
DSB
|
||||
POP {R4-R11}
|
||||
BX lr
|
||||
|
||||
|
||||
.END
|
||||
/*----------------------------------------------------------------------------
|
||||
* end of file
|
||||
*---------------------------------------------------------------------------*/
|
|
@ -578,7 +578,576 @@ __STATIC_INLINE void __v7_clean_inv_dcache_all(void) {
|
|||
|
||||
#elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/
|
||||
|
||||
//#error GNU Compiler support not implemented for Cortex-A
|
||||
/* GNU gcc specific functions */
|
||||
|
||||
#define MODE_USR 0x10
|
||||
#define MODE_FIQ 0x11
|
||||
#define MODE_IRQ 0x12
|
||||
#define MODE_SVC 0x13
|
||||
#define MODE_MON 0x16
|
||||
#define MODE_ABT 0x17
|
||||
#define MODE_HYP 0x1A
|
||||
#define MODE_UND 0x1B
|
||||
#define MODE_SYS 0x1F
|
||||
|
||||
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
|
||||
{
|
||||
__ASM volatile ("cpsie i");
|
||||
}
|
||||
|
||||
/** \brief Disable IRQ Interrupts
|
||||
|
||||
This function disables IRQ interrupts by setting the I-bit in the CPSR.
|
||||
Can only be executed in Privileged modes.
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __disable_irq(void)
|
||||
{
|
||||
uint32_t result;
|
||||
|
||||
__ASM volatile ("mrs %0, cpsr" : "=r" (result));
|
||||
__ASM volatile ("cpsid i");
|
||||
return(result & 0x80);
|
||||
}
|
||||
|
||||
|
||||
/** \brief Get APSR Register
|
||||
|
||||
This function returns the content of the APSR Register.
|
||||
|
||||
\return APSR Register value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void)
|
||||
{
|
||||
#if 1
|
||||
uint32_t result;
|
||||
|
||||
__ASM volatile ("mrs %0, apsr" : "=r" (result) );
|
||||
return (result);
|
||||
#else
|
||||
register uint32_t __regAPSR __ASM("apsr");
|
||||
return(__regAPSR);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/** \brief Get CPSR Register
|
||||
|
||||
This function returns the content of the CPSR Register.
|
||||
|
||||
\return CPSR Register value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CPSR(void)
|
||||
{
|
||||
#if 1
|
||||
register uint32_t __regCPSR;
|
||||
__ASM volatile ("mrs %0, cpsr" : "=r" (__regCPSR));
|
||||
#else
|
||||
register uint32_t __regCPSR __ASM("cpsr");
|
||||
#endif
|
||||
return(__regCPSR);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/** \brief Set Stack Pointer
|
||||
|
||||
This function assigns the given value to the current stack pointer.
|
||||
|
||||
\param [in] topOfStack Stack Pointer value to set
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_SP(uint32_t topOfStack)
|
||||
{
|
||||
register uint32_t __regSP __ASM("sp");
|
||||
__regSP = topOfStack;
|
||||
}
|
||||
#endif
|
||||
|
||||
/** \brief Get link register
|
||||
|
||||
This function returns the value of the link register
|
||||
|
||||
\return Value of link register
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_LR(void)
|
||||
{
|
||||
register uint32_t __reglr __ASM("lr");
|
||||
return(__reglr);
|
||||
}
|
||||
|
||||
#if 0
|
||||
/** \brief Set link register
|
||||
|
||||
This function sets the value of the link register
|
||||
|
||||
\param [in] lr LR value to set
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_LR(uint32_t lr)
|
||||
{
|
||||
register uint32_t __reglr __ASM("lr");
|
||||
__reglr = lr;
|
||||
}
|
||||
#endif
|
||||
|
||||
/** \brief Set Process Stack Pointer
|
||||
|
||||
This function assigns the given value to the USR/SYS Stack Pointer (PSP).
|
||||
|
||||
\param [in] topOfProcStack USR/SYS Stack Pointer value to set
|
||||
*/
|
||||
extern void __set_PSP(uint32_t topOfProcStack);
|
||||
|
||||
/** \brief Set User Mode
|
||||
|
||||
This function changes the processor state to User Mode
|
||||
|
||||
\param [in] topOfProcStack USR/SYS Stack Pointer value to set
|
||||
*/
|
||||
extern void __set_CPS_USR(void);
|
||||
|
||||
/** \brief Enable FIQ
|
||||
|
||||
This function enables FIQ interrupts by clearing the F-bit in the CPSR.
|
||||
Can only be executed in Privileged modes.
|
||||
*/
|
||||
#define __enable_fault_irq __enable_fiq
|
||||
|
||||
|
||||
/** \brief Disable FIQ
|
||||
|
||||
This function disables FIQ interrupts by setting the F-bit in the CPSR.
|
||||
Can only be executed in Privileged modes.
|
||||
*/
|
||||
#define __disable_fault_irq __disable_fiq
|
||||
|
||||
|
||||
/** \brief Get FPSCR
|
||||
|
||||
This function returns the current value of the Floating Point Status/Control register.
|
||||
|
||||
\return Floating Point Status/Control register value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void)
|
||||
{
|
||||
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
|
||||
#if 1
|
||||
uint32_t result;
|
||||
|
||||
__ASM volatile ("vmrs %0, fpscr" : "=r" (result) );
|
||||
return (result);
|
||||
#else
|
||||
register uint32_t __regfpscr __ASM("fpscr");
|
||||
return(__regfpscr);
|
||||
#endif
|
||||
#else
|
||||
return(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/** \brief Set FPSCR
|
||||
|
||||
This function assigns the given value to the Floating Point Status/Control register.
|
||||
|
||||
\param [in] fpscr Floating Point Status/Control value to set
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
|
||||
{
|
||||
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
|
||||
#if 1
|
||||
__ASM volatile ("vmsr fpscr, %0" : : "r" (fpscr) );
|
||||
#else
|
||||
register uint32_t __regfpscr __ASM("fpscr");
|
||||
__regfpscr = (fpscr);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/** \brief Get FPEXC
|
||||
|
||||
This function returns the current value of the Floating Point Exception Control register.
|
||||
|
||||
\return Floating Point Exception Control register value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPEXC(void)
|
||||
{
|
||||
#if (__FPU_PRESENT == 1)
|
||||
#if 1
|
||||
uint32_t result;
|
||||
|
||||
__ASM volatile ("vmrs %0, fpexc" : "=r" (result));
|
||||
return (result);
|
||||
#else
|
||||
register uint32_t __regfpexc __ASM("fpexc");
|
||||
return(__regfpexc);
|
||||
#endif
|
||||
#else
|
||||
return(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/** \brief Set FPEXC
|
||||
|
||||
This function assigns the given value to the Floating Point Exception Control register.
|
||||
|
||||
\param [in] fpscr Floating Point Exception Control value to set
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPEXC(uint32_t fpexc)
|
||||
{
|
||||
#if (__FPU_PRESENT == 1)
|
||||
#if 1
|
||||
__ASM volatile ("vmsr fpexc, %0" : : "r" (fpexc));
|
||||
#else
|
||||
register uint32_t __regfpexc __ASM("fpexc");
|
||||
__regfpexc = (fpexc);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/** \brief Get CPACR
|
||||
|
||||
This function returns the current value of the Coprocessor Access Control register.
|
||||
|
||||
\return Coprocessor Access Control register value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CPACR(void)
|
||||
{
|
||||
#if 1
|
||||
register uint32_t __regCPACR;
|
||||
__ASM volatile ("mrc p15, 0, %0, c1, c0, 2" : "=r" (__regCPACR));
|
||||
#else
|
||||
register uint32_t __regCPACR __ASM("cp15:0:c1:c0:2");
|
||||
#endif
|
||||
return __regCPACR;
|
||||
}
|
||||
|
||||
/** \brief Set CPACR
|
||||
|
||||
This function assigns the given value to the Coprocessor Access Control register.
|
||||
|
||||
\param [in] cpacr Coporcessor Acccess Control value to set
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CPACR(uint32_t cpacr)
|
||||
{
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c1, c0, 2" : : "r" (cpacr));
|
||||
#else
|
||||
register uint32_t __regCPACR __ASM("cp15:0:c1:c0:2");
|
||||
__regCPACR = cpacr;
|
||||
#endif
|
||||
__ISB();
|
||||
}
|
||||
|
||||
/** \brief Get CBAR
|
||||
|
||||
This function returns the value of the Configuration Base Address register.
|
||||
|
||||
\return Configuration Base Address register value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CBAR() {
|
||||
#if 1
|
||||
register uint32_t __regCBAR;
|
||||
__ASM volatile ("mrc p15, 4, %0, c15, c0, 0" : "=r" (__regCBAR));
|
||||
#else
|
||||
register uint32_t __regCBAR __ASM("cp15:4:c15:c0:0");
|
||||
#endif
|
||||
return(__regCBAR);
|
||||
}
|
||||
|
||||
/** \brief Get TTBR0
|
||||
|
||||
This function returns the value of the Configuration Base Address register.
|
||||
|
||||
\return Translation Table Base Register 0 value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_TTBR0() {
|
||||
#if 1
|
||||
register uint32_t __regTTBR0;
|
||||
__ASM volatile ("mrc p15, 0, %0, c2, c0, 0" : "=r" (__regTTBR0));
|
||||
#else
|
||||
register uint32_t __regTTBR0 __ASM("cp15:0:c2:c0:0");
|
||||
#endif
|
||||
return(__regTTBR0);
|
||||
}
|
||||
|
||||
/** \brief Set TTBR0
|
||||
|
||||
This function assigns the given value to the Coprocessor Access Control register.
|
||||
|
||||
\param [in] ttbr0 Translation Table Base Register 0 value to set
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_TTBR0(uint32_t ttbr0) {
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c2, c0, 0" : : "r" (ttbr0));
|
||||
#else
|
||||
register uint32_t __regTTBR0 __ASM("cp15:0:c2:c0:0");
|
||||
__regTTBR0 = ttbr0;
|
||||
#endif
|
||||
__ISB();
|
||||
}
|
||||
|
||||
/** \brief Get DACR
|
||||
|
||||
This function returns the value of the Domain Access Control Register.
|
||||
|
||||
\return Domain Access Control Register value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_DACR() {
|
||||
#if 1
|
||||
register uint32_t __regDACR;
|
||||
__ASM volatile ("mrc p15, 0, %0, c3, c0, 0" : "=r" (__regDACR));
|
||||
#else
|
||||
register uint32_t __regDACR __ASM("cp15:0:c3:c0:0");
|
||||
#endif
|
||||
return(__regDACR);
|
||||
}
|
||||
|
||||
/** \brief Set DACR
|
||||
|
||||
This function assigns the given value to the Coprocessor Access Control register.
|
||||
|
||||
\param [in] dacr Domain Access Control Register value to set
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_DACR(uint32_t dacr) {
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c3, c0, 0" : : "r" (dacr));
|
||||
#else
|
||||
register uint32_t __regDACR __ASM("cp15:0:c3:c0:0");
|
||||
__regDACR = dacr;
|
||||
#endif
|
||||
__ISB();
|
||||
}
|
||||
|
||||
/******************************** Cache and BTAC enable ****************************************************/
|
||||
|
||||
/** \brief Set SCTLR
|
||||
|
||||
This function assigns the given value to the System Control Register.
|
||||
|
||||
\param [in] sctlr System Control Register, value to set
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_SCTLR(uint32_t sctlr)
|
||||
{
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c1, c0, 0" : : "r" (sctlr));
|
||||
#else
|
||||
register uint32_t __regSCTLR __ASM("cp15:0:c1:c0:0");
|
||||
__regSCTLR = sctlr;
|
||||
#endif
|
||||
}
|
||||
|
||||
/** \brief Get SCTLR
|
||||
|
||||
This function returns the value of the System Control Register.
|
||||
|
||||
\return System Control Register value
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_SCTLR() {
|
||||
#if 1
|
||||
register uint32_t __regSCTLR;
|
||||
__ASM volatile ("mrc p15, 0, %0, c1, c0, 0" : "=r" (__regSCTLR));
|
||||
#else
|
||||
register uint32_t __regSCTLR __ASM("cp15:0:c1:c0:0");
|
||||
#endif
|
||||
return(__regSCTLR);
|
||||
}
|
||||
|
||||
/** \brief Enable Caches
|
||||
|
||||
Enable Caches
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_caches(void) {
|
||||
// Set I bit 12 to enable I Cache
|
||||
// Set C bit 2 to enable D Cache
|
||||
__set_SCTLR( __get_SCTLR() | (1 << 12) | (1 << 2));
|
||||
}
|
||||
|
||||
/** \brief Disable Caches
|
||||
|
||||
Disable Caches
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_caches(void) {
|
||||
// Clear I bit 12 to disable I Cache
|
||||
// Clear C bit 2 to disable D Cache
|
||||
__set_SCTLR( __get_SCTLR() & ~(1 << 12) & ~(1 << 2));
|
||||
__ISB();
|
||||
}
|
||||
|
||||
/** \brief Enable BTAC
|
||||
|
||||
Enable BTAC
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_btac(void) {
|
||||
// Set Z bit 11 to enable branch prediction
|
||||
__set_SCTLR( __get_SCTLR() | (1 << 11));
|
||||
__ISB();
|
||||
}
|
||||
|
||||
/** \brief Disable BTAC
|
||||
|
||||
Disable BTAC
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_btac(void) {
|
||||
// Clear Z bit 11 to disable branch prediction
|
||||
__set_SCTLR( __get_SCTLR() & ~(1 << 11));
|
||||
}
|
||||
|
||||
|
||||
/** \brief Enable MMU
|
||||
|
||||
Enable MMU
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_mmu(void) {
|
||||
// Set M bit 0 to enable the MMU
|
||||
// Set AFE bit to enable simplified access permissions model
|
||||
// Clear TRE bit to disable TEX remap and A bit to disable strict alignment fault checking
|
||||
__set_SCTLR( (__get_SCTLR() & ~(1 << 28) & ~(1 << 1)) | 1 | (1 << 29));
|
||||
__ISB();
|
||||
}
|
||||
|
||||
/** \brief Enable MMU
|
||||
|
||||
Enable MMU
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_mmu(void) {
|
||||
// Clear M bit 0 to disable the MMU
|
||||
__set_SCTLR( __get_SCTLR() & ~1);
|
||||
__ISB();
|
||||
}
|
||||
|
||||
/******************************** TLB maintenance operations ************************************************/
|
||||
/** \brief Invalidate the whole tlb
|
||||
|
||||
TLBIALL. Invalidate the whole tlb
|
||||
*/
|
||||
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __ca9u_inv_tlb_all(void) {
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c8, c7, 0" : : "r" (0));
|
||||
#else
|
||||
register uint32_t __TLBIALL __ASM("cp15:0:c8:c7:0");
|
||||
__TLBIALL = 0;
|
||||
#endif
|
||||
__DSB();
|
||||
__ISB();
|
||||
}
|
||||
|
||||
/******************************** BTB maintenance operations ************************************************/
|
||||
/** \brief Invalidate entire branch predictor array
|
||||
|
||||
BPIALL. Branch Predictor Invalidate All.
|
||||
*/
|
||||
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __v7_inv_btac(void) {
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c7, c5, 6" : : "r" (0));
|
||||
#else
|
||||
register uint32_t __BPIALL __ASM("cp15:0:c7:c5:6");
|
||||
__BPIALL = 0;
|
||||
#endif
|
||||
__DSB(); //ensure completion of the invalidation
|
||||
__ISB(); //ensure instruction fetch path sees new state
|
||||
}
|
||||
|
||||
|
||||
/******************************** L1 cache operations ******************************************************/
|
||||
|
||||
/** \brief Invalidate the whole I$
|
||||
|
||||
ICIALLU. Instruction Cache Invalidate All to PoU
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __v7_inv_icache_all(void) {
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c7, c5, 0" : : "r" (0));
|
||||
#else
|
||||
register uint32_t __ICIALLU __ASM("cp15:0:c7:c5:0");
|
||||
__ICIALLU = 0;
|
||||
#endif
|
||||
__DSB(); //ensure completion of the invalidation
|
||||
__ISB(); //ensure instruction fetch path sees new I cache state
|
||||
}
|
||||
|
||||
/** \brief Clean D$ by MVA
|
||||
|
||||
DCCMVAC. Data cache clean by MVA to PoC
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __v7_clean_dcache_mva(void *va) {
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c7, c10, 1" : : "r" ((uint32_t)va));
|
||||
#else
|
||||
register uint32_t __DCCMVAC __ASM("cp15:0:c7:c10:1");
|
||||
__DCCMVAC = (uint32_t)va;
|
||||
#endif
|
||||
__DMB(); //ensure the ordering of data cache maintenance operations and their effects
|
||||
}
|
||||
|
||||
/** \brief Invalidate D$ by MVA
|
||||
|
||||
DCIMVAC. Data cache invalidate by MVA to PoC
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __v7_inv_dcache_mva(void *va) {
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c7, c6, 1" : : "r" ((uint32_t)va));
|
||||
#else
|
||||
register uint32_t __DCIMVAC __ASM("cp15:0:c7:c6:1");
|
||||
__DCIMVAC = (uint32_t)va;
|
||||
#endif
|
||||
__DMB(); //ensure the ordering of data cache maintenance operations and their effects
|
||||
}
|
||||
|
||||
/** \brief Clean and Invalidate D$ by MVA
|
||||
|
||||
DCCIMVAC. Data cache clean and invalidate by MVA to PoC
|
||||
*/
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __v7_clean_inv_dcache_mva(void *va) {
|
||||
#if 1
|
||||
__ASM volatile ("mcr p15, 0, %0, c7, c14, 1" : : "r" ((uint32_t)va));
|
||||
#else
|
||||
register uint32_t __DCCIMVAC __ASM("cp15:0:c7:c14:1");
|
||||
__DCCIMVAC = (uint32_t)va;
|
||||
#endif
|
||||
__DMB(); //ensure the ordering of data cache maintenance operations and their effects
|
||||
}
|
||||
|
||||
/** \brief
|
||||
* Generic mechanism for cleaning/invalidating the entire data or unified cache to the point of coherency.
|
||||
*/
|
||||
|
||||
/** \brief __v7_all_cache - helper function
|
||||
|
||||
*/
|
||||
|
||||
extern void __v7_all_cache(uint32_t op);
|
||||
|
||||
|
||||
/** \brief Invalidate the whole D$
|
||||
|
||||
DCISW. Invalidate by Set/Way
|
||||
*/
|
||||
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __v7_inv_dcache_all(void) {
|
||||
__v7_all_cache(0);
|
||||
}
|
||||
|
||||
/** \brief Clean the whole D$
|
||||
|
||||
DCCSW. Clean by Set/Way
|
||||
*/
|
||||
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __v7_clean_dcache_all(void) {
|
||||
__v7_all_cache(1);
|
||||
}
|
||||
|
||||
/** \brief Clean and invalidate the whole D$
|
||||
|
||||
DCCISW. Clean and Invalidate by Set/Way
|
||||
*/
|
||||
|
||||
__attribute__( ( always_inline ) ) __STATIC_INLINE void __v7_clean_inv_dcache_all(void) {
|
||||
__v7_all_cache(2);
|
||||
}
|
||||
|
||||
#include "core_ca_mmu.h"
|
||||
|
||||
#elif (defined (__TASKING__)) /*--------------- TASKING Compiler -----------------*/
|
||||
|
||||
|
|
|
@ -234,8 +234,8 @@ typedef enum {
|
|||
A1 = PTB3,
|
||||
A2 = PTB10,
|
||||
A3 = PTB11,
|
||||
A4 = PTC10,
|
||||
A5 = PTC11,
|
||||
A4 = PTC11,
|
||||
A5 = PTC10,
|
||||
|
||||
DAC0_OUT = 0xFEFE, /* DAC does not have Pin Name in RM */
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#define DEVICE_SERIAL_FC 1
|
||||
|
||||
#define DEVICE_I2C 1
|
||||
#define DEVICE_I2CSLAVE 0
|
||||
#define DEVICE_I2CSLAVE 1
|
||||
|
||||
#define DEVICE_SPI 1
|
||||
#define DEVICE_SPISLAVE 1
|
||||
|
@ -40,7 +40,7 @@
|
|||
|
||||
#define DEVICE_ETHERNET 0
|
||||
|
||||
#define DEVICE_PWMOUT 0
|
||||
#define DEVICE_PWMOUT 1
|
||||
|
||||
#define DEVICE_SEMIHOST 0
|
||||
#define DEVICE_LOCALFILESYSTEM 0
|
||||
|
|
|
@ -43,6 +43,11 @@ struct spi_s {
|
|||
unsigned char spi_n;
|
||||
};
|
||||
|
||||
struct pwmout_s {
|
||||
LPC_SCT_TypeDef* pwm;
|
||||
uint32_t pwm_ch;
|
||||
};
|
||||
|
||||
#include "gpio_object.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -0,0 +1,226 @@
|
|||
/* mbed Microcontroller Library
|
||||
* Copyright (c) 2006-2013 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "mbed_assert.h"
|
||||
#include "pwmout_api.h"
|
||||
#include "cmsis.h"
|
||||
#include "pinmap.h"
|
||||
#include "mbed_error.h"
|
||||
|
||||
// Ported from LPC824 and adapted.
|
||||
|
||||
#if DEVICE_PWMOUT
|
||||
|
||||
#define PWM_IRQn SCT_IRQn
|
||||
|
||||
// Bit flags for used SCT Outputs
|
||||
static unsigned char sct_used = 0;
|
||||
static int sct_inited = 0;
|
||||
|
||||
// Find available output channel
|
||||
// Max number of PWM outputs is 4 on LPC812
|
||||
static int get_available_sct() {
|
||||
int i;
|
||||
|
||||
// Find available output channel 0..3
|
||||
// Also need one Match register per channel
|
||||
for (i = 0; i < CONFIG_SCT_nOU; i++) {
|
||||
// for (i = 0; i < 4; i++) {
|
||||
if ((sct_used & (1 << i)) == 0)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Any Port pin may be used for PWM.
|
||||
// Max number of PWM outputs is 4
|
||||
void pwmout_init(pwmout_t* obj, PinName pin) {
|
||||
MBED_ASSERT(pin != (uint32_t)NC);
|
||||
|
||||
int sct_n = get_available_sct();
|
||||
if (sct_n == -1) {
|
||||
error("No available SCT Output");
|
||||
}
|
||||
|
||||
sct_used |= (1 << sct_n);
|
||||
|
||||
obj->pwm = (LPC_SCT_TypeDef*)LPC_SCT;
|
||||
obj->pwm_ch = sct_n;
|
||||
|
||||
LPC_SCT_TypeDef* pwm = obj->pwm;
|
||||
|
||||
// Init SCT on first use
|
||||
if (! sct_inited) {
|
||||
sct_inited = 1;
|
||||
|
||||
// Enable the SCT clock
|
||||
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 8);
|
||||
|
||||
// Clear peripheral reset the SCT:
|
||||
LPC_SYSCON->PRESETCTRL |= (1 << 8);
|
||||
|
||||
// Two 16-bit counters, autolimit (ie reset on Match_0)
|
||||
pwm->CONFIG &= ~(0x1);
|
||||
pwm->CONFIG |= (1 << 17);
|
||||
|
||||
// halt and clear the counter
|
||||
pwm->CTRL_L |= (1 << 2) | (1 << 3);
|
||||
|
||||
// System Clock (30 Mhz) -> Prescaler -> us_ticker (1 MHz)
|
||||
pwm->CTRL_L &= ~(0x7F << 5);
|
||||
pwm->CTRL_L |= (((SystemCoreClock/1000000 - 1) & 0x7F) << 5);
|
||||
|
||||
pwm->EVENT[0].CTRL = (1 << 12) | 0; // Event_0 on Match_0
|
||||
pwm->EVENT[0].STATE = 0xFFFFFFFF; // All states
|
||||
|
||||
// unhalt the counter:
|
||||
// - clearing bit 2 of the CTRL register
|
||||
pwm->CTRL_L &= ~(1 << 2);
|
||||
|
||||
// Not using IRQs
|
||||
//NVIC_SetVector(PWM_IRQn, (uint32_t)pwm_irq_handler);
|
||||
//NVIC_EnableIRQ(PWM_IRQn);
|
||||
}
|
||||
|
||||
// LPC81x has only one SCT and 4 Outputs
|
||||
// LPC82x has only one SCT and 6 Outputs
|
||||
// LPC1549 has 4 SCTs and 16 Outputs
|
||||
switch(sct_n) {
|
||||
case 0:
|
||||
// SCTx_OUT0
|
||||
LPC_SWM->PINASSIGN[6] &= ~0xFF000000;
|
||||
LPC_SWM->PINASSIGN[6] |= (pin << 24);
|
||||
break;
|
||||
case 1:
|
||||
// SCTx_OUT1
|
||||
LPC_SWM->PINASSIGN[7] &= ~0x000000FF;
|
||||
LPC_SWM->PINASSIGN[7] |= (pin);
|
||||
break;
|
||||
case 2:
|
||||
// SCTx_OUT2
|
||||
LPC_SWM->PINASSIGN[7] &= ~0x0000FF00;
|
||||
LPC_SWM->PINASSIGN[7] |= (pin << 8);
|
||||
break;
|
||||
case 3:
|
||||
// SCTx_OUT3
|
||||
LPC_SWM->PINASSIGN[7] &= ~0x00FF0000;
|
||||
LPC_SWM->PINASSIGN[7] |= (pin << 16);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
pwm->EVENT[sct_n + 1].CTRL = (1 << 12) | (sct_n + 1); // Event_n on Match_n
|
||||
pwm->EVENT[sct_n + 1].STATE = 0xFFFFFFFF; // All states
|
||||
|
||||
pwm->OUT[sct_n].SET = (1 << 0); // All PWM channels are SET on Event_0
|
||||
pwm->OUT[sct_n].CLR = (1 << (sct_n + 1)); // PWM ch is CLRed on Event_(ch+1)
|
||||
|
||||
// default to 20ms: standard for servos, and fine for e.g. brightness control
|
||||
pwmout_period_ms(obj, 20); // 20ms period
|
||||
pwmout_write (obj, 0.0); // 0ms pulsewidth, dutycycle 0
|
||||
}
|
||||
|
||||
void pwmout_free(pwmout_t* obj) {
|
||||
// PWM channel is now free
|
||||
sct_used &= ~(1 << obj->pwm_ch);
|
||||
|
||||
// Disable the SCT clock when all channels free
|
||||
if (sct_used == 0) {
|
||||
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1 << 8);
|
||||
sct_inited = 0;
|
||||
};
|
||||
}
|
||||
|
||||
// Set new dutycycle (0.0 .. 1.0)
|
||||
void pwmout_write(pwmout_t* obj, float value) {
|
||||
//value is new dutycycle
|
||||
if (value < 0.0f) {
|
||||
value = 0.0;
|
||||
} else if (value > 1.0f) {
|
||||
value = 1.0;
|
||||
}
|
||||
|
||||
// Match_0 is PWM period. Compute new endtime of pulse for current channel
|
||||
uint32_t t_off = (uint32_t)((float)(obj->pwm->MATCHREL[0].L) * value);
|
||||
obj->pwm->MATCHREL[(obj->pwm_ch) + 1].L = t_off; // New endtime
|
||||
}
|
||||
|
||||
// Get dutycycle (0.0 .. 1.0)
|
||||
float pwmout_read(pwmout_t* obj) {
|
||||
uint32_t t_period = obj->pwm->MATCHREL[0].L;
|
||||
|
||||
//Sanity check
|
||||
if (t_period == 0) {
|
||||
return 0.0;
|
||||
};
|
||||
|
||||
uint32_t t_off = obj->pwm->MATCHREL[(obj->pwm_ch) + 1].L;
|
||||
float v = (float)t_off/(float)t_period;
|
||||
//Sanity check
|
||||
return (v > 1.0f) ? (1.0f) : (v);
|
||||
}
|
||||
|
||||
// Set the PWM period, keeping the duty cycle the same (for this channel only!).
|
||||
void pwmout_period(pwmout_t* obj, float seconds){
|
||||
pwmout_period_us(obj, seconds * 1000000.0f);
|
||||
}
|
||||
|
||||
// Set the PWM period, keeping the duty cycle the same (for this channel only!).
|
||||
void pwmout_period_ms(pwmout_t* obj, int ms) {
|
||||
pwmout_period_us(obj, ms * 1000);
|
||||
}
|
||||
|
||||
// Set the PWM period, keeping the duty cycle the same (for this channel only!).
|
||||
void pwmout_period_us(pwmout_t* obj, int us) {
|
||||
|
||||
uint32_t t_period = obj->pwm->MATCHREL[0].L; // Current PWM period
|
||||
obj->pwm->MATCHREL[0].L = (uint64_t)us; // New PWM period
|
||||
|
||||
//Keep the dutycycle for the new PWM period
|
||||
//Should really do this for all active channels!!
|
||||
//This problem exists in all mbed libs.
|
||||
|
||||
//Sanity check
|
||||
if (t_period == 0) {
|
||||
return;
|
||||
// obj->pwm->MATCHREL[(obj->pwm_ch) + 1].L = 0; // New endtime for this channel
|
||||
}
|
||||
else {
|
||||
uint32_t t_off = obj->pwm->MATCHREL[(obj->pwm_ch) + 1].L;
|
||||
float v = (float)t_off/(float)t_period;
|
||||
obj->pwm->MATCHREL[(obj->pwm_ch) + 1].L = (uint64_t)((float)us * (float)v); // New endtime for this channel
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Set pulsewidth
|
||||
void pwmout_pulsewidth(pwmout_t* obj, float seconds) {
|
||||
pwmout_pulsewidth_us(obj, seconds * 1000000.0f);
|
||||
}
|
||||
|
||||
//Set pulsewidth
|
||||
void pwmout_pulsewidth_ms(pwmout_t* obj, int ms){
|
||||
pwmout_pulsewidth_us(obj, ms * 1000);
|
||||
}
|
||||
|
||||
//Set pulsewidth
|
||||
void pwmout_pulsewidth_us(pwmout_t* obj, int us) {
|
||||
|
||||
//Should add Sanity check to make sure pulsewidth < period!
|
||||
obj->pwm->MATCHREL[(obj->pwm_ch) + 1].L = (uint64_t)us; // New endtime for this channel
|
||||
}
|
||||
|
||||
#endif
|
|
@ -17,77 +17,105 @@
|
|||
#include "us_ticker_api.h"
|
||||
#include "PeripheralNames.h"
|
||||
|
||||
#define US_TICKER_TIMER_IRQn SCT_IRQn
|
||||
//New, using MRT instead of SCT, needed to free up SCT for PWM
|
||||
//Ported from LPC824 libs
|
||||
static int us_ticker_inited = 0;
|
||||
unsigned int ticker_fullcount_us;
|
||||
unsigned long int ticker_expired_count_us = 0;
|
||||
int MRT_Clock_MHz;
|
||||
|
||||
int us_ticker_inited = 0;
|
||||
#define US_TICKER_TIMER_IRQn MRT_IRQn
|
||||
|
||||
void us_ticker_init(void) {
|
||||
if (us_ticker_inited) return;
|
||||
|
||||
if (us_ticker_inited)
|
||||
return;
|
||||
|
||||
us_ticker_inited = 1;
|
||||
|
||||
// Enable the SCT clock
|
||||
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 8);
|
||||
|
||||
// Clear peripheral reset the SCT:
|
||||
LPC_SYSCON->PRESETCTRL |= (1 << 8);
|
||||
|
||||
// Unified counter (32 bits)
|
||||
LPC_SCT->CONFIG |= 1;
|
||||
|
||||
// halt and clear the counter
|
||||
LPC_SCT->CTRL_L |= (1 << 2) | (1 << 3);
|
||||
|
||||
// System Clock (12)MHz -> us_ticker (1)MHz
|
||||
LPC_SCT->CTRL_L |= ((SystemCoreClock/1000000 - 1) << 5);
|
||||
|
||||
// unhalt the counter:
|
||||
// - clearing bit 2 of the CTRL register
|
||||
LPC_SCT->CTRL_L &= ~(1 << 2);
|
||||
// Calculate MRT clock value (MRT has no prescaler)
|
||||
MRT_Clock_MHz = (SystemCoreClock / 1000000);
|
||||
// Calculate fullcounter value in us (MRT has 31 bits and clock is 30 MHz)
|
||||
ticker_fullcount_us = 0x80000000UL/MRT_Clock_MHz;
|
||||
|
||||
// Enable the MRT clock
|
||||
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 10);
|
||||
|
||||
// Clear peripheral reset the MRT
|
||||
LPC_SYSCON->PRESETCTRL |= (1 << 7);
|
||||
|
||||
// Force load interval value (Bit 0-30 is interval value, Bit 31 is Force Load bit)
|
||||
LPC_MRT->INTVAL0 = 0xFFFFFFFFUL;
|
||||
// Enable Ch0 interrupt, Mode 0 is Repeat Interrupt
|
||||
LPC_MRT->CTRL0 = (0x0 << 1) | (0x1 << 0);
|
||||
|
||||
// Force load interval value (Bit 0-30 is interval value, Bit 31 is Force Load bit)
|
||||
LPC_MRT->INTVAL1 = 0x80000000UL;
|
||||
// Disable ch1 interrupt, Mode 0 is Repeat Interrupt
|
||||
LPC_MRT->CTRL1 = (0x0 << 1) | (0x0 << 0);
|
||||
|
||||
// Set MRT interrupt vector
|
||||
NVIC_SetVector(US_TICKER_TIMER_IRQn, (uint32_t)us_ticker_irq_handler);
|
||||
NVIC_EnableIRQ(US_TICKER_TIMER_IRQn);
|
||||
}
|
||||
|
||||
//TIMER0 is used for us ticker and timers (Timer, wait(), wait_us() etc)
|
||||
uint32_t us_ticker_read() {
|
||||
|
||||
if (!us_ticker_inited)
|
||||
us_ticker_init();
|
||||
|
||||
return LPC_SCT->COUNT_U;
|
||||
|
||||
// Generate ticker value
|
||||
// MRT source clock is SystemCoreClock (30MHz) and MRT is a 31-bit countdown timer
|
||||
// Calculate expected value using current count and number of expired times to mimic a 32bit timer @ 1 MHz
|
||||
//
|
||||
// ticker_expired_count_us
|
||||
// The variable ticker_expired_count_us keeps track of the number of 31bits overflows (counted by TIMER0) and
|
||||
// corrects that back to us counts.
|
||||
//
|
||||
// (0x7FFFFFFFUL - LPC_MRT->TIMER0)/MRT_Clock_MHz
|
||||
// The counter is a 31bit downcounter from 7FFFFFFF so correct to actual count-up value and correct
|
||||
// for 30 counts per us.
|
||||
//
|
||||
// Added up these 2 parts result in current us time returned as 32 bits.
|
||||
return (0x7FFFFFFFUL - LPC_MRT->TIMER0)/MRT_Clock_MHz + ticker_expired_count_us;
|
||||
}
|
||||
|
||||
//TIMER1 is used for Timestamped interrupts (Ticker(), Timeout())
|
||||
void us_ticker_set_interrupt(timestamp_t timestamp) {
|
||||
// halt the counter:
|
||||
// - setting bit 2 of the CTRL register
|
||||
LPC_SCT->CTRL_L |= (1 << 2);
|
||||
|
||||
// set timestamp in compare register
|
||||
LPC_SCT->MATCH[0].U = (uint32_t)timestamp;
|
||||
// MRT source clock is SystemCoreClock (30MHz) and MRT is a 31-bit countdown timer
|
||||
// Force load interval value (Bit 0-30 is interval value, Bit 31 is Force Load bit)
|
||||
// Note: The MRT has less counter headroom available than the typical mbed 32bit timer @ 1 MHz.
|
||||
// The calculated counter interval until the next timestamp will be truncated and an
|
||||
// 'early' interrupt will be generated in case the max required count interval exceeds
|
||||
// the available 31 bits space. However, the mbed us_ticker interrupt handler will
|
||||
// check current time against the next scheduled timestamp and simply re-issue the
|
||||
// same interrupt again when needed. The calculated counter interval will now be smaller.
|
||||
LPC_MRT->INTVAL1 = (((timestamp - us_ticker_read()) * MRT_Clock_MHz) | 0x80000000UL);
|
||||
|
||||
// unhalt the counter:
|
||||
// - clearing bit 2 of the CTRL register
|
||||
LPC_SCT->CTRL_L &= ~(1 << 2);
|
||||
// Enable interrupt
|
||||
LPC_MRT->CTRL1 |= 1;
|
||||
}
|
||||
|
||||
//Disable Timestamped interrupts triggered by TIMER1
|
||||
void us_ticker_disable_interrupt() {
|
||||
//Timer1 for Timestamped interrupts (31 bits downcounter @ SystemCoreClock)
|
||||
LPC_MRT->CTRL1 &= ~1;
|
||||
}
|
||||
|
||||
void us_ticker_clear_interrupt() {
|
||||
|
||||
// if events are not enabled, enable them
|
||||
if (!(LPC_SCT->EVEN & 0x01)) {
|
||||
|
||||
// comb mode = match only
|
||||
LPC_SCT->EVENT[0].CTRL = (1 << 12);
|
||||
|
||||
// ref manual:
|
||||
// In simple applications that do not
|
||||
// use states, write 0x01 to this
|
||||
// register to enable an event
|
||||
LPC_SCT->EVENT[0].STATE |= 0x1;
|
||||
|
||||
// enable events
|
||||
LPC_SCT->EVEN |= 0x1;
|
||||
//Timer1 for Timestamped interrupts (31 bits downcounter @ SystemCoreClock)
|
||||
if (LPC_MRT->STAT1 & 1)
|
||||
LPC_MRT->STAT1 = 1;
|
||||
|
||||
//Timer0 for us counter (31 bits downcounter @ SystemCoreClock)
|
||||
if (LPC_MRT->STAT0 & 1) {
|
||||
LPC_MRT->STAT0 = 1;
|
||||
// ticker_expired_count_us = (ticker_expired * 0x80000000UL) / MRT_Clock_MHz
|
||||
// The variable ticker_expired_count_us keeps track of the number of 31bits overflows (counted by TIMER0) and
|
||||
// the multiplication/division corrects that back to us counts.
|
||||
ticker_expired_count_us += ticker_fullcount_us;
|
||||
}
|
||||
}
|
||||
|
||||
void us_ticker_disable_interrupt(void) {
|
||||
LPC_SCT->EVEN &= ~1;
|
||||
}
|
||||
|
||||
void us_ticker_clear_interrupt(void) {
|
||||
LPC_SCT->EVFLAG = 1;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
/* ->Take measures about optimization problems of web compiler */
|
||||
/* Web compiler has problem that inlining code may not be generated correctly */
|
||||
/* when "-O3 -Otime" was specified. */
|
||||
#if defined(__arm__) && (__ARMCC_VERSION <= 5040027)
|
||||
#if defined(__CC_ARM) && (__ARMCC_VERSION <= 5040027)
|
||||
#pragma Ospace
|
||||
#endif
|
||||
/* <-Take measures about optimization problems of web compiler */
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
#define NUM_OF_RX_DESCRIPTOR (16)
|
||||
#define SIZE_OF_BUFFER (1600) /* Must be an integral multiple of 32 */
|
||||
#define MAX_SEND_SIZE (1514)
|
||||
#define BUFF_BOUNDARY_MSK (0x0000000F)
|
||||
/* Ethernet Descriptor Value Define */
|
||||
#define TD0_TFP_TOP_BOTTOM (0x30000000)
|
||||
#define TD0_TACT (0x80000000)
|
||||
|
@ -105,14 +104,13 @@ typedef struct tag_edmac_recv_desc {
|
|||
} edmac_recv_desc_t;
|
||||
|
||||
/* memory */
|
||||
#pragma arm section zidata="NC_BSS"
|
||||
/* The whole transmit/receive descriptors (must be allocated in 16-byte boundaries) */
|
||||
/* Transmit/receive buffers (must be allocated in 16-byte boundaries) */
|
||||
static uint8_t ehernet_nc_memory[(sizeof(edmac_send_desc_t) * NUM_OF_TX_DESCRIPTOR) +
|
||||
(sizeof(edmac_recv_desc_t) * NUM_OF_RX_DESCRIPTOR) +
|
||||
(NUM_OF_TX_DESCRIPTOR * SIZE_OF_BUFFER) +
|
||||
(NUM_OF_RX_DESCRIPTOR * SIZE_OF_BUFFER) + BUFF_BOUNDARY_MSK];
|
||||
#pragma arm section zidata
|
||||
(NUM_OF_RX_DESCRIPTOR * SIZE_OF_BUFFER)]
|
||||
__attribute((section("NC_BSS"),aligned(16))); //16 bytes aligned!
|
||||
static int32_t rx_read_offset; /* read offset */
|
||||
static int32_t tx_wite_offset; /* write offset */
|
||||
static uint32_t send_top_index;
|
||||
|
@ -489,7 +487,7 @@ static void lan_desc_create(void) {
|
|||
uint8_t *p_memory_top;
|
||||
|
||||
(void)memset((void *)ehernet_nc_memory, 0, sizeof(ehernet_nc_memory));
|
||||
p_memory_top = (uint8_t *)(((uint32_t)ehernet_nc_memory + BUFF_BOUNDARY_MSK) & ~BUFF_BOUNDARY_MSK);
|
||||
p_memory_top = ehernet_nc_memory;
|
||||
|
||||
/* Descriptor area configuration */
|
||||
p_eth_desc_dsend = (edmac_send_desc_t *)p_memory_top;
|
||||
|
|
|
@ -17,4 +17,4 @@ typedef struct tag_ethernet_cfg {
|
|||
extern int ethernetext_init(ethernet_cfg_t *p_ethcfg);
|
||||
extern void ethernetext_start_stop(int32_t mode);
|
||||
extern int ethernetext_chk_link_mode(void);
|
||||
extern void ethernetext_set_link_mode(int link);
|
||||
extern void ethernetext_set_link_mode(int32_t link);
|
||||
|
|
|
@ -199,12 +199,13 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
|
|||
GIC_DisableIRQ((IRQn_Type)(nIRQn_h+obj->ch));
|
||||
/* Clear Interrupt flags */
|
||||
INTCIRQRR &= ~(1 << obj->ch);
|
||||
INTCICR1 = work_icr_val;
|
||||
} else if (obj->int_enable == 1) {
|
||||
INTCICR1 = work_icr_val;
|
||||
GIC_EnableIRQ((IRQn_Type)(nIRQn_h + obj->ch));
|
||||
} else {
|
||||
/* Do Nothing */
|
||||
INTCICR1 = work_icr_val;
|
||||
}
|
||||
INTCICR1 = work_icr_val;
|
||||
}
|
||||
|
||||
void gpio_irq_enable(gpio_irq_t *obj) {
|
||||
|
|
|
@ -247,7 +247,7 @@ inline int i2c_start(i2c_t *obj) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
inline int i2c_restart(i2c_t *obj) {
|
||||
static inline int i2c_restart(i2c_t *obj) {
|
||||
/* SR2.START = 0 */
|
||||
REG(SR2.UINT32) &= ~SR2_START;
|
||||
/* ReStart condition */
|
||||
|
|
|
@ -235,8 +235,6 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) {
|
|||
b0 SPB2DT - Serial port break data : High-level */
|
||||
obj->uart->SCSPTR = 0x0003u; // SPB2IO = 1, SPB2DT = 1
|
||||
|
||||
obj->uart->SCSCR = 0x00F0;
|
||||
|
||||
/* ---- Line status register (SCLSR) setting ----
|
||||
b0 ORER - Overrun error detect : clear */
|
||||
|
||||
|
@ -277,6 +275,10 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) {
|
|||
uart_data[obj->index].sw_rts.pin = NC;
|
||||
uart_data[obj->index].sw_cts.pin = NC;
|
||||
|
||||
/* ---- Serial control register (SCSCR) setting ---- */
|
||||
/* Setting the TE and RE bits enables the TxD and RxD pins to be used. */
|
||||
obj->uart->SCSCR = 0x00F0;
|
||||
|
||||
is_stdio_uart = (uart == STDIO_UART) ? (1) : (0);
|
||||
|
||||
if (is_stdio_uart) {
|
||||
|
|
|
@ -30,6 +30,7 @@ int us_ticker_inited = 0;
|
|||
static double count_clock = 0;
|
||||
static uint32_t last_read = 0;
|
||||
static uint32_t wrap_arround = 0;
|
||||
static uint64_t ticker_us_last64 = 0;
|
||||
|
||||
void us_ticker_interrupt(void) {
|
||||
us_ticker_irq_handler();
|
||||
|
@ -61,69 +62,67 @@ void us_ticker_init(void) {
|
|||
GIC_EnableIRQ(US_TICKER_TIMER_IRQn);
|
||||
}
|
||||
|
||||
uint64_t us_ticker_read64() {
|
||||
uint32_t val;
|
||||
volatile uint64_t val64;
|
||||
int check_irq_masked;
|
||||
|
||||
check_irq_masked = __disable_irq();
|
||||
static uint64_t ticker_read_counter64(void) {
|
||||
uint32_t cnt_val;
|
||||
uint64_t cnt_val64;
|
||||
|
||||
if (!us_ticker_inited)
|
||||
us_ticker_init();
|
||||
|
||||
/* read counter */
|
||||
val = OSTM1CNT;
|
||||
if ( last_read > val ) {
|
||||
cnt_val = OSTM1CNT;
|
||||
if (last_read > cnt_val) {
|
||||
wrap_arround++;
|
||||
}
|
||||
last_read = val;
|
||||
val64 = ((uint64_t)wrap_arround << 32) + val;
|
||||
last_read = cnt_val;
|
||||
cnt_val64 = ((uint64_t)wrap_arround << 32) + cnt_val;
|
||||
|
||||
/* clock to us */
|
||||
val64 = val64 / count_clock;
|
||||
return cnt_val64;
|
||||
}
|
||||
|
||||
uint32_t us_ticker_read() {
|
||||
uint64_t cnt_val64;
|
||||
uint64_t us_val64;
|
||||
int check_irq_masked;
|
||||
|
||||
check_irq_masked = __disable_irq();
|
||||
|
||||
cnt_val64 = ticker_read_counter64();
|
||||
us_val64 = (cnt_val64 / count_clock);
|
||||
ticker_us_last64 = us_val64;
|
||||
|
||||
if (!check_irq_masked) {
|
||||
__enable_irq();
|
||||
}
|
||||
|
||||
return val64;
|
||||
}
|
||||
|
||||
uint32_t us_ticker_read() {
|
||||
return (uint32_t)us_ticker_read64();
|
||||
/* clock to us */
|
||||
return (uint32_t)us_val64;
|
||||
}
|
||||
|
||||
void us_ticker_set_interrupt(timestamp_t timestamp) {
|
||||
// set match value
|
||||
volatile uint64_t set_cmp_val = 0;
|
||||
uint64_t timestamp_tmp;
|
||||
int64_t timestamp_req;
|
||||
int64_t timestamp_comp;
|
||||
uint64_t timestamp_now = us_ticker_read64();
|
||||
|
||||
uint64_t timestamp64;
|
||||
uint64_t set_cmp_val64;
|
||||
volatile uint32_t set_cmp_val;
|
||||
uint64_t count_val_64;
|
||||
|
||||
/* calc compare mach timestamp */
|
||||
set_cmp_val = (timestamp_now & 0xFFFFFFFF00000000) + timestamp;
|
||||
|
||||
timestamp_tmp = (uint64_t)timestamp;
|
||||
timestamp_req = (int64_t)timestamp_tmp;
|
||||
|
||||
timestamp_tmp = (uint64_t)(timestamp_now & 0x00000000FFFFFFFF);
|
||||
timestamp_comp = (int64_t)timestamp_tmp;
|
||||
|
||||
if (timestamp_req <= timestamp_comp + 1) {
|
||||
if (((timestamp_req - timestamp_comp) <= 1) && ((timestamp_req - timestamp_comp) >= -10)) {
|
||||
/* This event was in the past */
|
||||
us_ticker_irq_handler();
|
||||
return;
|
||||
} else {
|
||||
/* This event is wrap arround */
|
||||
set_cmp_val += 0x100000000;
|
||||
}
|
||||
timestamp64 = (ticker_us_last64 & 0xFFFFFFFF00000000) + timestamp;
|
||||
if (timestamp < (ticker_us_last64 & 0x00000000FFFFFFFF)) {
|
||||
/* This event is wrap arround */
|
||||
timestamp64 += 0x100000000;
|
||||
}
|
||||
|
||||
|
||||
/* calc compare mach timestamp */
|
||||
set_cmp_val = set_cmp_val * count_clock;
|
||||
OSTM1CMP = (uint32_t)(set_cmp_val & 0xffffffff);
|
||||
set_cmp_val64 = timestamp64 * count_clock;
|
||||
set_cmp_val = (uint32_t)(set_cmp_val64 & 0x00000000FFFFFFFF);
|
||||
count_val_64 = ticker_read_counter64();
|
||||
if (set_cmp_val64 <= (count_val_64 + 500)) {
|
||||
GIC_SetPendingIRQ(US_TICKER_TIMER_IRQn);
|
||||
GIC_EnableIRQ(US_TICKER_TIMER_IRQn);
|
||||
return;
|
||||
}
|
||||
OSTM1CMP = set_cmp_val;
|
||||
GIC_EnableIRQ(US_TICKER_TIMER_IRQn);
|
||||
}
|
||||
|
||||
|
@ -132,6 +131,5 @@ void us_ticker_disable_interrupt(void) {
|
|||
}
|
||||
|
||||
void us_ticker_clear_interrupt(void) {
|
||||
/* There are no Flags of OSTM1 to clear here */
|
||||
/* Do Nothing */
|
||||
GIC_ClearPendingIRQ(US_TICKER_TIMER_IRQn);
|
||||
}
|
||||
|
|
|
@ -53,7 +53,9 @@ typedef enum {
|
|||
UART_3 = (int)USART3_BASE,
|
||||
UART_4 = (int)UART4_BASE,
|
||||
UART_5 = (int)UART5_BASE,
|
||||
UART_6 = (int)USART6_BASE
|
||||
UART_6 = (int)USART6_BASE,
|
||||
UART_7 = (int)UART7_BASE,
|
||||
UART_8 = (int)UART8_BASE
|
||||
} UARTName;
|
||||
|
||||
#define STDIO_UART_TX PD_8
|
||||
|
|
|
@ -133,12 +133,14 @@ const PinMap PinMap_PWM[] = {
|
|||
const PinMap PinMap_UART_TX[] = {
|
||||
{PA_9, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
|
||||
{PD_8, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
||||
{PF_7, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART7)},
|
||||
{NC, NC, 0}
|
||||
};
|
||||
|
||||
const PinMap PinMap_UART_RX[] = {
|
||||
{PA_10, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
|
||||
{PD_9, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
|
||||
{PF_6, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART7)},
|
||||
{NC, NC, 0}
|
||||
};
|
||||
|
||||
|
|
|
@ -37,9 +37,9 @@
|
|||
#include <string.h>
|
||||
#include "PeripheralPins.h"
|
||||
|
||||
#define UART_NUM (6)
|
||||
#define UART_NUM (8)
|
||||
|
||||
static uint32_t serial_irq_ids[UART_NUM] = {0, 0, 0, 0, 0, 0};
|
||||
static uint32_t serial_irq_ids[UART_NUM] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
static uart_irq_handler irq_handler;
|
||||
|
||||
|
@ -111,6 +111,18 @@ void serial_init(serial_t *obj, PinName tx, PinName rx)
|
|||
__USART6_CLK_ENABLE();
|
||||
obj->index = 5;
|
||||
break;
|
||||
#if defined(UART7_BASE)
|
||||
case UART_7:
|
||||
__UART7_CLK_ENABLE();
|
||||
obj->index = 6;
|
||||
break;
|
||||
#endif
|
||||
#if defined(UART8_BASE)
|
||||
case UART_8:
|
||||
__UART8_CLK_ENABLE();
|
||||
obj->index = 7;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
// Configure the UART pins
|
||||
|
@ -181,6 +193,20 @@ void serial_free(serial_t *obj)
|
|||
__USART6_RELEASE_RESET();
|
||||
__USART6_CLK_DISABLE();
|
||||
break;
|
||||
#if defined(UART7_BASE)
|
||||
case UART_7:
|
||||
__UART7_FORCE_RESET();
|
||||
__UART7_RELEASE_RESET();
|
||||
__UART7_CLK_DISABLE();
|
||||
break;
|
||||
#endif
|
||||
#if defined(UART8_BASE)
|
||||
case UART_8:
|
||||
__UART8_FORCE_RESET();
|
||||
__UART8_RELEASE_RESET();
|
||||
__UART8_CLK_DISABLE();
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
// Configure GPIOs
|
||||
pin_function(obj->pin_tx, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
|
||||
|
@ -281,6 +307,20 @@ static void uart6_irq(void)
|
|||
uart_irq(UART_6, 5);
|
||||
}
|
||||
|
||||
#if defined(UART7_BASE)
|
||||
static void uart7_irq(void)
|
||||
{
|
||||
uart_irq(UART_7, 6);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(UART8_BASE)
|
||||
static void uart8_irq(void)
|
||||
{
|
||||
uart_irq(UART_8, 7);
|
||||
}
|
||||
#endif
|
||||
|
||||
void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id)
|
||||
{
|
||||
irq_handler = handler;
|
||||
|
@ -326,6 +366,18 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
|
|||
irq_n = USART6_IRQn;
|
||||
vector = (uint32_t)&uart6_irq;
|
||||
break;
|
||||
#if defined(UART7_BASE)
|
||||
case UART_7:
|
||||
irq_n = UART7_IRQn;
|
||||
vector = (uint32_t)&uart7_irq;
|
||||
break;
|
||||
#endif
|
||||
#if defined(UART8_BASE)
|
||||
case UART_8:
|
||||
irq_n = UART8_IRQn;
|
||||
vector = (uint32_t)&uart8_irq;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
|
|
|
@ -71,8 +71,8 @@ typedef uintptr_t mem_ptr_t;
|
|||
#define PACK_STRUCT_STRUCT
|
||||
#define PACK_STRUCT_END
|
||||
#define PACK_STRUCT_FIELD(fld) fld
|
||||
// #define PACK_STRUCT_USE_INCLUDES
|
||||
#error NEEDS ALIGNED // FIXME TBD
|
||||
#define IAR_STR(a) #a
|
||||
#define ALIGNED(n) _Pragma(IAR_STR(data_alignment= ## n ##))
|
||||
#else
|
||||
/* GCC tools (CodeSourcery) */
|
||||
#define PACK_STRUCT_BEGIN
|
||||
|
|
|
@ -427,7 +427,7 @@ sys_thread_t sys_thread_new(const char *pcName,
|
|||
t->def.tpriority = (osPriority)priority;
|
||||
t->def.stacksize = stacksize;
|
||||
#ifndef __MBED_CMSIS_RTOS_CA9
|
||||
t->def.stack_pointer = (unsigned char*)malloc(stacksize);
|
||||
t->def.stack_pointer = (uint32_t*)malloc(stacksize);
|
||||
if (t->def.stack_pointer == NULL) {
|
||||
error("Error allocating the stack memory");
|
||||
}
|
||||
|
|
|
@ -258,40 +258,6 @@ void _main_init (void) {
|
|||
#pragma pop
|
||||
#endif
|
||||
#else
|
||||
#if 0
|
||||
//#ifdef __MBED_CMSIS_RTOS_CA9
|
||||
__asm void __rt_entry (void) {
|
||||
|
||||
IMPORT __user_setup_stackheap
|
||||
IMPORT __rt_lib_init
|
||||
IMPORT os_thread_def_main
|
||||
IMPORT osKernelInitialize
|
||||
IMPORT osKernelStart
|
||||
IMPORT osThreadCreate
|
||||
IMPORT InterruptHandlerRegister
|
||||
IMPORT PendSV_Handler
|
||||
IMPORT OS_Tick_Handler
|
||||
IMPORT exit
|
||||
|
||||
BL __user_setup_stackheap
|
||||
MOV R1,R2
|
||||
BL __rt_lib_init
|
||||
BL osKernelInitialize
|
||||
LDR R0,=os_thread_def_main
|
||||
MOVS R1,#0
|
||||
BL osThreadCreate
|
||||
BL osKernelStart
|
||||
MOVS R0,#0
|
||||
LDR R1,=PendSV_Handler
|
||||
BL InterruptHandlerRegister
|
||||
MOVS R0,#134
|
||||
LDR R1,=OS_Tick_Handler
|
||||
BL InterruptHandlerRegister
|
||||
BL exit
|
||||
|
||||
ALIGN
|
||||
}
|
||||
#else
|
||||
__asm void __rt_entry (void) {
|
||||
|
||||
IMPORT __user_setup_stackheap
|
||||
|
@ -315,7 +281,6 @@ __asm void __rt_entry (void) {
|
|||
ALIGN
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#elif defined (__GNUC__)
|
||||
|
||||
|
@ -375,7 +340,7 @@ __attribute ((noreturn)) void __cs3_start_c (void){
|
|||
__attribute__((naked)) void software_init_hook (void) {
|
||||
__asm (
|
||||
".syntax unified\n"
|
||||
".thumb\n"
|
||||
".arm\n"
|
||||
"movs r0,#0\n"
|
||||
"movs r1,#0\n"
|
||||
"mov r4,r0\n"
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
// <i> Defines the number of threads with user-provided stack size.
|
||||
// <i> Default: 0
|
||||
#ifndef OS_PRIVCNT
|
||||
#define OS_PRIVCNT 8
|
||||
#define OS_PRIVCNT 10
|
||||
#endif
|
||||
|
||||
// <o>Total stack size [bytes] for threads with user-provided stack size <0-4096:8><#/4>
|
||||
|
|
|
@ -0,0 +1,474 @@
|
|||
/*----------------------------------------------------------------------------
|
||||
* RL-ARM - RTX
|
||||
*----------------------------------------------------------------------------
|
||||
* Name: HAL_CA9.c
|
||||
* Purpose: Hardware Abstraction Layer for Cortex-A9
|
||||
* Rev.: 3 Sept 2013
|
||||
*----------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (c) 2012 - 2013 ARM Limited
|
||||
* All rights reserved.
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* - Neither the name of ARM nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
.global rt_set_PSP
|
||||
.global rt_get_PSP
|
||||
.global _alloc_box
|
||||
.global _free_box
|
||||
.global PendSV_Handler
|
||||
.global OS_Tick_Handler
|
||||
|
||||
.EQU CPSR_T_BIT, 0x20
|
||||
.EQU CPSR_I_BIT, 0x80
|
||||
.EQU CPSR_F_BIT, 0x40
|
||||
|
||||
.EQU MODE_USR, 0x10
|
||||
.EQU MODE_FIQ, 0x11
|
||||
.EQU MODE_IRQ, 0x12
|
||||
.EQU MODE_SVC, 0x13
|
||||
.EQU MODE_ABT, 0x17
|
||||
.EQU MODE_UND, 0x1B
|
||||
.EQU MODE_SYS, 0x1F
|
||||
|
||||
.EQU TCB_TID, 3 /* 'task id' offset */
|
||||
.EQU TCB_STACKF, 32 /* 'stack_frame' offset */
|
||||
.EQU TCB_TSTACK, 36 /* 'tsk_stack' offset */
|
||||
|
||||
.extern rt_alloc_box
|
||||
.extern os_tsk
|
||||
.extern GICInterface_BASE
|
||||
.extern rt_pop_req
|
||||
.extern os_tick_irqack
|
||||
.extern rt_systick
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* Functions
|
||||
*---------------------------------------------------------------------------*/
|
||||
.text
|
||||
@ For A-class, set USR/SYS stack
|
||||
@ __asm void rt_set_PSP (U32 stack) {
|
||||
rt_set_PSP:
|
||||
.arm
|
||||
|
||||
MRS R1, CPSR
|
||||
CPS #MODE_SYS @no effect in USR mode
|
||||
ISB
|
||||
MOV SP, R0
|
||||
MSR CPSR_c, R1 @no effect in USR mode
|
||||
ISB
|
||||
BX LR
|
||||
|
||||
@ }
|
||||
|
||||
@ For A-class, get USR/SYS stack
|
||||
@ __asm U32 rt_get_PSP (void) {
|
||||
rt_get_PSP:
|
||||
.arm
|
||||
|
||||
MRS R1, CPSR
|
||||
CPS #MODE_SYS @no effect in USR mode
|
||||
ISB
|
||||
MOV R0, SP
|
||||
MSR CPSR_c, R1 @no effect in USR mode
|
||||
ISB
|
||||
BX LR
|
||||
|
||||
@ }
|
||||
|
||||
/*--------------------------- _alloc_box ------------------------------------*/
|
||||
@ __asm void *_alloc_box (void *box_mem) {
|
||||
_alloc_box:
|
||||
/* Function wrapper for Unprivileged/Privileged mode. */
|
||||
.arm
|
||||
|
||||
LDR R12,=rt_alloc_box @ __cpp(rt_alloc_box)
|
||||
MRS R2, CPSR
|
||||
LSLS R2, #28
|
||||
BXNE R12
|
||||
SVC 0
|
||||
BX LR
|
||||
@ }
|
||||
|
||||
|
||||
/*--------------------------- _free_box -------------------------------------*/
|
||||
@ __asm int _free_box (void *box_mem, void *box) {
|
||||
_free_box:
|
||||
/* Function wrapper for Unprivileged/Privileged mode. */
|
||||
.arm
|
||||
|
||||
LDR R12,=rt_free_box @ __cpp(rt_free_box)
|
||||
MRS R2, CPSR
|
||||
LSLS R2, #28
|
||||
BXNE R12
|
||||
SVC 0
|
||||
BX LR
|
||||
|
||||
@ }
|
||||
|
||||
/*-------------------------- SVC_Handler -----------------------------------*/
|
||||
|
||||
@ #pragma push
|
||||
@ #pragma arm
|
||||
@ __asm void SVC_Handler (void) {
|
||||
|
||||
.type SVC_Handler, %function
|
||||
.global SVC_Handler
|
||||
SVC_Handler:
|
||||
@ PRESERVE8
|
||||
.arm
|
||||
.extern rt_tsk_lock
|
||||
.extern rt_tsk_unlock
|
||||
.extern SVC_Count
|
||||
.extern SVC_Table
|
||||
.extern rt_stk_check
|
||||
.extern FPUEnable
|
||||
|
||||
.EQU Mode_SVC, 0x13
|
||||
|
||||
SRSDB SP!, #Mode_SVC @ Push LR_SVC and SPRS_SVC onto SVC mode stack
|
||||
PUSH {R4} @ Push R4 so we can use it as a temp
|
||||
|
||||
|
||||
MRS R4,SPSR @ Get SPSR
|
||||
TST R4,#CPSR_T_BIT @ Check Thumb Bit
|
||||
LDRNEH R4,[LR,#-2] @ Thumb: Load Halfword
|
||||
BICNE R4,R4,#0xFF00 @ Extract SVC Number
|
||||
LDREQ R4,[LR,#-4] @ ARM: Load Word
|
||||
BICEQ R4,R4,#0xFF000000 @ Extract SVC Number
|
||||
|
||||
/* Lock out systick and re-enable interrupts */
|
||||
PUSH {R0-R3,R12,LR}
|
||||
|
||||
AND R12, SP, #4 @ Ensure stack is 8-byte aligned
|
||||
SUB SP, SP, R12 @ Adjust stack
|
||||
PUSH {R12, LR} @ Store stack adjustment and dummy LR to SVC stack
|
||||
|
||||
BLX rt_tsk_lock
|
||||
CPSIE i
|
||||
|
||||
POP {R12, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R12 @ Unadjust stack
|
||||
|
||||
POP {R0-R3,R12,LR}
|
||||
|
||||
CMP R4,#0
|
||||
BNE SVC_User
|
||||
|
||||
MRS R4,SPSR
|
||||
PUSH {R4} @ Push R4 so we can use it as a temp
|
||||
AND R4, SP, #4 @ Ensure stack is 8-byte aligned
|
||||
SUB SP, SP, R4 @ Adjust stack
|
||||
PUSH {R4, LR} @ Store stack adjustment and dummy LR
|
||||
BLX R12
|
||||
POP {R4, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R4 @ Unadjust stack
|
||||
POP {R4} @ Restore R4
|
||||
MSR SPSR_cxsf,R4
|
||||
|
||||
/* Here we will be in SVC mode (even if coming in from PendSV_Handler or OS_Tick_Handler) */
|
||||
Sys_Switch:
|
||||
LDR LR,=os_tsk @ __cpp(&os_tsk)
|
||||
LDM LR,{R4,LR} @ os_tsk.run, os_tsk.new
|
||||
CMP R4,LR
|
||||
BNE switching
|
||||
|
||||
PUSH {R0-R3,R12,LR}
|
||||
|
||||
AND R12, SP, #4 @ Ensure stack is 8-byte aligned
|
||||
SUB SP, SP, R12 @ Adjust stack
|
||||
PUSH {R12, LR} @ Store stack adjustment and dummy LR to SVC stack
|
||||
|
||||
CPSID i
|
||||
BLX rt_tsk_unlock
|
||||
|
||||
POP {R12, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R12 @ Unadjust stack
|
||||
|
||||
POP {R0-R3,R12,LR}
|
||||
POP {R4}
|
||||
RFEFD SP! @ Return from exception, no task switch
|
||||
|
||||
switching:
|
||||
CLREX
|
||||
CMP R4,#0
|
||||
ADDEQ SP,SP,#12 @ Original R4, LR & SPSR do not need to be popped when we are paging in a different task
|
||||
BEQ SVC_Next @ Runtask deleted?
|
||||
|
||||
|
||||
PUSH {R8-R11} @ R4 and LR already stacked
|
||||
MOV R10,R4 @ Preserve os_tsk.run
|
||||
MOV R11,LR @ Preserve os_tsk.new
|
||||
|
||||
ADD R8,SP,#16 @ Unstack R4,LR
|
||||
LDMIA R8,{R4,LR}
|
||||
|
||||
SUB SP,SP,#4 @ Make space on the stack for the next instn
|
||||
STMIA SP,{SP}^ @ Put User SP onto stack
|
||||
POP {R8} @ Pop User SP into R8
|
||||
|
||||
MRS R9,SPSR
|
||||
STMDB R8!,{R9} @ User CPSR
|
||||
STMDB R8!,{LR} @ User PC
|
||||
STMDB R8,{LR}^ @ User LR
|
||||
SUB R8,R8,#4 @ No writeback for store of User LR
|
||||
STMDB R8!,{R0-R3,R12} @ User R0-R3,R12
|
||||
MOV R3,R10 @ os_tsk.run
|
||||
MOV LR,R11 @ os_tsk.new
|
||||
POP {R9-R12}
|
||||
ADD SP,SP,#12 @ Fix up SP for unstack of R4, LR & SPSR
|
||||
STMDB R8!,{R4-R7,R9-R12} @ User R4-R11
|
||||
|
||||
@ If applicable, stack VFP state
|
||||
MRC p15,0,R1,c1,c0,2 @ VFP/NEON access enabled? (CPACR)
|
||||
AND R2,R1,#0x00F00000
|
||||
CMP R2,#0x00F00000
|
||||
BNE no_outgoing_vfp
|
||||
VMRS R2,FPSCR
|
||||
STMDB R8!,{R2,R4} @ Push FPSCR, maintain 8-byte alignment
|
||||
VSTMDB R8!,{S0-S31}
|
||||
LDRB R2,[R3,#TCB_STACKF] @ Record in TCB that VFP state is stacked
|
||||
ORR R2,#2
|
||||
STRB R2,[R3,#TCB_STACKF]
|
||||
|
||||
no_outgoing_vfp:
|
||||
STR R8,[R3,#TCB_TSTACK]
|
||||
MOV R4,LR
|
||||
|
||||
PUSH {R4} @ Push R4 so we can use it as a temp
|
||||
AND R4, SP, #4 @ Ensure stack is 8-byte aligned
|
||||
SUB SP, SP, R4 @ Adjust stack
|
||||
PUSH {R4, LR} @ Store stack adjustment and dummy LR to SVC stack
|
||||
|
||||
BLX rt_stk_check
|
||||
|
||||
POP {R4, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R4 @ Unadjust stack
|
||||
POP {R4} @ Restore R4
|
||||
|
||||
MOV LR,R4
|
||||
|
||||
SVC_Next: @ R4 == os_tsk.run, LR == os_tsk.new, R0-R3, R5-R12 corruptible
|
||||
LDR R1,=os_tsk @ __cpp(&os_tsk), os_tsk.run = os_tsk.new
|
||||
STR LR,[R1]
|
||||
LDRB R1,[LR,#TCB_TID] @ os_tsk.run->task_id
|
||||
LSL R1,#8 @ Store PROCID
|
||||
MCR p15,0,R1,c13,c0,1 @ Write CONTEXTIDR
|
||||
|
||||
LDR R0,[LR,#TCB_TSTACK] @ os_tsk.run->tsk_stack
|
||||
|
||||
@ Does incoming task have VFP state in stack?
|
||||
LDRB R3,[LR,#TCB_STACKF]
|
||||
TST R3,#0x2
|
||||
MRC p15,0,R1,c1,c0,2 @ Read CPACR
|
||||
ANDEQ R1,R1,#0xFF0FFFFF @ Disable VFP access if incoming task does not have stacked VFP state
|
||||
ORRNE R1,R1,#0x00F00000 @ Enable VFP access if incoming task does have stacked VFP state
|
||||
MCR p15,0,R1,c1,c0,2 @ Write CPACR
|
||||
BEQ no_incoming_vfp
|
||||
ISB @ We only need the sync if we enabled, otherwise we will context switch before next VFP instruction anyway
|
||||
VLDMIA R0!,{S0-S31}
|
||||
LDR R2,[R0]
|
||||
VMSR FPSCR,R2
|
||||
ADD R0,R0,#8
|
||||
|
||||
no_incoming_vfp:
|
||||
LDR R1,[R0,#60] @ Restore User CPSR
|
||||
MSR SPSR_cxsf,R1
|
||||
LDMIA R0!,{R4-R11} @ Restore User R4-R11
|
||||
ADD R0,R0,#4 @ Restore User R1-R3,R12
|
||||
LDMIA R0!,{R1-R3,R12}
|
||||
LDMIA R0,{LR}^ @ Restore User LR
|
||||
ADD R0,R0,#4 @ No writeback for load to user LR
|
||||
LDMIA R0!,{LR} @ Restore User PC
|
||||
ADD R0,R0,#4 @ Correct User SP for unstacked user CPSR
|
||||
|
||||
PUSH {R0} @ Push R0 onto stack
|
||||
LDMIA SP,{SP}^ @ Get R0 off stack into User SP
|
||||
ADD SP,SP,#4 @ Put SP back
|
||||
|
||||
LDR R0,[R0,#-32] @ Restore R0
|
||||
|
||||
PUSH {R0-R3,R12,LR}
|
||||
|
||||
AND R12, SP, #4 @ Ensure stack is 8-byte aligned
|
||||
SUB SP, SP, R12 @ Adjust stack
|
||||
PUSH {R12, LR} @ Store stack adjustment and dummy LR to SVC stack
|
||||
|
||||
CPSID i
|
||||
BLX rt_tsk_unlock
|
||||
|
||||
POP {R12, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R12 @ Unadjust stack
|
||||
|
||||
POP {R0-R3,R12,LR}
|
||||
|
||||
MOVS PC,LR @ Return from exception
|
||||
|
||||
|
||||
/*------------------- User SVC -------------------------------*/
|
||||
|
||||
SVC_User:
|
||||
LDR R12,=SVC_Count
|
||||
LDR R12,[R12]
|
||||
CMP R4,R12 @ Check for overflow
|
||||
BHI SVC_Done
|
||||
|
||||
LDR R12,=SVC_Table-4
|
||||
LDR R12,[R12,R4,LSL #2] @ Load SVC Function Address
|
||||
MRS R4,SPSR @ Save SPSR
|
||||
PUSH {R4} @ Push R4 so we can use it as a temp
|
||||
AND R4, SP, #4 @ Ensure stack is 8-byte aligned
|
||||
SUB SP, SP, R4 @ Adjust stack
|
||||
PUSH {R4, LR} @ Store stack adjustment and dummy LR
|
||||
BLX R12 @ Call SVC Function
|
||||
POP {R4, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R4 @ Unadjust stack
|
||||
POP {R4} @ Restore R4
|
||||
MSR SPSR_cxsf,R4 @ Restore SPSR
|
||||
|
||||
SVC_Done:
|
||||
PUSH {R0-R3,R12,LR}
|
||||
|
||||
PUSH {R4} @ Push R4 so we can use it as a temp
|
||||
AND R4, SP, #4 @ Ensure stack is 8-byte aligned
|
||||
SUB SP, SP, R4 @ Adjust stack
|
||||
PUSH {R4, LR} @ Store stack adjustment and dummy LR
|
||||
|
||||
CPSID i
|
||||
BLX rt_tsk_unlock
|
||||
|
||||
POP {R4, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R4 @ Unadjust stack
|
||||
POP {R4} @ Restore R4
|
||||
|
||||
POP {R0-R3,R12,LR}
|
||||
POP {R4}
|
||||
RFEFD SP! @ Return from exception
|
||||
|
||||
@ }
|
||||
|
||||
@ #pragma pop
|
||||
|
||||
|
||||
@ #pragma push
|
||||
@ #pragma arm
|
||||
@ __asm void PendSV_Handler (U32 IRQn) {
|
||||
PendSV_Handler:
|
||||
.arm
|
||||
|
||||
.extern rt_tsk_lock
|
||||
.extern IRQNestLevel
|
||||
|
||||
ADD SP,SP,#8 @ fix up stack pointer (R0 has been pushed and will never be popped, R1 was pushed for stack alignment)
|
||||
|
||||
@ Disable systick interrupts, then write EOIR. We want interrupts disabled before we enter the context switcher.
|
||||
PUSH {R0, R1}
|
||||
BLX rt_tsk_lock
|
||||
POP {R0, R1}
|
||||
LDR R1, =GICInterface_BASE @ __cpp(&GICInterface_BASE)
|
||||
LDR R1, [R1, #0]
|
||||
STR R0, [R1, #0x10]
|
||||
|
||||
LDR R0, =IRQNestLevel @ Get address of nesting counter
|
||||
LDR R1, [R0]
|
||||
SUB R1, R1, #1 @ Decrement nesting counter
|
||||
STR R1, [R0]
|
||||
|
||||
BLX rt_pop_req @ __cpp(rt_pop_req)
|
||||
|
||||
POP {R1, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R1 @ Unadjust stack
|
||||
|
||||
LDR R0,[SP,#24]
|
||||
MSR SPSR_cxsf,R0
|
||||
POP {R0-R3,R12} @ Leave SPSR & LR on the stack
|
||||
PUSH {R4}
|
||||
B Sys_Switch
|
||||
@ }
|
||||
@ #pragma pop
|
||||
|
||||
@ #pragma push
|
||||
@ #pragma arm
|
||||
@ __asm void OS_Tick_Handler (U32 IRQn) {
|
||||
OS_Tick_Handler:
|
||||
.arm
|
||||
|
||||
ADD SP,SP,#8 @ fix up stack pointer (R0 has been pushed and will never be popped, R1 was pushed for stack alignment)
|
||||
|
||||
PUSH {R0, R1}
|
||||
BLX rt_tsk_lock
|
||||
POP {R0, R1}
|
||||
LDR R1, =GICInterface_BASE @ __cpp(&GICInterface_BASE)
|
||||
LDR R1, [R1, #0]
|
||||
STR R0, [R1, #0x10]
|
||||
|
||||
LDR R0, =IRQNestLevel @ Get address of nesting counter
|
||||
LDR R1, [R0]
|
||||
SUB R1, R1, #1 @ Decrement nesting counter
|
||||
STR R1, [R0]
|
||||
|
||||
BLX os_tick_irqack @ __cpp(os_tick_irqack)
|
||||
BLX rt_systick @ __cpp(rt_systick)
|
||||
|
||||
POP {R1, LR} @ Get stack adjustment & discard dummy LR
|
||||
ADD SP, SP, R1 @ Unadjust stack
|
||||
|
||||
LDR R0,[SP,#24]
|
||||
MSR SPSR_cxsf,R0
|
||||
POP {R0-R3,R12} @ Leave SPSR & LR on the stack
|
||||
PUSH {R4}
|
||||
B Sys_Switch
|
||||
@ }
|
||||
@ #pragma pop
|
||||
|
||||
.global __set_PSP
|
||||
@ __STATIC_ASM void __set_PSP(uint32_t topOfProcStack)
|
||||
@ {
|
||||
__set_PSP:
|
||||
@ PRESERVE8
|
||||
.arm
|
||||
|
||||
BIC R0, R0, #7 @ensure stack is 8-byte aligned
|
||||
MRS R1, CPSR
|
||||
CPS #MODE_SYS @no effect in USR mode
|
||||
MOV SP, R0
|
||||
MSR CPSR_c, R1 @no effect in USR mode
|
||||
ISB
|
||||
BX LR
|
||||
|
||||
@ }
|
||||
|
||||
.global __set_CPS_USR
|
||||
@ __STATIC_ASM void __set_CPS_USR(void)
|
||||
@ {
|
||||
__set_CPS_USR:
|
||||
.arm
|
||||
|
||||
CPS #MODE_USR
|
||||
BX LR
|
||||
@ }
|
||||
|
||||
.END
|
||||
/*----------------------------------------------------------------------------
|
||||
* end of file
|
||||
*---------------------------------------------------------------------------*/
|
|
@ -0,0 +1,60 @@
|
|||
/*----------------------------------------------------------------------------
|
||||
* RL-ARM - RTX
|
||||
*----------------------------------------------------------------------------
|
||||
* Name: SVC_TABLE.S
|
||||
* Purpose: Pre-defined SVC Table for Cortex-M
|
||||
* Rev.: V4.70
|
||||
*----------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (c) 1999-2009 KEIL, 2009-2013 ARM Germany GmbH
|
||||
* All rights reserved.
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* - Neither the name of ARM nor the names of its contributors may be used
|
||||
* to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
.section SVC_TABLE @, CODE, READONLY
|
||||
.align 5
|
||||
|
||||
.global SVC_Count
|
||||
|
||||
.EQU SVC_Cnt, (SVC_End-SVC_Table)/4
|
||||
|
||||
SVC_Count:
|
||||
.word SVC_Cnt
|
||||
|
||||
@ Import user SVC functions here.
|
||||
@ .extern __SVC_1
|
||||
.global SVC_Table
|
||||
SVC_Table:
|
||||
@ Insert user SVC functions here. SVC 0 used by RTL Kernel.
|
||||
@ .word __SVC_1 @ InitMemorySubsystem
|
||||
|
||||
@SVC_End
|
||||
SVC_End:
|
||||
|
||||
.END
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* end of file
|
||||
*---------------------------------------------------------------------------*/
|
|
@ -145,11 +145,63 @@ typedef uint32_t __attribute__((vector_size(16))) ret128;
|
|||
|
||||
#define RET_pointer __r0
|
||||
#define RET_int32_t __r0
|
||||
#define RET_uint32_t __r0
|
||||
#define RET_osStatus __r0
|
||||
#define RET_osPriority __r0
|
||||
#define RET_osEvent {(osStatus)__r0, {(uint32_t)__r1}, {(void *)__r2}}
|
||||
#define RET_osCallback {(void *)__r0, (void *)__r1}
|
||||
|
||||
#if defined (__ARM_PCS_VFP)
|
||||
|
||||
#define osEvent_type void
|
||||
#define osEvent_ret_status { __asm ("MOV r0, %0;" \
|
||||
: /* no outputs */ \
|
||||
: "r"(ret.status) \
|
||||
: "r0" \
|
||||
); \
|
||||
}
|
||||
#define osEvent_ret_value { __asm ("MOV r1, %0;" \
|
||||
"MOV r0, %1;" \
|
||||
: /* no outputs */ \
|
||||
: "r"(ret.value.v), \
|
||||
"r"(ret.status) \
|
||||
: "r0", "r1" \
|
||||
); \
|
||||
}
|
||||
#define osEvent_ret_msg { __asm ("MOV r2, %0;" \
|
||||
"MOV r1, %1;" \
|
||||
"MOV r0, %2;" \
|
||||
: /* no outputs */ \
|
||||
: "r"(ret.def.message_id), \
|
||||
"r"(ret.value.v), \
|
||||
"r"(ret.status) \
|
||||
: "r0", "r1" , "r2" \
|
||||
); \
|
||||
}
|
||||
|
||||
#define osEvent_ret_mail { __asm ("MOV r2, %0;" \
|
||||
"MOV r1, %1;" \
|
||||
"MOV r0, %2;" \
|
||||
: /* no outputs */ \
|
||||
: "r"(ret.def.mail_id), \
|
||||
"r"(ret.value.v), \
|
||||
"r"(ret.status) \
|
||||
: "r0", "r1" , "r2" \
|
||||
); \
|
||||
}
|
||||
|
||||
#define osCallback_type void
|
||||
#define osCallback_ret { __asm ("MOV r1, %0;" \
|
||||
"MOV r0, %1;" \
|
||||
: /* no outputs */ \
|
||||
: "r"(ret.arg), \
|
||||
"r"(ret.fp) \
|
||||
: "r0", "r1" \
|
||||
); \
|
||||
}
|
||||
|
||||
#else /* defined (__ARM_PCS_VFP) */
|
||||
|
||||
#define osEvent_type ret128
|
||||
#define osEvent_ret_status (ret128){ret.status}
|
||||
#define osEvent_ret_value (ret128){ret.status, ret.value.v}
|
||||
|
@ -159,6 +211,8 @@ typedef uint32_t __attribute__((vector_size(16))) ret128;
|
|||
#define osCallback_type ret64
|
||||
#define osCallback_ret (ret64) {(uint32_t)ret.fp, (uint32_t)ret.arg}
|
||||
|
||||
#endif /* defined (__ARM_PCS_VFP) */
|
||||
|
||||
#define SVC_ArgN(n) \
|
||||
register int __r##n __asm("r"#n);
|
||||
|
||||
|
@ -808,14 +862,24 @@ os_InRegs osEvent_type svcWait (uint32_t millisec) {
|
|||
|
||||
if (millisec == 0) {
|
||||
ret.status = osOK;
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osEvent_ret_status;
|
||||
return;
|
||||
#else
|
||||
return osEvent_ret_status;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* To Do: osEventSignal, osEventMessage, osEventMail */
|
||||
rt_dly_wait(rt_ms2tick(millisec));
|
||||
ret.status = osEventTimeout;
|
||||
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osEvent_ret_status;
|
||||
return;
|
||||
#else
|
||||
return osEvent_ret_status;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1046,13 +1110,23 @@ os_InRegs osCallback_type svcTimerCall (osTimerId timer_id) {
|
|||
if (pt == NULL) {
|
||||
ret.fp = NULL;
|
||||
ret.arg = NULL;
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osCallback_ret;
|
||||
return;
|
||||
#else
|
||||
return osCallback_ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
ret.fp = (void *)pt->timer->ptimer;
|
||||
ret.arg = pt->arg;
|
||||
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osCallback_ret;
|
||||
return;
|
||||
#else
|
||||
return osCallback_ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
static __INLINE osStatus isrMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec);
|
||||
|
@ -1195,7 +1269,12 @@ os_InRegs osEvent_type svcSignalWait (int32_t signals, uint32_t millisec) {
|
|||
|
||||
if (signals & (0xFFFFFFFF << osFeature_Signals)) {
|
||||
ret.status = osErrorValue;
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osEvent_ret_status;
|
||||
return;
|
||||
#else
|
||||
return osEvent_ret_status;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (signals != 0) { // Wait for all specified signals
|
||||
|
@ -1212,7 +1291,12 @@ os_InRegs osEvent_type svcSignalWait (int32_t signals, uint32_t millisec) {
|
|||
ret.value.signals = 0;
|
||||
}
|
||||
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osEvent_ret_value;
|
||||
return;
|
||||
#else
|
||||
return osEvent_ret_value;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -1694,24 +1778,44 @@ os_InRegs osEvent_type svcMessageGet (osMessageQId queue_id, uint32_t millisec)
|
|||
|
||||
if (queue_id == NULL) {
|
||||
ret.status = osErrorParameter;
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osEvent_ret_status;
|
||||
return;
|
||||
#else
|
||||
return osEvent_ret_status;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (((P_MCB)queue_id)->cb_type != MCB) {
|
||||
ret.status = osErrorParameter;
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osEvent_ret_status;
|
||||
return;
|
||||
#else
|
||||
return osEvent_ret_status;
|
||||
#endif
|
||||
}
|
||||
|
||||
res = rt_mbx_wait(queue_id, &ret.value.p, rt_ms2tick(millisec));
|
||||
|
||||
if (res == OS_R_TMO) {
|
||||
ret.status = millisec ? osEventTimeout : osOK;
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osEvent_ret_value;
|
||||
return;
|
||||
#else
|
||||
return osEvent_ret_value;
|
||||
#endif
|
||||
}
|
||||
|
||||
ret.status = osEventMessage;
|
||||
|
||||
#if defined (__GNUC__) && defined (__ARM_PCS_VFP)
|
||||
osEvent_ret_value;
|
||||
return;
|
||||
#else
|
||||
return osEvent_ret_value;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
|
||||
#if defined (__CC_ARM) /* ARM Compiler */
|
||||
|
||||
#if ((__TARGET_ARCH_7_M || __TARGET_ARCH_7E_M || __TARGET_ARCH_7_A) && !NO_EXCLUSIVE_ACCESS)
|
||||
#if ((__TARGET_ARCH_7_M || __TARGET_ARCH_7E_M || __TARGET_ARCH_7_A) && !defined(NO_EXCLUSIVE_ACCESS))
|
||||
#define __USE_EXCLUSIVE_ACCESS
|
||||
#else
|
||||
#undef __USE_EXCLUSIVE_ACCESS
|
||||
|
@ -62,7 +62,16 @@
|
|||
|
||||
#elif defined (__GNUC__) /* GNU Compiler */
|
||||
|
||||
#error GNU Compiler support not implemented for Cortex-A
|
||||
#undef __USE_EXCLUSIVE_ACCESS
|
||||
|
||||
#if defined (__VFP_FP__) && !defined(__SOFTFP__)
|
||||
#define __TARGET_FPU_VFP 1
|
||||
#else
|
||||
#define __TARGET_FPU_VFP 0
|
||||
#endif
|
||||
|
||||
#define __inline inline
|
||||
#define __weak __attribute__((weak))
|
||||
|
||||
#elif defined (__ICCARM__) /* IAR Compiler */
|
||||
|
||||
|
@ -94,7 +103,6 @@ extern const U32 GICInterface_BASE;
|
|||
priority = GICI_ICCPMR; \
|
||||
GICI_ICCPMR = 0xff; \
|
||||
GICI_ICCPMR = GICI_ICCPMR - 1; \
|
||||
while(GICI_ICCPMR > priority);\
|
||||
__DSB();\
|
||||
if(!irq_dis) __enable_irq(); \
|
||||
|
||||
|
|
|
@ -61,6 +61,9 @@ public:
|
|||
NTPResult setTime(const char* host, uint16_t port = NTP_DEFAULT_PORT, uint32_t timeout = NTP_DEFAULT_TIMEOUT); //Blocking
|
||||
|
||||
private:
|
||||
#if defined (__ICCARM__)
|
||||
#pragma pack()
|
||||
#endif
|
||||
struct NTPPacket //See RFC 4330 for Simple NTP
|
||||
{
|
||||
//WARN: We are in LE! Network is BE!
|
||||
|
@ -86,7 +89,11 @@ private:
|
|||
uint32_t rxTm_f;
|
||||
uint32_t txTm_s;
|
||||
uint32_t txTm_f;
|
||||
#if defined (__ICCARM__)
|
||||
};
|
||||
#else
|
||||
} __attribute__ ((packed));
|
||||
#endif
|
||||
|
||||
UDPSocket m_sock;
|
||||
};
|
||||
|
|
|
@ -33,7 +33,7 @@ OFFICIAL_MBED_LIBRARY_BUILD = (
|
|||
('ARCH_PRO', ('ARM', 'GCC_ARM', 'GCC_CR', 'GCC_CS', 'IAR')),
|
||||
('LPC2368', ('ARM', 'GCC_ARM')),
|
||||
('LPC812', ('uARM','IAR')),
|
||||
('LPC824', ('uARM',)),
|
||||
('LPC824', ('uARM', 'IAR')),
|
||||
('SSCI824', ('uARM',)),
|
||||
('LPC1347', ('ARM','IAR')),
|
||||
('LPC4088', ('ARM', 'GCC_ARM', 'GCC_CR', 'IAR')),
|
||||
|
@ -74,11 +74,11 @@ OFFICIAL_MBED_LIBRARY_BUILD = (
|
|||
('ARCH_MAX', ('ARM', 'GCC_ARM')),
|
||||
|
||||
('NRF51822', ('ARM', 'GCC_ARM', 'IAR')),
|
||||
('NRF51_DK', ('ARM', 'GCC_ARM')),
|
||||
('NRF51_DONGLE', ('ARM', 'GCC_ARM')),
|
||||
('HRM1017', ('ARM', 'GCC_ARM')),
|
||||
('ARCH_BLE', ('ARM', 'GCC_ARM')),
|
||||
('SEEED_TINY_BLE', ('ARM', 'GCC_ARM')),
|
||||
('NRF51_DK', ('ARM', 'GCC_ARM', 'IAR')),
|
||||
('NRF51_DONGLE', ('ARM', 'GCC_ARM', 'IAR')),
|
||||
('HRM1017', ('ARM', 'GCC_ARM', 'IAR')),
|
||||
('ARCH_BLE', ('ARM', 'GCC_ARM', 'IAR')),
|
||||
('SEEED_TINY_BLE', ('ARM', 'GCC_ARM', 'IAR')),
|
||||
('RBLAB_NRF51822', ('ARM', 'GCC_ARM')),
|
||||
('RBLAB_BLENANO', ('ARM', 'GCC_ARM')),
|
||||
('WALLBOT_BLE', ('ARM', 'GCC_ARM')),
|
||||
|
@ -86,7 +86,7 @@ OFFICIAL_MBED_LIBRARY_BUILD = (
|
|||
('LPC11U68', ('ARM', 'uARM','GCC_ARM','GCC_CR', 'IAR')),
|
||||
('OC_MBUINO', ('ARM', 'uARM', 'GCC_ARM', 'IAR')),
|
||||
|
||||
('RZ_A1H' , ('ARM',)),
|
||||
('RZ_A1H' , ('ARM', 'GCC_ARM')),
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
# This file was automagically generated by mbed.org. For more information,
|
||||
# see http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded
|
||||
|
||||
GCC_BIN =
|
||||
PROJECT = {{name}}
|
||||
OBJECTS = {% for f in to_be_compiled %}{{f}} {% endfor %}
|
||||
SYS_OBJECTS = {% for f in object_files %}{{f}} {% endfor %}
|
||||
INCLUDE_PATHS = {% for p in include_paths %}-I{{p}} {% endfor %}
|
||||
LIBRARY_PATHS = {% for p in library_paths %}-L{{p}} {% endfor %}
|
||||
LIBRARIES = {% for lib in libraries %}-l{{lib}} {% endfor %}
|
||||
LINKER_SCRIPT = {{linker_script}}
|
||||
|
||||
###############################################################################
|
||||
AS = $(GCC_BIN)arm-none-eabi-as
|
||||
CC = $(GCC_BIN)arm-none-eabi-gcc
|
||||
CPP = $(GCC_BIN)arm-none-eabi-g++
|
||||
LD = $(GCC_BIN)arm-none-eabi-gcc
|
||||
OBJCOPY = $(GCC_BIN)arm-none-eabi-objcopy
|
||||
OBJDUMP = $(GCC_BIN)arm-none-eabi-objdump
|
||||
SIZE = $(GCC_BIN)arm-none-eabi-size
|
||||
|
||||
CPU = -mcpu=cortex-a9 -mthumb-interwork -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard
|
||||
CC_FLAGS = $(CPU) -c -g -fno-common -fmessage-length=0 -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers
|
||||
CC_FLAGS += -fno-exceptions -fno-builtin -ffunction-sections -fdata-sections -fno-delete-null-pointer-checks -fomit-frame-pointer
|
||||
CC_FLAGS += -MMD -MP -mno-unaligned-access
|
||||
CC_SYMBOLS = {% for s in symbols %}-D{{s}} {% endfor %}
|
||||
LD_FLAGS = $(CPU) -Wl,--gc-sections --specs=nano.specs -u _printf_float -u _scanf_float -Wl,--wrap,main
|
||||
LD_FLAGS += -Wl,-Map=$(PROJECT).map,--cref
|
||||
LD_SYS_LIBS = -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
|
||||
|
||||
ifeq ($(DEBUG), 1)
|
||||
CC_FLAGS += -DDEBUG -O0
|
||||
else
|
||||
CC_FLAGS += -DNDEBUG -Os
|
||||
endif
|
||||
|
||||
all: $(PROJECT).bin $(PROJECT).hex
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT).bin $(PROJECT).elf $(PROJECT).hex $(PROJECT).map $(PROJECT).lst $(OBJECTS) $(DEPS)
|
||||
|
||||
.s.o:
|
||||
$(AS) $(CPU) -o $@ $<
|
||||
|
||||
.c.o:
|
||||
$(CC) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu99 $(INCLUDE_PATHS) -o $@ $<
|
||||
|
||||
.cpp.o:
|
||||
$(CPP) $(CC_FLAGS) $(CC_SYMBOLS) -std=gnu++98 -fno-rtti $(INCLUDE_PATHS) -o $@ $<
|
||||
|
||||
|
||||
$(PROJECT).elf: $(OBJECTS) $(SYS_OBJECTS)
|
||||
$(LD) $(LD_FLAGS) -T$(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ $^ $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) $(LD_SYS_LIBS)
|
||||
@echo ""
|
||||
@echo "*****"
|
||||
@echo "***** You must modify vector checksum value in *.bin and *.hex files."
|
||||
@echo "*****"
|
||||
@echo ""
|
||||
$(SIZE) $@
|
||||
|
||||
$(PROJECT).bin: $(PROJECT).elf
|
||||
@$(OBJCOPY) -O binary $< $@
|
||||
|
||||
$(PROJECT).hex: $(PROJECT).elf
|
||||
@$(OBJCOPY) -O ihex $< $@
|
||||
|
||||
$(PROJECT).lst: $(PROJECT).elf
|
||||
@$(OBJDUMP) -Sdh $< > $@
|
||||
|
||||
lst: $(PROJECT).lst
|
||||
|
||||
size:
|
||||
$(SIZE) $(PROJECT).elf
|
||||
|
||||
DEPS = $(OBJECTS:.o=.d) $(SYS_OBJECTS:.o=.d)
|
||||
-include $(DEPS)
|
||||
|
|
@ -75,7 +75,8 @@ class GccArm(Exporter):
|
|||
'NRF51_DONGLE',
|
||||
'SEEED_TINY_BLE',
|
||||
'DISCO_F401VC',
|
||||
'DELTA_DFCM_NNN40',
|
||||
'DELTA_DFCM_NNN40',
|
||||
'RZ_A1H',
|
||||
]
|
||||
|
||||
DOT_IN_RELATIVE_PATH = True
|
||||
|
|
|
@ -15,7 +15,7 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
"""
|
||||
from exporters import Exporter
|
||||
|
||||
import re
|
||||
|
||||
class IAREmbeddedWorkbench(Exporter):
|
||||
NAME = 'IAR'
|
||||
|
@ -27,12 +27,14 @@ class IAREmbeddedWorkbench(Exporter):
|
|||
'LPC11U24',
|
||||
'LPC11U35_401',
|
||||
'LPC11U35_501',
|
||||
'LPCCAPPUCCINO',
|
||||
#Removed LPCCAPPUCCINO linker file and startup file missing
|
||||
#'LPCCAPPUCCINO',
|
||||
'LPC1114',
|
||||
'LPC1549',
|
||||
'LPC812',
|
||||
'LPC4088',
|
||||
'LPC4088_DM',
|
||||
'LPC824',
|
||||
'UBLOX_C027',
|
||||
'ARCH_PRO',
|
||||
'K20D50M',
|
||||
|
@ -53,20 +55,29 @@ class IAREmbeddedWorkbench(Exporter):
|
|||
'NUCLEO_F411RE',
|
||||
'NUCLEO_L053R8',
|
||||
'NUCLEO_L152RE',
|
||||
'STM32F407',
|
||||
#'STM32F407', Fails to build same for GCC
|
||||
'MTS_MDOT_F405RG',
|
||||
'MTS_MDOT_F411RE',
|
||||
'MTS_DRAGONFLY_F411RE',
|
||||
'NRF51822',
|
||||
'NRF51_DK',
|
||||
'NRF51_DONGLE',
|
||||
'DELTA_DFCM_NNN40',
|
||||
'SEEED_TINY_BLE',
|
||||
'HRM1017',
|
||||
'ARCH_BLE',
|
||||
]
|
||||
|
||||
def generate(self):
|
||||
|
||||
sources = []
|
||||
sources += self.resources.c_sources
|
||||
sources += self.resources.cpp_sources
|
||||
sources += self.resources.s_sources
|
||||
|
||||
|
||||
iar_files = IAR_FOLDER("","",[])
|
||||
for source in sources:
|
||||
iar_files.insert_file(source)
|
||||
|
||||
ctx = {
|
||||
'name': self.program_name,
|
||||
'include_paths': self.resources.inc_dirs,
|
||||
|
@ -74,7 +85,74 @@ class IAREmbeddedWorkbench(Exporter):
|
|||
'object_files': self.resources.objects,
|
||||
'libraries': self.resources.libraries,
|
||||
'symbols': self.get_symbols(),
|
||||
'source_files': sources,
|
||||
'source_files': iar_files.__str__(),
|
||||
'binary_files': self.resources.bin_files,
|
||||
}
|
||||
self.gen_file('iar_%s.ewp.tmpl' % self.target.lower(), ctx, '%s.ewp' % self.program_name)
|
||||
self.gen_file('iar.eww.tmpl', ctx, '%s.eww' % self.program_name)
|
||||
self.gen_file('iar_%s.ewd.tmpl' % self.target.lower(), ctx, '%s.ewd' % self.program_name)
|
||||
|
||||
class IAR_FOLDER:
|
||||
#input:
|
||||
#folder_level : folder path to current folder
|
||||
#folder_name : name of current folder
|
||||
#source_files : list of source_files (all must be in same directory)
|
||||
def __init__(self, folder_level, folder_name, source_files):
|
||||
self.folder_level = folder_level
|
||||
self.folder_name = folder_name
|
||||
self.source_files = source_files
|
||||
self.sub_folders = {};
|
||||
|
||||
def __str__(self):
|
||||
group_start = ""
|
||||
group_end = ""
|
||||
if self.folder_name != "":
|
||||
group_start = "<group>\n<name>%s</name>\n" %(self.folder_name)
|
||||
group_end = "</group>\n"
|
||||
|
||||
str_content = group_start
|
||||
#Add files in current folder
|
||||
if self.source_files:
|
||||
for src in self.source_files:
|
||||
str_content += "<file>\n<name>$PROJ_DIR$\\%s</name>\n</file>\n" % src
|
||||
##Add sub folders
|
||||
if self.sub_folders:
|
||||
for folder_name in self.sub_folders.iterkeys():
|
||||
str_content += self.sub_folders[folder_name].__str__()
|
||||
|
||||
str_content += group_end
|
||||
return str_content
|
||||
|
||||
|
||||
def insert_file(self, source_input):
|
||||
if self.source_files:
|
||||
dir_sources = IAR_FOLDER.get_directory(self.source_files[0]) ##All source_files in a IAR_FOLDER must be in same directory.
|
||||
if not self.folder_level == dir_sources: ## Check if sources are already at their deepest level.
|
||||
_reg_exp = r"^" + re.escape(self.folder_level) + r"[/\\]?([^/\\]+)"
|
||||
folder_name = re.match( _reg_exp, dir_sources).group(1)
|
||||
self.sub_folders[folder_name] = IAR_FOLDER(self.folder_level + "\\" + folder_name, folder_name, self.source_files)
|
||||
self.source_files = []
|
||||
|
||||
dir_input = IAR_FOLDER.get_directory(source_input)
|
||||
if dir_input == self.folder_level:
|
||||
self.source_files.append(source_input)
|
||||
else:
|
||||
_reg_exp = r"^" + re.escape(self.folder_level) + r"[/\\]?([^/\\]+)"
|
||||
folder_name = re.match( _reg_exp, dir_input).group(1)
|
||||
if self.sub_folders.has_key(folder_name):
|
||||
self.sub_folders[folder_name].insert_file(source_input)
|
||||
else:
|
||||
if self.folder_level == "": #Top level exception
|
||||
self.sub_folders[folder_name] = IAR_FOLDER(folder_name, folder_name, [source_input])
|
||||
else:
|
||||
self.sub_folders[folder_name] = IAR_FOLDER(self.folder_level + "\\" + folder_name, folder_name, [source_input])
|
||||
|
||||
@staticmethod
|
||||
def get_directory(file_path):
|
||||
dir_Match = re.match( r'(.*)[/\\][^/\\]+', file_path)
|
||||
if dir_Match is not None:
|
||||
return dir_Match.group(1)
|
||||
else:
|
||||
return ""
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,956 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<project>
|
||||
<fileVersion>2</fileVersion>
|
||||
<configuration>
|
||||
<name>Debug</name>
|
||||
<toolchain>
|
||||
<name>ARM</name>
|
||||
</toolchain>
|
||||
<debug>1</debug>
|
||||
<settings>
|
||||
<name>General</name>
|
||||
<archiveVersion>3</archiveVersion>
|
||||
<data>
|
||||
<version>22</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>ExePath</name>
|
||||
<state>Debug\Exe</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ObjPath</name>
|
||||
<state>Debug\Obj</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ListPath</name>
|
||||
<state>Debug\List</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Variant</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GEndianMode</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Input variant</name>
|
||||
<version>3</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Input description</name>
|
||||
<state>Full formatting.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Output variant</name>
|
||||
<version>2</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Output description</name>
|
||||
<state>Full formatting.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GOutputBinary</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FPU</name>
|
||||
<version>2</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGCoreOrChip</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibSelect</name>
|
||||
<version>0</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibSelectSlave</name>
|
||||
<version>0</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>RTDescription</name>
|
||||
<state>Use the full configuration of the C/C++ runtime library. Full locale interface, C locale, file descriptor support, multibytes in printf and scanf, and hex floats in strtod.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGProductVersion</name>
|
||||
<state>7.10.1.6733</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGLastSavedByProductVersion</name>
|
||||
<state>7.10.1.6733</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralEnableMisra</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraVerbose</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGChipSelectEditMenu</name>
|
||||
<state>nRF51822-QFAA NordicSemi nRF51822-QFAA</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GenLowLevelInterface</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GEndianModeBE</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGBufferedTerminalOutput</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GenStdoutInterface</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraRules98</name>
|
||||
<version>0</version>
|
||||
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraVer</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraRules04</name>
|
||||
<version>0</version>
|
||||
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>RTConfigPath2</name>
|
||||
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Full.h</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GFPUCoreSlave</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GBECoreSlave</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGUseCmsis</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGUseCmsisDspLib</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibThreads</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>ICCARM</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>30</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>CCDefines</name>
|
||||
{% for s in symbols %}
|
||||
<state>{{s}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocComments</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocLine</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCMnemonics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCMessages</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListAssFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListAssSource</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCEnableRemarks</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagSuppress</name>
|
||||
<state>Pa050,Pa084,Pa093,Pa082</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagRemark</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagWarning</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagError</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCObjPrefix</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCAllowList</name>
|
||||
<version>1</version>
|
||||
<state>11111110</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDebugInfo</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IEndianMode</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptionsCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptions</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCLangConformance</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCSignedPlainChar</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCRequirePrototypes</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCMultibyteSupport</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagWarnAreErr</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCCompilerRuntimeInfo</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IFpuProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OutputFile</name>
|
||||
<state>$FILE_BNAME$.o</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCLibConfigHeader</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PreInclude</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCIncludePath2</name>
|
||||
{% for path in include_paths %}
|
||||
<state>$PROJ_DIR$\{{path}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>CCStdIncCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCCodeSection</name>
|
||||
<state>.text</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IInterwork2</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IProcessorMode2</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptLevel</name>
|
||||
<state>3</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptStrategy</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptLevelSlave</name>
|
||||
<state>3</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraRules98</name>
|
||||
<version>0</version>
|
||||
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraRules04</name>
|
||||
<version>0</version>
|
||||
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndRopi</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndRwpi</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndNoDynInit</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccLang</name>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCDialect</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccAllowVLA</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCppDialect</name>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccExceptions</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccRTTI</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccStaticDestr</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCppInlineSemantics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCmsis</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccFloatSemantics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptimizationNoSizeConstraints</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCNoLiteralPool</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptStrategySlave</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>AARM</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>9</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>AObjPrefix</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AEndian</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ACaseSensitivity</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacroChars</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnEnable</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnWhat</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnOne</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnRange1</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnRange2</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ADebug</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AltRegisterNames</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ADefines</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AList</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AListHeader</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AListing</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Includes</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacDefs</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacExps</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacExec</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OnlyAssed</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MultiLine</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PageLengthCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PageLength</name>
|
||||
<state>80</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>TabSpacing</name>
|
||||
<state>8</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRef</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefDefines</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefInternal</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefDual</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AFpuProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AOutputFile</name>
|
||||
<state>$FILE_BNAME$.o</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AMultibyteSupport</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ALimitErrorsCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ALimitErrorsEdit</name>
|
||||
<state>100</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AIgnoreStdInclude</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AUserIncludes</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AExtraOptionsCheckV2</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AExtraOptionsV2</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AsmNoLiteralPool</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>OBJCOPY</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>1</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>OOCOutputFormat</name>
|
||||
<version>2</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OCOutputOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCOutputFile</name>
|
||||
<state>{{name}}.bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCCommandLineProducer</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCObjCopyEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>CUSTOM</name>
|
||||
<archiveVersion>3</archiveVersion>
|
||||
<data>
|
||||
<extensions></extensions>
|
||||
<cmdline></cmdline>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BICOMP</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data/>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BUILDACTION</name>
|
||||
<archiveVersion>1</archiveVersion>
|
||||
<data>
|
||||
<prebuild></prebuild>
|
||||
<postbuild></postbuild>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>ILINK</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>16</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>IlinkLibIOConfig</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>XLinkMisraHandler</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkInputFileSlave</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOutputFile</name>
|
||||
<state>cpp.out</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkDebugInfoEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkKeepSymbols</name>
|
||||
<state>__soft_device_bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinaryFile</name>
|
||||
{% for bins in binary_files %}
|
||||
<state>$PROJ_DIR$\{{bins}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinarySymbol</name>
|
||||
<state>__soft_device_bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinarySegment</name>
|
||||
<state>.noinit_softdevice</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinaryAlign</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkDefines</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkConfigDefines</name>
|
||||
<state>SOFT_DEVICE_BIN=1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkMapFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogInitialization</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogModule</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogSection</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogVeneer</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfOverride</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfFile</name>
|
||||
<state>$PROJ_DIR$\{{linker_script}}</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfFileSlave</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkEnableRemarks</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkSuppressDiags</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsRem</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsWarn</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsErr</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkWarningsAreErrors</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkUseExtraOptions</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkExtraOptions</name>
|
||||
<state>--skip_dynamic_initialization</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLowLevelInterfaceSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkAutoLibEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkAdditionalLibs</name>
|
||||
{% for library in libraries %}
|
||||
<state>$PROJ_DIR$\{{library}}</state>
|
||||
{% endfor %}
|
||||
{% for object in object_files %}
|
||||
<state>$PROJ_DIR$\{{object}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOverrideProgramEntryLabel</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkProgramEntryLabelSelect</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkProgramEntryLabel</name>
|
||||
<state>__iar_program_start</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DoFill</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerByte</name>
|
||||
<state>0xFF</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerStart</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerEnd</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcSize</name>
|
||||
<version>0</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcAlign</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcPoly</name>
|
||||
<state>0x11021</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcCompl</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcBitOrder</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcInitialValue</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DoCrc</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkBE8Slave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkBufferedTerminalOutput</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStdoutInterfaceSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcFullSize</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIElfToolPostProcess</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogAutoLibSelect</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogRedirSymbols</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogUnusedFragments</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCrcReverseByteOrder</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCrcUseAsInput</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptInline</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptExceptionsAllow</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptExceptionsForce</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCmsis</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptMergeDuplSections</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptUseVfe</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptForceVfe</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackAnalysisEnable</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackControlFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackCallGraphFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcAlgorithm</name>
|
||||
<version>0</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcUnitSize</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkThreadsSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>IARCHIVE</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>0</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>IarchiveInputs</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IarchiveOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IarchiveOutput</name>
|
||||
<state>###Unitialized###</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BILINK</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data/>
|
||||
</settings>
|
||||
</configuration>
|
||||
{{source_files}}
|
||||
</project>
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1823,11 +1823,7 @@
|
|||
<data/>
|
||||
</settings>
|
||||
</configuration>
|
||||
{% for files in source_files %}
|
||||
<file>
|
||||
<name>$PROJ_DIR$\{{files}}</name>
|
||||
</file>
|
||||
{% endfor %}
|
||||
{{source_files}}
|
||||
</project>
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,956 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<project>
|
||||
<fileVersion>2</fileVersion>
|
||||
<configuration>
|
||||
<name>Debug</name>
|
||||
<toolchain>
|
||||
<name>ARM</name>
|
||||
</toolchain>
|
||||
<debug>1</debug>
|
||||
<settings>
|
||||
<name>General</name>
|
||||
<archiveVersion>3</archiveVersion>
|
||||
<data>
|
||||
<version>22</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>ExePath</name>
|
||||
<state>Debug\Exe</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ObjPath</name>
|
||||
<state>Debug\Obj</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ListPath</name>
|
||||
<state>Debug\List</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Variant</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GEndianMode</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Input variant</name>
|
||||
<version>3</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Input description</name>
|
||||
<state>Full formatting.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Output variant</name>
|
||||
<version>2</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Output description</name>
|
||||
<state>Full formatting.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GOutputBinary</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FPU</name>
|
||||
<version>2</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGCoreOrChip</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibSelect</name>
|
||||
<version>0</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibSelectSlave</name>
|
||||
<version>0</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>RTDescription</name>
|
||||
<state>Use the full configuration of the C/C++ runtime library. Full locale interface, C locale, file descriptor support, multibytes in printf and scanf, and hex floats in strtod.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGProductVersion</name>
|
||||
<state>7.10.1.6733</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGLastSavedByProductVersion</name>
|
||||
<state>7.10.1.6733</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralEnableMisra</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraVerbose</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGChipSelectEditMenu</name>
|
||||
<state>nRF51822-QFAA NordicSemi nRF51822-QFAA</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GenLowLevelInterface</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GEndianModeBE</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGBufferedTerminalOutput</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GenStdoutInterface</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraRules98</name>
|
||||
<version>0</version>
|
||||
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraVer</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraRules04</name>
|
||||
<version>0</version>
|
||||
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>RTConfigPath2</name>
|
||||
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Full.h</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GFPUCoreSlave</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GBECoreSlave</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGUseCmsis</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGUseCmsisDspLib</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibThreads</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>ICCARM</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>30</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>CCDefines</name>
|
||||
{% for s in symbols %}
|
||||
<state>{{s}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocComments</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocLine</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCMnemonics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCMessages</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListAssFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListAssSource</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCEnableRemarks</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagSuppress</name>
|
||||
<state>Pa050,Pa084,Pa093,Pa082</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagRemark</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagWarning</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagError</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCObjPrefix</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCAllowList</name>
|
||||
<version>1</version>
|
||||
<state>11111110</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDebugInfo</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IEndianMode</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptionsCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptions</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCLangConformance</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCSignedPlainChar</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCRequirePrototypes</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCMultibyteSupport</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagWarnAreErr</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCCompilerRuntimeInfo</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IFpuProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OutputFile</name>
|
||||
<state>$FILE_BNAME$.o</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCLibConfigHeader</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PreInclude</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCIncludePath2</name>
|
||||
{% for path in include_paths %}
|
||||
<state>$PROJ_DIR$\{{path}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>CCStdIncCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCCodeSection</name>
|
||||
<state>.text</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IInterwork2</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IProcessorMode2</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptLevel</name>
|
||||
<state>3</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptStrategy</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptLevelSlave</name>
|
||||
<state>3</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraRules98</name>
|
||||
<version>0</version>
|
||||
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraRules04</name>
|
||||
<version>0</version>
|
||||
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndRopi</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndRwpi</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndNoDynInit</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccLang</name>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCDialect</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccAllowVLA</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCppDialect</name>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccExceptions</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccRTTI</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccStaticDestr</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCppInlineSemantics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCmsis</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccFloatSemantics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptimizationNoSizeConstraints</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCNoLiteralPool</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptStrategySlave</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>AARM</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>9</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>AObjPrefix</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AEndian</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ACaseSensitivity</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacroChars</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnEnable</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnWhat</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnOne</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnRange1</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnRange2</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ADebug</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AltRegisterNames</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ADefines</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AList</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AListHeader</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AListing</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Includes</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacDefs</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacExps</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacExec</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OnlyAssed</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MultiLine</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PageLengthCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PageLength</name>
|
||||
<state>80</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>TabSpacing</name>
|
||||
<state>8</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRef</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefDefines</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefInternal</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefDual</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AFpuProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AOutputFile</name>
|
||||
<state>$FILE_BNAME$.o</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AMultibyteSupport</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ALimitErrorsCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ALimitErrorsEdit</name>
|
||||
<state>100</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AIgnoreStdInclude</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AUserIncludes</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AExtraOptionsCheckV2</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AExtraOptionsV2</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AsmNoLiteralPool</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>OBJCOPY</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>1</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>OOCOutputFormat</name>
|
||||
<version>2</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OCOutputOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCOutputFile</name>
|
||||
<state>{{name}}.bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCCommandLineProducer</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCObjCopyEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>CUSTOM</name>
|
||||
<archiveVersion>3</archiveVersion>
|
||||
<data>
|
||||
<extensions></extensions>
|
||||
<cmdline></cmdline>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BICOMP</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data/>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BUILDACTION</name>
|
||||
<archiveVersion>1</archiveVersion>
|
||||
<data>
|
||||
<prebuild></prebuild>
|
||||
<postbuild></postbuild>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>ILINK</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>16</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>IlinkLibIOConfig</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>XLinkMisraHandler</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkInputFileSlave</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOutputFile</name>
|
||||
<state>cpp.out</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkDebugInfoEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkKeepSymbols</name>
|
||||
<state>__soft_device_bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinaryFile</name>
|
||||
{% for bins in binary_files %}
|
||||
<state>$PROJ_DIR$\{{bins}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinarySymbol</name>
|
||||
<state>__soft_device_bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinarySegment</name>
|
||||
<state>.noinit_softdevice</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinaryAlign</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkDefines</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkConfigDefines</name>
|
||||
<state>SOFT_DEVICE_BIN=1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkMapFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogInitialization</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogModule</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogSection</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogVeneer</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfOverride</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfFile</name>
|
||||
<state>$PROJ_DIR$\{{linker_script}}</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfFileSlave</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkEnableRemarks</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkSuppressDiags</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsRem</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsWarn</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsErr</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkWarningsAreErrors</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkUseExtraOptions</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkExtraOptions</name>
|
||||
<state>--skip_dynamic_initialization</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLowLevelInterfaceSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkAutoLibEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkAdditionalLibs</name>
|
||||
{% for library in libraries %}
|
||||
<state>$PROJ_DIR$\{{library}}</state>
|
||||
{% endfor %}
|
||||
{% for object in object_files %}
|
||||
<state>$PROJ_DIR$\{{object}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOverrideProgramEntryLabel</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkProgramEntryLabelSelect</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkProgramEntryLabel</name>
|
||||
<state>__iar_program_start</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DoFill</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerByte</name>
|
||||
<state>0xFF</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerStart</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerEnd</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcSize</name>
|
||||
<version>0</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcAlign</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcPoly</name>
|
||||
<state>0x11021</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcCompl</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcBitOrder</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcInitialValue</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DoCrc</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkBE8Slave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkBufferedTerminalOutput</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStdoutInterfaceSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcFullSize</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIElfToolPostProcess</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogAutoLibSelect</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogRedirSymbols</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogUnusedFragments</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCrcReverseByteOrder</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCrcUseAsInput</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptInline</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptExceptionsAllow</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptExceptionsForce</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCmsis</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptMergeDuplSections</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptUseVfe</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptForceVfe</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackAnalysisEnable</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackControlFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackCallGraphFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcAlgorithm</name>
|
||||
<version>0</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcUnitSize</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkThreadsSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>IARCHIVE</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>0</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>IarchiveInputs</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IarchiveOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IarchiveOutput</name>
|
||||
<state>###Unitialized###</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BILINK</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data/>
|
||||
</settings>
|
||||
</configuration>
|
||||
{{source_files}}
|
||||
</project>
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,956 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<project>
|
||||
<fileVersion>2</fileVersion>
|
||||
<configuration>
|
||||
<name>Debug</name>
|
||||
<toolchain>
|
||||
<name>ARM</name>
|
||||
</toolchain>
|
||||
<debug>1</debug>
|
||||
<settings>
|
||||
<name>General</name>
|
||||
<archiveVersion>3</archiveVersion>
|
||||
<data>
|
||||
<version>22</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>ExePath</name>
|
||||
<state>Debug\Exe</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ObjPath</name>
|
||||
<state>Debug\Obj</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ListPath</name>
|
||||
<state>Debug\List</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Variant</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GEndianMode</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Input variant</name>
|
||||
<version>3</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Input description</name>
|
||||
<state>Full formatting.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Output variant</name>
|
||||
<version>2</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Output description</name>
|
||||
<state>Full formatting.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GOutputBinary</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FPU</name>
|
||||
<version>2</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGCoreOrChip</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibSelect</name>
|
||||
<version>0</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibSelectSlave</name>
|
||||
<version>0</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>RTDescription</name>
|
||||
<state>Use the full configuration of the C/C++ runtime library. Full locale interface, C locale, file descriptor support, multibytes in printf and scanf, and hex floats in strtod.</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGProductVersion</name>
|
||||
<state>7.10.1.6733</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGLastSavedByProductVersion</name>
|
||||
<state>7.10.1.6733</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralEnableMisra</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraVerbose</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGChipSelectEditMenu</name>
|
||||
<state>nRF51822-QFAA NordicSemi nRF51822-QFAA</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GenLowLevelInterface</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GEndianModeBE</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGBufferedTerminalOutput</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GenStdoutInterface</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraRules98</name>
|
||||
<version>0</version>
|
||||
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraVer</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GeneralMisraRules04</name>
|
||||
<version>0</version>
|
||||
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>RTConfigPath2</name>
|
||||
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Full.h</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GFPUCoreSlave</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GBECoreSlave</name>
|
||||
<version>20</version>
|
||||
<state>35</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGUseCmsis</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OGUseCmsisDspLib</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>GRuntimeLibThreads</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>ICCARM</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>30</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>CCDefines</name>
|
||||
{% for s in symbols %}
|
||||
<state>{{s}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocComments</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPreprocLine</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCMnemonics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListCMessages</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListAssFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCListAssSource</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCEnableRemarks</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagSuppress</name>
|
||||
<state>Pa050,Pa084,Pa093,Pa082</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagRemark</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagWarning</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagError</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCObjPrefix</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCAllowList</name>
|
||||
<version>1</version>
|
||||
<state>11111110</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDebugInfo</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IEndianMode</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptionsCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptions</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCLangConformance</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCSignedPlainChar</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCRequirePrototypes</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCMultibyteSupport</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCDiagWarnAreErr</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCCompilerRuntimeInfo</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IFpuProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OutputFile</name>
|
||||
<state>$FILE_BNAME$.o</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCLibConfigHeader</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PreInclude</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCIncludePath2</name>
|
||||
{% for path in include_paths %}
|
||||
<state>$PROJ_DIR$\{{path}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>CCStdIncCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCCodeSection</name>
|
||||
<state>.text</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IInterwork2</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IProcessorMode2</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptLevel</name>
|
||||
<state>3</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptStrategy</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptLevelSlave</name>
|
||||
<state>3</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraRules98</name>
|
||||
<version>0</version>
|
||||
<state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CompilerMisraRules04</name>
|
||||
<version>0</version>
|
||||
<state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndRopi</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndRwpi</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCPosIndNoDynInit</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccLang</name>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCDialect</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccAllowVLA</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCppDialect</name>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccExceptions</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccRTTI</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccStaticDestr</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCppInlineSemantics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccCmsis</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IccFloatSemantics</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptimizationNoSizeConstraints</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCNoLiteralPool</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCOptStrategySlave</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>AARM</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>9</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>AObjPrefix</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AEndian</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ACaseSensitivity</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacroChars</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnEnable</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnWhat</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnOne</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnRange1</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AWarnRange2</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ADebug</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AltRegisterNames</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ADefines</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AList</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AListHeader</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AListing</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>Includes</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacDefs</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacExps</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MacExec</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OnlyAssed</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>MultiLine</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PageLengthCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>PageLength</name>
|
||||
<state>80</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>TabSpacing</name>
|
||||
<state>8</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRef</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefDefines</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefInternal</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AXRefDual</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AFpuProcessor</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AOutputFile</name>
|
||||
<state>$FILE_BNAME$.o</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AMultibyteSupport</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ALimitErrorsCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>ALimitErrorsEdit</name>
|
||||
<state>100</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AIgnoreStdInclude</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AUserIncludes</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AExtraOptionsCheckV2</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AExtraOptionsV2</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>AsmNoLiteralPool</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>OBJCOPY</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>1</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>OOCOutputFormat</name>
|
||||
<version>2</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OCOutputOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCOutputFile</name>
|
||||
<state>{{name}}.bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCCommandLineProducer</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>OOCObjCopyEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>CUSTOM</name>
|
||||
<archiveVersion>3</archiveVersion>
|
||||
<data>
|
||||
<extensions></extensions>
|
||||
<cmdline></cmdline>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BICOMP</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data/>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BUILDACTION</name>
|
||||
<archiveVersion>1</archiveVersion>
|
||||
<data>
|
||||
<prebuild></prebuild>
|
||||
<postbuild></postbuild>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>ILINK</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>16</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>IlinkLibIOConfig</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>XLinkMisraHandler</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkInputFileSlave</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOutputFile</name>
|
||||
<state>cpp.out</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkDebugInfoEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkKeepSymbols</name>
|
||||
<state>__soft_device_bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinaryFile</name>
|
||||
{% for bins in binary_files %}
|
||||
<state>$PROJ_DIR$\{{bins}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinarySymbol</name>
|
||||
<state>__soft_device_bin</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinarySegment</name>
|
||||
<state>.noinit_softdevice</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkRawBinaryAlign</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkDefines</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkConfigDefines</name>
|
||||
<state>SOFT_DEVICE_BIN=1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkMapFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogFile</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogInitialization</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogModule</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogSection</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogVeneer</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfOverride</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfFile</name>
|
||||
<state>$PROJ_DIR$\{{linker_script}}</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIcfFileSlave</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkEnableRemarks</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkSuppressDiags</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsRem</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsWarn</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkTreatAsErr</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkWarningsAreErrors</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkUseExtraOptions</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkExtraOptions</name>
|
||||
<state>--skip_dynamic_initialization</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLowLevelInterfaceSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkAutoLibEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkAdditionalLibs</name>
|
||||
{% for library in libraries %}
|
||||
<state>$PROJ_DIR$\{{library}}</state>
|
||||
{% endfor %}
|
||||
{% for object in object_files %}
|
||||
<state>$PROJ_DIR$\{{object}}</state>
|
||||
{% endfor %}
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOverrideProgramEntryLabel</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkProgramEntryLabelSelect</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkProgramEntryLabel</name>
|
||||
<state>__iar_program_start</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DoFill</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerByte</name>
|
||||
<state>0xFF</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerStart</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FillerEnd</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcSize</name>
|
||||
<version>0</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcAlign</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcPoly</name>
|
||||
<state>0x11021</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcCompl</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcBitOrder</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcInitialValue</name>
|
||||
<state>0x0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DoCrc</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkBE8Slave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkBufferedTerminalOutput</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStdoutInterfaceSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcFullSize</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkIElfToolPostProcess</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogAutoLibSelect</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogRedirSymbols</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkLogUnusedFragments</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCrcReverseByteOrder</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCrcUseAsInput</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptInline</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptExceptionsAllow</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptExceptionsForce</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkCmsis</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptMergeDuplSections</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptUseVfe</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkOptForceVfe</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackAnalysisEnable</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackControlFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkStackCallGraphFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcAlgorithm</name>
|
||||
<version>0</version>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CrcUnitSize</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IlinkThreadsSlave</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>IARCHIVE</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data>
|
||||
<version>0</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>IarchiveInputs</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IarchiveOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IarchiveOutput</name>
|
||||
<state>###Unitialized###</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>BILINK</name>
|
||||
<archiveVersion>0</archiveVersion>
|
||||
<data/>
|
||||
</settings>
|
||||
</configuration>
|
||||
{{source_files}}
|
||||
</project>
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -948,11 +948,7 @@
|
|||
<data/>
|
||||
</settings>
|
||||
</configuration>
|
||||
{% for files in source_files %}
|
||||
<file>
|
||||
<name>$PROJ_DIR$\{{files}}</name>
|
||||
</file>
|
||||
{% endfor %}
|
||||
{{source_files}}
|
||||
</project>
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -948,11 +948,7 @@
|
|||
<data/>
|
||||
</settings>
|
||||
</configuration>
|
||||
{% for files in source_files %}
|
||||
<file>
|
||||
<name>$PROJ_DIR$\{{files}}</name>
|
||||
</file>
|
||||
{% endfor %}
|
||||
{{source_files}}
|
||||
</project>
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -948,11 +948,7 @@
|
|||
<data/>
|
||||
</settings>
|
||||
</configuration>
|
||||
{% for files in source_files %}
|
||||
<file>
|
||||
<name>$PROJ_DIR$\{{files}}</name>
|
||||
</file>
|
||||
{% endfor %}
|
||||
{{source_files}}
|
||||
</project>
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -948,11 +948,7 @@
|
|||
<data/>
|
||||
</settings>
|
||||
</configuration>
|
||||
{% for files in source_files %}
|
||||
<file>
|
||||
<name>$PROJ_DIR$\{{files}}</name>
|
||||
</file>
|
||||
{% endfor %}
|
||||
{{source_files}}
|
||||
</project>
|
||||
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue