您好!
在过去两天里、我一直在尝试将2个字节的数据传输到 ADXL345。 但我仍然停留在同一个位置。我在这里共享了我的整个代码。 仔细研究、让我知道您的建议
#include <msp430.h>
#include <stdio.h>
#define MAX30100_DEVICE 0x57
/**
* main.c
*/
int i=0;
char Data_In=0;
char packet[]={0x2D, 0x08,0x00};
int idx_cnt=0;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
//---Setup B0 for I2C
UCB2CTLW0 |= UCSWRST; // put in SW RST
UCB2CTLW0 |= UCSSEL_3 ; // Choose SMCLK
UCB2BRW = 10; // set prescalar to 100
UCB2CTLW0 |= UCMODE_3; // Put into I2C
UCB2CTLW0 |= UCMST; // Set as master
UCB2I2CSA = MAX30100_DEVICE; //Set slave address 0x57
UCB2TBCNT =sizeof(packet); // Count = 1 byte
UCB2CTLW1 |= UCASTP_2; //auto STOP mode
//--setup ports
P7SEL1 &= ~BIT1; //P7.1 = SCL
P7SEL0 |= BIT1;
P7SEL1 &= ~BIT0; //P7.0 = SDA
P7SEL0 |= BIT0;
PM5CTL0 &= ~LOCKLPM5; // Turn on I/O
UCB2CTLW0 &= ~UCSWRST; //take out of in SW RST
//-----Enable IRQ
UCB2IE |=UCRXIE0 ; // local enable for RX0
UCB2IE |=UCTXIE0 ; //local enable for TX0
__enable_interrupt();
while(1)
{
//Transmit reg addr with Write message
UCB2CTLW0 |=UCTR; //Put into TX mode
UCB2CTLW0 |=UCTXSTT; //Gen START
while((UCB2IFG & UCTXIFG0) == 0)
{
printf("Stop on 1st while\n");
}
UCB2IFG &= ~UCSTPIFG; //Clear the STOP Flag
UCB2CTLW0 &=~UCTR; //Put into RX Mode
UCB2CTLW0 |=UCTXSTT; //Gen START
while((UCB2IFG & UCSTPIFG) == 0)
{
printf("Stop on second while\n");
}
UCB2IFG &= ~UCSTPIFG; //Clear STOP FLAG
}
}
//----------------------------------------------------------
// ISR
//-----------------------------------------------------------
#pragma vector = EUSCI_B2_VECTOR
__interrupt void EUSCI_B2_I2C_ISR(void)
{
switch(UCB2IV)
{
case 0x16: //ID 16:RXIFG0
Data_In=UCB2RXBUF;
printf("%d",Data_In);
break;
case 0x18: //ID 16:TXIFG0
while(idx_cnt<=sizeof(packet-1))
{
UCB2TXBUF = packet[idx_cnt];
printf("case 2");
idx_cnt++;
}
break;
default:
break;
}
}