主题中讨论的其他部件: MSP430WARE
工具/软件:Code Composer Studio
你好,
我将浏览MSP430Ware驱动程序库示例,以了解I2C如何与MSP430F5529启动板配合使用。 我已将27kOhm上拉电阻连接到引脚3.0 和3.1 (UCB.S.和UCB0SDA)。 但是,当我运行下面显示的代码时:
/*--版权--,BSD
*版权所有(c) 2016,Texas Instruments Incorporated
*保留所有权利。
*
**
允许以源代码和二进制格式重新发布和使用,无论是否进行*修改,只要
满足以下条件*:
*
****重新发布源代码必须保留上述版权
*声明,此条件列表和以下免责声明。
*
***以二进制格式重新分发时,必须在
随分发提供的*文档和/或其他材料中复制上述版权*声明,此条件列表和以下免责声明。
*
***
未经事先书面许可,不得使用德州仪器(TI)公司的名称或*其贡献者的名称来支持或促销由本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*,
不提供任何明示或暗示的担保,包括但不限于*对适销性和特定*用途适用性的暗示担保。 在任何情况下,版权所有者或
*贡献者均不对任何直接,间接,附带,特殊,
*示范, 或后果性损害(包括但不限于
*购买替代商品或服务;使用,数据或利润损失;
(*或业务中断),但根据任何责任理论
,*无论是合同,严格责任还是侵权行为(包括疏忽或
*其他),均因使用本软件而导致*
,即使已被告知此类损害的可能性。
*--/copyright--*/
#include "driverlib.h"//*********************************************************************************************************
//! 此示例显示如何将I2C模块配置为
//! 中断模式下的单字节传输。 从属
设备的地址//! 与主中继器通信的模块也在本示例中设置。
//!
//! 本示例使用以下外围设备和I/O信号。 你必须
//! 查看这些内容并根据需要对您自己的主板进行更改:
//! - I2C外设
//! - GPIO端口外设(用于I2C引脚)
//! - SCL2
//! - SDA
//!
//! 此示例使用以下中断处理程序。 要使用此示例
//! 在您自己的应用程序中,您必须将这些中断处理程序添加到
您的//! 引导程序表。
//! - USI_B0_Vector。
//!
////*************************************************************************************************
//*************************************************************************************************
////
设置从属模块的地址。 这是以
///以下格式发送的7位地址:
//[A6:A5:A4:A3:A2:A1:A0:RS]
////
第一个字节"RS"位置中的零表示主//
向所选从属设备传输(发送)数据,在此位置
的一个//表示主设备从从属设备接收数据。
////*************************************************************************************************
#define slaver_address 0x62 //LIDAR Lite v3从属地址
uint8_t传输数据;
void main(void){
//停止WDT
WDT_A_HOLD (WDT_A_BASE);
//将I2C引脚分配给USI_B0
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口P3,
GPIO _PIN0 + GPIO _PIN1
);
//初始化传输数据包
传输数据= 0x00;
//初始化主中继器
USI_B_I2C_initMasterParam ={0};
param.selectClockSource = USI_B_I2C_CLOCKSOURCE_SMCLK;
PARAM.i2cClk = UCS_getSMCLK();
Param.datarate = USI_B_I2C_SET_DATA_RATE_400KBPS;
USI_B_I2C_INITMaster (USI_B0_BASE,¶m);
//指定从属地址
USI_B_I2C_setSlaveAddress (USI_B0_BASE,
Slaver_address
);
//在传输模式下设置
USI_B_I2C_setMode (USI_B0_BASE,
USI_B_I2C_Transmit_mode
);
//启用I2C模块以启动操作
USI_B_I2C_ENABLE (USI_B0_BASE);
//启用TX中断
USI_B_I2C_clearInterrupt (USI_B0_BASE,
USI_B_I2C_Transmit_Interrupt
);
USI_B_I2C_enableInterrupt (USI_B0_BASE,
USI_B_I2C_Transmit_Interrupt
);
同时(1)
{
//发送单字节数据。
USI_B_I2C_masterSendSingleByte (USI_B0_BASE,
传输数据
);
//延迟到传输完成
while (USI_B_I2C_isBusy (USI_B0_BASE))
{
;}
//每个事务之间的延迟
__DELAY周期(50);
//增量传输数据计数
器}
}//**************************************************************************************************************
//
//这是USI_B0中断向量服务例程。
////************************************************************************************************
#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_ICC__)
#pragma vector=USI_B0_vector
__interrupt
#Elif defined(__Gnu___)
__attribute__((interrupt (USI_B0_vector))
#endif
void USI_B0_ISR(vector))
{
SWITCH(__EIV_IN_RANGE(UCB0IV,12))
{
//矢量12:传输缓冲区为空- TXIF
案例USI_I2C_UCTXIFG:
{
__no_operation();
中断;
}
默认值:break;
}
}
然后,它在USSCI_b_i2c.c中的以下代码中挂起:
//传送中断标志轮询。 while (!(HWREG8 (baseAddress + OFS_UCBxIFG)& UCTXIFG)) { ;}
我读过其他线程,但它们不能帮助我解决问题。 当我检查示波器上的针脚时,它们在3.3V电压下一直保持高。 它们永远不会降低。 我尝试了其他示例,出现了相同的问题,代码将在USSCI_b_i2c.c中挂起
我在上面的代码中唯一更改的是从地址0x48到0x62,因为这是具有内部3kOhm电阻器的LIDAR Lite v3传感器的从地址。 如果能够从传感器获取读数,或者甚至让I2C发出一个简单的开始字节,我们将非常感激。
