Other Parts Discussed in Thread:ADS114S08
最近在调ADS114S08,芯片用的DSP28335,,两个器件的用SPI通信,DSP28335作主机,ADS114S08作从机,根据手册上先发reset指令,然后用RREG指令去读STATUS寄存器值,但是读出来的值一直为0x00(应该是0x80),观察了SPIDAT的值,可以看出数据发出去了(测试的时候发送前0x21FF,发送完变成0xFF),换着读另外的寄存器,结果也一样。查了ADS114S08的供电以及与DSP28335DE SPI连接都是好的,请教社区的各位大神,这是什么原因?如果有例程麻烦提供一下,谢谢各位了
代码如下:
spi configuration:
SpiaRegs.***.bit.SPISWRESET = 0;
SpiaRegs.***.bit.CLK_PHASE = 1; //CPHA = 1
SpiaRegs.***.bit.MASTER_SLAVE = 1;
SpiaRegs.***.bit.OVERRUNINTENA = 0;
SpiaRegs.***.bit.SPIINTENA = 0;
SpiaRegs.***.bit.TALK = 1;
SpiaRegs.SPIBRR =0x0004; // LSPCLK = SYSCLKOUT/10 15Mhz 波特率 15Mhz/5=3Mhz
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.***.bit.CLKPOLARITY = 0; // CPOL = 0
SpiaRegs.***.bit.SPILBK = 0;
SpiaRegs.***.bit.*** = 7;
SpiaRegs.SPIPRI.bit.FREE = 1; SpiaRegs.***.bit.SPISWRESET = 1;
void main(void)
{
InitSysCtrl();
InitSpiaGpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
//spi_fifo_init(); // Initialize the Spi FIFO
spi_init(); // init SPI
adres_H = 0;
adres_L = 0;
adres = 0;
rdata = 0;
sdata = 0;
CS_L;
DELAY_US(1);
rdata = spi_8bit(0x2000); // reset command
DELAY_US(2000); // 4096*tclk
CS_H;
DELAY_US(1);
CS_L;
DELAY_US(1);
rdata = spi_8bit(0x2100);
DELAY_US(1);
rdata = spi_8bit(0x0000);
DELAY_US(1);
rdata = spi_8bit(0x0000);
DELAY_US(1);
CS_H;
Uint16 spi_8bit(Uint16 a)
{
Uint16 data;
SpiaRegs.SPITXBUF=a;
while(SpiaRegs.SPISTS.bit.INT_FLAG != 1)
{
}
data = SpiaRegs.SPIRXBUF; return data;
}
原理图如下:
Amy Luo:
您好,
ADS114S08 和DSP28335供电电压是多少,检查下ADS114S08 和DSP28335的SPI电平是否兼容呢
原理图没有显示,需要上传图片文件才能显示。
,
Amy Luo:
TI提供了ADS1x4S08 Firmware Example Code,可以在下面链接申请:
www.ti.com.cn/…/toolssoftware
,
Kaiqing Li:
,
Kaiqing Li:
DSP28335 内核1.8v 外设3.3vADS114S08 的数字IO口供电为3.3(IOVDD和DGND) 感觉是匹配的,原理图上传了
,
Amy Luo:
用示波器看下SPI信号的读写时序图是否是正确的
原理图可参考ADS1x4S08 EVM User's Guide中原理图:www.ti.com.cn/…/sbau272a.pdf
,
DAI SEN:
您好,请问您的问题解决了吗?