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.
工具/软件:Code Composer Studio
你(们)好
我正在开发一个电路板、使用 MSP430G2553和 FDC 测量电容的变化。 我将硬件和以下代码进行构建。
我尝试读取器件 ID、但我只读取 ID 的第一个字节而不是第二个字节、如果我删除 LPM 指令代码不起作用、请告诉我在开发此代码时缺少了什么。
#include
内部 TXByteCtr;
unsigned char PRxData[3];
INT Rx = 0;
int i=0;
char REG_ID= 0xFE;
char itgAddress = 0x50;
void init_I2C (void);
void transmit (void);
接收无效(无效);
int main (空)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
P1SEL |= BIT6 + BIT7;//将 I2C 引脚分配给 USCI_B0
P1SEL2|= BIT6 + BIT7;//将 I2C 引脚分配给 USCI_B0
init_i2C();
while (1){
//传输过程
RX = 0;
TXByteCtr = 1;
Transmit ();
//接收过程
RX = 1;
receive();
}
}
///----------------------------------
// USCI_B0数据 ISR 用于移动从 I2C 从设备接收到的数据
//到 MSP430内存。 它的结构使其可用于接收
///----------------------------------
#pragma vector = USCIAB0TX_vector
_interrupt void USCIAB0TX_ISR (void)
{
if (rx = 1){//主机接收?
for (i=0;i<3;i++)
{
PRxData[i]= UCB0RXBUF;//获取 RX 数据
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//退出 LPM0
}
}
else{//主机发送
if (TXByteCtr)//检查 TX 字节计数器
{
UCB0TXBUF = REG_ID;//加载 TX 缓冲区
TXByteCtr -;//减量 TX 字节计数器
}
其他
{
UCB0CTL1 |= UCTXSTP;// I2C 停止条件
IFG2 &=~UCB0TXIFG;//清除 USCI_B0 TX 内部标志
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//退出 LPM0
}
}
}
void init_I2C (void){
UCB0CTL1 |= UCSWRST;//启用 SW 复位
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;// I2C 主器件、同步模式
UCB0CTL1 = UCSSEL_2 + UCSWRST;//使用 SMCLK、保持软件复位
UCB0BR0 = 12;// fSCL = SMCLK/12 =~100kHz
UCB0BR1 = 0;
UCB0I2CSA = itgAddress;//从器件地址为069h
UCB0CTL1 &=~UCSWRST;//清除 SW 复位,恢复运行
IE2 |= UCB0RXIE + UCB0TXIE;//启用 RX 和 TX 中断
}
void transmit (void){
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTL1 |= UCTR + UCTXSTT;// I2C TX、启动条件
_bis_SR_register (CPUOFF+GIE);//通过中断输入 LPM0
}
接收无效(无效)
{
while (UCB0CTL1 & UCTXSTP);//确保发送了 STOP 条件
UCB0CTL1 &=~UCTR;//清除 UCTR
UCB0CTL1 |= UCTXSTT;// I2C 启动条件
while (UCB0CTL1 & UCTXSTT);//起始条件是否发送?
UCB0CTL1 |= UCTXSTP;// I2C 停止条件
_bis_SR_register (CPUOFF+GIE);//通过中断输入 LPM0
}
此致
南迪什
您好、南迪什、
假设传输段正常工作并且硬件连接稳定、因为您能够读取第一个字节、则需要专门处理涉及接收多个字节的代码。 请参阅 msp430g2xx3_uscib0_i2c_[10&12].c 代码示例、了解有关如何正确设置此设置的更多信息。 您在请求第一个 ID 字节后、似乎会立即停止 I2C 序列。 您还应该在任何时候只启用 RXIE 或 TXIE。 以下是用于其他参考的 FDC1004EVM Energia 代码: www.ti.com/.../snvc187
此致、
Ryan