MSP430X custom bootloader interrupt vector overflows for 1M memory size
The current bootloader that I am working on for MSP430F2618 works fine with memory size of 64K and instruction set of MSP430X. Changing the memory size to 1MB does not let the function pointer to jump to the required interrupt vector. The interrupt vector for the bootloader is defined under crt0.asm as follows:
; Jump routines to pass on interrupts from Loader to Loadee
.code
#define LOADEE_INT_VEC 0xE9C0
jumpvec0:
mov LOADEE_INT_VEC+0, pc
jumpvec1:
mov LOADEE_INT_VEC+2, pc
jumpvec2:
mov LOADEE_INT_VEC+4, pc
jumpvec3:
mov LOADEE_INT_VEC+6, pc
jumpvec4:
mov LOADEE_INT_VEC+8, pc
jumpvec5:
mov LOADEE_INT_VEC+10, pc
jumpvec6:
mov LOADEE_INT_VEC+12, pc
jumpvec7:
mov LOADEE_INT_VEC+14, pc
jumpvec8:
mov LOADEE_INT_VEC+16, pc
jumpvec9:
mov LOADEE_INT_VEC+18, pc
jumpvec10:
mov LOADEE_INT_VEC+20, pc
jumpvec11:
mov LOADEE_INT_VEC+22, pc
jumpvec12:
mov LOADEE_INT_VEC+24, pc
jumpvec13:
mov LOADEE_INT_VEC+26, pc
jumpvec14:
mov LOADEE_INT_VEC+28, pc
jumpvec15:
mov LOADEE_INT_VEC+30, pc
jumpvec16:
mov LOADEE_INT_VEC+32, pc
jumpvec17:
mov LOADEE_INT_VEC+34, pc
jumpvec18:
mov LOADEE_INT_VEC+36, pc
jumpvec19:
mov LOADEE_INT_VEC+38, pc
jumpvec20:
mov LOADEE_INT_VEC+40, pc
jumpvec21:
mov LOADEE_INT_VEC+42, pc
jumpvec22:
mov LOADEE_INT_VEC+44, pc
jumpvec23:
mov LOADEE_INT_VEC+46, pc
jumpvec24:
mov LOADEE_INT_VEC+48, pc
jumpvec25:
mov LOADEE_INT_VEC+50, pc
jumpvec26:
mov LOADEE_INT_VEC+52, pc
jumpvec27:
mov LOADEE_INT_VEC+54, pc
jumpvec28:
mov LOADEE_INT_VEC+56, pc
jumpvec29:
mov LOADEE_INT_VEC+58, pc
jumpvec30:
mov LOADEE_INT_VEC+60, pc
#ifndef __NOVECTORS
; Reset vector
.vectors
.keep
dw jumpvec0
dw jumpvec1
dw jumpvec2
dw jumpvec3
dw jumpvec4
dw jumpvec5
dw jumpvec6
dw jumpvec7
dw jumpvec8
dw jumpvec9
dw jumpvec10
dw jumpvec11
dw jumpvec12
dw jumpvec13
dw jumpvec14
dw jumpvec15
dw jumpvec16
dw jumpvec17
dw jumpvec18
dw jumpvec19
dw jumpvec20
dw jumpvec21
dw jumpvec22
dw jumpvec23
dw jumpvec24
dw jumpvec25
dw jumpvec26
dw jumpvec27
dw jumpvec28
dw jumpvec29
dw jumpvec30
dw __reset
#endif
//#ifndef __NOVECTORS
//; Reset vector
// .vectors
// .keep
// org RESET_VECTOR
// dw __reset
//#endif
The code for jumping from Bootloader to program is as follows:
#define BOOTLOADER_VECTOR 0xE9FEtypedefvoid(*fnptr)(void);unsignedintaddr = *(unsignedint*)BOOTLOADER_VECTOR;fnptr jaf = (fnptr)addr;
(*jaf)();// Inside a condition checking
This program was written in CrossStudio for MSP430.
It seems when I have the memory size as 64K, the INTVEC defined under .hzx indicates that the address for the jumpvecX definitions start from 82fc to fafc and ending at 00ff for the statement DW __reset. The addresses increment by 1024. i.e. 82fc, 86fc, 8afc and so on.
Changing the memory size to 1M initialises the jumpvecX definitions from c8fc, incrementing by 1024 and by jumpvec14 overflows the 16 bit address. Even though, I am using MSP430X and 1M memory size, the limitation of INTVEC size being limited to 64K means all the jumpvec locations could not be added into it. How could I overcome this issue?
Please sign in to leave a comment.
Comments
9 comments