DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1883|回复: 1
打印 上一主题 下一主题

[待整理] 基于MSP430单片机的虚拟I2C总线软件包VIIC_M1.0

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-5 10:42:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
基于MSP430单片机的虚拟I2C总线软件包VIIC_M1.0

一、VIIC_M1.0软件包的组成
根据归一化设计的要求,主方式下虚拟I2CC总线由下列10个子程序组成:
1、时序模拟子程序4个
I2C_sta,I2C _stop,I2C _mack ,I2C _mnack
2、操作模拟子程序3个
I2C_ackn,I2C _wr_byte,I2C _rd_byte
3、数据读写子程序3个
I2C_wr_nbyte,I2C _rd_nbyte,I2C_wr_addr
二、应用对象
1、MSP430单片机
MSP430单片机为低功耗的16位单片机,有MSP430X11、MSP430X112、MSP430X1101、MSP430X13X、MSP430X14X、MSP430X31X/32X/33X、MSP430X41X等型号,每种芯片都有丰富的I/O端口。本设计采用芯片为MSP430E325
(1)虚拟I2C总线所使用的I/O端口
>数据线(SDA)使用的是通用端口P0中的P0.7,该端口为输入/输出双向口,有输入寄存器(P0IN)、输出寄存器(P0OUT)及方向寄存器(P0DIR)等寄存器,通过字节指令访问。>>时钟线(SCL)使用的是通用定时器/端口TP中的TP.1,该端口为输出口,有定时器/端口控制寄存器(TPCTL)、定时器/端口数据寄存器(TPD)及定时器/端口允许寄存器(TPE)等,通过字节指令访问。
(2)运行时所使用的时钟频率
MSP430E325运行时用两个时钟:辅助时钟(ACLK)和主时钟(MCLK)。当采用32768KHz的晶体振荡器,并且系统时钟控制寄存器采用缺省值时,主时钟的频率为1.049MHz。若主时钟的频率不是1.049MHz,请适当调整程序中nop的个数。  
2、EEPROM器件
(1)EEPROM器件
本例使用的EEPROM器件为24LC65(MICROCHIP)。24LC65容量为8KB,其中的字节地址为13位,分两个字节:
SUBADDR_H为高5位地址 SUBADDR_L为低8位地址;24LC65的封装引脚如图1所示:
(2)24LC65的数据格式
A、当前地址写:S,SLA+W,A,DATA1,A,DTA2,A...,DATAn,A,P
B、当前地址读:S,SLA+R,A,DATA1,A,DTA2,A...,DATAn,/A,P
C、指定地址写:S,SLA+W,A,subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A,...,DATAn,A,P
D、指定地址读:S,SLA+R,A,subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A,...,DATAn,/A,P
其中:SLA+W,SLA+R,subaddr_H,subaddr_L为主控器件发出的数据
S,A,/A,P为主控器件发出的信息
DATA1,DATA2,...,DATAn为被控器件发给主控器件的数据
A 为被控器件发给主控器件的信息
(3)24LC65与MSP430-325的连接如图2所示


图一

图二




三、应用界面
1、发送N字节数据——从当前地址开始
;发送的数据在MTD中

;数列格式:S,SLA+W,subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A...,DATAn,A,P
;MOV.b #CODE,SLA;I2C_R_R/W=0;A0=A1=A2=0
MOV.b #N,Num_byt;发送字节数
CALL I2C_WR_Nbyte;从当前地址开始写
2、接收N字节数据——从指定地址开始读
;接收的数据在MRD中

;数列格式:S,SLA+W,A,subaddr_H,A,subaddr_L,A,
S,SLA+R,A,DATA1,A,DATA2,A,...,DATAn,/A,P
MOV.b #CODE+SLAR/W,SLA
;SLAR/W=1,A0=A1=A2=0
MOV.b #N,Num_byt ;接收字节数
CALL #I2C_RD_Nbyte ;从当前地址开始读
3、接收N字节——从指定地址开始读
;接收的数据存放在MRD中

;数列格式:S,SLA+W,A,subaddr_H,A,subaddr_L,A,
;S,SLA+R,A,DATA1,A,DATA2,A,...,DATAn,/A,P

MOV.b #CODE,SLA
;SLAR/W=0:写,A0=A1=A2=0
MOV.b #N,Num_byt ;接收字节数
MOV #Subaddr,I2C_R_Addr ;字节地址送入暂存单元
CALL #I2C_R_Addr ;发送字节地址
MOV.b #CODE+SLAR/W,SLA;SLAR/W=1:读,A0=A1=A2=0
CALL #I2C_RD_Nbyte
4、发送N字节——从指定地址开始写
;数列格式:S,SLA+W,A,Subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A,...,DATAn,A,P

MOV.b #CODE,SLA;SLAR/W=0:写,A0=A1=A2=0
MOV #N,Num_byt ;发送字节数
MOV #Subaddr,I2C_R_Addr ;字节地址送入暂存单元
CALL #I2C_WR_Addr ;发送字节地址
CALL #WR_Nbyte
后记:
      如果使用MSP430中别的I/O端口,只需要在模拟时序子程序中改动相应的积存器即可。本例中时钟线使用TP口,是因为它为输出口,在程序中可以节省指令。
对于24系列的其他芯片,由于容量不同,请特别注意其字节地址是1个字节还是2个字节。本例的24LC65字节地址就是2个字节的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-26 01:13 , 耗时 0.087213 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表