工具/软件:Code Composer Studio
HII..这是harikrishna paritala。
我对I2S协议的使用不熟悉,并且正在将我的MCU (msp430fr5969)与加速度计连接...因此,当我读取加速度计的dev_id时,未获得值...通过下面的代码,我曾使用i2c协议读取值,而不使用interupts ...任何人请帮助读取值和 如果可能,请更正我的代码并添加我忘记的说明...
#include <MSP4S.h>
RXCHAR数据;
#define REG_ADD 0x00
#define slaver_Add 0x3B
void clock_init();
void Init_I2I();
char recieve(unsigned char reg_addr);
内部主(无效)
{
易失性字符REG_VALUE;
挥发字符值;
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM2;
P1OUT &=~BIT0;//透明的WFP 1.0 输出锁存器
P1DIR || BIT0;//用于LED
P1SEL1 || BIT6 | BIT7;// I2C引脚
__bis_sr_register (GIE);
Clock_init();
init_I2C ();
__DELAY周期(1万);
while (I2C_NOTREATE());
__DELAY周期(1000);
REG_Value=接收(REG_ADD);
IF (REG_VALUE!= 0x00)
Value=reg_value;
返回0;
}
void Init_I2I()
{
UCB0CTLW0 |= UCSWRST;//已启用软件重置
UCB0CTLW0 |= UCMODE_3| UCMST | UCSYNC;// I2C模式,主模式,同步
UCB0CTLW1 |= UCASTP_2;//生成自动停止
UCB0CTLW0|=UCSSEL_2;//到达UCB0TBCNT之后
UCB0BR0 = 0x0010;//波特率= SMCLK / 10
UCB0BR1=0;
//UCB0TBCNT = 0x0005;//要接收的字节数
UCB0I2CSA = SLAND_ADD;//从地址
UCB0CTL1 &=~UCSWRST;
}
int I2C_NOTREATE()
{
IF (UCB0STATW&UCBBUSY)
返回1;
否则
返回0;
}
char recieve(unsigned char reg_addr)
{
字符recieve_byte;
while (UCB0CTLW0&UCTXSTP);//确保已发送停止条件
UCB0CTLW0|=UCTXSTT|UCTR;//I2C起始条件带有用于传输的uctr标志
while (UCB0IFG&UCTXIFG0);
UCB0TXBUF=REG_ADDR;
//在txbuf中写入寄存器地址
__DELAY周期(1000);
while (UCB0IFG&UCTXIFG0);//等待txbuf为空并传输
UCB0CTLW0&=~UCTR;//清除接收的传输标志
UCB0CTLW0|=UCTXSTT|UCTXNACK;//I2C起始条件,带有一个字节的nack读//类似重新发送...
while (UCB0CTLW0&UCTXSTT);//start conditon sent?rxbuf full
recieve_byte=UCB0RXBUF;
UCB0CTLW0|=UCTXSTP;//I2C停止条件
返回recieve_byte;
}
void clock_init()
{
CSCTL0_H = CSOKEY >> 8;//解锁CS寄存器
CSCTL1 = DCOFSEL_0;//将DCO设置为1MHz
CSCTL2 =拉美经济体系_ LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;
CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1;//设置所有分隔线
CSCTL0_H = 0;
}