Make a copy of the vector table and set the STM32 vector table offset to the new table. Program freezes soon after.

Dependencies:   mbed

Committer:
riaancillie
Date:
Sat Jul 25 20:11:51 2015 +0000
Revision:
0:97bd31dcc8c2
Test vector table relocation;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
riaancillie 0:97bd31dcc8c2 1 #include "mbed.h"
riaancillie 0:97bd31dcc8c2 2
riaancillie 0:97bd31dcc8c2 3 //------------------------------------
riaancillie 0:97bd31dcc8c2 4 // Hyperterminal configuration
riaancillie 0:97bd31dcc8c2 5 // 115200 bauds, 8-bit data, no parity
riaancillie 0:97bd31dcc8c2 6 //------------------------------------
riaancillie 0:97bd31dcc8c2 7
riaancillie 0:97bd31dcc8c2 8 Serial pc(SERIAL_TX, SERIAL_RX);
riaancillie 0:97bd31dcc8c2 9 DigitalOut myled(LED1);
riaancillie 0:97bd31dcc8c2 10
riaancillie 0:97bd31dcc8c2 11 extern uint32_t __Vectors[];
riaancillie 0:97bd31dcc8c2 12 #define VECTORTABLE_SIZE (512)
riaancillie 0:97bd31dcc8c2 13 #define VECTORTABLE_ALIGNMENT (0x200ul)
riaancillie 0:97bd31dcc8c2 14 uint32_t vectorTable_RAM[VECTORTABLE_SIZE] __attribute__(( aligned (VECTORTABLE_ALIGNMENT) ));
riaancillie 0:97bd31dcc8c2 15 int j;
riaancillie 0:97bd31dcc8c2 16
riaancillie 0:97bd31dcc8c2 17 int main() {
riaancillie 0:97bd31dcc8c2 18 int i = 1;
riaancillie 0:97bd31dcc8c2 19 pc.baud(115200);
riaancillie 0:97bd31dcc8c2 20 pc.printf("Hello World !\r\n");
riaancillie 0:97bd31dcc8c2 21
riaancillie 0:97bd31dcc8c2 22 //Duplicate and relocate the vector table
riaancillie 0:97bd31dcc8c2 23 for (i = 0; i < VECTORTABLE_SIZE; i++) {
riaancillie 0:97bd31dcc8c2 24 vectorTable_RAM[i] = __Vectors[i]; /* copy vector table to RAM */
riaancillie 0:97bd31dcc8c2 25 }
riaancillie 0:97bd31dcc8c2 26 __disable_irq();
riaancillie 0:97bd31dcc8c2 27 SCB->VTOR = (uint32_t)(&vectorTable_RAM);
riaancillie 0:97bd31dcc8c2 28 __DSB();
riaancillie 0:97bd31dcc8c2 29 __enable_irq();
riaancillie 0:97bd31dcc8c2 30
riaancillie 0:97bd31dcc8c2 31 //Print 100 lines - this is where things just go wrong and the program freezes
riaancillie 0:97bd31dcc8c2 32 for (j = 0; j <= 100; j++)
riaancillie 0:97bd31dcc8c2 33 {
riaancillie 0:97bd31dcc8c2 34 pc.printf("test %d\r\n", j);
riaancillie 0:97bd31dcc8c2 35 }
riaancillie 0:97bd31dcc8c2 36
riaancillie 0:97bd31dcc8c2 37 while(1) {
riaancillie 0:97bd31dcc8c2 38 wait(1);
riaancillie 0:97bd31dcc8c2 39 pc.printf("This program runs since %d seconds.\r\n", i++);
riaancillie 0:97bd31dcc8c2 40 myled = !myled;
riaancillie 0:97bd31dcc8c2 41 }
riaancillie 0:97bd31dcc8c2 42 }
riaancillie 0:97bd31dcc8c2 43