This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F149: msp430f149蓝牙升级

Part Number: MSP430F149

给位工程师:

      你们好,最近研究msp430f149的iap,目前是调试阶段,已经写好简单的boot文件和app文件,在boot文件中也加入了中断跳转的指令。如果app文件中没有中断,程序可以执行,一旦app程序中打开串口接收中断,串口发送指令后程序就跑停了。在boot程序中也将串口中断向量重定义了。

#include "io430.h"
#include "flash.h"
void USART_Init(void);

void main( void )
{
  char i=0;
  WDTCTL = WDTPW + WDTHOLD;
  flash_init();
  USART_Init();
  while(1)
  {
    while (IFG1 & URXIFG0)
    {
     rec[i]=RXBUF0;
     i++;
     if(i==count)
     {
       i=0;
       flash_write(rec);
       asm(" br &0x8100;");//接收到升级程序后跳转

     }
     
    }
  }
}
void USART_Init(void)
{
    P3SEL |= BIT4+BIT5;                            // P3.4,5选择为UART收发端口
    ME1 |= UTXE0 + URXE0;                     // 使能USART0收发
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 32k/9600 - 3.41
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                            // Modulation
    UCTL0 &= ~SWRST;                          // 初始化UART0状态机
    IE1 |= URXIE0;                            // 使能接收中断 
   // _EINT();
}
#pragma vector=USART0RX_VECTOR 
__interrupt void USART0RX_ISR(void)
{
  asm(" br &0x81A2;");//串口中断重定义

  
}
上面是b
#include "msp430x14x.h"  
#define CPU_F ((double)8000000)   //精确延时
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))  
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
void USART_Init(void);

void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
  
  
   BCSCTL1 &= ~XT2OFF;                 //打开XT2高频晶体振荡器
  do
  {
    IFG1 &= ~OFIFG;                 //清除晶振失败标志
    for (char z = 0xFF; z > 0; z--);     //等待8MHz晶体起振
  }
  while ((IFG1 & OFIFG));             //晶振失效标志仍然存在?
  BCSCTL2 |= SELM_2 + SELS;           //MCLK和SMCLK选择高频晶振
  USART_Init();
  P2DIR|=0XFF;
  P2OUT=0X00;
  delay_ms(2000);
  P2OUT=0Xff;
  delay_ms(2000);
  P2OUT=0X00;
  while(1)
  {
    LPM0;
  }

}
#pragma vector=USART0RX_VECTOR 
__interrupt void USART0RX_ISR(void)
{
  char r;
  r=RXBUF0;
  P2OUT^=0xFF;
 
}
void USART_Init(void)
{
    P3SEL |= 0x30;                            // P3.4,5选择为UART收发端口
    ME1 |= UTXE0 + URXE0;                     // 使能USART0收发
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 32k/9600 - 3.41
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                            // Modulation
    UCTL0 &= ~SWRST;                          // 初始化UART0状态机
    IE1 |= URXIE0;                            // 使能接收中断 
    _EINT();
}
oot程序,下面是app程序,麻烦帮忙看下,是不是app的中断程序跳转有问题。