求助: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;
}
你是说main里面那个while(1)?那不是很正常吗,cpu只知道取指令执行指令,懂个屁你运行到哪里了,没有while的话main完了就是未知指令了不hardfault才奇怪了 本帖最后由 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就 跳到那个地方了。 除非在中断设个断点,还能再次进入中断。去掉断点再全速执行就飞出去了 TI的430debug的时候就是这个样子,感觉好像断点停止的时候定时器没有停,中断服务还在不停的压栈。这样再单步一次就飞了。 那个定时器的用法,再看看例程的。
先把例程跑完再说。 yangsen 发表于 2015-12-18 19:24
TI的430debug的时候就是这个样子,感觉好像断点停止的时候定时器没有停,中断服务还在不停的压栈。这样再单 ...
不可能这样,如果这样还仿真个毛线啊。
430每个芯片都有模块例程。 不while(1)不同的芯片往下执行貌似处理还不一样,有的芯片会跳回起始地址再执行 lihuyong 发表于 2015-12-18 22:56
不可能这样,如果这样还仿真个毛线啊。
430每个芯片都有模块例程。
我用过msp430f149/249/447/449都是这个样子。不过这几块料都是JTAG接口的,SBW接口的会不会这样不清楚。 lihuyong 发表于 2015-12-18 22:56
不可能这样,如果这样还仿真个毛线啊。
430每个芯片都有模块例程。
6723 的例程哪里的?TI找了半天,找不见,而且好卡啊 SCREA 发表于 2015-12-19 09:43
6723 的例程哪里的?TI找了半天,找不见,而且好卡啊
6723有例程。
你进主页搜索,F6723,点击进入产品项,
然后在具体产品里面就可以看见“工具与软件”,在软件那个下面第一个就是672*,673*的例程。 yangsen 发表于 2015-12-18 23:44
我用过msp430f149/249/447/449都是这个样子。不过这几块料都是JTAG接口的,SBW接口的会不会这样不清楚。 ...
我用ST-Link 仿真STM32L053时也会出现类似情况:
有个别断点被仿真器忽略,需要停下来重新设置该断点才行,而且IAR FOR ARM还是V7.3呢! 前几天用MSP40G2553也是,跑着跑着飞了.
试着用了下RUNTIME LIBRARY,选了什么eabi.好像就没飞了.
不过TI的调试起来挺费劲.
上次弄CC2530那个lib,弄得汇编不会编. 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]