⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 da8303.c

📁 MSP430驱动D/A芯片DA8303 C语言程序
💻 C
字号:
//********DA8303**************************************************
//CS-->P5.4
//LDB-->P5.3
//LDA-->P5.2
//RS-->P5.1
//MSB-->P5.0

//p1.5-8303MSB; P1.6-8303LDB; P1.7-8303RS; P2.0-8303LDA; P2.1-8303CS; P2.2-7734CS
//********DA8303**************************************************

#include  "msp430x14x.h"
#include "math.h"
#include  "sys.h"


void Write8303Data(void);
DWORD data8303;
BYTE high8303,low8303;
BYTE high,low;
unsigned char XT2_clock_high(void);
void Delayms(WORD ms)
{
	WORD i, j;
	for(i=0; i<ms; i++)
	{
		for(j=0; j<2000; j++);
	}
}

unsigned char LFXT1_clock_high(void) 
{
	unsigned char i;
	unsigned char Count;
	BCSCTL1 |= XTS; // LFXT1=HF XTAL.
	//BCSCTL1 |= XTS + DIVA0 + DIVA1; // LFXT1=HF XTAL.
	for(Count=0;Count<10;Count++)
	{
		IFG1 &= ~OFIFG; // 清除振荡器失效标志.
		for (i = 0xFF; i > 0; i--); // 延时等待.
		if((IFG1 & OFIFG) == 0)
		break; // 等待LFXT1振荡器工作正常.
	}
	if((IFG1 & OFIFG) != 0)
	return 0;
	BCSCTL2 |= SELM1+SELM0; // 主时钟=辅助时钟=LFXT1=HF XTAL.
	return 1;
}

unsigned char XT2_clock_high(void) 
{
	unsigned char i;
	unsigned char Count;
	BCSCTL1 &= ~(XTOFF); 
	//BCSCTL1 |= XTS + DIVA0 + DIVA1; // LFXT1=HF XTAL.
	for(Count=0;Count<10;Count++)
	{
		IFG1 &= ~OFIFG; // 清除振荡器失效标志.
		for (i = 0xFF; i > 0; i--); // 延时等待.
		if((IFG1 & OFIFG) == 0)
		break; // 等待LFXT1振荡器工作正常.
	}
	if((IFG1 & OFIFG) != 0)
	return 0;
	BCSCTL2 |= 0x88; // 主时钟=辅助时钟=LFXT1=HF XTAL.
	return 1;
}

BYTE UWriteSpi(BYTE Data)            
{
	IFG1 &= (~URXIFG0);
	U0TXBUF = Data;
	WAIT_SPI_OVER;
	return U0RXBUF;
}


void Write8303Data(void)            //写8303    
{	
	low8303 = (WORD)data8303 & 0xff;
	high8303 = (WORD)data8303 >> 8;
	high8303 = high8303 & 0xff;
		
	
	UWriteSpi(high8303);         
	UWriteSpi(low8303);
	}
	
	
void DA8303_init(void)
{
	_DINT();
	
	P1DIR|=0XC0;
	
	P2DIR|=0X07;
	
	P1OUT |= 0xc0;
	P2OUT |= 0x01;
	
	_EINT();
}	

void DA8303_cs(void)
{
	P1OUT |= 0x40;
	P2OUT |= 0x01;
	P2OUT |= 0x04;
	Delayms(1);
	P2OUT &= 0xfd;
}

void Release_DA8303_cs(void)
{
	P1OUT &= 0xbf;
	P2OUT &= 0xfe;

	P2OUT |= 0x02;
	Delayms(1);
	P2OUT &= 0xfb;
}
	
	
void spi_init (void)
	{
	//********SPI初始化**************************************************
	P3SEL |= 0x0E;                        // P3.1-3 SPI option select
	P3DIR |= 0x01;                        // P3.0 output direction

	//物理初始化
	ME1 |= (USPIE0);
	
	//复位UART0,选择主机方式,SPI模式,8位数据
	U0CTL = MM + SYNC + CHAR + SWRST;
	
	//初始化为模式3
	U0TCTL = TXEPT + STC + SSEL0 + SSEL1 + CKPL;
	
	//波特率设置,MCLK 4分频,大约在900K左右
	U0BR0 = 4;
	U0BR1 = 0x00;
	
	//拨特率调整寄存器
	U0MCTL = 0;
	U0CTL &= ~(SWRST);
	
	//清状态寄存器
	IFG1 &= ~(URXIFG0+UTXIFG0);
	}
	
void main(void)
{	
	int i;
	WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
	//LFXT1_clock_high();
	XT2_clock_high();
	
	
	
//***********SPI初始化***********************************************
spi_init();

  DA8303_init();

  DA8303_cs(); 
  data8303 = 0Xffff;
  
  Write8303Data();
  Delayms(10);
  Release_DA8303_cs(); 
 
  while(1)
  {

    for(;;)
    {
	  	for(i=0;i<10;i++)
	  	{
	  		data8303 = 0Xfff;

	  		DA8303_cs();
	  		//Delayms(10);
	      Write8303Data();
	      Delayms(10);
	      Release_DA8303_cs();
	    }
	    _NOP();
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -