Hi,
I am writting a custom bootloader and to manage this I have to create a secondary interrupt table within the application space. Basically, the bootloader would get the 'real' interrupt table. So interrupts would breifly go through this real table, and be passed on to the application code (if valid) to via the interrupt talbe within the application code space..
My new table would be located into an other segment from 0xF0C0 to 0xF0FF
I don't succeed to get my interrupt to work at all so If someone have already achieved to do that I would please to know how.
MCU: MSP430F47166
SW: CCS v4
the linker file:
MEMORY
{
SFR : origin = 0x0000, length = 0x0010
PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0
PERIPHERALS_16BIT : origin = 0x0100, length = 0x0100
RAM : origin = 0x1100, length = 0x1000
INFOA : origin = 0x10C0, length = 0x0040
INFOB : origin = 0x1080, length = 0x0040
INFOC : origin = 0x1040, length = 0x0040
INFOD : origin = 0x1000, length = 0x0040
/* FLASH : origin = 0x2B00, length = 0xD2C0 /* TAILLE CODE = 53952o + 64o (IT vector) */
FLASH : origin = 0x2B00, length = 0xC2C0 /* TAILLE CODE = 549856o + 64o (IT vector) */
INT00 : origin = 0xF0C0, length = 0x0002 /* Image de la table des vecteurs situé à 0xFDC0 */
INT01 : origin = 0xF0C2, length = 0x0002
INT02 : origin = 0xF0C4, length = 0x0002
INT03 : origin = 0xF0C6, length = 0x0002
INT04 : origin = 0xF0C8, length = 0x0002
INT05 : origin = 0xF0CA, length = 0x0002
INT06 : origin = 0xF0CC, length = 0x0002
INT07 : origin = 0xF0CE, length = 0x0002
INT08 : origin = 0xF0D0, length = 0x0002
INT09 : origin = 0xF0D2, length = 0x0002
INT10 : origin = 0xF0D4, length = 0x0002
INT11 : origin = 0xF0D6, length = 0x0002
INT12 : origin = 0xF0D8, length = 0x0002
INT13 : origin = 0xF0DA, length = 0x0002
INT14 : origin = 0xF0DC, length = 0x0002
INT15 : origin = 0xF0DE, length = 0x0002
INT16 : origin = 0xF0E0, length = 0x0002
INT17 : origin = 0xF0E2, length = 0x0002
INT18 : origin = 0xF0E4, length = 0x0002
INT19 : origin = 0xF0E6, length = 0x0002
INT20 : origin = 0xF0E8, length = 0x0002
INT21 : origin = 0xF0EA, length = 0x0002
INT22 : origin = 0xF0EC, length = 0x0002
INT23 : origin = 0xF0EE, length = 0x0002
INT24 : origin = 0xF0F0, length = 0x0002
INT25 : origin = 0xF0F2, length = 0x0002
INT26 : origin = 0xF0F4, length = 0x0002
INT27 : origin = 0xF0F6, length = 0x0002
INT28 : origin = 0xF0F8, length = 0x0002
INT29 : origin = 0xF0FA, length = 0x0002
INT30 : origin = 0xF0FC, length = 0x0002
INT000 : origin = 0xFFC0, length = 0x0002, fill = 0xF0C0
INT010 : origin = 0xFFC2, length = 0x0002, fill = 0xF0C2
INT020 : origin = 0xFFC4, length = 0x0002, fill = 0xF0C4
INT030 : origin = 0xFFC6, length = 0x0002, fill = 0xF0C6
INT040 : origin = 0xFFC8, length = 0x0002, fill = 0xF0C8
INT050 : origin = 0xFFCA, length = 0x0002, fill = 0xF0CA
INT060 : origin = 0xFFCC, length = 0x0002, fill = 0xF0CC
INT070 : origin = 0xFFCE, length = 0x0002, fill = 0xF0CE
INT080 : origin = 0xFFD0, length = 0x0002, fill = 0xF0D0
INT090 : origin = 0xFFD2, length = 0x0002, fill = 0xF0D2
INT100 : origin = 0xFFD4, length = 0x0002, fill = 0xF0D4
INT110 : origin = 0xFFD6, length = 0x0002, fill = 0xF0D6
INT120 : origin = 0xFFD8, length = 0x0002, fill = 0xF0D8
INT130 : origin = 0xFFDA, length = 0x0002, fill = 0xF0DA
INT140 : origin = 0xFFDC, length = 0x0002, fill = 0xF0DC
INT150 : origin = 0xFFDE, length = 0x0002, fill = 0xF0DE
INT160 : origin = 0xFFE0, length = 0x0002, fill = 0xF0E0
INT170 : origin = 0xFFE2, length = 0x0002, fill = 0xF0E2
INT180 : origin = 0xFFE4, length = 0x0002, fill = 0xF0E4
INT190 : origin = 0xFFE6, length = 0x0002, fill = 0xF0E6
INT200 : origin = 0xFFE8, length = 0x0002, fill = 0xF0E8
INT210 : origin = 0xFFEA, length = 0x0002, fill = 0xF0EA
INT220 : origin = 0xFFEC, length = 0x0002, fill = 0xF0EC
INT230 : origin = 0xFFEE, length = 0x0002, fill = 0xF0EE
INT240 : origin = 0xFFF0, length = 0x0002, fill = 0xF0F0
INT250 : origin = 0xFFF2, length = 0x0002, fill = 0xF0F2
INT260 : origin = 0xFFF4, length = 0x0002, fill = 0xF0F4
INT270 : origin = 0xFFF6, length = 0x0002, fill = 0xF0F6
INT280 : origin = 0xFFF8, length = 0x0002, fill = 0xF0F8
INT290 : origin = 0xFFFA, length = 0x0002, fill = 0xF0FA
INT300 : origin = 0xFFFC, length = 0x0002, fill = 0xF0FC
RESET : origin = 0xFFFE, length = 0x0002
}
/****************************************************************************/
/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */
/****************************************************************************/
SECTIONS
{
.bss : {} > RAM /* GLOBAL & STATIC VARS */
.sysmem : {} > RAM /* DYNAMIC MEMORY ALLOCATION AREA */
.stack : {} > RAM (HIGH) /* SOFTWARE SYSTEM STACK */
.text : {}>> FLASH | FLASH2 /* CODE */
.text:_isr : {} > FLASH /* ISR CODE SPACE */
.cinit : {} > FLASH /* INITIALIZATION TABLES */
.const : {} > FLASH | FLASH2 /* CONSTANT DATA */
.cio : {} > RAM /* C I/O BUFFER */
.pinit : {} > FLASH /* C++ CONSTRUCTOR TABLES */
.infoA : {} > INFOA /* MSP430 INFO FLASH MEMORY SEGMENTS */
.infoB : {} > INFOB
.infoC : {} > INFOC
.infoD : {} > INFOD
.int_00 : {} > INT00 /* MSP430 INTERRUPT VECTORS */
.int_01 : {} > INT01
.int_02 : {} > INT02
.int_03 : {} > INT03
.int_04 : {} > INT04
.int_05 : {} > INT05
.int_06 : {} > INT06
.int_07 : {} > INT07
.int_08 : {} > INT08
.int_09 : {} > INT09
.int_10 : {} > INT10
.int_11 : {} > INT11
.int_12 : {} > INT12
.int_13 : {} > INT13
.int_14 : {} > INT14
.int_15 : {} > INT15
.int_16 : {} > INT16
.int_17 : {} > INT17
.int_18 : {} > INT18
.int_19 : {} > INT19
.int_20 : {} > INT20
.int_21 : {} > INT21
.int_22 : {} > INT22
.int_23 : {} > INT23
.int_24 : {} > INT24
.int_25 : {} > INT25
.int_26 : {} > INT26
.int_27 : {} > INT27
.int_28 : {} > INT28
.int_29 : {} > INT29
.int_30 : {} > INT30
.int00 : {} > INT000 /* MSP430 INTERRUPT VECTORS */
.int01 : {} > INT010
.int02 : {} > INT020
.int03 : {} > INT030
.int04 : {} > INT040
.int05 : {} > INT050
.int06 : {} > INT060
.int07 : {} > INT070
.int08 : {} > INT080
.int09 : {} > INT090
.int10 : {} > INT100
.int11 : {} > INT110
.int12 : {} > INT120
.int13 : {} > INT130
.int14 : {} > INT140
.int15 : {} > INT150
.int16 : {} > INT160
.int17 : {} > INT170
.int18 : {} > INT180
.int19 : {} > INT190
.int20 : {} > INT200
.int21 : {} > INT210
.int22 : {} > INT220
.int23 : {} > INT230
.int24 : {} > INT240
.int25 : {} > INT250
.int26 : {} > INT260
.int27 : {} > INT270
.int28 : {} > INT280
.int29 : {} > INT290
.int30 : {} > INT300
.reset : {} > RESET /* MSP430 RESET VECTOR */
}
I tried to manipulate my c file
#pragama void function(void)
#pragama CODE_SECTIONS(function,address) // New interrupt vector Address
_interrupt void function(void)