首页 理论教育 零点起步:AVR单片机开发教程及实例

零点起步:AVR单片机开发教程及实例

时间:2023-10-17 理论教育 版权反馈
【摘要】:AVR的TWI接口是面向字节和基于中断的。当TWINT标志位置“1”时,表示TWI接口完成了当前的操作,等待应用程序的响应。3)应用程序应检验TWSR,确定START信号已成功发送。如果状态码与预期一致,应用程序必须将数据包载入TWDR。6)数据包发送后,TWCR寄存器的TWINT标志位置位,TWSR更新为新的状态码,表示数据包成功发送。一旦TWINT清零,TWI启动STOP信号的传送。写TWCR时,TWINT位应置位。TWI将开始执行由TWCR设定的操作。下面给出了使用TWI的汇编与C语言例程。

零点起步:AVR单片机开发教程及实例

AVR的TWI接口是面向字节和基于中断的。所有的总线事件,如接收到一个字节或发送了一个START信号等,都会产生一个TWI中断。由于TWI接口是基于中断的,因此TWI接口在字节发送和接收过程中,不需要应用程序的干预。TWCR寄存器的TWI中断允许TWIE位和SREG寄存器的全局中断允许位一起决定了应用程序是否响应TWINT标志位产生的中断请求。如果TWIE被清零,应用程序只能采用轮询TWINT标志位的方法来检测TWI总线状态。

当TWINT标志位置“1”时,表示TWI接口完成了当前的操作,等待应用程序的响应。在这种情况下,TWI状态寄存器TWSR包含了表明当前TWI总线状态的值。应用程序可以读取TWCR的状态码,判别此时的状态是否正确,并通过设置TWCR与TWDR寄存器,决定在下一个TWI总线周期TWI接口应该如何工作。

典型数据传输中应用程序与TWI的接口过程如下:

1)TWI传输的第一步是发送START信号。通过对TWCR写入特定值,指示TWI硬件发送START信号。写入的值将在后面说明。在写入值时TWINT位要置位,这非常重要。给TWINT写“1”清除此标志。TWCR寄存器的TWINT置位期间,TWI不会启动任何操作。一旦TWINT清零,TWI由START信号启动数据传输。

2)START信号被发送后,TWCR寄存器的TWINT标志位置位,TWCR更新为新的状态码,表示START信号成功发送。

3)应用程序应检验TWSR,确定START信号已成功发送。如果TWSR显示为其他,应用程序可以执行一些指定操作,比如调用错误处理程序。如果状态码与预期一致,应用程序必须将SLA+W载入TWDR。TWDR可同时在地址与数据中使用。TWDR载入SLA+W后,TWCR必须写入特定值指示TWI硬件发送SLA+W信号。写入的值将在后面说明。在写入值时TWINT位要置位,这非常重要。给TWINT写“1”清除此标志。TWCR寄存器的TWINT置位期间TWI不会启动任何操作。一旦TWINT清零,TWI启动地址包的传送。

4)地址包发送后,TWCR寄存器的TWINT标志位置位,TWDR更新为新的状态码,表示地址包成功发送。状态代码还会反映从机是否响应包。

5)应用程序应检验TWSR,确定地址包已成功发送、ACK为期望值。如果TWSR显示为其他,应用程序可能执行一些指定操作,比如调用错误处理程序。如果状态码与预期一致,应用程序必须将数据包载入TWDR。随后,TWCR必须写入特定值指示TWI硬件发送TWDR中的数据包。写入的值将在后面说明。在写入值时TWINT位要置位,这非常重要。TWCR寄存器中的TWINT置位期间TWI不会启动任何操作。一旦TWINT清零,TWI启动数据包的传输。

6)数据包发送后,TWCR寄存器的TWINT标志位置位,TWSR更新为新的状态码,表示数据包成功发送。状态代码还会反映从机是否响应包。(www.xing528.com)

7)应用程序应检验TWSR,确定地址包已成功发送、ACK为期望值。如果TWSR显示为其他,应用程序可能执行一些指定操作,比如调用错误处理程序。如果状态码与预期一致,TWCR必须写入特定值,指示TWI硬件发送STOP信号。写入的值将在后面说明。在写入值时TWINT位要置位,这非常重要。给TWINT写“1”清除此标志。TWCR寄存器中的TWINT置位期间TWI不会启动任何操作。一旦TWINT清零,TWI启动STOP信号的传送。注意TWINT在STOP状态发送后不会置位。

TWI数据传输过程中的规则总结如下:

●当TWI完成一次操作并等待反馈时,TWINT标志置位。直到TWINT清零,时钟线SCL才会拉低。

●TWINT标志置位时,用户必须用与下一个TWI总线周期相关的值更新TWI寄存器。例如,TWDR寄存器必须载入下一个总线周期中要发送的值。

●当所有的TWI寄存器得到更新,而且其他挂起的应用程序也已经结束,TWCR被写入数据。写TWCR时,TWINT位应置位。对TWINT写“1”清除此标志。TWI将开始

执行由TWCR设定的操作。

下面给出了使用TWI的汇编与C语言例程。

(续)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈