Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

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

$
0
0

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

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

电路图如下:

程序如下:

void main(void)

{     

    ...

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

    /*********初始化SPI0ADXL345,读取设备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读取时数据时,地址的MSB1

   

    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;

}


Viewing all articles
Browse latest Browse all 3634

Trending Articles