TI的ads7886读取数值全是0

2019-03-24 13:30发布

硬件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条回答
lyzhangxiang
2019-03-24 18:15
试试看这样的:

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是匹配的,我不知道你使用的是哪个系列的片子。

一周热门 更多>

相关问题

    相关文章