Anyone know what is the problem that happened on my TI MSP430F449 MCU I use the IAR Embedded Workbench as the platform and MSP430 FET440 as the Flash Emulation tool. I really dont have a clue what happened with the code.. couse I have use a demo code which worked fine for me to toggle the led as follow ORG 01100h ; Program Start ;--------------------------------------------------------------------------- -- RESET mov.w #0A00h,SP ; Initialize 'F449 stackpointer StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT SetupP1 bis.b #0015d,&P5DIR ; P5.1 output Mainloop xor.b #0015d,&P5OUT ; Toggle P5.0,P5.1,P5.2. Wait mov.w #060003,R15 ; Delay to R15 . . . jmp Mainloop ; Again ;--------------------------------------------------------------------------- --- ; Interrupt Vectors Used MSP430x44x ;--------------------------------------------------------------------------- --- ORG 0FFFEh ; MSP430 RESET Vector DW RESET ; END It had no problem when executed But when I built up another code to initialize the LCD as followed ORG 01100h ; Program Start ;--------------------------------------------------------------------------- -- RESET mov.w #0A00h,SP ; Initialize 'F449 stackpointer StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT SetupP6 bis.b #00FFh,&P6DIR ; P6 output SetupP3 bis.b #00FFh,&P3DIR ; P3 output bis.b #00FFh,&P5DIR BIS.B #0000H,&P5OUT INIT mov.w #060000,R15 ;60K L1 dec.w R15 ;125ns*600000=7.5ms jnz L1 ;125ns*600000=7.5ms ;15MS bis.b #0000h,&P6OUT ; INIT PROCEDURE1 bis.b #00FFh,&P3OUT ; mov.w #016400,R14 ;16.4K L2 dec.w R13 ;16.4K*125ns=2.05ms jnz L2 ;16.4K*125ns=2.05ms bis.b #0000h,&P6OUT ; INIT PROCEDURE2 bis.b #003Fh,&P3OUT ; mov.w #000800,R13 ;400 L3 dec.w R13 ;400*125n=50us jnz L3 ;400*125n=50us bis.b #0000h,&P6OUT ; INIT PROCEDURE3 bis.b #003Fh,&P3OUT ; bis.b #003Fh,&P3OUT ;function set bis.b #0004h,&P6OUT ;enable to write bis.b #000Fh,&P3OUT ;Turn LCD Screen on it showed "User Error Illegal opcode found on address 0x0" Please , if anyone know or you have this problem before...save me!! stuart
Illegal opcode found on address 0x0 (msp430)
Started by ●November 11, 2004
Reply by ●November 11, 20042004-11-11
> bis.b #0004h,&P6OUT ;enable to write > bis.b #000Fh,&P3OUT ;Turn LCD Screen on > > > it showed "User Error Illegal opcode found on address 0x0" > Please , if anyone know or you have this problem before...save me!!There is no jump and the end of your program. The CPU will execute all memory following your last instruction, and - if god wants it to - wrap from the end of the 64k memory space back to address 0x0, where it appearently finds an illegal opcode.
Reply by ●November 11, 20042004-11-11
In article <cmv5un$mg3$1@netnews.hinet.net>, stu.art@msa.hinet.net says...> Anyone know what is the problem that happened on my TI MSP430F449 MCU > I use the IAR Embedded Workbench as the platform and MSP430 FET440 as the > Flash Emulation tool. > I really dont have a clue what happened with the code.. > couse I have use a demo code which worked fine for me to toggle the led as > follow > > ORG 01100h ; Program Start > ;--------------------------------------------------------------------------- > -- > RESET mov.w #0A00h,SP ; Initialize 'F449 stackpointer > StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT > SetupP1 bis.b #0015d,&P5DIR ; P5.1 output > > Mainloop xor.b #0015d,&P5OUT ; Toggle P5.0,P5.1,P5.2. > Wait mov.w #060003,R15 ; Delay to R15 > . > . > . > jmp Mainloop ; Again > ;--------------------------------------------------------------------------- > --- > ; Interrupt Vectors Used MSP430x44x > ;--------------------------------------------------------------------------- > --- > ORG 0FFFEh ; MSP430 RESET Vector > DW RESET ; > END > > It had no problem when executed > > But when I built up another code to initialize the LCD as followed > > ORG 01100h ; Program Start > ;--------------------------------------------------------------------------- > -- > RESET mov.w #0A00h,SP ; Initialize 'F449 stackpointer > StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT > > SetupP6 bis.b #00FFh,&P6DIR ; P6 output > SetupP3 bis.b #00FFh,&P3DIR ; P3 output > bis.b #00FFh,&P5DIR > BIS.B #0000H,&P5OUT > > INIT > mov.w #060000,R15 ;60K > L1 dec.w R15 ;125ns*600000=7.5ms > jnz L1 ;125ns*600000=7.5ms > ;15MS > > bis.b #0000h,&P6OUT ; INIT PROCEDURE1 > bis.b #00FFh,&P3OUT ; > > mov.w #016400,R14 ;16.4K > L2 dec.w R13 ;16.4K*125ns=2.05ms > jnz L2 ;16.4K*125ns=2.05ms > > > bis.b #0000h,&P6OUT ; INIT PROCEDURE2 > bis.b #003Fh,&P3OUT ; > > mov.w #000800,R13 ;400 > L3 dec.w R13 ;400*125n=50us > jnz L3 ;400*125n=50us > > bis.b #0000h,&P6OUT ; INIT PROCEDURE3 > bis.b #003Fh,&P3OUT ; > > bis.b #003Fh,&P3OUT ;function set > bis.b #0004h,&P6OUT ;enable to write > bis.b #000Fh,&P3OUT ;Turn LCD Screen on > > > it showed "User Error Illegal opcode found on address 0x0" > Please , if anyone know or you have this problem before...save me!! > > stuart > > >As noted by Jetmarc, you don't have a jump back to the beginning. Location 0x0 is the IE1 interrupt enable register, and starts with contents of 0x00 at reset. You should also correct the timing loop at L2, which loads the delay constant into R14, and proceeds to decrement R13. Since R13 hasn't yet been used, its contents are not defined. You might also simplify things by using the same register for the programmed delays. Mark Borgerson