dirtwillfly 发表于 2014-10-11 21:02 
能上传你的完整的程序吗?
根据现在提供的信息,不容易判断是什么原因。 ...
#include <msp430.h>
#define CPU_F ((double)25000000)
#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))
#define Fuse_High (P3OUT |= BIT0)
#define Fuse_Low (P3OUT &= ~BIT0)
void Fuse(void);
void SetVcoreUp (unsigned int level)
{
PMMCTL0_H = PMMPW_H;
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
while ((PMMIFG & SVSMLDLYIFG) == 0);
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
PMMCTL0_L = PMMCOREV0 * level;
if ((PMMIFG & SVMLIFG))
while ((PMMIFG & SVMLVLRIFG) == 0);
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
PMMCTL0_H = 0x00;
}
void UCS(void)
{
P1SEL &= ~BIT1;
P1DIR |= BIT1;
P1SEL |= BIT0; //ACLK
P1DIR |= BIT0;
P2SEL |= BIT2; //SMCLK
P2DIR |= BIT2;
P7SEL |= BIT7; //MCLK
P7DIR |= BIT7;
P5SEL |= BIT4|BIT5;
UCSCTL6 |= XCAP_3;
UCSCTL6 &= ~XT1OFF;//打开XT1,否则XT1LFOFFG可能报错
SetVcoreUp(1);
SetVcoreUp(2);
SetVcoreUp(3); //提高Vcore电压到最高级,以满足倍频需求该函数位于HAL_PMM.H中
__bis_SR_register(SCG0);//该语法为固定格式,意为将括号内的变量置位,SCG0与系统工作模式有关,此时MCLK暂停工作
UCSCTL0 = 0; //先清零,FLL运行时,该寄存器系统会自动配置
UCSCTL1 = DCORSEL_6;
UCSCTL2 = FLLD_1 | 380;//FLLD=1,FLLN=380,则频率为2*(380+1)*32.768=24.969MH
__bic_SR_register(SCG0);
__delay_cycles(782000);//系统自带的精确延时,单位us
while (SFRIFG1 & OFIFG) {
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3;
}
void Fuse(void)
{
Fuse_High;
delay_us(10);
Fuse_Low;
delay_ms(100);
}
/*
* main.c
*/
void main(void) {
P3DIR |= BIT0;
P3OUT &= ~BIT0;
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
UCS();
while(1)
{
Fuse();
}
}
有些程序是直接在网上和官方的例程,我没有做修改,希望版主解答,可不可以用中断这样做,能不能提一个大概的思路,谢谢 |