[求助] TI的ads7886读取数值全是0

kaka0202   2012-9-6 10:41 楼主
硬件SPI接口
读出的值全部是0
什么问题呢 附SPI配置与ads7886驱动
void init_spi()
{
P3SEL|=0x0C;
P3DIR|=0x01;
//P3DIR&=~BIT2;
P3OUT|=BIT0+BIT3;
ME1 |= USPIE0;                            // Enable USART0 SPI
UCTL0 |= CHAR + SYNC + MM;                // 8-bit SPI Master **SWRST**
UTCTL0 = SSEL0+SSEL1 + STC;       // Inv. delayed, SMCLK, 3-pin
//U0TCTL |= CKPH;                 //UCLK延时半个周期作为SPI时钟,时钟低电平为无效信号,上升沿锁存数据
// U0TCTL|= CKPL;
  U0BR0 = 0x2;                              // ACLK/2 for baud rate
  U0BR1 = 0x0;                              // ACLK/2 for baud rate
  UMCTL0 = 0x0;                             // Clear modulation
  UCTL0 &= ~SWRST;                          // Initialize USART state machine
}


unsigned int readADC()
{
unsigned int data;
ADC_CS_LOW;
_NOP();
_NOP();
ADC_CLK_HIGH;
U0TXBUF=0x00;
while(!(IFG1&UTXIFG0));
while(!(IFG1&URXIFG0));
IFG1&=~URXIFG0;
data=U0RXBUF;
U0TXBUF=0x00;
while(!(IFG1&UTXIFG0));
while(!(IFG1&URXIFG0));
IFG1&=~URXIFG0;
data=(data<<8)|U0RXBUF;
ADC_CLK_HIGH;
_NOP();
_NOP();
ADC_CS_HIGH;
return data;
}

回复评论 (2)

试试看这样的:

unsigned int readADC()

{

unsigned int data;

ADC_CS_LOW;

_NOP();

_NOP();

ADC_CLK_HIGH;


while(!(IFG1&UTXIFG0));

U0TXBUF=0x00;

IFG1&=~UTXIFG0;

while(!(IFG1&URXIFG0));

IFG1&=~URXIFG0;

data=U0RXBUF;


while(!(IFG1&UTXIFG0));

U0TXBUF=0x00;

IFG1&=~UTXIFG0;
  
while(!(IFG1&URXIFG0));

IFG1&=~URXIFG0;

data=(data<<8)|U0RXBUF;


ADC_CLK_HIGH;

_NOP();

_NOP();

ADC_CS_HIGH;

return data;

}


前提是你的这些
IFG1、
UTXIFG0、
URXIFG0是匹配的,我不知道你使用的是哪个系列的片子。
点赞  2012-9-6 12:32
http://shop69542095.taobao.com/供应芯片
点赞  2012-9-6 15:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复