打印

MSP430F5438产生正弦波

[复制链接]
1064|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dragon20100405|  楼主 | 2015-1-30 23:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近刚刚开始接触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);
}



相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝