最近在研究MSP430,有产生方波的需要,于是尝试用定时器写了两个方波发生的函数,一个可以产生几十K的方波,一个可以产生几百K的方波,感觉还比较有用,特来分享。
频率与CCR0计算式:2*CCR0/TimerAFrequency=1/F ---> CCR0=TimerAFrequency/(2*F)
void low_square_Generator(int frequency)
//几十KHZ方波产生器
{
P1DIR |= 0x02; //P1.1的第二功能
P1SEL |= 0x02;
CCTL0=OUTMOD_4; //翻转模式
CCR0=(int)(16384.0/frequency);
TACTL|=TASSEL_1+MC_1; //32768的ACLK
_BIS_SR(LPM3_bits);
}
void high_square_Generator(float Kfrequency)
//几百KHZ方波产生器
{ float temp; P1DIR |= 0x02; //P1.1的第二功能
P1SEL |= 0x02; CCTL0=OUTMOD_4; //翻转模式
temp=4000000.0/Kfrequency;
CCR0=(int)temp; //8MHZ的MCLK
TACTL|=TASSEL_2+MC_1;
_BIS_SR(LPM3_bits);
}
注意:高频在高于500KHZ时方波波形有点渣,上升沿有尖峰。后来用FPGA做也有这个问题