#include "msp430x54x.h"
#include "hal_IIC.h"
/***********************************************************
函数名称:void UCB1I2C_Sleep(void)
说 明:UCB1I2C睡眠设置
参 数:无
返回值:无
***********************************************************/
void UCB1I2C_Sleep(void)
{
//初始化SDA,SCL端口IO
UCB1_SDA_SEL&=~UCB1_SDA_PIN;
UCB1_SCL_SEL&=~UCB1_SCL_PIN;
}
/***********************************************************
函数名称:void UCB1I2C_Master_Init(void)
说 明:UCB1I2C主机模式初始化
通信频率=100KHZ
参 数:无
返回值:无
***********************************************************/
void UCB1I2C_Master_Init(void)
{
//初始化SDA,SCL端口IO
UCB1_SDA_SEL|=UCB1_SDA_PIN;
UCB1_SCL_SEL|=UCB1_SCL_PIN;
// Enable SW reset
UCB1CTL1 |= UCSWRST;
// I2C Master, synchronous mode
UCB1CTL0 = UCMST + UCMODE_3 + UCSYNC;
// Use SMCLK
UCB1CTL1 = UCSSEL_2;
// fSCL = SMCLK/40 = 4MHZ/40=100kHz
UCB1BR0 = 40;
UCB1BR1 = 0;
// Clear SW reset, resume operation
UCB1CTL1 &= ~UCSWRST;
}
/***********************************************************
函数名称:void UCB1I2C_Slave_Init(void)
说 明:UCB1I2C从机模式初始化
参 数:无
返回值:无
***********************************************************/
void UCB1I2C_Slave_Init(void)
{
//初始化SDA,SCL端口IO
UCB1_SDA_SEL|=UCB1_SDA_PIN;
UCB1_SCL_SEL|=UCB1_SCL_PIN;
// Enable SW reset
UCB1CTL1 |= UCSWRST;
// I2C Slave, synchronous mode
UCB1CTL0 = UCMODE_3 + UCSYNC;
// Own Address is 048h
UCB0I2COA = MY_OWN_ADDR;
// Clear SW reset, resume operation
UCB0CTL1 &= ~UCSWRST;
}
/***********************************************************
函数名称:UCB1I2C_WriteByte(uchar Slave_WR_Addr,uchar Dest_WR_Addr,uchar TX_Byte)
说 明:向传感器指定地址写一个字节
参 数:Slave_WR_Addr:从机写地址
Dest_WR_Addr:目标寄存器地址
TX_Byte:要写的字节
返回值:0:发送失败
1:发送成功
***********************************************************/
uchar UCB1I2C_WriteByte(uchar Slave_WR_Addr,uchar Dest_WR_Addr,uchar TX_Byte)
{
//检查是否处于结束状态
while (UCB1CTL1 & UCTXSTP);
// Slave Witer_Address
UCB1I2CSA = (Slave_WR_Addr>>1);
// 配置为发送模式
UCB1CTL1 |= UCTR;
// 生成起始状态
UCB1CTL1 |= UCTXSTT;
while(!(UCB1IFG & UCTXIFG));
if(UCB1IFG & UCNACKIFG)
return 0;
UCB1TXBUF = Dest_WR_Addr;
while(!(UCB1IFG & UCTXIFG));
if(UCB1IFG & UCNACKIFG)
return 0;
UCB1TXBUF = TX_Byte;
while(!(UCB1IFG & UCTXIFG));
if(UCB1IFG & UCNACKIFG)
return 0;
// I2C stop condition
UCB1CTL1 |= UCTXSTP;
return 1;
}
/***********************************************************
函数名称:UCB1I2C_ReadByte(uchar Slave_WR_Addr,uchar Slave_RE_Addr,uchar Dest_RE_Addr)
说 明:向传感器指定地址读一个字节
参 数:Slave_WR_Addr:从机写地址
Slave_RE_Addr:从机读地址
Dest_RE_Addr:目标寄存器地址
返回值:0:发送失败
Read_Byte:读回的字节
***********************************************************/
uchar UCB1I2C_ReadByte(uchar Slave_WR_Addr,uchar Slave_RE_Addr,uchar Dest_RE_Addr)
{
uchar Read_Byte;
/*****************重新初始化************************/
// I2C Master, synchronous mode
UCB1CTL0 = UCMST + UCMODE_3 + UCSYNC;
// Use SMCLK
UCB1CTL1 = UCSSEL_2;
// fSCL = SMCLK/40 = 4MHZ/40=100kHz
UCB1BR0 = 40;
UCB1BR1 = 0;
// Clear SW reset, resume operation
UCB0CTL1 &= ~UCSWRST;
/*****************开始读数据流程************************/
//检查是否处于结束状态
while (UCB1CTL1 & UCTXSTP);
// Slave Witer_Address
UCB1I2CSA = (Slave_WR_Addr>>1);
// 配置为发送模式
UCB1CTL1 |= UCTR;
// 生成起始状态
UCB1CTL1 |= UCTXSTT;
while(!(UCB1IFG & UCTXIFG));
if(UCB1IFG & UCNACKIFG)
return 0;
UCB1TXBUF = Dest_RE_Addr;
while(!(UCB1IFG & UCTXIFG));
if(UCB1IFG & UCNACKIFG)
return 0;
// 配置为发送模式
UCB1CTL1 &= ~UCTR;
// Slave Witer_Address
UCB1I2CSA = (Slave_RE_Addr>>1);
// 生成起始状态
UCB1CTL1 |= UCTXSTT;
while(!(UCB1IFG & UCTXIFG));
if(UCB1IFG & UCNACKIFG)
return 0;
while(!(UCB1IFG&UCRXIFG));
Read_Byte=UCB1RXBUF;
// 启动停止信号,发应答信号
UCB1CTL1 |= UCTXSTP+UCTXNACK;
// 复位I2C模块
UCB1CTL1 |= UCSWRST;
return Read_Byte;
}
// USCI_B0 State ISR
#pragma vector = USCI_B1_VECTOR
__interrupt void USCI_B1_ISR(void)
{
}
src.rar_msp430 i2c
版权申诉
108 浏览量
2022-09-23
00:45:03
上传
评论
收藏 2KB RAR 举报
朱moyimi
- 粉丝: 64
- 资源: 1万+
最新资源
- 5.23-Java概述,JDK安装及注释、关键字、标识符、数据类型、变量、常量的介绍
- 《Python基础》实验三指导书(1).doc
- TensorFlow 深度学习、机器学习-任何能够用计算流图形来表达的计算,都可以使用TensorFlow
- 一个基于springboot+sureness的面向REST API资源无状态认证权限管理系统
- 王博外文文献.pdf
- python毕业设计基于社区检测的多任务聚类联邦学习项目源码+使用说明(高分项目).zip
- Javaweb项目源码-编程爱好者博客地带.zip
- java各个技术栈相关知识点
- PYthon代码 pdf合并
- 内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、 Redis
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈