SCREA 发表于 2015-12-18 16:51:30

求助:MSP430 每次不while(1)循环,执行到特殊位置卡死,...

本帖最后由 SCREA 于 2015-12-18 17:03 编辑

如图,
郁闷,为何会执行到这个地方,换了个片子也是。
用的6xxx
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
__disable_interrupt();
ClkInit();
P4SEL &= ~BIT1; P4DIR |= BIT1;   //蜂鸣器控制脚
Timer2_A2_Init();
__enable_interrupt();   
while(1)
{
    if( Button_Scan(1) == 1 )
    {
   P4OUT |= BIT1;
      _delay_ms(50);
    }
    else
    {
       P4OUT &= ~BIT1;
    }

}
}
定时器代码
void Timer2_A2_Init(void)
{
TIMER2_A2->CCR0 = 409;                                                    //4096/10 = 100ms
TIMER2_A2->CTL |= 0x01c2;                                                //ACLK、32768/8=4096中断开启
TIMER2_A2->CNT = 1;                                                          //定时器中的值,不能为0,
TIMER2_A2->CCTL0 |= CCIE;
TIMER2_A2->CTL |= 0x10;                                                    //Up mode
}
#pragma vector=TIMER2_A0_VECTOR
__interrupt void TIMER2_A2_ISR(void)
{
   P4OUT |= BIT1;
}


jiaowoxiaolu 发表于 2015-12-18 17:00:05

你是说main里面那个while(1)?那不是很正常吗,cpu只知道取指令执行指令,懂个屁你运行到哪里了,没有while的话main完了就是未知指令了不hardfault才奇怪了

SCREA 发表于 2015-12-18 17:02:58

本帖最后由 SCREA 于 2015-12-18 17:09 编辑

jiaowoxiaolu 发表于 2015-12-18 17:00
你是说main里面那个while(1)?那不是很正常吗,cpu只知道取指令执行指令,懂个屁你运行到哪里了,没有whi ...

while(1)
{
    if( Button_Scan(1) == 1 )
    {
      BUZZER_OnOrOFF(1);
      _delay_ms(50);
    }
    else
    {
      BUZZER_OnOrOFF(0);
    }

}

源代码是这个,我上传删掉了

=====================
主要是一开定时器2或1就 跳到那个地方了。 除非在中断设个断点,还能再次进入中断。去掉断点再全速执行就飞出去了

yangsen 发表于 2015-12-18 19:24:06

TI的430debug的时候就是这个样子,感觉好像断点停止的时候定时器没有停,中断服务还在不停的压栈。这样再单步一次就飞了。

lihuyong 发表于 2015-12-18 22:55:17

那个定时器的用法,再看看例程的。

先把例程跑完再说。

lihuyong 发表于 2015-12-18 22:56:31

yangsen 发表于 2015-12-18 19:24
TI的430debug的时候就是这个样子,感觉好像断点停止的时候定时器没有停,中断服务还在不停的压栈。这样再单 ...

不可能这样,如果这样还仿真个毛线啊。

430每个芯片都有模块例程。

shuiluo2 发表于 2015-12-18 23:23:54

不while(1)不同的芯片往下执行貌似处理还不一样,有的芯片会跳回起始地址再执行

yangsen 发表于 2015-12-18 23:44:16

lihuyong 发表于 2015-12-18 22:56
不可能这样,如果这样还仿真个毛线啊。

430每个芯片都有模块例程。

我用过msp430f149/249/447/449都是这个样子。不过这几块料都是JTAG接口的,SBW接口的会不会这样不清楚。

SCREA 发表于 2015-12-19 09:43:51

lihuyong 发表于 2015-12-18 22:56
不可能这样,如果这样还仿真个毛线啊。

430每个芯片都有模块例程。

6723 的例程哪里的?TI找了半天,找不见,而且好卡啊

lihuyong 发表于 2015-12-19 11:15:47

SCREA 发表于 2015-12-19 09:43
6723 的例程哪里的?TI找了半天,找不见,而且好卡啊

6723有例程。

你进主页搜索,F6723,点击进入产品项,

然后在具体产品里面就可以看见“工具与软件”,在软件那个下面第一个就是672*,673*的例程。

lyrics131415 发表于 2015-12-20 08:56:12

yangsen 发表于 2015-12-18 23:44
我用过msp430f149/249/447/449都是这个样子。不过这几块料都是JTAG接口的,SBW接口的会不会这样不清楚。 ...

我用ST-Link 仿真STM32L053时也会出现类似情况:
       

有个别断点被仿真器忽略,需要停下来重新设置该断点才行,而且IAR FOR ARM还是V7.3呢!

Andrewz 发表于 2015-12-20 09:29:01

前几天用MSP40G2553也是,跑着跑着飞了.
试着用了下RUNTIME LIBRARY,选了什么eabi.好像就没飞了.
不过TI的调试起来挺费劲.
上次弄CC2530那个lib,弄得汇编不会编.

SCREA 发表于 2015-12-21 11:39:08

jiaowoxiaolu 发表于 2015-12-18 17:00
你是说main里面那个while(1)?那不是很正常吗,cpu只知道取指令执行指令,懂个屁你运行到哪里了,没有whi ...

谢谢回答。 之前的问题解决了,是我的过错。开了bit1TAIE这个中断。我想问下您如下3个问题:

1: TAIE的中断入口地址是多少啊?

2: 进入中断不必要清 中断标志位吧?

3:
#pragma vector=TIMER2_A0_VECTOR
__interrupt void TIMER2_A0_ISR(void)
其中“TIMER2_A0_ISR”可以写成任意的 名字吧???还有,为何要这样写?可以换个写法吗?
页: [1]
查看完整版本: 求助:MSP430 每次不while(1)循环,执行到特殊位置卡死,...