团队、
我正在尝试通过查找表生成 OWM 正弦波、但我在该波中看到一个奇怪的赝像。 下面是我用于生成波形的代码:
#include
void setClocks();
void PWMRegsetup ();
unsigned int i=0、j=0;//循环计数器
const unsigned int sinTable[]={512、562、611、660、707、753、796、836、876、907、937、963、984、100、101、13、101、21、23、101、101、13、1001、
984,963,937,907,873,836,796,753,707,660,611,562,512,461,412,363,316,270,227,187
150、116、86、60、39、22、10、10、22、39、60、86、116、150、187、227、270、316、363、412、461、512};
void main (void)
{
WDTCTL = WDTPW+WDTHOLD;//禁用 WDT
PWMRegsetup();
setClocks();
TBCTL = TBSSEL_2+MC_1; // SMCLK、upmode
TBCCR0 = 1024-1; // PWM 周期表示一个10位 DAC
TBCCTL0 = CCIE; //启用 TRCCR0中断
TBCCTL6 = OUTMOD_7; // CCR3复位/置位
while (1){
_bis_SR_register (LPM0_bits + GIE); // CPU 关闭。 用于 ISR
__no_operation(); //用于调试器
}
}
//函数//
// Timer B0中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=TIMERB0_vector
_interrupt void TIMERB1_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (TIMERB0_vector)) TIMERB1_ISR (void)
其他
错误编译器不受支持!
#endif
{
//在引脚 P3.6上输出正弦波 PWM
TBCCR6 = sinTable[j];// CCR3 PWM 占空比
J++;
if (j>=64)
J = 0;
}
void setClocks (void)(空)
{
UCSCTL3 = SELREF_2;//设置 DCO FLL 基准= REFO
UCSCTL4 |= SELA_2;//设置 ACLK = REFO
UCSCTL0 = 0x0000;//设置可能的最低 DCOx、MODx
//循环直到 XT1、XT2和 DCO 稳定-在这种情况下、只有 DCO 必须稳定
操作
{
UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG;//清除故障标志
} while (SFRIFG1&OFIFG);//测试振荡器故障标志
_bis_SR_register (SCG0);//禁用 FLL 控制循环
UCSCTL1 = DCORSEL_5;//选择 DCO 范围16MHz 运行
UCSCTL2 |= 762;//将 DCO 乘法器设置为8MHz
//(N + 1)* FLLRef = Fdco
//(762 + 1)* 32768 = 25MHz
_BIC_SR_register (SCG0);//启用 FLL 控制环路
// DCO 范围位已经存在时、DCO 的最坏情况稳定时间
//已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章
// UG 进行优化。
// 32 x 32 x 25 MHz/32、768Hz = 781000 = DCO 稳定的 MCLK 周期
_DELAY_CYCLES (781000);
}
void PWMRegsetup (void)
{
P3SEL |= BIT6;// P3.6选项选择
P3DIR |= BIT6;// P3.6输出(TB6)
}
我想知道我是否错误地调用 ISR 例程中的某项内容? 如有任何建议,请提出。
