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.

求救!!!MSP430程序返回时复位!

初学者一枚。。用的德研的F6638开发板,搞ADC搞了一整天了。。问题就是当屏幕和ADC一起用的时候程序容易跑飞复位,最早的情况是中断标志位ADC12IFG0永远是1,读取和软件清除一点用都没有,导致程序在中断里出不来。后来发现单步调试有些时候能出来一出来就跑飞,我写了一个状态机的函数FSM_Select(),函数内部可以很好的运行一返回就复位!!通过测试发现没有用FSM_Select()程序就跑的尚好,一用就各种挂。但是里面的函数都是例程里面的啊??之前用过STm32和TM4从来没遇到过这种情况,大过年的熬了一个通宵了实在想不通。希望有大神能提下宝贵建议吧。。。
//--------------------主程序和中断服务程序------------------------------------------------------//
void main(void)
{
  WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer

  Osccon_Initial(); //晶振初始化函数:定义相关晶振参数
  Init_LCD_TFT_ILI9325(); //"彩屏LCD_TFT_ILI9325" 初使化: 所有相关资源的初始化

  ADC_Wheel_Init();//ADC初始化
  MAIN_Display();//菜单显示
  _BIS_SR(GIE); // Enter LPM0, Enable interrupts

  while (1)
    {
        _BIS_SR(LPM0);
    }
}

//-------------------------------中断服务函数------------------------------------------------//

#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
  int i;
  ADC_Result = ADC12MEM0; //读取ADC并清除中断位(实际上怎么清都清不掉,ADC12IFG0一直是1)
  FSM_Select();//状态处理函数
}
//------------------------状态处理函数-------------------------------------------------//

void FSM_Select(void)//(测试应该是这个函数的问题,但是不应该啊??难道是和LCD通信的原因?)
{
  switch (FSM_Condition)
  {
    case FSM_ADC_Wheel_Interrupt:
    {
        u8 TemptString[String_Size]={0};//建立一个空的字符串
        Float_To_String(ADC_Result,TemptString);//浮点数转字符串
        LCD_TFT_ShowString(30,90,"fdsgfs",FONT1608,WHITE,RED);//随便在屏幕上打印一些东西,和LCD通信,用的SPI总线
            break;
    }
    default:
           break;
   }
}//从这里一返回就复位

//----------------------ADC配置--------------------------------------------------------//

void ADC_Wheel_Init(void)
{
   P6SEL |= BIT6; // Enable A/D channel

   ADC12CTL0 = ADC12ON+ADC12SHT0_15+ADC12MSC ; // Turn on ADC12, set sampling time
   // set multiple sample conversion
   ADC12CTL1 = ADC12SHP + ADC12CONSEQ_2 + ADC12SSEL_1; // Use sampling timer, set mode ,set clock ACLK

   ADC12MCTL0 |= ADC12INCH_0; //change
   ADC12IE = ADC12IE0; // Enable ADC12IFG.0
   ADC12CTL0 |= ADC12ENC; // Enable conversions
   ADC12CTL0 |= ADC12SC; // Start conversion
   _EINT(); // Enable all interrupt

}


(其实还有一个问题= =就是用CCS Debug,下载几次板子似乎就脱机了,要重新插拔断电balabala,甚至重复十几次才能把程序下载下去,能有一个解决办法吗?)