This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28335与AD7606的SPI通讯

最近一直弄28335通过SPI读取AD7606采集到的数据,但是采集到的一直不准确,不知是否应为读取的问题。AD7606有8个采集通道,通过SPI读取时输出的实际顺序应该为1,2,3,4,5,6,7,8,但是我的读出的结果顺序是7,8,1,2,3,4,5,6,输出的结果有些通道的不对,不知是否因为读出的时候相互影响的。我是通过修改的TI给出的spi FIFI回环测试的例程,把回环测试去掉,发送中断修改为普通的发送(因为我不需要发送,而SPI必须是发送的时候才能接收。),AD7606数据转换完成的时候开启发送,因为我要读取8个16位数据,所以之后发送8个数据。在接收中断里处理接收到的数据。

void AD7606_CfgSpiHard(void)//这是SPI配置
{
// Initialize SPI FIFO registers
SpiaRegs.***.bit.SPISWRESET=0; // Reset SPI

SpiaRegs.***.all=0x000F; //16-bit character,NO Loopback mode
SpiaRegs.***.all=0x0017; //Interrupt enabled, Master/Slave XMIT enabled

SpiaRegs.SPISTS.all=0x0000;

SpiaRegs.SPIBRR=0x02; // Baud rate

SpiaRegs.SPIFFTX.all=0xC040;

SpiaRegs.SPIFFRX.all=0x0028; // Set RX FIFO level to 8
SpiaRegs.SPIFFCT.all=0x00;
SpiaRegs.SPIPRI.all=0x0010;

SpiaRegs.***.bit.SPISWRESET=1; // Enable SPI

SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;

}

interrupt void xint_isr(void)//AD7606转换完成会产生一个外部中断,之后读取采集到的数据
{
while(SpiaRegs.SPIFFTX.bit.TXFFST!=0){}

SpiaRegs.***.bit.TALK=1;//启动发送
SpiaRegs.SPITXBUF=sdata; // Send data,因为我要接收8个数据,所以发送8次
SpiaRegs.SPITXBUF=sdata; // Send data
SpiaRegs.SPITXBUF=sdata; // Send data
SpiaRegs.SPITXBUF=sdata; // Send data
SpiaRegs.SPITXBUF=sdata; // Send data
SpiaRegs.SPITXBUF=sdata; // Send data
SpiaRegs.SPITXBUF=sdata; // Send data
SpiaRegs.SPITXBUF=sdata; // Send data

PieCtrlRegs.PIEACK.bit.ACK1 = 1;

}
interrupt void SPI_receive_deal(void)//接收FIFO满的时候会产生一个中断
{
AD7606_Scan();//读出采集到的数据,并处理
SpiaRegs.***.bit.TALK=0;//禁止发送
PieCtrlRegs.PIEACK.bit.ACK6=1;
SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1;// Clear SPI Interrupt flag
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1; // Clear Overflow flag
}

谢谢,实在是弄的头疼,不知道哪里出了问题