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:蓝牙升级问题

Guru**** 673890 points
Other Parts Discussed in Thread: MSP430F149
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1056867/msp430f149-bluetooth-upgrade-issue

器件型号:MSP430F149

大家好、

问题:

MSP430F149的 IPP 目前处于调试阶段、客户编写了简单引导文件和应用文件、并且在引导文件中包含了中断跳转指令。 如果应用文件中没有中断、程序可以执行、一旦应用程序中的串行接收中断被打开、程序就会在串行发送指令之后停止。 串行中断向量也在引导程序中重新定义。

客户想知道原因是什么、它与应用程序中断程序是否相关?

引导程序如下所示:

#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;");//Jump after receiving the upgrade 

     }
     
    }
  }
}
void USART_Init(void)
{
    P3SEL |= BIT4+BIT5;                            // P3.4,5 is selected as the UART transceiver port 
    ME1 |= UTXE0 + URXE0;                     // Enable USART0 transmit and receive 
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 32k/9600 - 3.41
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                            // Modulation
    UCTL0 &= ~SWRST;                          // Initialize the UART0 state machine 
    IE1 |= URXIE0;                            // Enable to receive interrupts 
   // _EINT();
}
#pragma vector=USART0RX_VECTOR 
__interrupt void USART0RX_ISR(void)
{
  asm(" br &0x81A2;");//Serial interrupt redefined 

  
}

应用程序如下所示:

#include "msp430x14x.h"  
#define CPU_F ((double)8000000)   //Accurate time delay 
#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;                 //Turn on the XT2 high-frequency crystal oscillator 
  do
  {
    IFG1 &= ~OFIFG;                 //Clear the crystal fail flag 
    for (char z = 0xFF; z > 0; z--);     //Wait for the 8-MHz crystal to oscillation 
  }
  while ((IFG1 & OFIFG));             //Crystal failure flag still present? 
  BCSCTL2 |= SELM_2 + SELS;           //MCLK and SMCLK select high frequency crystal 
  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 is selected as the UART transceiver port 
    ME1 |= UTXE0 + URXE0;                     // Enable USART0 transmit and receive 
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 32k/9600 - 3.41
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                            // Modulation
    UCTL0 &= ~SWRST;                          // Initialize the UART0 state machine 
    IE1 |= URXIE0;                            // Enable to receive interrupts 
    _EINT();
}

您可以帮助检查此问题吗? 谢谢。

此致、

樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我是否可以知道有任何更新?

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我最好不要在引导项目中使用中断、除了复位矢量中断。 您可以参阅此文档  

    https://www.ti.com/lit/an/slaa600d/slaa600d.pdf?ts=1638015344315&ref_url=https%253A%252F%252Fwww.ti.com%252Ftool%252FMSPBSL%253FkeyMatch%253D%2526tisearch%253Dsearch-everything%2526usecase%253Dsoftware 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Gary、

    谢谢。

    客户确实希望了解 中断的重新定义、例如如何跳转到引导文件中的应用程序中断函数、以及应用程序的中断函数是否需要弹出一些内容。

    引导程序不使用中断、不打开中断、只定义了中断服务函数。 此中断服务函数用于应用程序中的中断服务程序,该程序将跳转到引导中断函数,然后跳转到应用程序中断函数,并使用 br 指令。 现在卡在跳转过程中。

    发现编译器的汇编窗口生成的 txt 文档似乎缺少一个堆栈过程。 0x81A2是串行端口的直接条目、用于接收中断服务程序、那么从引导到丢失堆栈的跳转过程是否是问题的原因?

    @8100
    31 40 00 0A B0 12 0C 81 B0 12 B0 81 B2 40 80 5A
    20 01 F2 C0 80 00 57 00 E2 C3 02 00 7E 43 01 3C
    7E 53 5E 93 FD 2F E2 B3 02 00 F6 2F F2 D0 88 00
    58 00 B0 12 6C 81 5E 42 2A 00 F2 43 2A 00 C2 43
    29 00 3F 40 FE 08 3D 40 3D 00 3F 53 3D 63 FD 2F
    F2 43 29 00 3F 40 FE 08 3D 40 3D 00 3F 53 3D 63
    FD 2F C2 43 29 00 32 D0 10 00 FD 3F F2 D0 30 00
    1B 00 F2 D0 C0 00 04 00 F2 D0 10 00 70 00 F2 D0
    10 00 71 00 F2 40 03 00 74 00 C2 43 75 00 F2 40
    4A 00 73 00 D2 C3 70 00 F2 D0 40 00 00 00 32 D2
    30 41 0E 12 5E 42 76 00 F2 E3 29 00 3E 41 00 13
    30 40 B4 81 30 40 B8 81 FF 3F 
    @FFF2
    A2 81 
    @FFFE
    00 81 
    q

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Gary、

    我是否可以知道有关附加信息的任何更新?

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为您可以让客户先阅读应用手册。 您将找到一种管理中断表的方法。 在应用手册中、它使用跳转表来执行此任务、如下表在应用项目中定义。

    在引导项目中、它按如下所示的数组元素地址填充硬件中的中断矢量表