void Clk_Init(void)
{
volatile unsigned int i;
BCSCTL1 &= ~XT2OFF; //打开高频外部晶振XT振荡器
BCSCTL2 |= SELM_1 + SELS + DIVS_3; // SELM_2:选择为XT2作为MCLK的时钟源,
//SELS:选择为XT2作为SMCLK的时钟源.
//DIVS_3:8分频
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag:清除振荡错误标志
for (i = 0xFF; i > 0; i--); // Time for flag to set
_NOP(); //延时等待
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?:如果标志为1,则继续循环等待
IFG1 &= ~OFIFG;
void Clk_Init(void)
{
volatile unsigned int i;
BCSCTL1 &= ~XT2OFF; //打开高频外部晶振XT振荡器
BCSCTL2 |= SELM_1 + SELS + DIVS_3; // SELM_2:选择为XT2作为MCLK的时钟源,
//SELS:选择为XT2作为SMCLK的时钟源.
//DIVS_3:8分频
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag:清除振荡错误标志
for (i = 0xFF; i > 0; i--); // Time for flag to set
_NOP(); //延时等待
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?:如果标志为1,则继续循环等待
IFG1 &= ~OFIFG;
}
/*************************************************************************
* MSP430内部看门狗初始化
*************************************************************************/
void WDT_Init()
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
}
/**************************************************************************
* 主函数:三相SPWM,精度8,采样数250
* 时钟频率计算:smclk/65536/2
*************************************************************************/
void main( void )
{
WDT_Init(); //看门狗设置
Clk_Init(); //系统时钟设置.暂时不能使用,对ad有影响
//p w m
P4DIR |= 0XFF; // P4.1~6使用TB1~TB6,六路输出
P4SEL |= 0xFF;
TBCCTL0=CCIE; //开启定时器中断
TBCCR0 =1024; //定时器计数250
//例如:周期为512*(1/8000000)s=64us 占空比为x/512
TBCCTL1 = OUTMOD_7;
TBCCR1 = spwm_0[n];//31khz
TBCCTL2 = OUTMOD_3;
TBCCR2 = spwm_0[n];
TBCCTL3 = OUTMOD_7;
TBCCR3 = spwm_120[n];
TBCCTL4 = OUTMOD_3;
TBCCR4 = spwm_120[n];
TBCCTL5 = OUTMOD_7;
TBCCR5 = spwm_240[n];
TBCCTL6 = OUTMOD_3;
TBCCR6 = spwm_240[n];
TBCTL = TBSSEL_2 + MC_1; //TASSEL_1是ACLK,TASSEL_2是SMCLK MC_1 增计数模式,从零计数到ccr0
_EINT();
_BIS_SR(LPM0_bits+ GIE); //进入LPM0低功耗模式
}
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B(void)
{
t++;
if( t < 256 )
{
n++;
TBCCR1 = spwm_0[n];
TBCCR2 = spwm_0[n];
TBCCR3 = spwm_120[n];
TBCCR4 = spwm_120[n];
TBCCR5 = spwm_240[n];
TBCCR6 = spwm_240[n];
}
else
{
t=0;n=0;
}
}
用的MSP430f149
选择的是SMCLK的时钟源,这个时钟是选的XT2是12m。增计数模式。示波器的输入为什么不是pwm的输出
一周热门 更多>