主题中讨论的其他部件:MSP-EXP430F5529LP, MSP430G2553
工具/软件:Code Composer Studio
我正在使用以下示例代码: MSP430F55xx_uscib0_i2c_09.c
此示例代码将在i2c总线端口3.1 和端口3.2 上传输一些数据,但我看不到线路上的任何数据,也看不到时钟信号。 使用带Code Composer 7.0 的MSP-EXP430F5529LP Launchpad开发套件
该代码应该在没有任何修改的情况下工作,因此我不确定为什么在PIN上看不到任何内容。
以下是从示例中直接获得的完整代码... 我所做的只是在引脚上放置一个逻辑分析器,并应该看到什么...任何东西。 发生什么事了?
//************************************************************************************************
// MSP430F552x演示- USI_B0 I2C主TX多字节,用于MSP430从属设备
//
// 说明:此演示通过I2C总线连接两个MSP430。 主控
// 传输至从属设备。 这是主代码。 这是一种非常谨慎的方式
// 传输一组数据并演示如何实现I2C
// 使用USI_B0 TX中断发送多个字节的主发送器。
// ACLK = N/A,MCLK = SMCLK = BRCLK =默认DCO =~1.045MHz
//
//***与“MSP430F55xx_uscib0_i2c_09.c”***一起使用
//
// /|\/|\
// MSP430F5529 10k 10k MSP430F5529
// 从 | || 主
//----------- | | --------------------
// ||Xin 3.0 –UCB0SDA|<-|---+->|WFP–3.0 –UCB0SDA|-
// | | || | |
// -|XOUT | | | XOUT|-
// | WFP 3.1 / UCB.S.|<-++--- >|WFP 3.1 / UCB.S. |
// | | || |
//
// Bhargavi Nisarga
// 德州仪器(TI)
// 2009年4月
// 使用CCSv4和IAR嵌入式工作台版本:4.21 构建
//************************************************************************************************
#include <MSP4S.h>
unsigned char *PTxData; //指向TX数据的指针
未签名的char TXByteCtr;
const unsigned char TxData[]= //要传输的数据表
{
0x11,
0x22,
0x33,
0x44,
0x55
};
内部主(无效)
{
无符号int I;
WDTCTL = WDTPW + WDTHOLD; //停止WDT
P3SEL || 0x03; //将I2C引脚分配给USIC_B0
UCB0CTL1 || UCSWRST; //启用软件重置
UCB0CTL0 = UCMST + UCMODE_3 + UCSNC; // I2C主控,同步模式
UCB0CTL1 = UCSSEL_2 + UCSWRST; //使用SMCLK,保持SW重置
UCB0BR0 = 12; // fSCL = SMCLK/12 =~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x48; //从属地址为048h
UCB0CTL1 &=~UCSWRST; //清除软件重置,恢复操作
UCB0IE |= UCTXIE; //启用TX中断
同时(1)
{
for (i=0;i<10;i++); //事务之间需要延迟
PTxData =(unsigned char *) TxData; // TX数组起始地址
//在此处放置断点以查看每个断点
//传输操作。
TXByteCtr = TxData的大小; //加载TX字节计数器
UCB0CTL1 || UCTR + UCTXSTT; // I2C TX,启动条件
__bis_sr_register(LPM0_bits + GIE); //输入LPM0,启用中断
__no_operation(); //保留在LPM0中,直到所有数据
//已发送
while (UCB0CTL1和UCTXSTP); //确保已发送停止条件
}
}
//------------------
// USCIAB0TX_ISR的结构可用于传输任何
//预加载具有字节计数的TXByteCtr的字节数。 另外,TXData
//指向要传输的下一个字节。
//------------------
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector = USI_B0_vector
__interrupt void USI_B0_ISR(void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (USI_B0_vector)) USI_B0_ISR (void)
#否则
错误编译器不受支持!
#endif
{
SWITCH(__EIV_IN_RANGE(UCB0IV,12))
{
案例 0:中断; //矢量 0:无中断
案例 2:中断; //矢量 2:ALIFG
案例 4:中断; //矢量 4:NACKIFG
案例 6:中断; //矢量 6:STTIFG
案例 8:中断; //矢量 8:STPIFG
案例10:中断; //矢量10:RXIFG
案例12: //矢量12:TXIFG
IF (TXByteCtr) //检查TX字节计数器
{
UCB0TXBUF =* PTxData+; //加载TX缓冲区
TXByteCtr -; // Decrement TX字节计数器
}
否则
{
UCB0CTL1 || UCTXSTP; // I2C停止条件
UCB0IFG &=~UCTXIFG; //清除USI_B0 TX int标志
__BIC_SR_REGISTER_ON_EXIT (LPM0_bits);//退出LPM0
}
默认值:中断;
}
}