TI中文支持网
TI专业的中文技术问题搜集分享网站

DAC1282: 寄存器回读失败

Part Number:DAC1282Other Parts Discussed in Thread:TMS320F28379D,

您好,

我在用TMS320F28379D利用SPI通信控制DAC1282输出直流电压,示波器观察SPICLK和SPISIMO正常,周期为12.5us。

但SPISOMI始终为低电平,debug界面也读取不出SPISOMI的值,请问这是什么原因?

下面是我的程序。

/*
 * DAC读取调试
 *
 */

#include "F28x_Project.h"

typedef unsigned char Uint8;


//声明
void gpio_init();//配置所有与PCB板相连的GPIO口(包括3线SPI)
void spia_init();
void dac_init();
void spia_xmit(Uint8 a);

Uint8 rdata;

void main()
{//初始化InitSysCtrl();//系统控制InitGpio();//GPIODINT;//关中断InitPieCtrl();//PIE控制寄存器IER = 0x0000;//中断标志位清零IFR = 0x0000;//中断标志位清零InitPieVectTable();//中断向量表gpio_init();//配置所有与PCB板相连的GPIO口(包括3线SPI)spia_init();dac_init();spia_xmit(0x20);//读GANMOD寄存器地址DELAY_US(100);spia_xmit(0x00);//读一个寄存器DELAY_US(100);while(SpiaRegs.SPISTS.bit.INT_FLAG != 1){}rdata = SpiaRegs.SPIRXBUF;







}

void gpio_init()
{/* GPIO 连接端口I/O初始值* 111  GPIO_CS_DAO0* 60SPICLKA_DASPIA CLK* 59SPISOMIA_DASPIA SOMI* 58SPISIMOA_DASPIA SIMO* 22GPIO_SW/TD_DA  O0*/EALLOW;//CS、SW/TD、RESET、DRDYGpioCtrlRegs.GPDPUD.bit.GPIO111 = 0;GpioCtrlRegs.GPDMUX1.bit.GPIO111 = 0;GpioCtrlRegs.GPDDIR.bit.GPIO111 = 1;GpioDataRegs.GPDCLEAR.bit.GPIO111 = 1;//GPIO_CS_DAGpioCtrlRegs.GPAPUD.bit.GPIO22 = 0;GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0;GpioCtrlRegs.GPADIR.bit.GPIO22 = 1;GpioDataRegs.GPACLEAR.bit.GPIO22 = 1;//GPIO_SW/TD_DA//SPI//DA(使能、异步、SPI)GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;//SPICLKA_DAGpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;//SPISOMIA_DAGpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//SPISIMOA_DAEDIS;

}

void spia_init()
{//DAC1282时钟极性(CPOL)为0,时钟相位(CPHA)为0//配置控制寄存器(8位保留,0000 0000 0000 0111 = 0x0007)SpiaRegs.SPICCR.bit.SPISWRESET = 0;//SPI复位SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;//时钟极性为0(SCK空闲为低电平)SpiaRegs.SPICCR.bit.HS_MODE = 0;//关闭高速模式SpiaRegs.SPICCR.bit.SPILBK = 0;//关闭回环模式SpiaRegs.SPICCR.bit.SPICHAR = (8-1);//字长8位//运行控制寄存器(11位保留,0000 0000 0000 0110 = 0x0016)SpiaRegs.SPICTL.bit.OVERRUNINTENA = 1;//禁止接收溢出中断SpiaRegs.SPICTL.bit.CLK_PHASE = 0;//时钟相位为0(在第一个跳变沿采样)SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;//MCU主机SpiaRegs.SPICTL.bit.TALK = 1;//使能主机发送SpiaRegs.SPICTL.bit.SPIINTENA = 0;//禁止SPI中断//SpiaRegs.SPISTS.all = 0;//波特率寄存器(9位保留,0000 0000 0000 007C)/** LSPCLKfreq=CPUfreq/n //(n=1,2,4,6,8,10,12,14)* SPI Baud Rate=LSPCLKfreq/(SPIBRR+1)* 在不添加外部辅助时钟的情况下* F28379D的CPU频率为10MHz,对应最低低速外设时钟为715KHz,最低波特率为5586SPS* 此最低波特率大于选择FIR滤波器模式 时的最高波特率4000SPS* 故选择Sinc滤波器模式 ,波特率设置为8000SPS,10分频,SPIBRR=124=0x007C*/EALLOW;ClkCfgRegs.LOSPCP.all = 0x0005;//101(10分频)EDIS;SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = 0x007C;//优先级控制寄存器SpiaRegs.SPIPRI.bit.FREE = 1;//仿真时自由运行,断点上暂停不会停止SPI//停止SPI软件复位准备接收或发送SpiaRegs.SPICCR.bit.SPISWRESET = 1;
}//2、外置元件初始配置(DAC、ADC)

void dac_init()
{spia_xmit(0x40);//写入GANMOD寄存器地址DELAY_US(100);spia_xmit(0x00);//写一个寄存器DELAY_US(100);spia_xmit(0x0D);//写入0000 1101,GAIN=8,DC模式DELAY_US(100);//SINEG寄存器不配置spia_xmit(0x42);//写入SWM寄存器地址DELAY_US(100);spia_xmit(0x00);//写一个寄存器DELAY_US(100);spia_xmit(0x10);//写入0001 0000,开关全开实现差分DELAY_US(100);//N寄存器不配置spia_xmit(0x44);//写入DCG寄存器地址DELAY_US(100);spia_xmit(0x02);//写入三个寄存器DELAY_US(100);spia_xmit(0xE9);//DCG0DELAY_US(100);spia_xmit(0x26);//DCG1DELAY_US(100);spia_xmit(0x31);//DCG2DELAY_US(100);//PULSE寄存器不配置
}


void spia_xmit(Uint8 a)
{SpiaRegs.SPITXBUF = (Uint16)(a<<8);//将8位数据传到串行发送缓冲
}






Cherry Zhou:

您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您,谢谢!

,

Cherry Zhou:

您好,

示波器上的 SCLK 位于200mV 的电压(y 轴)除法上,它太低了以致于无法超过输入的 V_IH (DVDD*0.8)。 请检查您的原理图或者 SPI 线路上的任何其他器件,看下是否可能尝试将引脚保持在低电平。 

此外请参阅该文章:: https://e2e.ti.com/blogs_/archives/b/precisionhub/posts/help-i-can-t-talk-to-my-data-converter-what-s-wrong,如有任何 SPI 相关问题, 可以从先提出与文章中相同的问题开始。 

赞(0)
未经允许不得转载:TI中文支持网 » DAC1282: 寄存器回读失败
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1