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.
您好!
我目前正在尝试将 MSP430FR5969配置为从 Si1133读取。 通信将通过 I2C 完成。
我的困难在于此接口的正确配置顺序。 根据我所阅读的内容(通过其他讨论和数据表)、我应该能够使用 eusci_b_i2c 和 drivelib 软件包。
此线程中的用户 或多或少都在尝试完成相同的任务。
这就是我从主端看到该过程工作的方式:
"传输数据"部分 是我要提问的内容。
根据 Si1133数据表、简单的写入序列包含以下顺序的命令(来自主器件):
现在、eusci_b_i2c 库提供的函数可在一个调用中发送开始、数据、然后发送停止。 但我不认为这是我在这里要做的事情。
作为起点、我只想发送从器件地址、然后读取 ACK。 ACK 确切发送在哪里? 我想这是一个旗帜,只是不确定是什么。
也许使用 getInterruptStatus 是一种检查方法?
此外、是否可以在调试期间检查是否收到 ACK?
请随时澄清。 在背景下、我是一名学生、试图学习裸机 C
谢谢你
您好 Rudy、
感谢您提供详细的帖子和背景信息。
为了确定从器件是否未应答发送的地址、未应答中断标志 UCNACKIFG 被置位、可在调试期间进行检查。 主机必须以停止条件或重复起始条件做出反应。 在主接收器模式下使用 MSP430时、 请参阅用户指南中的第26.3.5.2.2节和图26-13、了解更多详细信息。
对于 ACK 、您可以将其视为标志。 由于 I2C 是一个开漏协议、从器件将下拉 SDA 来提醒主器件它已经确认了地址或数据。
对于裸机 C 代码示例、请查看 msp430fr59xx_euscib0_i2c_10.c 在 USCI_B0_ISR 中、您应该能够在"case USCI_I2C_UCNACKIFG"下的第124行上放置一个断点。 如果从未达到此断点、则从器件应正确确认。
msp430fr59xx_euscib0_i2c_10.c
/*-版权所有-、BSD_EX *版权所有(c) 2012、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 * *** * * MSP430代码示例免责声明 * * MSP430代码示例是自包含的低级程序 ,通常*以 高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认 值*寄存器值和时钟配置等设置、 并且在组合多个示例中的代码时必须*小心以避免潜在的副作用 *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware *了解外设配置的 API 函数库方法。 * *--/版权--* //********* // MSP430FR59xx 演示- eUSCI_B0 I2C 主设备 RX 来自 MSP430从设备的多个字节 // 说明:此演示通过 I2C 总线连接两个 MSP430。 主 器件//从从器件读取5个字节。 这是主代码。 从器件 //发送器的数据从0开始,并随每次传输递增。 // USCI_B0 RX 中断被用来知道何时接收到新数据。 // ACLK = n/a、MCLK = SMCLK = BRCLK = DCO = 1MHz // ***** 与"MSP430FR59xx_euscib0_i2c_11.c"**// /|\/|\ // MSP430FR5969 10k 10k MSP430F5969 // 从器件 || 主器件 // -------- |||--- // -|XIN P1.6/UCB0SDA|-|--+-|P1.6/UCB0SDA XIN|- // | || | | 32kHz // -|XOUT || | XOUT|- // | P1.7/UCB.S.|<!---- >|P1.7/UCB.S. | // | | | P1.0|->LED // P. Thanigai // Texas Instruments Inc. // 2012年2月 //使用 CCS v5.5构建 /********* #include volatile unsigned char RXData; int main (void) { WDTCTL = WDTPW | WDTHOLD; //配置 GPIO P1OUT &=~BIT0; //清除 P1.0输出锁存 器 P1DIR |= BIT0; //对于 LED P1SEL1 |= BIT6 | BIT7; // I2C 引脚 //禁用 GPIO 上电默认高阻抗模式以激活 //先前配置的端口设置 PM5CTL0 &=~LOCKLPM5; //为 I2C 模式配置 USCI_B0 UCB0CTLW0 |= UCSWRST; //软件复位使能 UCB0CTLW0 |= UCMODE_3 | UCMST | UCSYNC;// I2C 模式、主控模式、SYNC UCB0CTLW1 |= UCASTP_2; //生成自动停止 //到达 UCB0TBCNT 后 UCB0BRW = 0x0008; //波特率= SMCLK / 8 UCB0TBCNT = 0x0005; //要接收的字节数 UCB0I2CSA = 0x0048; //从器件地址 UCB0CTL1 &=~UCSWRST; UCB0IE |= UCRXIE | UCNACKIE | UCBCNTIE; while (1) { _DELAY_CYCLES (2000); while (UCB0CTL1 & UCTXSTP); //确保发送了停止条件 UCB0CTL1 |= UCTXSTT; // I2C 启动条件 _bis_SR_register (LPM0_bits | GIE); //输入带中断 的 LPM0} #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector = USCI_B0_Vector __interrupt void USCI_B0_ISR (void) #Elif defined (__GSCI__) 支持的 void __attribute_(USCI_b0_bvector )(void)(nuc0_b0_isr)#blu_isc)(nu_b0_isc)(void Compiler)(void 0_isc)(void 0_ #endif { switch (__even_in_range (UCB0IV、USCI_I2C_UCBIT9IFG)) } USCI_NONE 案例: 中断; //向量0:无中断 USCI_I2C_UCALIFG 案例:中断; //向量2:ALIFG USCI_I2C_UCNACKIFG 案例: //向量4:NACKIFG UCB0CTL1 |= UCTXSTT; // I2C 启动条件 中断; 案例 USCI_I2C_UCSTTIFG:中断; //向量6:STTIFG 案例 USCI_I2C_UCSTPIFG:中断; //向量8:STPIFG USCI_I2C_UCRXIFG3案例:中断; //向量10:RXIFG3 USCI_I2C_UCTXIFG3案例:中断; //向量12:TXIFG3 USCI_I2C_UCRXIFG2案例:中断; //向量14:RXIFG2 USCI_I2C_UCTXIFG2案例:中断; //向量16:TXIFG2 USCI_I2C_UCRXIFG1案例:中断; //向量18:RXIFG1 USCI_I2C_UCTXIFG1案例:中断; //向量20:TXIFG1 USCI_I2C_UCRXIFG0案例: //向量22:RXIFG0 RXData = UCB0RXBUF; //获取 RX 数据 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0 中断; 案例 USCI_I2C_UCTXIFG0:中断; //向量24:TXIFG0 USCI_I2C_UCBCNTIFG 案例: //向量26:BCNTIFG P1OUT ^= BIT0; //在 P1.0上切换 LED 中断; USCI_I2C_UCCLTOIFG 案例:中断; //向量28:时钟低电平超时 USCI_I2C_UCBIT9IFG 案例:中断; //向量30:第9位 默认值:中断; } }
希望这对您有所帮助。
此致、
James
MSP 客户应用