Skip to content

Commit 4ec2f2e

Browse files
authored
Merge pull request #2943 from nvlsianpu/nrf_nvic_set_vector_func_trzy
[NRF5] NVIC_SetVector functionality
2 parents 26bf6eb + 9204c6f commit 4ec2f2e

File tree

30 files changed

+742
-1355
lines changed

30 files changed

+742
-1355
lines changed

features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/btle.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,13 @@ extern "C" {
5858
#include "nRF5xServiceDiscovery.h"
5959
#include "nRF5xCharacteristicDescriptorDiscoverer.h"
6060

61+
6162
bool isEventsSignaled = false;
6263

6364
extern "C" void assert_nrf_callback(uint16_t line_num, const uint8_t *p_file_name);
6465
void app_error_handler(uint32_t error_code, uint32_t line_num, const uint8_t *p_file_name);
66+
extern "C" void SD_EVT_IRQHandler(void); // export the softdevice event handler for registration by nvic-set-vector.
67+
6568

6669
static void btle_handler(ble_evt_t *p_ble_evt);
6770

@@ -112,10 +115,14 @@ static uint32_t signalEvent()
112115
return NRF_SUCCESS;
113116
}
114117

118+
115119
error_t btle_init(void)
116120
{
117121
nrf_clock_lf_cfg_t clockConfiguration;
118122

123+
// register softdevice handler vector
124+
NVIC_SetVector(SD_EVT_IRQn, (uint32_t) SD_EVT_IRQHandler);
125+
119126
// Configure the LF clock according to values provided by btle_clock.h.
120127
// It is input from the chain of the yotta configuration system.
121128
clockConfiguration.source = LFCLK_CONF_SOURCE;

targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/analogin_api.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ static const PinMap PinMap_ADC[] = {
3939
{NC, NC, 0}
4040
};
4141

42+
void ADC_IRQHandler(void); // export IRQ handler from nrf_drv_adc.c
4243

4344
void analogin_init(analogin_t *obj, PinName pin)
4445
{
@@ -50,6 +51,8 @@ void analogin_init(analogin_t *obj, PinName pin)
5051

5152
obj->adc_pin = pinFunc;
5253

54+
NVIC_SetVector(ADC_IRQn, (uint32_t)ADC_IRQHandler);
55+
5356
ret_code_t ret_code;
5457
// p_config, event_handler
5558
ret_code = nrf_drv_adc_init(NULL , NULL); // select blocking mode

targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NORDIC_16K/startup_nRF51822.S

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -45,28 +45,28 @@ __Vectors DCD __initial_sp ; Top of Stack
4545
; External Interrupts
4646
DCD POWER_CLOCK_IRQHandler ;POWER_CLOCK
4747
DCD RADIO_IRQHandler ;RADIO
48-
DCD UART0_IRQHandler ;UART0
49-
DCD SPI0_TWI0_IRQHandler ;SPI0_TWI0
50-
DCD SPI1_TWI1_IRQHandler ;SPI1_TWI1
48+
DCD UART0_IRQHandler_v ;UART0
49+
DCD SPI0_TWI0_IRQHandler_v ;SPI0_TWI0
50+
DCD SPI1_TWI1_IRQHandler_v ;SPI1_TWI1
5151
DCD 0 ;Reserved
52-
DCD GPIOTE_IRQHandler ;GPIOTE
53-
DCD ADC_IRQHandler ;ADC
52+
DCD GPIOTE_IRQHandler_v ;GPIOTE
53+
DCD ADC_IRQHandler_v ;ADC
5454
DCD TIMER0_IRQHandler ;TIMER0
55-
DCD TIMER1_IRQHandler ;TIMER1
56-
DCD TIMER2_IRQHandler ;TIMER2
55+
DCD TIMER1_IRQHandler_v ;TIMER1
56+
DCD TIMER2_IRQHandler_v ;TIMER2
5757
DCD RTC0_IRQHandler ;RTC0
5858
DCD TEMP_IRQHandler ;TEMP
5959
DCD RNG_IRQHandler ;RNG
6060
DCD ECB_IRQHandler ;ECB
6161
DCD CCM_AAR_IRQHandler ;CCM_AAR
62-
DCD WDT_IRQHandler ;WDT
63-
DCD RTC1_IRQHandler ;RTC1
64-
DCD QDEC_IRQHandler ;QDEC
65-
DCD LPCOMP_COMP_IRQHandler ;LPCOMP_COMP
66-
DCD SWI0_IRQHandler ;SWI0
67-
DCD SWI1_IRQHandler ;SWI1
68-
DCD SWI2_IRQHandler ;SWI2
69-
DCD SWI3_IRQHandler ;SWI3
62+
DCD WDT_IRQHandler_v ;WDT
63+
DCD RTC1_IRQHandler_v ;RTC1
64+
DCD QDEC_IRQHandler_v ;QDEC
65+
DCD LPCOMP_IRQHandler_v ;LPCOMP_COMP
66+
DCD SWI0_IRQHandler_v ;SWI0
67+
DCD SWI1_IRQHandler_v ;SWI1
68+
DCD SWI2_IRQHandler_v ;SWI2
69+
DCD SWI3_IRQHandler_v ;SWI3
7070
DCD SWI4_IRQHandler ;SWI4
7171
DCD SWI5_IRQHandler ;SWI5
7272
DCD 0 ;Reserved
@@ -92,13 +92,16 @@ Reset_Handler PROC
9292
EXPORT Reset_Handler [WEAK]
9393
IMPORT SystemInit
9494
IMPORT __main
95+
IMPORT nrf_reloc_vector_table
9596
LDR R0, =NRF_POWER_RAMON_ADDRESS
9697
LDR R2, [R0]
9798
MOVS R1, #NRF_POWER_RAMON_RAMxON_ONMODE_Msk
9899
ORRS R2, R2, R1
99100
STR R2, [R0]
100101
LDR R0, =SystemInit
101102
BLX R0
103+
LDR R0, =nrf_reloc_vector_table
104+
BLX R0
102105
LDR R0, =__main
103106
BX R0
104107
ENDP
@@ -131,52 +134,52 @@ Default_Handler PROC
131134

132135
EXPORT POWER_CLOCK_IRQHandler [WEAK]
133136
EXPORT RADIO_IRQHandler [WEAK]
134-
EXPORT UART0_IRQHandler [WEAK]
135-
EXPORT SPI0_TWI0_IRQHandler [WEAK]
136-
EXPORT SPI1_TWI1_IRQHandler [WEAK]
137-
EXPORT GPIOTE_IRQHandler [WEAK]
138-
EXPORT ADC_IRQHandler [WEAK]
137+
EXPORT UART0_IRQHandler_v [WEAK]
138+
EXPORT SPI0_TWI0_IRQHandler_v [WEAK]
139+
EXPORT SPI1_TWI1_IRQHandler_v [WEAK]
140+
EXPORT GPIOTE_IRQHandler_v [WEAK]
141+
EXPORT ADC_IRQHandler_v [WEAK]
139142
EXPORT TIMER0_IRQHandler [WEAK]
140-
EXPORT TIMER1_IRQHandler [WEAK]
141-
EXPORT TIMER2_IRQHandler [WEAK]
143+
EXPORT TIMER1_IRQHandler_v [WEAK]
144+
EXPORT TIMER2_IRQHandler_v [WEAK]
142145
EXPORT RTC0_IRQHandler [WEAK]
143146
EXPORT TEMP_IRQHandler [WEAK]
144147
EXPORT RNG_IRQHandler [WEAK]
145148
EXPORT ECB_IRQHandler [WEAK]
146149
EXPORT CCM_AAR_IRQHandler [WEAK]
147-
EXPORT WDT_IRQHandler [WEAK]
148-
EXPORT RTC1_IRQHandler [WEAK]
149-
EXPORT QDEC_IRQHandler [WEAK]
150-
EXPORT LPCOMP_COMP_IRQHandler [WEAK]
151-
EXPORT SWI0_IRQHandler [WEAK]
152-
EXPORT SWI1_IRQHandler [WEAK]
153-
EXPORT SWI2_IRQHandler [WEAK]
154-
EXPORT SWI3_IRQHandler [WEAK]
150+
EXPORT WDT_IRQHandler_v [WEAK]
151+
EXPORT RTC1_IRQHandler_v [WEAK]
152+
EXPORT QDEC_IRQHandler_v [WEAK]
153+
EXPORT LPCOMP_IRQHandler_v [WEAK]
154+
EXPORT SWI0_IRQHandler_v [WEAK]
155+
EXPORT SWI1_IRQHandler_v [WEAK]
156+
EXPORT SWI2_IRQHandler_v [WEAK]
157+
EXPORT SWI3_IRQHandler_v [WEAK]
155158
EXPORT SWI4_IRQHandler [WEAK]
156159
EXPORT SWI5_IRQHandler [WEAK]
157160
POWER_CLOCK_IRQHandler
158161
RADIO_IRQHandler
159-
UART0_IRQHandler
160-
SPI0_TWI0_IRQHandler
161-
SPI1_TWI1_IRQHandler
162-
GPIOTE_IRQHandler
163-
ADC_IRQHandler
162+
UART0_IRQHandler_v
163+
SPI0_TWI0_IRQHandler_v
164+
SPI1_TWI1_IRQHandler_v
165+
GPIOTE_IRQHandler_v
166+
ADC_IRQHandler_v
164167
TIMER0_IRQHandler
165-
TIMER1_IRQHandler
166-
TIMER2_IRQHandler
168+
TIMER1_IRQHandler_v
169+
TIMER2_IRQHandler_v
167170
RTC0_IRQHandler
168171
TEMP_IRQHandler
169172
RNG_IRQHandler
170173
ECB_IRQHandler
171174
CCM_AAR_IRQHandler
172-
WDT_IRQHandler
173-
RTC1_IRQHandler
174-
QDEC_IRQHandler
175-
LPCOMP_COMP_IRQHandler
176-
SWI0_IRQHandler
177-
SWI1_IRQHandler
178-
SWI2_IRQHandler
179-
SWI3_IRQHandler
175+
WDT_IRQHandler_v
176+
RTC1_IRQHandler_v
177+
QDEC_IRQHandler_v
178+
LPCOMP_IRQHandler_v
179+
SWI0_IRQHandler_v
180+
SWI1_IRQHandler_v
181+
SWI2_IRQHandler_v
182+
SWI3_IRQHandler_v
180183
SWI4_IRQHandler
181184
SWI5_IRQHandler
182185

targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NORDIC_32K/nRF51822.sct

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
;
1313
;WITH SOFTDEVICE:
1414

15-
LR_IROM1 0x0001B000 0x0025000 {
16-
ER_IROM1 0x0001B000 0x0025000 {
15+
LR_IROM1 0x1B000 0x0025000 {
16+
ER_IROM1 0x1B000 0x0025000 {
1717
*.o (RESET, +First)
1818
*(InRoot$$Sections)
1919
.ANY (+RO)
2020
}
21-
RW_IRAM1 0x20002ef8 0x5108 {
21+
RW_IRAM0 0x20002ef8 UNINIT 0x000000c0 { ;no init section
22+
*(noinit)
23+
}
24+
RW_IRAM1 0x20002FB8 0x00005048 {
2225
.ANY (+RW +ZI)
2326
}
2427
}

targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NORDIC_32K/startup_nRF51822.S

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -45,28 +45,28 @@ __Vectors DCD __initial_sp ; Top of Stack
4545
; External Interrupts
4646
DCD POWER_CLOCK_IRQHandler ;POWER_CLOCK
4747
DCD RADIO_IRQHandler ;RADIO
48-
DCD UART0_IRQHandler ;UART0
49-
DCD SPI0_TWI0_IRQHandler ;SPI0_TWI0
50-
DCD SPI1_TWI1_IRQHandler ;SPI1_TWI1
48+
DCD UART0_IRQHandler_v ;UART0
49+
DCD SPI0_TWI0_IRQHandler_v ;SPI0_TWI0
50+
DCD SPI1_TWI1_IRQHandler_v ;SPI1_TWI1
5151
DCD 0 ;Reserved
52-
DCD GPIOTE_IRQHandler ;GPIOTE
53-
DCD ADC_IRQHandler ;ADC
52+
DCD GPIOTE_IRQHandler_v ;GPIOTE
53+
DCD ADC_IRQHandler_v ;ADC
5454
DCD TIMER0_IRQHandler ;TIMER0
55-
DCD TIMER1_IRQHandler ;TIMER1
56-
DCD TIMER2_IRQHandler ;TIMER2
55+
DCD TIMER1_IRQHandler_v ;TIMER1
56+
DCD TIMER2_IRQHandler_v ;TIMER2
5757
DCD RTC0_IRQHandler ;RTC0
5858
DCD TEMP_IRQHandler ;TEMP
5959
DCD RNG_IRQHandler ;RNG
6060
DCD ECB_IRQHandler ;ECB
6161
DCD CCM_AAR_IRQHandler ;CCM_AAR
62-
DCD WDT_IRQHandler ;WDT
63-
DCD RTC1_IRQHandler ;RTC1
64-
DCD QDEC_IRQHandler ;QDEC
65-
DCD LPCOMP_IRQHandler ;LPCOMP
66-
DCD SWI0_IRQHandler ;SWI0
67-
DCD SWI1_IRQHandler ;SWI1
68-
DCD SWI2_IRQHandler ;SWI2
69-
DCD SWI3_IRQHandler ;SWI3
62+
DCD WDT_IRQHandler_v ;WDT
63+
DCD RTC1_IRQHandler_v ;RTC1
64+
DCD QDEC_IRQHandler_v ;QDEC
65+
DCD LPCOMP_IRQHandler_v ;LPCOMP_COMP
66+
DCD SWI0_IRQHandler_v ;SWI0
67+
DCD SWI1_IRQHandler_v ;SWI1
68+
DCD SWI2_IRQHandler_v ;SWI2
69+
DCD SWI3_IRQHandler_v ;SWI3
7070
DCD SWI4_IRQHandler ;SWI4
7171
DCD SWI5_IRQHandler ;SWI5
7272
DCD 0 ;Reserved
@@ -93,6 +93,7 @@ Reset_Handler PROC
9393
EXPORT Reset_Handler [WEAK]
9494
IMPORT SystemInit
9595
IMPORT __main
96+
IMPORT nrf_reloc_vector_table
9697
9798
MOVS R1, #NRF_POWER_RAMONx_RAMxON_ONMODE_Msk
9899
@@ -108,6 +109,8 @@ Reset_Handler PROC
108109
109110
LDR R0, =SystemInit
110111
BLX R0
112+
LDR R0, =nrf_reloc_vector_table
113+
BLX R0
111114
LDR R0, =__main
112115
BX R0
113116
ENDP
@@ -140,52 +143,52 @@ Default_Handler PROC
140143

141144
EXPORT POWER_CLOCK_IRQHandler [WEAK]
142145
EXPORT RADIO_IRQHandler [WEAK]
143-
EXPORT UART0_IRQHandler [WEAK]
144-
EXPORT SPI0_TWI0_IRQHandler [WEAK]
145-
EXPORT SPI1_TWI1_IRQHandler [WEAK]
146-
EXPORT GPIOTE_IRQHandler [WEAK]
147-
EXPORT ADC_IRQHandler [WEAK]
146+
EXPORT UART0_IRQHandler_v [WEAK]
147+
EXPORT SPI0_TWI0_IRQHandler_v [WEAK]
148+
EXPORT SPI1_TWI1_IRQHandler_v [WEAK]
149+
EXPORT GPIOTE_IRQHandler_v [WEAK]
150+
EXPORT ADC_IRQHandler_v [WEAK]
148151
EXPORT TIMER0_IRQHandler [WEAK]
149-
EXPORT TIMER1_IRQHandler [WEAK]
150-
EXPORT TIMER2_IRQHandler [WEAK]
152+
EXPORT TIMER1_IRQHandler_v [WEAK]
153+
EXPORT TIMER2_IRQHandler_v [WEAK]
151154
EXPORT RTC0_IRQHandler [WEAK]
152155
EXPORT TEMP_IRQHandler [WEAK]
153156
EXPORT RNG_IRQHandler [WEAK]
154157
EXPORT ECB_IRQHandler [WEAK]
155158
EXPORT CCM_AAR_IRQHandler [WEAK]
156-
EXPORT WDT_IRQHandler [WEAK]
157-
EXPORT RTC1_IRQHandler [WEAK]
158-
EXPORT QDEC_IRQHandler [WEAK]
159-
EXPORT LPCOMP_IRQHandler [WEAK]
160-
EXPORT SWI0_IRQHandler [WEAK]
161-
EXPORT SWI1_IRQHandler [WEAK]
162-
EXPORT SWI2_IRQHandler [WEAK]
163-
EXPORT SWI3_IRQHandler [WEAK]
159+
EXPORT WDT_IRQHandler_v [WEAK]
160+
EXPORT RTC1_IRQHandler_v [WEAK]
161+
EXPORT QDEC_IRQHandler_v [WEAK]
162+
EXPORT LPCOMP_IRQHandler_v [WEAK]
163+
EXPORT SWI0_IRQHandler_v [WEAK]
164+
EXPORT SWI1_IRQHandler_v [WEAK]
165+
EXPORT SWI2_IRQHandler_v [WEAK]
166+
EXPORT SWI3_IRQHandler_v [WEAK]
164167
EXPORT SWI4_IRQHandler [WEAK]
165168
EXPORT SWI5_IRQHandler [WEAK]
166169
POWER_CLOCK_IRQHandler
167170
RADIO_IRQHandler
168-
UART0_IRQHandler
169-
SPI0_TWI0_IRQHandler
170-
SPI1_TWI1_IRQHandler
171-
GPIOTE_IRQHandler
172-
ADC_IRQHandler
171+
UART0_IRQHandler_v
172+
SPI0_TWI0_IRQHandler_v
173+
SPI1_TWI1_IRQHandler_v
174+
GPIOTE_IRQHandler_v
175+
ADC_IRQHandler_v
173176
TIMER0_IRQHandler
174-
TIMER1_IRQHandler
175-
TIMER2_IRQHandler
177+
TIMER1_IRQHandler_v
178+
TIMER2_IRQHandler_v
176179
RTC0_IRQHandler
177180
TEMP_IRQHandler
178181
RNG_IRQHandler
179182
ECB_IRQHandler
180183
CCM_AAR_IRQHandler
181-
WDT_IRQHandler
182-
RTC1_IRQHandler
183-
QDEC_IRQHandler
184-
LPCOMP_IRQHandler
185-
SWI0_IRQHandler
186-
SWI1_IRQHandler
187-
SWI2_IRQHandler
188-
SWI3_IRQHandler
184+
WDT_IRQHandler_v
185+
RTC1_IRQHandler_v
186+
QDEC_IRQHandler_v
187+
LPCOMP_IRQHandler_v
188+
SWI0_IRQHandler_v
189+
SWI1_IRQHandler_v
190+
SWI2_IRQHandler_v
191+
SWI3_IRQHandler_v
189192
SWI4_IRQHandler
190193
SWI5_IRQHandler
191194

targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S110/nRF51822.sct

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
;
1313
;WITH SOFTDEVICE:
1414

15-
LR_IROM1 0x0001B000 0x0025000 {
16-
ER_IROM1 0x0001B000 0x0025000 {
15+
LR_IROM1 0x18000 0x0028000 {
16+
ER_IROM1 0x18000 0x0028000 {
1717
*.o (RESET, +First)
1818
*(InRoot$$Sections)
1919
.ANY (+RO)
2020
}
21-
RW_IRAM1 0x20002ef8 0x1108 {
21+
RW_IRAM0 0x20002000 UNINIT 0x000000c0 { ;no init section
22+
*(noinit)
23+
}
24+
RW_IRAM1 0x200020C0 0x00001F40 {
2225
.ANY (+RW +ZI)
2326
}
2427
}

targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S130/nRF51822.sct

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ LR_IROM1 0x0001B000 0x0025000 {
1818
*(InRoot$$Sections)
1919
.ANY (+RO)
2020
}
21-
RW_IRAM1 0x20002ef8 0x1108 {
21+
RW_IRAM0 0x20002ef8 UNINIT 0x000000c0 { ;no init section
22+
*(noinit)
23+
}
24+
RW_IRAM1 0x20002FB8 0x00001048 {
2225
.ANY (+RW +ZI)
2326
}
2427
}

targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_GCC_ARM/TARGET_MCU_NORDIC_32K/NRF51822.ld

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,13 @@ SECTIONS
120120
} > RAM
121121

122122
__edata = .;
123+
124+
.noinit :
125+
{
126+
PROVIDE(__start_noinit = .);
127+
KEEP(*(.noinit))
128+
PROVIDE(__stop_noinit = .);
129+
} > RAM
123130

124131
.bss :
125132
{

0 commit comments

Comments
 (0)