#include<msp430g2553.h>
#define uint unsigned int
#define uchar unsigned char
//速度模式参数
#define FASTSP 1 //快速模式
#define SLOESP 0 //慢速模式
//电源模式参数
#define PWR_DOWN 1 //掉电模式
#define PWR_ON 0 //正常模式
//寄存器选择参数
#define DACB_BUFFER 0 //写DACB和BUFFER
#define BUFFER 1 //写BUFFER
#define DACA_BUFFERTOB 2 //写DACA和BUFFER的值更新DACB
#define CONTROL 3 //写控制寄存器
//参考源选择参数
#define EXTERNAL 0 //外部参考源
#define IN_1024 1 //内部1.024V参考源
#define IN_2048 2 //内部2.048V参考源
#define PINDINGAO P1OUT|=BIT0
#define PINDINDI P1OUT&=~BIT0
#define PINSCLKGAO P1OUT|=BIT1
#define PINSCLKDI P1OUT&=~BIT1
#define CSGAO P1OUT|=BIT2
#define CSDI P1OUT&=~BIT2
//函数功能:短延时
//短延时函数:nNop( )
void nNop(uchar i)
{
for(;i>0;i--);
}
//函数功能:长延时
//长延时函数:LongDelay( )
void LongDelay(uint i)
{
uint j;
for(;i>0;i--)
{
for(j=1000;j>0;j--);
}
}
//函数功能:向SPI写16位数据
//说明:temp为16位的数据
//向SPI写16位数据函数:SPIWrite( )
void SPIWrite(int temp)
{
uint i,temp1;
CSDI;
PINSCLKGAO;
for(i=0;i<16;i++)
{
temp1=temp&0x8000;
if(temp1)
{
PINDINGAO;
}
else
{
PINDINDI;
}
PINSCLKDI;
nNop(10);
temp<<=1;
nNop(10);
PINSCLKGAO;
nNop(10);
}
PINSCLKGAO;
CSGAO;
}
//函数功能:将电压值转换为对应的12位数字量
//说明:ref为参考源,ex_ref为当选择外部参考源的电压值,
// out_volt为输出模拟电压值
//将电压值转换为对应的12位数字量函数:VoltToData( )
int VoltToData(uint ref,float ex_ref,float out_volt)
{
int temp;
switch(ref)
{
case EXTERNAL:temp=(int)((out_volt*4096)/(2*ex_ref));
break;
case IN_1024:temp=(int)((out_volt*4096)/(2*1.024));
break;
case IN_2048:temp=(int)((out_volt*4096)/(2*2.048));
//case IN_2048:temp=out_volt;
break;
default:break;
}
return(temp&0xfff);
}
//函数功能:设置DAC A(即A通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A(即A通道)输出函数:SetDAC_A( )
void SetDAC_A(uint speed,uint ref,float ex_ref,float temp)
{
int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x8000|(speed<<14);
SPIWrite(ModCMD);
nNop(20);
SPIWrite(Data);
}
//函数功能:设置DAC B(即B通道)输出
//说明:speed为速度模式,ref为参考源选择,temp为需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC B(即B通道)输出函数:SetDAC_B( )
void SetDAC_B(uint speed,uint ref,float ex_ref,float temp)
{
int ModCMD;
int Data;
ModCMD=0x9000|(speed<<14)|(ref);
Data=VoltToData(ref,ex_ref,temp);
Data=Data|0x0000|(speed<<14);
SPIWrite(ModCMD);
nNop(20);
SPIWrite(Data);
}
//函数功能:设置DAC A与DAC B同时输出
//说明:speed为速度模式,ref为参考源选择,
// temp1为A通道需要输出的电压,temp2为B通道需要输出的电压
// ex_ref为当选择外部参考源的电压值
//设置DAC A与DAC B同时输出函数SetDAC_AB( )
void SetDAC_AB(uint speed,uint ref,float ex_ref,float temp1,float temp2)
{
int ModCMD;
int DataA,DataB;
ModCMD=0x9000|(speed<<14)|(ref);
DataA=VoltToData(ref,ex_ref,temp1);
DataA=DataA|0x8000|(speed<<14);
DataB=VoltToData(ref,ex_ref,temp2);
DataB=DataB|0x1000|(speed<<14);
SPIWrite(ModCMD);
nNop(20);
nNop(20);
SPIWrite(DataB);
nNop(20);
SPIWrite(DataA);
nNop(20);
}
void InitIO( )
{
P1DIR|=BIT0+BIT1+BIT2;
PINDINDI;
PINSCLKDI;
CSDI;
}
void main()
{
WDTCTL = WDTPW + WDTHOLD; //关狗
InitIO();
while(1)
{
//SetDAC_A(FASTSP,IN_1024,0,1.0);
//SetDAC_B(FASTSP,IN_1024,0,1.0);
SetDAC_AB(SLOESP,IN_2048,0,1,2);
}
}
TLV5638.rar_TLV5638
版权申诉
182 浏览量
2022-09-24
06:32:13
上传
评论
收藏 1KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/a64d28507aff44a1a968cd823e7c3cbe_weixin_42665255.jpg!1)
寒泊
- 粉丝: 78
- 资源: 1万+