您的位置:首页 > 编程语言

单片机 MSP430 IIC控制器编程(1)

2015-11-21 10:02 309 查看
近日在开发开发微型投影仪的单片机程序,主要是用单片机控制DLP芯片组进行相应的初始化和参数设置,所有芯片的通信接口都是用IIC。

在此记录下,IIC的开发过程。

PS:

博客里面发图片就是这么操蛋!哎

直接附上相关手册吧:链接:http://pan.baidu.com/s/1o6q0Xfk 密码:899x

1.初始化

17.3.1 USCI初始化和复位

USCI由一个 PUC 进行复位或由 UCSWRST 位设置。 在一个 PUC 之后, UCSWRST 位被自动设置, 从而

保持了 USCI 处于复位状态。 为了选择 I2C 运行, UCMODEx 位必须设置为 11。 模块被初始化后, 已准备

好发送或接收操作。 清除 UCSWRST 位会使 USCI 处于运行状态。

当 UCSWRST 被设定以便避免不可预知的运行状态时, 应完成 USCI 模块的配置和重新配置。 在 I2C 模式

下设置 UCSWRST 具有以下作用:

• I2C 通信停止

• SDA 和 SCL 为高阻抗

• UCBxI2CSTAT, 6-0 位被清零

• UCBxTXIE 和 UCBxRXIE 被清零

• UCBxTXIFG 和 UCBxRXIFG 被清零

• 所有其他位和寄存器保持不变。

注: 初始化或重新配置USCI 模块

建议的 USCI 初始化或重新配置过程是:

1. 置位 UCSWRST (BIS.B#UCSWRST, UCxCTL1)

2. UCSWRST= 1, 初始化所有 USCI 寄存器( 包括 UCxCTL1)

3. 配置端口。

4. 通过软件清零 UCSWRST (BIC.B#UCSWRST, UCxCTL1)

5. 通过 UCxRXIE 和/或 UCxTXIE 使能中断( 可选)

2. 主从模式

17.3.4.1受控模式

通过把 I2C 模式设置为 UCMODEx=11 和 USCYNC=1, 并清除 UCMST 位, USCI 模块被配置为一个 I2C

从器件。

首先, USCI 模块必须在接收模式下通过清除 UCTR 位进行配制, 以便接收 I2C 从器件地址。 之后, 发送和

接收操作是由与从器件一起接收到的 R/W 位自动决定。

USCI 从器件地址是由 UCBxI2COA 寄存器编程的。 当 UCA10=0 时, 选用 7 位寻址方式。 当 UCA10=1

时, 选用 10 位寻址方式。 如果从器件响应一个常规调用, 则可以选择 UCGCEN 位。

17.3.4.2 主控模式

通过把 I2C 模式设置为 UCMODEx= 11 和 USCYNC=1, 并置位 UCMST 位, USCI 模块被配置为一个 I}2C

主器件。 当主器件是多主器件系统的一部分时, 必须置位 UCMM, 并且其自身地址必须被编入

UCBxI2COA 寄存器。 当 UCA10=0 时, 选用 7 位寻址方式。 当 UCA10=1 时, 选用 10 位寻址方式。 如

果 USCI 模块响应常规调用, 则可以选择 UCGCEN 位。

17.3.4.2.1 I2C主控发送器模式

初始化之后, 通过把目标从器件地址写入寄存器 UCBxI2CSA、 用 UCSLA 10 位来选择从器件地址的位数、

置位 UCTR 来选择发送模式、 置位 UCTXSTT 来产生一个起始条件, 主控发送器模式才被初始化。

USCI 模块先检测总线是否空闲, 之后产生一个起始条件, 并传送从器件地址。 当起始条件产

生, CBxTXIFG 将被置位, 并将要发送的第一个数据写入 UCBxTXBUF 中。 一旦从器件对地址作出应

答, UCTXSTT 位会被清零。

在从器件地址的发送过程中, 如果仲裁没有失效, 那么会已发送写入到 UCBxTXBUF 中的数据。 一旦数据

由缓冲区转移到移位寄存器, UCBxTXIFG 将再次置位。 如果在应答周期到来之前 UCBxTXBUF 中没有装

载新数据, 那么在应答周期过程中总线将被挂起, SCL 将保持拉低电平状态, 直到数据写入缓存器

UCBxTXBUF 中。 只要 UCTXSTP 位或 UCTXSTT 位没被置位, 数据就就会被传输或总线被保持。

在从器件下一个应答信号到来之后, 置位 UCTXSTP 将会产生一个停止条件。 如果在从器件的地址传送过

程或者是 USCI 模块等待把数据写入 UCBxTXBUF 的过程中置位 UCTXSTP, 则即使没有数据被发送到从

器件依旧会产生一个停止条件。 如果传送的是单字节数据, 在字节传送过程中或者在数据传输开始后必须置

位 UCTXSTP, 不要将任何新的数据写入 UCBxTXBUF。 否则, 会造成只传送地址。 当数据由缓冲器转移

到发送移位寄存器时, UCBxTXIFG 将被置位, 这表示着数据传输已经开始, 可以置位 UCTXSTP 了。

置位 UCTXSTT 将会产生一个重复起始条件。 在这种情况下, 可以通过置位或清零 UCTR, 以便配置为发

送器或接收器。

如果从器件没有响应发送的数据, 则未响应中断标志 UCNACKIFG 会被置位。 主器件必须发送一个停止条

件或者重复起始条件的方式来响应。 如果已经把数据写入 UCBxTXBUF, 那么当前数据将被丢弃。 如果在

一个重复起始条件后, 这个数据还要发送出去, 则必须重新将其写入 UCBxTXBUF。 任何置位 UCTXSTT

也会被丢弃。 若要触发一个重复起始条件, UCTXSTT 需要重新被置位。

图 17-12给出了 I2C 主器件发送操作。

17.3.4.2.2 I2C主控接收器模式

初始化之后, 通过把目标从器件地址写入寄存器 UCBxI2CSA、 用 UCSLA 10 位来选择从器件地址的位数、

置位 UCTR 来选择发送模式、 置位 UCTXSTT 来产生一个起始条件, 主器件接收模式才被初始化。

USCI 模块先检测总线是否空闲, 之后产生一个起始条件, 并传送从器件地址。 一旦从器件对地址作出应

答, UCTXSTT 位会被清零。

在从器件对地址应答后, 将接收到从器件发送的第一个数据字节并发送应答信号, 同时置位 UCBxRXIFG 标

志。 只要 UCTXSTP 或 UCTXSTT 不被置位, 就能接收到从器件发来的数据。 若没有读取 UCBxRXBUF,

那么主器件将在接收最后到一个数据位后挂起总线直到 UCBxRXBUF 被读取。

如果从器件没有响应发送的地址, 则未响应中断标志 UCNACKIFG 会被置位。 主器件必须发送一个停止条

件或者重复起始条件的方式来响应。

置位 UCTXSTP 将会产生一个停止条件。 置位 UCTXSTP 后, 主器件将在接收完从设备传送的数据后发出

一个NACK, 并紧接着发送一个停止, 或者如果在 USCI 模块正在等待读取 UCBxRXBUF时, 将立即产生停

止。

如果主及想接收一个单字节数据, 那么在接收字节的过程中必须将 UCTXSPT 位置位。 在这种情况下, 可

以通过查询 UCTXSTT 来确定何时将被清除:

BIS.B #UCTXSTT,&UCBOCTL1 ;Transmit START cond.POLL_STT BIT.B #UCTXSTT,&UCBOCTL1 ;Poll UCTXSTT

bitJC POLL_STT ;When cleared,BIS.B #UCTXSTP,&UCB0CTL1 ;transmit STOP cond.

置位 UCTXSTT 将会产生一个重复起始条件。 在这种情况下, 可以通过置位或清零 UCTR, 以便配置为发

送器或接收器, 如果需要的话, 还可以把不同的地址写入 UCBxI2CSA。

图 17-13给出了 I2C 主控接收器操作。

注: 在不使用重复起始的情况下的连续主器件传输

在不使用重复起始功能的情况下, 当进行多个连续 I2C 主器件传输时, 当前传输必须在下一个

传输初始化完成之前结束。 这可以通过确保在下一个 I2C 传输初始化完成之前发送停止条件标

志 UCTXSTP 被清零, 并设置 UCTXSTT= 1来完成。 否则, 将会影响当前的传输。

3. DLPC3438的IIC器件地址0x36

4. IT6605的IIC器件地址

PCADR=1, IIC address = 0x92;

PCADR=0, IIC address = 0x90;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息