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

调试MSP430F149与ADXL345 SPI通信,程序停留无法继续运行

调试MSP430F149与ADXL345 SPI通信时,大部分情况下(90%以上的几率),程序停留在语句“while (!(IFG1 & URXIFG0)); ”无法继续运行;

当把电路图中串联的51Ω换成0Ω,无法继续运行的情况能少一些(大概50%吧),不知道什么原因

电路图如下:

程序如下:

void main(void)

{     

    …

    init_IO();                                // 初始化IO端口

    /*********初始化SPI0、ADXL345,读取设备ID*******/

    InitSPI0();

    delay_1ms(2);

    ADXL345_Init();

    RX_ad345ID = SPIByteRead(0x00);           // 读取设备ID

    …

    while(1)

    { }

}

/*******************************************

函数名称:InitSPI0

功    能:初始化SPI0模块

参    数:无

返回值  :无

********************************************/

void InitSPI0(void)

{   

    U0CTL |= CHAR + SYNC + MM;     // 8-bit, SPI, Master

    U0TCTL = CKPL + SSEL1 + SSEL0;    // Polarity, SMCLK, 4-wire

    U0BR0 = 0x02;                  // SPICLK = SMCLK/2

    U0BR1 = 0x00;

    U0MCTL = 0x00;                 // SPI模式时不使用,推荐设置成000

    ME1 |= USPIE0;                 // Module enable

    U0CTL &= ~SWRST;               // SPI enable

}

 

/**************************************************************

函数名称:init_IO

功    能:初始化3维振动记录仪的所有的IO端口,包括用到的和没用的

参    数:无

返回值  :无

***************************************************************/

void init_IO()

    …

    P3SEL |= BIT1 + BIT2 + BIT3;  // P3.0,1,2,3 = SPI0 STE/SIMO0/SOMI0/UCLK

    P3DIR &= ~BIT2;               // P3.2,SPI0 SOMI0,input

    P3OUT |= BIT0;                // P3.0 = STE,置高  

    …

}

/**************************************************************

函数名称:void ADXL345_Init(void)

功    能:ADXL345初始化程序

参    数:无

返回值  :无

***************************************************************/

void ADXL345_Init()

{

    SPIByteWrite(XL345_POWER_CTL,0x00);

    …  

    SPIByteWrite(XL345_POWER_CTL,0x08);        // 测量为置1,设置为测量模式

}

/**************************************************************

函数名称:unsigned char SPIByteRead(unsigned char addr)

功    能:SPI模块读取一个字节的数据

参    数:unsigned char spi_data

返 回 值:无

***************************************************************/

unsigned char SPIByteRead(unsigned char addr)

{

    unsigned char tempdata,a;

    addr |= 0x80;               // ADXL345读取时数据时,地址的MSB是1

   

    P3OUT &= ~BIT0;             // 片选STE0置低

    while (!(IFG1 & UTXIFG0));  // USART0 TX buffer ready?

    TXBUF0 = addr;

   while (!(IFG1 & URXIFG0));  //等待发送结束       ——->程序停留在此语句,无法继续运行

    a = RXBUF0;                 // 复位IFG1->URXIFG0

    while (!(IFG1 & UTXIFG0));  // USART0 TX buffer ready?

    TXBUF0 = 0xFF;

    while (!(IFG1 & URXIFG0));  // 等待发送结束

    tempdata = RXBUF0;

    P3OUT |= BIT0;              // 片选STE0置高

    return tempdata;

}

灰小子:

你的pcb上,spi走线是不是比较长啊?

你加上拉电阻试试。51R电阻一般不需要加。

user1813602:

回复 灰小子:

你好,谢谢你的回答。我试过上拉电阻,效果不怎么理想,还是会出现同样的状况。

赞(0)
未经允许不得转载:TI中文支持网 » 调试MSP430F149与ADXL345 SPI通信,程序停留无法继续运行
分享到: 更多 (0)