大家好、
我目前 正在努力将 NFC NT3H1101/NT3H1201)与 MSP430连接起来,所以我想在我的代码中接收16字节的数据,当我逐步运行代码时,我的代码在 while (UCB0CTL1和 UCTXSTT)停止; //确保发送了启动条件
(UCB0CTL1和 UCTXSTT); //确保发送起始条件
我已经查看了 TI msp430g2x55_uscib0_i2c_04.c 给出的示例、但仍然无法理解为什么它们通过该指令建立状态、因为 MSP430负责发送停止预测
while (UCB0CTL1 & UCTXSTP); //确保发送了 STOP 条件
在下面、您可以看到我的代码
#include /* * main.c *// ***全局变量的声明********* unsigned char * ptrRx; unsigned char RXData[10]; int main (void){ WDTCTL = WDTPW + WDTHOLD;//停止 WDT 以防止复位 BCSCTL1 = CALBC1_16MHz; //将 DCO 设置为16MHz DCOCTL = CALDCO_16MHz; I2C_init ( ); while (1){ I2C_READ_INTERRUPT_INIT (RXData、1); } 返回0; } //初始 化 void i2c_init (void){ //为 I2C 配置 P3.1 (SDA)和 P3.2 (SCL) P3SEL =BIT1|BIT2; P3SEL2 &=~(BIT1|BIT2); //确保在配置前 USCI_B0被复位 UCB0CTL1 |=UCSWRST; //slve 地址、带7位 UCB0CTL1 &=~UCSLA10; //将 MSP430设置为主模式 UCB0CTL0 |=UCMST|UCMODE_3|UCSYNC; //从 SMCLK 获取 USCI 时钟源 UCB0CTL1|=UCSSEL_3; //从 SMCLK、SMCLK=16MHz 拉取时将波特率寄存器配置为100kHz UCB0BR0 = 80;// UCBRx 的低字节 UCB0BR1 = 0; //写入从机地址 UCB0I2CSA = 0xAA; //清除软件复位,使 USCI 模块退出复位 UCB0CTL1 &=~UCSWRST; //启用 Rx 中断 IE2 |=UCB0RXIE; } //接收函数 void i2c_read_interrupt_init (unsigned char * rxbuf、unsigned char length){ unsigned char i; //接收器模式 UCB0CTL1 &=~UCTR; UCB0CTL1 |= UCTXSTT; // I2C 启动条件 while (UCB0CTL1 & UCTXSTT); //确保发送起始条件 _bis_SR_register (LPM0 | GIE); //输入 LPM0,带中断 for (i=0;i

