|
发表于 2011-8-6 14:21:27
|
显示全部楼层
遇到同样问题,
msp430f169 两个外部 晶振,一个7.3728Mhz, 一个32.768khz
一共做了 4块板子,
我的晶振初始化程序如下:
//--------------------------
void TimerA_Init(void)
{
TACTL = TASSEL_1 + ID0 + TACLR ; //ACLK=32768Hz ,清除tar ,2分频
CCTL0 = CCIE; //
CCR0 = 16384;//32768*2 // (1/32768)*819 =20 ms ??
TACTL |= MC0+MC1; //Up/Down mode
}
// * 定时器B 初使化 ****
void TimerB_Init (void)
{
TBCTL = TBSSEL_1 + TBCLR ; //ID_2 + ID1 +
TBCCTL0 = CCIE; // INTERRUPT ENABLE
TBCCR0 = 8192; //250ms
TBCTL |= MC0;
}
/****** 定时器 A 中断 处理 ***********/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
timer_aflg = 1;
}
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_B (void)
{
timer_bflg = 2;
}
//--------------------------
void InitClock(void)
{
unsigned int oscdly;
BCSCTL1=RSEL2+RSEL1+RSEL0; //X2T Enable ; LFXT1 operation at 32768Hz; Highest nominal DCO
DCOCTL=DCO2+DCO1+DCO0; //Definition the Highest frequency for DCO
do
{
IFG1 &=~OFIFG;
oscdly=255;
while(oscdly--);
}while(IFG1 & OFIFG); ////////////////////////////////不能跳出
BCSCTL2=SELM_2+SELS; //SMCLK and MCLK uses XT2
}
void main(void)
{
uint meteraddr = 1;
uchar metertype = 0;
uint i= 0;
uchar getflag =0;
//uint temp;
uint mi = 0;
//-----------------------------------
//uchar cmd8cnt;
uint cntdelay =0;
uchar *pointer;
//------------------------------------
//uint heat_time = 0;
uint m_time = 0;
uint am_time = 0;
uint heart_time=26;
// cmd8cnt =0;
//uchar gstate = 0x41;
uchar gstate =0x01;
uchar data=0xbb;
uchar hbflg = 3;
volatile uchar heartstate = 0x22;
//------------------------------
uchar front[5] = {0xaa,0xaa,0xaa,0x7E,'\0'};
uchar maflag = 0;
volatile uchar vaflag = 0;
WDTCTL=WDTPW+WDTHOLD;
InitClock();
TimerA_Init();
//======================= 串口初始化 =======================//
uart0Init();
uart1Init();
DRE_out
RE
//------------------
init_ad();
//启动
P2DIR |=0x20;
P2OUT &=~0x20;
//-----------------------------------------------------p5.2置位
P5DIR |=0x04;
P5OUT |=0x04;
_EINT();
//======================= 主循环 =======================//
//定时器中断
while(1)
{
WDTCTL = WDT_ARST_1000;
if(1 == timer_aflg )
{
timer_aflg = 0;
... ...
}
... ...
}
看到 我程序什么意思了吗 ?每隔2s我 去 if(1 == timer_aflg ){ } 处理一些事情;
几块板子 都能运行到 if(1 == timer_aflg )处;
板子1:两个晶振正常工作 两天,
今天 忽然发现 timer_aflg 永远等于0,即没有进入 定时中断里去 进行 timer_aflg = 1;的操作;
板子2 3 4 焊接完后 就出现上述情况,是什么原因? |
|