最近刚刚开始接触430,因为对时钟频率要求较高,所以就选用了5438;初步目的是产生一正弦波,采用查表法,八位数据输出至DAC908进行数模转换,然后DAC908连OPA690进行电压转换;DAC908的时钟信号采用5438的主时钟,5438主时钟为外部XT2 25M晶振,现在有几个问题:1、这样的设计合理不合理,选用这三个芯片,特别是DAC908;2、编程后发现主时钟信号从P11.1输出,但是波形不是方波,但是频率是对的,能不能直接接到DAC908的时钟端;3、现在的情况是在OPA690输出测不到波形。程序如下,请大家看看有什么问题吗,万分感谢。
定时器采用增计数模式,到达设定值进中断取数据。
#include "msp430f5438a.h"
unsigned char SCRFaVolt[250]={}; //数据略
int i=0;
//函数Init_Clk(void)
//功能:初始化主时钟,MCLK=XT2,SMCLK=XT2
void Int_CLK (void)
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
P5SEL |= BIT2+BIT3; //端口功能选择晶振
UCSCTL6 &= ~XT2OFF; //使能晶体振荡器
UCSCTL3 |= SELREF_2; //FLLREF=REFO
UCSCTL4 |= SELA_2; //ACLK=REFOCLK,MCLK和SMCLK默认为DCO
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志
SFRIFG1 &= ~OFIFG; ;
}
while(SFRIFG1&OFIFG) ; // 检测振荡器错误标志
UCSCTL6 |= XT2DRIVE_3; //XT2驱动模式最高
UCSCTL4 |= SELS_5+SELM_5; //MCLK和SMCLK时钟源为XT2;
P11SEL |= BIT1;
P11DIR |= BIT1;
}
//函数Init_TimerA0(void)
//功能:初始化定时器A0
void Int_TimerA0 (void)
{
TA0CTL |= TACLR; //Timer_A清零
TA0CTL |= TASSEL_2; //Timer_A时钟源为SMCLK;
TA0CTL |= ID_1; //分频设为1
TA0CCR0 = 16000-1;
TA0CTL |= TAIE;
TA0CTL |= MC_1; //计数器为增计数模式
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0 (void)
{
P6OUT = SCRFaVolt[i];
i++;
if(i==250)
{
i=0;
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关看门狗
Int_CLK();
P5DIR |= BIT4; // 主电源
P5OUT |= BIT4;
P6DIR |= 0xff;
Int_TimerA0();
_EINT();
while(1);
}
|