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.
您好!
我对 MSP430的使用比较陌生、而且也刚开始作为 C 语言编程人员。
我基于 MSP430F5510微控制器设计了定制板。 我已经成功启动了原型、并且能够初始化两个基于外部晶振的时钟(XT1为32、768 KHz、XT2为24.0000 MHz)。 当我启动这些振荡器时、代码在每种情况下返回"成功"。 我能够顺利操作 I/O 引脚。
以下是初始化时钟的代码:
void initclks (void){
//初始化时钟。
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P5、(GPIO_PIN4 + GPIO_PIN5));
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P5、(GPIO_PIN3 + GPIO_PIN2));
UCS_setExternalClockSource (32768、24000000);
blnStatus = UCS_TurnOnLFXT1WithTimeout (UCS_XT1_DRIVE_0、UCS_XCAP_3、10);
blnStatus = UCS_TurnOnXT2WithTimeout (UCS_XT1_DRIVE_3、10);
UCS_initClockSignal (UCS_MCLK、UCS_XT2CLK_select、UCS_Clock_divider);
UCS_initClockSignal (UCS_SMCLK、UCS_XT2CLK_select、UCS_Clock_divider);
UCS_initClockSignal (UCS_ACLK、UCS_XT1CLK_select、UCS_Clock_divider);
}
但是、我现在正在尝试与从器件地址为0x45的板载外设芯片建立 I2C 通信。 我阅读了一份名为"使用 I2C 主设备用法的示例"的文档。 这是一个非常有用的文档、展示了如何通过具有 DMA 和不具有 DMA 的 I2C 发送和接收数据。 我尝试在我的项目中实现此代码。 但是、这个代码似乎不适用于 MSP430F5x 系列。
然后、我尝试遵循 DriverLib 文档中的示例代码。
我有一个子例程尝试初始化 I2C 模块:
void initi2c (void){
//初始化 I2C 外设。
USCI_B_I2C_initMasterParam param ={0};
param.selectClockSource = USCI_B_I2C_CLOCKSOURCE_SMCLK;
param.i2cClk = UCS_getSMCLK ();
param.datarate = USCI_B_I2C_SET_DATA_RATE_400KBPS;
USCI_B_I2C_initMaster (USCI_B0_BASE、¶m);
}
然后、我尝试通过调用以下子例程向 I2C 外设发送一个字节:
void set_tw8833_data (uint16_t i2c_add、uint8_t i2c_data){
//设置 TW8833的基址。
USCI_B_I2C_setSlaveAddress (USCI_B0_BASE、0x45);
USCI_B_I2C_setMode (USCI_B0_BASE、USCI_B_I2C_Transmit 模式);
USCI_B_I2C_ENABLE (USCI_B0_BASE);
USCI_B_I2C_clearInterrupt (USCI_B0_BASE、USCI_B_I2C_STOP_INTERRUPT + USCI_B_I2C_Transmit _INTERRUPT);
while (1)
{
USCI_B_I2C_masterSendSingleByte (i2c_add、i2c_data);
while (USCI_B_I2C_BUS_BUS_BUSY);
}
}
当我监控 I2C 数据和时钟线路时。 。 。 不会发生任何情况。
有人可以推荐介绍如何使用 MSP430F5510与 I2C 外设建立通信的文档吗?
感谢你的帮助、
最大
非常感谢您推荐代码示例。 我成功使用 USCI_B_i2c_ex2_masterTxMultiple 代码的修改版本将多个字节传输到我的从器件。 我已经通过使用逻辑分析仪检查 I2C 数据和 I2C 时钟线路来验证了正常运行。 现在、我确信我的 I2C 外设已正确初始化。 我现在尝试从 I2C 外设读取数据。 我已通读 USCI_B_i2c_masterRxSingle 代码。 然而、这个代码似乎只读取已经被写入 MSP430F5510上内部接收寄存器的一个字节的信息。 我看不到我可以在外设中设置寄存器地址的位置、我想从中进行读取。 例如、我的器件的从器件地址为0x45。 我知道如何使用 USCI_B_I2C_setSlaveAddress 方法设置从器件地址。 我现在希望接收存储在地址为0x37的寄存器中的数据。 我在代码中的哪个位置设置0x37地址?
谢谢、
最大