Thread 中讨论的其他器件:、 MSP-FET
您好!
我将 RF430FRL152H 用作具有单个从器件(MAX5395)的 I2C 主器件。 我遇到的问题是、I2C 写入将在 UCB0IFG 中无限等待要设置的中断标志、仅在翻转 VDDSW 之后(通过从 VDDSW 物理断开 VDDB、或通过将器 件暴露在射频字段并导致 BS_VR_VBN 发生更改)。
我的 I2C 初始化代码:
//将引脚设置为 I2C (请参阅数据表第33-34页) // SDA P1DIR |= BIT0; P1SEL0 |= BIT0; P1SEL1 &=~BIT0; // SCL P1DIR |= BIT1; P1SEL0 |= BIT1; P1SEL1 &=~BIT1; //初始化 USCI UCB0CTL1 |= UCSWRST; //软件复位被启用 UCB0CTLW0 |= UCMODE_3 + UCMST + UCSYNC + UCTR; // I2C 模式、主模式、同步、发送器 UCB0CTLW0 |= UCSSEL_2; //选择2MHz 的 SMCLK UCB0CTLW1 |= UCASTP_1 + UCGLIT_0; //自动停止生成,抗尖峰脉冲时间 UCB0BRW = 40; // 2MHz/40=50kHz UCB0CTL1 &=~UCSWRST; //退出复位模式
我的 I2C 写入代码:
UCB0CTL1 |= UCSWRST; //软件复位被启用 UCB0I2CSA = MAX5395_I2C_ADDR; // I2C 从地址 UCB0CTLW1 = UCASTP_1; UCB0TBCNT = 0x0002; UCB0CTL1 &=~UCSWRST; //使 eUSCI 退出复位状态 UCB0CTL1 |= UCTXSTT + UCTR; //启动 i2c 写入操作 while (!(UCB0IFG & UCTXIFG0));//发送 I2C 地址 UCB0TXBUF =命令; //发送命令 while (!(UCB0IFG & UCTXIFG0));//等待命令被发出 UCB0TXBUF = txData; //发送 LSB while (!(UCB0IFG & UCBCNTIFG));//等待它被发送 UCB0CTL1 |= UCTXSTP; //发送停止条件 while (!(UCB0IFG & UCSTPIFG));//等待它被接收 UCB0CTL1 |= UCSWRST; //将 eUSCI 置于复位模式
我的主循环设置为在循环中重复运行初始化和编写代码。 它可以工作、直到我翻转 VDDSW、之后它在写入 I2C 地址后一直停止、如下面的逻辑分析仪捕获中所示。 但我知道器件会保留电源、因为其他功能正常工作(例如、如果我禁用 I2C 代码、程序会继续执行... 另一个引脚上的 PWM 输出仍然有效... 等)。
请告诉我要解决的任何建议。
谢谢、
Jason