📄 lab-12-4619_s_i2c.c
字号:
//******************************************************************************
// MSP430xG41x Demo - USCI_B0 I2C Slave RX multiple bytes from MSP430 Master
//
// Description: This demo connects two MSP430's via the I2C bus. The master
// transmits to the slave. This is the slave code. The interrupt driven
// data receiption is demonstrated using the USCI_B0 RX interrupt.
//
// /|\ /|\
// MSP430xG461x 10k 10k MSP430xG461x
// slave | | master
// ----------------- | | -----------------
// -|XIN P3.1/UCB0SDA|<-|---+->|P3.1/UCB0SDA XIN|-
// 32kHz | | | | | 32kHz
// -|XOUT | | | XOUT|-
// | P3.2/UCB0SCL|<-+----->|P3.2/UCB0SCL |
// | | | |
//
// Andreas Dannenberg/ M. Mitchell
// Texas Instruments Inc.
// October 2006
// Built with IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430xG46x.h"
unsigned char *PRxData;
unsigned char RXByteCtr;
volatile unsigned char RxBuffer[128]; // 接收数据数组
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
P3SEL |= 0x06; // USCI_B0 选择I2C功能
UCB0CTL1 |= UCSWRST; // 使能 SW 复位
UCB0CTL0 = UCMODE_3 + UCSYNC; // I2C从机 同步模式
UCB0I2COA = 0x48; // 从机地址 048h
UCB0CTL1 &= ~UCSWRST; // 清 SW 复位
UCB0I2CIE |= UCSTPIE + UCSTTIE; // 使能 STT 、 STP 中断
IE2 |= UCB0RXIE; // 使能接收中断
while (1)
{
PRxData = (unsigned char *)RxBuffer; // 接收缓存
RXByteCtr = 0; // 清 RX 字节长度
__bis_SR_register(CPUOFF + GIE); //进入低功耗 LPM0
__no_operation(); //
}
}
//------------------------------------------------------------------------------
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
*PRxData++ = UCB0RXBUF; // 发送数据
RXByteCtr++; // 指针增加
}
//------------------------------------------------------------------------------
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void)
{
UCB0STAT &= ~(UCSTPIFG + UCSTTIFG); // 清中断标志
if (RXByteCtr) // 校验数据长度
__bic_SR_register_on_exit(CPUOFF); //退出低功耗 LPM0
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -