This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我 使用 EXP430FR2433开发套件,将 MSP430FR2433配置为从属设备,将 p1.2配置为 SDA,将 p1.3配置为 SCL,同时还启用 了 I2C 中断从主设备接收数据...... 但 I2C 中断甚至不会触发一次以接收数据。在将 SDA 和 SCL 引脚与主中继器连接时,MSP430 EVK 正在向下拉 SDA 线....ca,您可以为此提供解决方案。
在主端,我收到“I2C 总线已在使用”之类的错误
MSP430FR2433代码中的从属模式配置如下
/*------------- GPIO 配置------------------------------------------------------- *
无效 GPIO 配置()
{
GPIO 设置外围模块功能输入引脚(
GPIO 端口 P1,
MSP_I2C_SDA | MSP_I2C_SCL,
GPIO 主模块功能
);
PM5CTL0和=~LOCKLPM5;
}
/*------------- 唾液模式--------------------------- *
void set_i2c_Slive_mode ()
{
PARAM_i2c_SLAVE .slaveAddress =从属地址; //从属 地址= 0x44
PARAM_i2c_SLAVE .slaveAddressOffset = EUSCI_B_I2C_OFFSET0; // EUSCI_B_I2C_OW_ADDREST_OFFSET0 = 0x00
PARAM_i2c_SLAVE .slaveOwnAddressEnable = EUSCI_B_I2C_OW_ADDREST_ENABLE;// EUSCI_B_I2C_OW_ADDREST_ENABLE = UCOAEN
EUSCI_B_I2C_initSlave_寄存 器(EUSCI_B0_BASE,¶m_i2c_Slave);
//启用 I2C 模块以启动操作
EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);
EUSCI_B_I2C_ClearInterrupt (EUSCI_B0_BASE,
EUSCI_B_I2C_Transmit INTERRUPT0 |
EUSCI_B_I2C_receive_INTERRUPT0 |
EUSCI_B_I2C_CLOCK_LOW_TIMEOUT_INTERRUPT |
EUSCI_B_I2C_STOP_INTERRUPT
);
EUSCI_B_I2C_enableInterrupt (EUSCI_B0_BASE,
EUSCI_B_I2C_receive_INTERRUPT0 |
EUSCI_B_I2C_CLOCK_LOW_TIMEOUT_INTERRUPT |
EUSCI_B_I2C_STOP_INTERRUPT
);
UCB0CTLW1 |= UCCLTO_3;//(clk 低超时约34毫秒)
}
/*------------- 中断----------------------- *
#pragma vector=USCI_B0_vector
_interrupt void USCIB0_ISR(void)// ISR 内禁用的所有中断
{
}
您是否可以使用逻辑分析仪捕获波形? 就像莎拉
建议使用此演示代码 https://dev.ti.com/tirex/explore/node?node=ACgjYchX9i5RkshXLLcisA__IOGqZri__LATEST
您可以根据应用程序修改此演示代码。
没有我已经尝试过的代码,它没有工作,MSP430仍在拉低 SDA。您可以提供其他解决方案吗?
演示代码应该能够正常工作,我们已经多次验证。 主方是什么? 为什么要确认此问题与 MSP430相关,而不是主机设备相关?
不是,它不起作用,这里 CC2642R TI 控制器是主控制器,MSP4302433 TI 控制器是从控制器......我们正在向从控制器传输1字节数据,但是
在从端代码中,I2C 接口不调用.....
#pragma vector = USCI_B0_vector
__中断无效 USCI_B0_ISR (无效)
{
}
在主端,我们收到的错误是“I2C 从地址0x48未被确认!”......
主 I2C 配置代码:
/*创建 I2C 以供使用*/
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_100kHz;
I2C = I2C_OPEN (CONFIG_I2C_TMP,&i2cParams);
如果(i2c == NULL)为{
DISPLAY_printf (DISPLAY,0,0,“正在初始化 I2C 时出错\n”);
同时(1);
}
否则{
display_printf (display,0,0,"I2C initialized!\n");
}
/*通用 I2C 事务设置*/
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;
i2cTransaction.readbuf = rxBuffer;
i2cTransaction.ReadCount = 0;
i2cTransaction.slaveAddress = 0x48;
txBuffer[0]= 0x03;
While (1)(同时)
{
如果(I2C_TRANSFER (i2c,&i2cTransaction))为{
display_printf (display,0,0,"检测到从属地址");
}
否则{
i2cErrorHandler (&i2cTransaction,显示);
}
睡眠(1);
}
/*睡眠1秒*/
睡眠(1);
I2C_CLOSE (i2c);
从 I2C 配置代码:
使 initI2I()无效
{
UCB0CTLW0 = UCSWRST;//软件重置已启用
UCB0CTLW0 |= UCMODE_3 | UCSYNC;// I2C 模式,同步模式
UCB0I2COA0 =从_ADDR | UCOAEN;//自有地址并启用
UCB0CTLW0 &=~UCSWRST;//清除重置寄存器
UCB0IE |= UCRXIE + UCSTPIE;
}
你的方面肯定有一些问题。 您是否使用了没有任何代码更改的演示代码? 如果您更改了,请向我展示您更改的位置。
在进行测试时,请帮助捕获 SCL 和 SDA 波。
我没有更改从属代码上的任何内容...根据从属代码,我更改了从属地址,并在主代码中注册了地址。
但 下面提到的 I2C 中断调用不是在 MSP 端调用...
#pragma vector = USCI_B0_vector
__中断无效 USCI_B0_ISR (无效)
{
}
在主要功能中,我启用了 interupt,如下所示
__bis_SR_register (LPM0_bits + GIE);
同时,我还尝试了 MSP430控制器作为主控制器,同时按照以下函数编写了内容..... 它在“__bis_sr_register (LPM0_bits + GIE)”;“ 此行...”处阻塞
I2C_Mode I2C_Master_WriteReg (uint8_t dev_addr,uint8_t reg_addr,uint8_t *reg_data,uint8_t 计数)
{
/*初始化状态机*/
MasterMode = TX_REG_ADDRESS_MODE;
TransmitRegAddr = REG_ADDR;
//将寄存器数据复制到 TransmitBuffer
CopyArray(reg_data, TransmitBuffer, count);
TXByteCtr =计数;
RXByteCtr =0;
接收索引=0;
TransmitIndex = 0;
/*初始化从属地址和中断*/
UCB0I2CSA = dev_addr;
UCB0IFG &=~(UCTXIFG + UCRXIFG);//清除任何待处理中断
UCB0IE &=~UCRXIE;//禁用 RX 中断
UCB0IE |= UCTXIE;//启用 TX 中断
UCB0CTLW0 |= UCTR + UCTXSTT;// I2C TX,启动条件
__bis_SR_register (LPM0_bits + GIE);//输入 LPM0,带中断 --- >此处已阻止
返回主模式;
}
在传输下面提到的数据时,中断处理程序也没有调用...
#pragma vector = USCI_B0_vector
__中断无效 USCI_B0_ISR (无效)
{
}
大家好,我已经测试了演示代码,没有问题。 我使用 FR2355启动板作为主机,使用 FR2433启动板作为从属设备,效果很好。 我使用逻辑分析仪 Saleaa 捕获以下波形
你能在这里捕捉一些波浪吗?