DSP28335通过SPI控制dac88s085进行DA转换的程序问题,此程序无输出。不知程序有什么问题
时间:10-02
整理:3721RD
点击:
DA转换部分程序如下,SPI的spisimo连接的DAC的DIN,SPI 的时钟连接DA的时钟。GPIO57脚连接的DA的片选信号,
。
#define SetLOAD GpioDataRegs.GPBDAT.bit.GPIO57=1; //将LOAD置高
#define ClrLOAD GpioDataRegs.GPBDAT.bit.GPIO57=0; //将LOAD置低
InitSpiaGpio();//将SPI的时钟和主设备输出设为功能引脚
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0; // 配置GPIO17为GPIO口
GpioCtrlRegs.GPBDIR.bit.GPIO57 = 1; // 定义GPIO17输出引脚
GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0; // 禁止上啦 GPIO17引脚
EDIS;
SetLOAD; //把刷新锁存控制信号拉高
WriteDAC(9,0,0);//选择DAC的WTM模式
temp=20;//REF=2.2V;VO(DACA|B|C|D) =REF* CODE/256
while(1)
{
WriteDAC(0,0,temp); //0.4V
WriteDAC(1,0,temp*2); //0.8V
WriteDAC(2,0,temp*3); //1.2V
WriteDAC(3,0,temp*4); //1.6V
delay(1500); //在此设断点,用万用表直接测量四路DA的输出电压值
}
}
void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol)
{
unsigned short int data;
data=0x0000;
///add是4个通道的地址
///
///
data = ((add<<12) | (rng<<4) | (vol<<0));
ClrLOAD;//低电平时在时钟信号的下降沿DA进行写数据
while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG ==1); //判断SPI的发送缓冲区是否是空的,等于0可写数据
SpiaRegs.SPITXBUF=data; //把发送的数据写如SPI发送缓冲区
while( SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1); //当发送缓冲区出现满标志位时,开始琐存数据
delay(1500);
SetLOAD;
}
void spi_init()
{
SpiaRegs.SPICCR.all =0x4f;///进入初始状态,数据在下降沿输出,自测禁止,16位数据模式
SpiaRegs.SPICTL.all =0x0006; // 使能主机模式,正常相位,使能主机发送,禁止接收
//溢出中断,禁止SPI中断;
SpiaRegs.SPIBRR =0x0009; //SPI波特率 3.75
SpiaRegs.SPICCR.all =0xcf; //退出初始状态;
SpiaRegs.SPIPRI.bit.FREE = 1; // 自由运行
}
。
#define SetLOAD GpioDataRegs.GPBDAT.bit.GPIO57=1; //将LOAD置高
#define ClrLOAD GpioDataRegs.GPBDAT.bit.GPIO57=0; //将LOAD置低
InitSpiaGpio();//将SPI的时钟和主设备输出设为功能引脚
GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0; // 配置GPIO17为GPIO口
GpioCtrlRegs.GPBDIR.bit.GPIO57 = 1; // 定义GPIO17输出引脚
GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0; // 禁止上啦 GPIO17引脚
EDIS;
SetLOAD; //把刷新锁存控制信号拉高
WriteDAC(9,0,0);//选择DAC的WTM模式
temp=20;//REF=2.2V;VO(DACA|B|C|D) =REF* CODE/256
while(1)
{
WriteDAC(0,0,temp); //0.4V
WriteDAC(1,0,temp*2); //0.8V
WriteDAC(2,0,temp*3); //1.2V
WriteDAC(3,0,temp*4); //1.6V
delay(1500); //在此设断点,用万用表直接测量四路DA的输出电压值
}
}
void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol)
{
unsigned short int data;
data=0x0000;
///add是4个通道的地址
///
///
data = ((add<<12) | (rng<<4) | (vol<<0));
ClrLOAD;//低电平时在时钟信号的下降沿DA进行写数据
while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG ==1); //判断SPI的发送缓冲区是否是空的,等于0可写数据
SpiaRegs.SPITXBUF=data; //把发送的数据写如SPI发送缓冲区
while( SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1); //当发送缓冲区出现满标志位时,开始琐存数据
delay(1500);
SetLOAD;
}
void spi_init()
{
SpiaRegs.SPICCR.all =0x4f;///进入初始状态,数据在下降沿输出,自测禁止,16位数据模式
SpiaRegs.SPICTL.all =0x0006; // 使能主机模式,正常相位,使能主机发送,禁止接收
//溢出中断,禁止SPI中断;
SpiaRegs.SPIBRR =0x0009; //SPI波特率 3.75
SpiaRegs.SPICCR.all =0xcf; //退出初始状态;
SpiaRegs.SPIPRI.bit.FREE = 1; // 自由运行
}
已退回5积分
