各大神,有没atmega32u416使用其中ADC功能的典型电路呢??

2017年6月 VC/MFC大版内专家分月排行榜第二2017年5月 VC/MFC大版内专家分月排行榜第二2017年1月 VC/MFC大版内专家分月排行榜第二2016年11月 VC/MFC大版内专家分月排行榜第二2016年4月 VC/MFC大版内专家分月排行榜第二2014年11月 VC/MFC大版内专家分月排行榜第二2014年1月 VC/MFC大版内专家分月排行榜第二2013年10月 VC/MFC大版内专家分月排行榜第二2013年9月 VC/MFC大版内专家分月排行榜第二2013年6月 VC/MFC大版内专家分月排行榜第二2013年4月 VC/MFC大版内专家分月排行榜第二2012年6月 VC/MFC大版内专家分月排行榜第二
2017年9月 VC/MFC大版内专家分月排行榜第三2017年8月 VC/MFC大版内专家分月排行榜第三2017年4月 VC/MFC大版内专家分月排行榜第三2016年12月 VC/MFC大版内专家分月排行榜第三2016年10月 VC/MFC大版内专家分月排行榜第三2016年2月 VC/MFC大版内专家分月排行榜第三2015年10月 VC/MFC大版内专家分月排行榜第三2015年7月 VC/MFC大版内专家分月排行榜第三2012年10月 VC/MFC大版内专家分月排行榜第三
2013年4月 硬件/嵌入开发大版内专家分月排行榜第二2007年9月 硬件/嵌入开发大版内专家分月排行榜第二
2013年5月 硬件/嵌入开发大版内专家分月排行榜第三2012年9月 硬件/嵌入开发大版内专家分月排行榜第三2007年11月 硬件/嵌入开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。各大神,有没单片机atmega16使用其中ADC功能的典型电路呢
各大神,有没单片机atmega16使用其中ADC功能的典型电路呢
看你要测多大的电压了,如果小于5V,可以直接输入到AD管脚,如果大于5V,输入前做好分压即可。
你好!那就是测量电压吧
版式: | 炫彩版 | 11-30 22:07当前位置: >>
atmega16中文资料.0003
ATmega16(L) A-PDF Split DEMO : Purchase from www. to remove the watermark下面代码给出如何读 UCSRC 寄存器内容 汇编代码例程 (1)USART_ReadUCSRC: ; 读 UCSRC in in ret r16,UBRRH r16,UCSRCC 代码例程 (1)unsigned char USART_ReadUCSRC( void ) { /* 读 UCSRC */ ucsrc = UBRRH; ucsrc = UCSRC; }Note:1. 本代码假定已经包含了相应的头文件汇编代码在 r16 中返回 UCSRC 值 对 UBRRH 内容的读操作不是自动完成,且当前一条指令没有访问该寄存器地址时,该寄 存器作为普通寄存器使用。USART 寄存器描述USART I/O 数据寄存器- UDRBit 7 6 5 4 RXB[7:0] TXB[7:0] 读/写 初始值 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 3 2 1 0 UDR (Read) UDR (Write)USART 发送数据缓冲寄存器和 USART 接收数据缓冲寄存器共享相同的 I/O 地址,称为 USART 数据寄存器或 UDR。将数据写入 UDR 时实际操作的是发送数据缓冲器存器 (TXB),读 UDR 时实际返回的是接收数据缓冲寄存器 (RXB) 的内容。 在 5、 6、 7 比特字长模式下,未使用的高位被发送器忽略,而接收器则将它们设置为 0。 只有当 UCSRA 寄存器的 UDRE 标志置位后才可以对发送缓冲器进行写操作。 如果 UDRE 没有置位,那么写入 UDR 的数据会被 USART 发送器忽略。当数据写入发送缓冲器后, 若移位寄存器为空,发送器将把数据加载到发送移位寄存器。然后数据串行地从 TxD 引 脚输出。 接收缓冲器包括一个两级 FIFO,一旦接收缓冲器被寻址 FIFO 就会改变它的状态。因此 不要对这一存储单元使用读 - 修改 - 写指令 (SBI 和 CBI)。 使用位查询指令 (SBIC 和 SBIS) 时也要小心,因为这也有可能改变 FIFO 的状态。 USART 控制和状态寄存器 A - UCSRABit 读/写 初始值7 RXC R 06 TXC R/W 05 UDRE R 14 FE R 03 DOR R 02 PE R 01 U2X R/W 00 MPCM R/W 0 UCSRA1512466GCAVRC10/03 ? Bit 7 C RXC: USART 接收结束 接收缓冲器中有未读出的数据时 RXC 置位,否则清零。接收器禁止时,接收缓冲器被刷 新,导致 RXC 清零。 RXC 标志可用来产生接收结束中断 ( 见对 RXCIE 位的描述 )。 ? Bit 6 C TXC: USART 发送结束 发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时 TXC 置位。执行发送结 束中断时 TXC 标志自动清零,也可以通过写 1 进行清除操作。TXC 标志可用来产生发送 结束中断 ( 见对 TXCIE 位的描述 )。 ? Bit 5 C UDRE: USART 数据寄存器空 UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。 UDRE为 1说明缓冲器为空, 已 准备好进行数据接收。 UDRE 标志可用来产生数据寄存器空中断 ( 见对 UDRIE 位的描述 )。 复位后 UDRE 置位,表明发送器已经就绪。 ? Bit 4 C FE: 帧错误 如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个 停止位为 0,那么 FE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。当接收到的 停止位为 1 时, FE 标志为 0。对 UCSRA 进行写入时,这一位要写 0。 ? Bit 3 C DOR: 数据溢出 数据溢出时 DOR 置位。当接收缓冲器满 ( 包含了两个数据 ),接收移位寄存器又有数据, 若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器 (UDR) 被读取。对 UCSRA 进行写入时,这一位要写 0。 ? Bit 2 C PE: 奇偶校验错误 当奇偶校验使能 (UPM1 = 1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时 UPE 置位。 这一位一直有效直到接收缓冲器 (UDR) 被读取。 对 UCSRA 进行写入时, 这一 位要写 0。 ? Bit 1 C U2X: 倍速发送 这一位仅对异步操作有影响。使用同步操作时将此位清零。 此位置 1 可将波特率分频因子从 16 降到 8, 从而有效的将异步通信模式的传输速率加倍。 ? Bit 0 C MPCM: 多处理器通信模式 设置此位将启动多处理器通信模式。 MPCM 置位后, USART 接收器接收到的那些不包 含地址信息的输入帧都将被忽略。 发送器不受 MPCM 设置的影响。 详细信息请参考 P150“ 多处理器通讯模式 ” 。 USART 控制和状态寄存器 B - UCSRBBit 读/写 初始值7 RXCIE R/W 06 TXCIE R/W 05 UDRIE R/W 04 RXEN R/W 03 TXEN R/W 02 UCSZ2 R/W 01 RXB8 R 00 TXB8 R/W 0 UCSRB? Bit 7 C RXCIE: 接收结束中断使能 置位后使能 RXC 中断。当 RXCIE 为 1,全局中断标志位 SREG 置位, UCSRA 寄存器 的 RXC 亦为 1 时可以产生 USART 接收结束中断。152ATmega16(L)2466GCAVRC10/03 ATmega16(L)? Bit 6 C TXCIE: 发送结束中断使能 置位后使能 TXC 中断。当 TXCIE 为 1,全局中断标志位 SREG 置位, UCSRA 寄存器的 TXC 亦为 1 时可以产生 USART 发送结束中断。 ? Bit 5 C UDRIE: USART 数据寄存器空中断使能 置位后使能 UDRE 中断。当 UDRIE 为 1,全局中断标志位 SREG 置位, UCSRA 寄存器 的 UDRE 亦为 1 时可以产生 USART 数据寄存器空中断。 ? Bit 4 C RXEN: 接收使能 置位后将启动 USART 接收器。 RxD 引脚的通用端口功能被 USART 功能所取代。禁止 接收器将刷新接收缓冲器,并使 FE、 DOR 及 PE 标志无效。 ? Bit 3 C TXEN: 发送使能 置位后将启动将启动 USART 发送器。 TxD 引脚的通用端口功能被 USART 功能所取代。 TXEN 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存 器与发送缓冲寄存器中没有要传送的数据。 发送器禁止后, TxD 引脚恢复其通用 I/O 功能。 ? Bit 2 C UCSZ2: 字符长度 UCSZ2 与 UCSRC 寄存器的 UCSZ1:0 结合在一起可以设置数据帧所包含的数据位数(字符 长度 )。 ? Bit 1 C RXB8: 接收数据位 8 对 9 位串行帧进行操作时, RXB8 是第 9 个数据位。读取 UDR 包含的低位数据之前首先 要读取 RXB8。 ? Bit 0 C TXB8: 发送数据位 8 对 9 位串行帧进行操作时, TXB8 是第 9 个数据位。 写 UDR 之前首先要对它进行写操作。 USART 控制和状态寄存器 C - UCSRCBit 读/写 初始值7 URSEL R/W 16 UMSEL R/W 05 UPM1 R/W 04 UPM0 R/W 03 USBS R/W 02 UCSZ1 R/W 11 UCSZ0 R/W 10 UCPOL R/W 0 UCSRCUCSRC寄存器与UBRRH寄存器共用相同的I/O地址。 对该寄存器的访问, 请参见P151“访 问 UBRRH/ UCSRC 寄存器 ” 。 ? Bit 7 C URSEL: 寄存器选择 通过该位选择访问 UCSRC 寄存器或 UBRRH 寄存器。当读 UCSRC 时,该位为 1 ;当 写 UCSRC 时, URSEL 为 1。 ? Bit 6 C UMSEL: USART 模式选择 通过这一位来选择同步或异步工作模式。 Table 63. UMSEL 设置UMSEL 0 1 模式 异步操作 同步操作1532466GCAVRC10/03 ? Bit 5:4 C UPM1:0: 奇偶校验模式 这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数据,发 送器都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶 值,并与 UPM0 所设置的值进行比较。如果不匹配,那么就将 UCSRA 中的 PE 置位。 Table 64. UPM 设置UPM1 0 0 1 1 UPM0 0 1 0 1 奇偶模式 禁止 保留 偶校验 奇校验? Bit 3 C USBS: 停止位选择 通过这一位可以设置停止位的位数。接收器忽略这一位的设置。 Table 65. USBS 设置USBS 0 1 停止位位数 1 2? Bit 2:1 C UCSZ1:0: 字符长度 UCSZ1:0 与 UCSRB 寄存器的 UCSZ2 结合在一起可以设置数据帧包含的数据位数(字符长 度 )。 Table 66. UCSZ 设置UCSZ2 0 0 0 0 1 1 1 1 UCSZ1 0 0 1 1 0 0 1 1 UCSZ0 0 1 0 1 0 1 0 1 字符长度 5位 6位 7位 8位 保留 保留 保留 9位? Bit 0 C UCPOL: 时钟极性 这一位仅用于同步工作模式。使用异步模式时,将这一位清零。 UCPOL 设置了输出数据 的改变和输入数据采样,以及同步时钟 XCK 之间的关系。 Table 67. UCPOL 设置UCPOL 0 1 发送数据的改变 (TxD 引脚的输出 ) XCK 上升沿 XCK 下降沿 接收数据的采样 (RxD 引脚的输入 ) XCK 下降沿 XCK 上升沿154ATmega16(L)2466GCAVRC10/03 ATmega16(L)USART 波特率寄存器- UBRRL 和 UBRRHBit15 URSEL 714 C 6 R R/W 0 013 C 5 R R/W 0 012 C111098 UBRRH UBRRL 0 R/W R/W 0 0UBRR[11:8] 3 R/W R/W 0 0 2 R/W R/W 0 0 1 R/W R/W 0 0UBRR[7:0] 4 R R/W 0 0 读/写 初始值 R/W R/W 0 0UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。 对该寄存器的访问, 请参见P151“访 问 UBRRH/ UCSRC 寄存器 ” 。 ? Bit 15 C URSEL: 寄存器选择 通过该位选择访问 UCSRC 寄存器或 UBRRH 寄存器。当读 UBRRH 时,该位为 0 ;当 写 UBRRH 时, URSEL 为 0。 ? Bit 14:12 C 保留位 这些位是为以后的使用而保留的。为了与以后的器件兼容,写 UBRRH 时将这些位清零。 ? Bit 11:0 C UBRR11:0: USART 波特率寄存器 这个 12 位的寄存器包含了 USART 的波特率信息。其中 UBRRH 包含了 USART 波特率 高 4 位, UBRRL 包含了低 8 位。波特率的改变将造成正在进行的数据传输受到破坏。写 UBRRL 将立即更新波特率分频器。波特率设置的例子对标准晶振及谐振器频率来说,异步模式下最常用的波特率可通过 Table 68 中 UBRR 的 设置来产生。表中的粗体数据表示由此产生的波特率与目标波特率的偏差不超过 0.5%。 更高的误差也是可以接受的,但发送器的抗噪性会降低,特别是需要传输大量数据时 ( 参 看 P148“ 异步工作范围 ” )。误差可以通过如下公式计算: :BaudRate Closest Match Error[%] = ? - C 1? ? ------------------------------------------------------? ? 100% BaudRateTable 68. 通用振荡器频率下设置 UBRR 的例子fosc = 1.0000 MHz 波特率 (bps) 00 14.4k 19.2k 28.8k 38.4k U2X = 0 UBRR 25 12 6 3 2 1 1 0.2% 0.2% -7.0% 8.5% 8.5% 8.5% -18.6% 误差 51 25 12 8 6 3 2 U2X = 1 UBRR 0.2% 0.2% 0.2% -3.5% -7.0% 8.5% 8.5% 误差 47 23 11 7 5 3 2 fosc = 1.8432 MHz U2X = 0 UBRR 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 误差 95 47 23 15 11 7 5 U2X = 1 UBRR 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% UBRR 51 25 12 8 6 3 2 fosc = 2.0000 MHz U2X = 0 误差 0.2% 0.2% 0.2% -3.5% -7.0% 8.5% 8.5% U2X = 1 UBRR 103 51 25 16 12 8 6 误差 0.2% 0.2% 0.2% 2.1% 0.2% -3.5% -7.0%1552466GCAVRC10/03 Table 68. 通用振荡器频率下设置 UBRR 的例子fosc = 1.0000 MHz 波特率 (bps) 57.6k 76.8k 115.2k 230.4k 250k 最大 (1) 1. 0 C C C C U2X = 0 UBRR 8.5% C C C C 误差 1 1 0 C C 125 kbps U2X = 1 UBRR 8.5% -18.6% 8.5% C C 误差 1 1 0 C C fosc = 1.8432 MHz U2X = 0 UBRR 0.0% -25.0% 0.0% C C 误差 3 2 1 0 C U2X = 1 UBRR 0.0% 0.0% 0.0% 0.0% C UBRR 1 1 0 C C 125 kbps fosc = 2.0000 MHz U2X = 0 误差 8.5% -18.6% 8.5% C C U2X = 1 UBRR 3 2 1 C 0 误差 8.5% 8.5% 8.5% C 0.0% 250 kbps62.5 kbps UBRR = 0, 误差 = 0.0%115.2 kbps230.4 kbps156ATmega16(L)2466GCAVRC10/03 ATmega16(L)Table 69. 通用振荡器频率下设置 UBRR 的例子 ( 续 )fosc = 3.6864 MHz 波特率 (bps)) 00 14.4k 19.2k 28.8k 38.4k 57.6k 76.8k 115.2k 230.4k 250k 0.5M 1M 最大 1.(1)fosc = 4.0000 MHz U2X = 1 U2X = 0 UBRR 103 51 25 16 12 8 6 3 2 1 0 0 C C 250 kbps 误差 0.2% 0.2% 0.2% 2.1% 0.2% -3.5% -7.0% 8.5% 8.5% 8.5% 8.5% 0.0% C C U2X = 1 UBRR 207 103 51 34 25 16 12 8 6 3 1 1 0 C 误差 0.2% 0.2% 0.2% -0.8% 0.2% 2.1% 0.2% -3.5% -7.0% 8.5% 8.5% 0.0% 0.0% C 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% -7.8% -7.8% Cfosc = 7.3728 MHz U2X = 0 UBRR 191 95 47 31 23 15 11 7 5 3 1 1 0 C 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% -7.8% -7.8% C U2X = 1 UBRR 383 191 95 63 47 31 23 15 11 7 3 3 1 0 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% -7.8% -7.8% -7.8%U2X = 0 UBRR 95 47 23 15 11 7 5 3 2 1 0 0 C C 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% -7.8% C CUBRR 191 95 47 31 23 15 11 7 5 3 1 1 0 C230.4 kbps UBRR = 0, 误差 = 0.0%460.8 kbps0.5 Mbps460.8 kbps921.6 kbps1572466GCAVRC10/03 Table 70. 通用振荡器频率下设置 UBRR 的例子 ( 续 )fosc = 8.0000 MHz 波特率 (bps) 00 14.4k 19.2k 28.8k 38.4k 57.6k 76.8k 115.2k 230.4k 250k 0.5M 1M 最大 1.(1)fosc = 11.0592 MHz U2X = 0 UBRR 287 143 71 47 35 23 17 11 8 5 2 2 C C 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% -7.8% C C U2X = 1 UBRR 575 287 143 95 71 47 35 23 17 11 5 5 2 C 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% -7.8% -7.8% C 误差 -0.1% 0.2% 0.2% 0.6% 0.2% -0.8% 0.2% 2.1% 0.2% -3.5% 8.5% 0.0% 0.0% 0.0% UBRR 383 191 95 63 47 31 23 15 11 7 3 3 1 0fosc = 14.7456 MHz U2X = 0 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% -7.8% -7.8% -7.8% U2X = 1 UBRR 767 383 191 127 95 63 47 31 23 15 7 6 3 1 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 5.3% -7.8% -7.8%U2X = 0 UBRR 207 103 51 34 25 16 12 8 6 3 1 1 0 C 误差 0.2% 0.2% 0.2% -0.8% 0.2% 2.1% 0.2% -3.5% -7.0% 8.5% 8.5% 0.0% 0.0% CU2X = 1 UBRR 416 207 103 68 51 34 25 16 12 8 3 3 1 00.5 Mbps UBRR = 0, 误差 = 0.0%1 Mbps691.2 kbps1.3824 Mbps921.6 kbps1.8432 Mbps158ATmega16(L)2466GCAVRC10/03 ATmega16(L)Table 71. 通用振荡器频率下设置 UBRR 的例子 ( 续 )fosc = 16.0000 MHz 波特率 (bps) 00 14.4k 19.2k 28.8k 38.4k 57.6k 76.8k 115.2k 230.4k 250k 0.5M 1M 最大 1.(1)fosc = 18.4320 MHz U2X = 0 UBRR 479 239 119 79 59 39 29 19 14 9 4 4 C C 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% -7.8% C C U2X = 1 UBRR 959 479 239 159 119 79 59 39 29 19 9 8 4 C 误差 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 2.4% -7.8% C 误差 0.0% -0.1% 0.2% -0.1% 0.2% 0.6% 0.2% -0.8% 0.2% 2.1% -3.5% 0.0% 0.0% 0.0% UBRR 520 259 129 86 64 42 32 21 15 10 4 4 C Cfosc = 20.0000 MHz U2X = 0 误差 0.0% 0.2% 0.2% -0.2% 0.2% 0.9% -1.4% -1.4% 1.7% -1.4% 8.5% 0.0% C C U2X = 1 UBRR
173 129 86 64 42 32 21 10 9 4 C 误差 0.0% 0.0% 0.2% -0.2% 0.2% -0.2% 0.2% 0.9% -1.4% -1.4% -1.4% 0.0% 0.0% CU2X = 0 UBRR 416 207 103 68 51 34 25 16 12 8 3 3 1 0 误差 -0.1% 0.2% 0.2% 0.6% 0.2% -0.8% 0.2% 2.1% 0.2% -3.5% 8.5% 0.0% 0.0% 0.0% 1 Mbps UBRR = 0, 误差 = 0.0%U2X = 1 UBRR 832 416 207 138 103 68 51 34 25 16 8 7 3 12 Mbps1.152 Mbps2.304 Mbps1.25 Mbps2.5 Mbps1592466GCAVRC10/03 两线串行接口 TWI特点? ? ? ? ? ? ? ? ? ?简单,但是强大而灵活的通讯接口,只需要两根线 支持主机和从机操作 器件可以工作于发送器模式或接收器模式 7 位地址空间允许有 128 个从机 支持多主机仲裁 高达 400 kHz 的数据传输率 斜率受控的输出驱动器 可以抑制总线尖峰的噪声抑制器 完全可编程的从机地址以及公共地址 睡眠时地址匹配可以唤醒 AVR两线串行接口总线定义两线接口 TWI 很适合于典型的处理器应用。 TWI 协议允许系统设计者只用两根双向传输 线就可以将 128 个不同的设备互连到一起。这两根线一是时钟 SCL,一是数据 SDA。外 部硬件只需要两个上拉电阻,每根线上一个。所有连接到总线上的设备都有自己的地址。 TWI 协议解决了总线仲裁的问题。 Figure 76. TWI 总线的连接VCCDevice 1Device 2Device 3........Device nR1R2SDASCLTWI 词汇以下定义将在本节频繁出现。 Table 72. TWI 词汇单词 主机 从机 发送器 接收器 说明 启动和停止传输的设备。主机同时要产生 SCL 时钟 被主机寻址的设备 将数据放到总线上的设备 从总线读取数据的设备160ATmega16(L)2466GCAVRC10/03 ATmega16(L)电气连接 从 Figure 76 可以看出,两根线都通过上拉电阻与正电源连接。所有 TWI 兼容的器件的总 线驱动都是漏极开路或集电极开路的。这样就实现了对接口操作非常关键的线与功能。 TWI 器件输出为 &0” 时, TWI 总线会产生低电平。 当所有的 TWI 器件输出为三态时, 总线会 输出高电平,允许上拉电阻将电压拉高。注意,为保证所有的总线操作,凡是与 TWI 总 线连接的 AVR 器件必须上电。 与总线连接的器件数目受如下条件限制:总线电容要低于 400 pF,而且可以用 7 位从机 地址进行寻址。 TWI 详细的电气特性说明请见 P281“T 两线串行接口特性 ” 。这儿给出了 两个不同的规范,一种是总线速度低于 100 kHz,而另外一种是总线速度高达 400 kHz。数据传输和帧格式传输数据 ( 位 ) TWI 总线上数据位的传送与时钟脉冲同步。时钟线为高时,数据线电压必须保持稳定,除 非在启动与停止的状态下。 Figure 77. 数据有效性SDASCL Data Stable Data StableData ChangeSTART/STOP 状态主机启动与停止数据传输。主机在总线上发出 START 信号以启动数据传输;在总线上发 出 STOP 信号以停止数据传输。在 START 与 STOP 状态之间,需要假定总线忙,不允 许其它主机控制总线。特例是在 START 与 STOP 状态之间发出一个新的 START 状态。 这被称为 REPEATED START 状态,适用于主机在不放弃总线控制的情况下启动新的传 送。在 REPEATED START 之后,直到下一个 STOP,需要假定总线处于忙的状态。这 与 START 是完全一样的,因此在本手册中,如果没有特殊说明,START 与 REPEATED START 均用 START 表述。 如下所示, START 与 STOP 状态是在 SCL 线为高时, 通过改变 SDA 电平来实现的。 Figure 78. START、 REPEATED START 与 STOP 状态SDASCLSTARTSTOP STARTREPEATED STARTSTOP地址数据包格式所有在 TWI 总线上传送的地址包均为 9 位,包括 7 位地址位、 1 位 READ/WRITE 控制 位与 1 位应答位。如果 READ/WRITE 为 1,则执行读操作;否则执行写操作。从机被寻 址后,必须在第九个 SCL (ACK) 周期通过拉低 SDA 作出应答。若该从机忙或有其它原因 无法响应主机,则应该在 ACK 周期保持 SDA 为高。然后主机可以发出 STOP 状态或 REPEATED START 状态重新开始发送。地址包包括从机地址与分别称为 SLA+R 或 SLA+W 的 READ 或 WRITE 位。1612466GCAVRC10/03 地址字节的 MSB 首先被发送。从机地址由设计者自由分配,但需要保留地址
作为广播地址。 当发送广播呼叫时,所有的从机应在 ACK 周期通过拉低 SDA 作出应答。当主机需要发送 相同的信息给多个从机时可以使用广播功能。当 Write 位在广播呼叫之后发送,所有的从 机通过在 ACK 周期通过拉低 SDA 作出响应。所有的从机接收到紧跟的数据包。注意在整 体访问中发送 Read 位没有意义,因为如果几个从机发送不同的数据会带来总线冲突。 所有形如 1111 xxx 格式的地址都需要保留,以便将来使用。 Figure 79. 地址包格式Addr MSB SDA Addr LSB R/W ACKSCL 1 START 2 7 8 9162ATmega16(L)2466GCAVRC10/03 ATmega16(L)数据包格式 所有在 TWI 总线上传送的数据包为 9 位长,包括 8 位数据位及 1 位应答位。在数据传送 中,主机产生时钟及 START 与 STOP 状态,而接收器响应接收。应答是由从机在第 9 个 SCL 周期拉低 SDA 实现的。 如果接收器使 SDA 为高, 则发出 NACK 信号。 接收器完成接 收,或者由于某些原因无法接收更多的数据,应该在收到最后的字节后发出 NACK 来告 知发送器。数据的 MSB 首先发送。 Figure 80. 数据包格式Data MSB Aggregate SDA SDA from Transmitter SDA from receiverR SCL from Master 1 SLA+R/W 2 7 Data Byte 8 9 STOP, REPEATED START or Next Data Byte Data LSB ACK将地址包和数据包组合为一个完 整的传输过程发送主要由 START 状态、SLA+R/W、至少一个数据包及 STOP 状态组成。只有 START 与 STOP 状态的空信息是非法的。可以利用 SCL 的线与功能来实现主机与从机的握手。 从机可通过拉低 SCL 来延长 SCL 低电平的时间。当主机设定的时钟速度相对于从机太 快,或从机需要额外的时间来处理数据时,这一特性是非常有用的。从机延长 SCL 低电 平的时间不会影响 SCL 高电平的时间,因为 SCL 高电平时间是由主机决定的。由上述可 知,通过改变 SCL 的占空比可降低 TWI 数据传送速度。 Figure 81 说明了典型的数据传送。 注意 SLA+R/W 与 STOP 之间传送的字节数由应用程序 的协议决定。 Figure 81. 典型的数据传送Addr MSB SDA Addr LSB R/W ACK Data MSB Data LSB ACKSCL 1 START 2 7 SLA+R/W 8 9 1 2 Data Byte 7 8 9 STOP1632466GCAVRC10/03 多主机总线系统,仲裁和同 TWI 协议允许总线上由多个主机。特别要注意的是即使有多个主机同时开始发生数据,也 要保证发送正常进行。多主机系统中有两个问题: 步? 算法必须只能允许一个主机完成传送。当其余主机发现它们失去选择权后应停止传 送。这个选择过程称为仲裁。当竞争中的主机发现其仲裁失败,应立即转换到从机 模式检测是否被获得总线控制权的的主机寻址。事实上多主机同时传送时不应该让 从机检测到,即不许破坏数据在总线上的传送。?不同的主机可能使用不同的 SCL 频率。为保证传送的一致性,必须设计一种同步主 机时钟的方案。这会简化仲裁过程。总线的线与功能用来解决上述问题。将所有的主机时钟进行与操作,会生成组合的时钟, 其高电平时间等于所有主机中最短的一个;低电平时间则等于所有主机中最长的一个。 所有的主机都监听 SCL, 使其可以有效地计算本身高 / 低电平与组合 SCL 信号高 / 低电平 的时间差异。 Figure 82. 多主机 SCL 的同步TA low TA highSCL from Master ASCL from Master BSCL bus Line TBlow Masters Start Counting Low Period TBhigh Masters Start Counting High Period输出数据之后所有的主机都持续监听 SDA 来实现仲裁。 如果从 SDA 读回的数值与主机输 出的数值不匹配,该主机即失去仲裁。要注意只有当一个主机输出高电平的 SDA,而其 它主机输出为低,该主机才会失去仲裁,并立即转为从机模式,检测是否被胜出的主机寻 址。失去仲裁的主机必须将 SDA 置高,但在当前的数据或地址包结束之前还可以产生时 钟信号。仲裁将会持续到系统只有一个主机。这可能会占用许多比特。如果几个主机对相 同的从机寻址,仲裁将会持续到数据包。164ATmega16(L)2466GCAVRC10/03 ATmega16(L)Figure 83. 两主机之间的仲裁START SDA from Master A Master A Loses Arbitration, SDAA SDASDA from Master BSDA LineSynchronized SCL Line注意不允许在以下情况进行仲裁: ? ? ? 一个 REPEATED START 状态与一个数据位 一个 STOP 状态与一个数据位 一个 REPEATED START 状态与一个 STOP 状态应用软件应考虑上述情况,保证不会出现这些非法仲裁状态。这意味着在多主机系统中, 所有的数据传输必须由相同的 SLA+R/W 与数据包组合组成。换句话说:所有的传送必须 包含相同数目的数据包,否则仲裁结果无法定义。1652466GCAVRC10/03 TWI 模块综述TWI模块由几个子模块组成, 如 Figure 84 所示。 所有位于粗线之中的寄存器可以通过 AVR 数据总线进行访问。 Figure 84. TWI 模块概述SCLSlew-rate Control Spike FilterSDASlew-rate Control Spike FilterBus Interface UnitSTART / STOP Control Spike SuppressionBit Rate GeneratorPrescalerArbitration detectionAddress/Data Shift Register (TWDR)AckBit Rate Register (TWBR)Address Match UnitAddress Register (TWAR)Control UnitStatus Register (TWSR) Control Register (TWCR)TWI UnitAddress Comparator State Machine and Status controlSCL 和 SDA 引脚SCL 与 SDA 为 MCU 的 TWI 接口引脚。 引脚的输出驱动器包含一个波形斜率限制器以满足 TWI 规范。引脚的输入部分包括尖峰抑制单元以去除小于 50 ns 的毛刺。当相应的端口设 置为 SCL 与 SDA 引脚时, 可以使能 I/O 口内部的上拉电阻, 这样可省掉外部的上拉电阻。 TWI 工作于主机模式时, 比特率发生器控制时钟信号 SCL 的周期。 具体由 TWI 状态寄存器 TWSR 的预分频系数以及比特率寄存器 TWBR 设定。 当 TWI 工作在从机模式时, 不需要对 比特率或预分频进行设定,但从机的 CPU 时钟频率必须大于 TWI 时钟线 SCL 频率的 16 倍。注意,从机可能会延长 SCL 低电平的时间,从而降低 TWI 总线的平均时钟周期。 SCL 的频率根据以下的公式产生: CPU Clock frequency SCL frequency = -----------------------------------------------------------TWPS 16 + 2(TWBR) ? 4 ? ? TWBR = TWI 比特率寄存器的数值 TWPS = TWI 状态寄存器预分频的数值TWI 工作在主机模式时, TWBR 值应该不小于 10。 否则主机会在 SDA 与 SCL 产生错误输 出作为提示信号。问题出现于 TWI 工作在主机模式下,向从机发送 Start + SLA + R/W 的 时候 ( 不需要真的有从机与总线连接 )。比特率发生器单元Note:总线接口单元该单元包括数据与地址移位寄存器 TWDR,START/STOP 控制器和总线仲裁判定硬件电 路。 TWDR 寄存器用于存放发送或接收的数据或地址。除了 8 位的 TWDR,总线接口单 元还有一个寄存器,包含了用于发送或接收应答的 (N)ACK。这个 (N)ACK 寄存器不能由 程序直接访问。当接收数据时,它可以通过 TWI 控制寄存器 TWCR 来置位或清零;在发 送数据时, (N)ACK 值由 TWCR 的设置决定。166ATmega16(L)2466GCAVRC10/03 ATmega16(L)START/STOP 控制器负责产生和检测 TWI 总线上的 START、 REPEATED START 与 STOP 状态。 即使在 MCU 处于休眠状态时, START/STOP 控制器仍然能够检测 TWI 总线 上的 START/STOP 条件,当检测到自己被 TWI 总线上的主机寻址时,将 MCU 从休眠状 态唤醒。 如果 TWI 以主机模式启动了数据传输,仲裁检测电路将持续监听总线,以确定是否可以 通过仲裁获得总线控制权。如果总线仲裁单元检测到自己在总线仲裁中丢失了总线控制 权,则通知 TWI 控制单元执行正确的动作,并产生合适的状态码。 地址匹配单元 地址匹配单元将检测从总线上接收到的地址是否与 TWAR 寄存器中的 7 位地址相匹配。 如果 TWAR 寄存器的 TWI 广播应答识别使能位 TWGCE 为 &1”,从总线接收到的地址也 会与广播地址进行比较。一旦地址匹配成功,控制单元将得到通知以进行正确地响应。 TWI 可以响应, 也可以不响应主机的寻址, 这取决于 TWCR 寄存器的设置。 即使 MCU 处于 休眠状态时,地址匹配单元仍可继续工作。一旦主机寻址到这个器件,就可以将 MCU 从 休眠状态唤醒。 控制单元监听 TWI 总线, 并根据 TWI 控制寄存器 TWCR 的设置作出相应的响应。 当 TWI 总线上产生需要应用程序干预处理的事件时, TWI 中断标志位 TWINT 置位。在下一个时 钟周期, TWI 状态寄存器 TWSR 被表示这个事件的状态码字所更新。在其它时间里, TWSR 的内容为一个表示无事件发生的特殊状态字。一旦 TWINT 标志位置 &1”,时钟线 SCL 即被拉低,暂停 TWI 总线上的数据传输,让用户程序处理事件。 在下列状况出现时, TWINT 标志位置位: ? ? ? ? ? ? ? ? 在 TWI 传送完 START/REPEATED START 信号之后 在 TWI 传送完 SLA+R/W 数据之后 在 TWI 传送完地址字节之后 在 TWI 总线仲裁失败之后 在 TWI 被主机寻址之后 ( 广播方式或从机地址匹配 ) 在 TWI 接收到一个数据字节之后 作为从机工作时, TWI 接收到 STOP 或 REPEATED START 信号之后 由于非法的 START 或 STOP 信号造成总线错误时控制单元1672466GCAVRC10/03 TWI 寄存器说明TWI 比特率寄存器- TWBRBit 读/写 初始值 7 TWBR7 R/W 0 6 TWBR6 R/W 0 5 TWBR5 R/W 0 4 TWBR4 R/W 0 3 TWBR3 R/W 0 2 TWBR2 R/W 0 1 TWBR1 R/W 0 0 TWBR0 R/W 0 TWBR? Bits 7..0 C TWI 比特率寄存器 TWBR 为比特率发生器分频因子。 比特率发生器是一个分频器, 在主机模式下产生 SCL 时 钟频率。比特率计算公式请见 P167“ 比特率发生器单元 ” 。 TWI 控制寄存器- TWCRBit 读/写 初始值 7 TWINT R/W 0 6 TWEA R/W 0 5 TWSTA R/W 0 4 TWSTO R/W 0 3 TWWC R 0 2 TWEN R/W 0 1 C R 0 0 TWIE R/W 0 TWCRTWCR 用来控制 TWI 操作。 它用来使能 TWI, 通过施加 START 到总线上来启动主机访问, 产生接收器应答,产生 STOP 状态,以及在写入数据到 TWDR 寄存器时控制总线的暂停 等。这个寄存器还可以给出在 TWDR 无法访问期间,试图将数据写入到 TWDR 而引起的 写入冲突信息。 ? Bit 7 C TWINT: TWI 中断标志 当 TWI 完成当前工作, 希望应用程序介入时 TWINT 置位。 若 SREG 的 I 标志以及 TWCR 寄存器的 TWIE 标志也置位,则 MCU 执行 TWI 中断例程。当 TWINT 置位时, SCL 信 号的低电平被延长。 TWINT 标志的清零必须通过软件写 &1” 来完成。执行中断时硬件不 会自动将其改写为 &0”。要注意的是,只要这一位被清零, TWI 立即开始工作。因此,在 清零 TWINT 之前一定要首先完成对地址寄存器 TWAR,状态寄存器 TWSR,以及数据寄 存器 TWDR 的访问。 ? Bit 6 C TWEA: 使能 TWI 应答 TWEA 标志控制应答脉冲的产生。若 TWEA 置位,出现如下条件时接口发出 ACK 脉冲: 1. 器件的从机地址与主机发出的地址相符合 2. TWAR 的 TWGCE 置位时接收到广播呼叫 3. 在主机 / 从机接收模式下接收到一个字节的数据 将 TWEA 清零可以使器件暂时脱离总线。置位后器件重新恢复地址识别。 ? Bit 5 C TWSTA: TWI START 状态标志 当 CPU 希望自己成为总线上的主机时需要置位 TWSTA。 TWI 硬件检测总线是否可用。 若总线空闲,接口就在总线上产生 START 状态。若总线忙,接口就一直等待,直到检测 到一个 STOP 状态 ,然后产生 START 以声明自己希望成为主机。发送 START 之后软件 必须清零 TWSTA。 ? Bit 4 C TWSTO: TWI STOP 状态标志 在主机模式下,如果置位 TWSTO,TWI 接口将在总线上产生 STOP 状态,然后 TWSTO 自动清零。在从机模式下,置位 TWSTO 可以使接口从错误状态恢复到未被寻址的状态。 此时总线上不会有 STOP 状态产生,但 TWI 返回一个定义好的未被寻址的从机模式且释 放 SCL 与 SDA 为高阻态。168ATmega16(L)2466GCAVRC10/03 ATmega16(L)? Bit 3 C TWWC: TWI 写碰撞标志 当 TWINT 为低时写数据寄存器 TWDR 将置位 TWWC。当 TWINT 为高时,每一次对 TWDR 的写访问都将更新此标志。 ? Bit 2 C TWEN: TWI 使能 TWEN 位用于使能 TWI 操作与激活 TWI 接口。 当 TWEN 位被写为 &1” 时, TWI 引脚将 I/O 引 脚切换到 SCL 与 SDA 引脚,使能波形斜率限制器与尖峰滤波器。如果该位清零, TWI 接口模块将被关闭,所有 TWI 传输将被终止。 ? Bit 1 C Res: 保留 保留,读返回值为 ”0”。 ? Bit 0 C TWIE: 使能 TWI 中断 当 SREG 的 I 以及 TWIE 置位时,只要 TWINT 为 &1”, TWI 中断就激活。 TWI 状态寄存器- TWSRBit 读/写 初始值 7 TWS7 R 1 6 TWS6 R 1 5 TWS5 R 1 4 TWS4 R 1 3 TWS3 R 1 2 C R 0 1 TWPS1 R/W 0 0 TWPS0 R/W 0 TWSR? Bits 7..3 C TWS: TWI 状态 这 5 位用来反映 TWI 逻辑和总线的状态。不同的状态代码将会在后面的部分描述。注意 从 TWSR 读出的值包括 5 位状态值与 2 位预分频值。检测状态位时设计者应屏蔽预分频 位为 &0”。这使状态检测独立于预分频器设置。在无特殊声明的情况下,在手册中使用该 方法。 ? Bit 2 C Res: 保留 保留,读返回值为 &0”。 ? Bits 1..0 C TWPS: TWI 预分频位 这两位可读 / 写,用于控制比特率预分频因子。 Table 73. TWI 比特率预分频器TWPS1 0 0 1 1 TWPS0 0 1 0 1 预分频器值 1 4 16 64如何计算比特率请见 P167“ 比特率发生器单元 ” 。 TWPS1..0 值在该公式中使用。 TWI 数据寄存器- TWDRBit 读/写 初始值 7 TWD7 R/W 1 6 TWD6 R/W 1 5 TWD5 R/W 1 4 TWD4 R/W 1 3 TWD3 R/W 1 2 TWD2 R/W 1 1 TWD1 R/W 1 0 TWD0 R/W 1 TWDR1692466GCAVRC10/03 在发送模式, TWDR 包含了要发送的字节;在接收模式, TWDR 包含了接收到的数据。 当 TWI 接口没有进行移位工作 (TWINT 置位 ) 时这个寄存器是可写的。在第一次中断发生 之前用户不能够初始化数据寄存器。只要 TWINT 置位,TWDR 的数据就是稳定的。在数 据移出时,总线上的数据同时移入寄存器。 TWDR 总是包含了总线上出现的最后一个字 节,除非 MCU 是从掉电或省电模式被 TWI 中断唤醒。此时 TWDR 的内容没有定义。总 线仲裁失败时,主机将切换为从机,但总线上出现的数据不会丢失。 ACK 的处理由 TWI 逻辑自动管理, CPU 不能直接访问 ACK。 ? Bits 7..0 C TWD: TWI 数据寄存器 根据状态的不同,其内容为要发送的下一个字节,或是接收到的数据。 TWI( 从机 ) 地址寄存器- TWARBit 读/写 初始值7 TWA6 R/W 16 TWA5 R/W 15 TWA4 R/W 14 TWA3 R/W 13 TWA2 R/W 12 TWA1 R/W 11 TWA0 R/W 10 TWGCE R/W 0 TWARTWAR 的高 7 位为从机地址。 工作于从机模式时,TWI 将根据这个地址进行响应。 主机模 式不需要此地址。在多主机系统中, TWAR 需要进行设置以便其他主机访问自己。 TWAR 的 LSB 用于识别广播地址 (0x00)。器件内有一个地址比较器。一旦接收到的地址 和本机地址一致,芯片就请求中断。 ? Bits 7..1 C TWA: TWI 从机地址寄存器 其值为从机地址。 ? Bit 0 C TWGCE: 使能 TWI 广播识别 置位后 MCU 可以识别 TWI 总线广播。使用 TWIAVR 的 TWI 接口是面向字节和基于中断的。 所有的总线事件, 如接收到一个字节或发送了 一个 START 信号等,都会产生一个 TWI 中断。由于 TWI 接口是基于中断的,因此 TWI 接口在字节发送和接收过程中,不需要应用程序的干预。 TWCR 寄存器的 TWI 中断允许 TWIE 位和 SREG 寄存器的全局中断允许位一起决定了应用程序是否响应 TWINT 标志位产 生的中断请求。如果 TWIE 被清零,应用程序只能采用轮询 TWINT 标志位的方法来检测 TWI 总线状态。 当 TWINT 标志位置 &1” 时,表示 TWI 接口完成了当前的操作,等待应用程序的响应。在 这种情况下,TWI 状态寄存器 TWSR 包含了表明当前 TWI 总线状态的值。应用程序可以 读取 TWCR 的状态码, 判别此时的状态是否正确, 并通过设置 TWCR 与 TWDR 寄存器, 决定在下一个 TWI 总线周期 TWI 接口应该如何工作。 Figure 85 给出应用程序与 TWI 接口连接的例子。 该例中, 主机发送一个数据字节给从机。 这里只是简述,本节的后面会有更多的解释,还有简单的代码例程。170ATmega16(L)2466GCAVRC10/03 ATmega16(L)Figure 85. 典型数据传输中应用程序与 TWI 的接口1. Application writes to TWCR to initiate transmission of START 3. Check TWSR to see if START was sent. Application loads SLA+W into TWDR, and loads appropriate control signalsinto TWCR, making sure that TWINT is written to one, and TWSTA is written to zero 5. Check TWSR to see if SLA+W was sent and ACK received. Application loads data into TWDR, and loads appropriate control signals into TWCR, making sure that TWINT is written to one 7. Check TWSR to see if data was sent and ACK received. Application loads appropriate control signals to send STOP into TWCR, making sure that TWINT is written to oneApplication ActionTWI busSTARTSLA+WADataASTOPTWI Hardware Action2. TWINT set. Status code indicates START condition sent4. TWINT set. Status code indicates SLA+W sent, ACK received6. TWINT set. Status code indicates data sent, ACK receivedIndicates TWINT set1. 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 更新为新的状态码, 表示数据包成功发送。状态代码还会反映从机是否响应包。 7. 应用程序应检验 TWSR, 确定地址包已成功发送、 ACK 为期望值。如果 TWSR 显 示为其它,应用程序可能执行一些指定操作,比如调用错误处理程序。如果状态 码与预期一致, TWCR 必须写入特定值指示 TWI 硬件发送 STOP 信号。 写入的 值将在后面说明。在写入值时 TWINT 位要置位,这非常重要。给 TWINT 写 &1” 清除此标志。 TWCR 寄存器中的 TWINT 置位期间 TWI 不会启动任何操作。一 旦 TWINT 清零, TWI 启动 STOP 信号的传送。 注意 TWINT 在 STOP 状态发送 后不会置位。 尽管示例比较简单,但它包含了 TWI 数据传输过程中的所有规则。总结如下: ? 当 TWI 完成一次操作并等待反馈时, TWINT 标志置位。直到 TWINT 清零,时钟线 SCL 才会拉低。 1712466GCAVRC10/03 ? ?TWINT 标志置位时, 用户必须用与下一个 TWI 总线周期相关的值更新 TWI 寄存器。 例 如, TWDR 寄存器必须载入下一个总线周期中要发送的值。 当所有的 TWI 寄存器得到更新,而且其它挂起的应用程序也已经结束, TWCR 被写 入数据。写 TWCR 时, TWINT 位应置位。对 TWINT 写 &1” 清除此标志。 TWI 将 开始执行由 TWCR 设定的操作。下面给出了汇编与 C 语言例程。注意假设下面代码均已给出定义。汇编代码例程 1ldi out r16, (1&&TWINT)|(1&&TWSTA)| (1&&TWEN) TWCR, r16 while (!(TWCR & (1&&TWINT))) ; r16,TWCRC 例程TWCR = (1&&TWINT)|(1&&TWSTA)| (1&&TWEN)说明 发出 START 信号2wait1: in sbrs r16,TWINT rjmp wait1等待 TWINT 置位, TWINT 置位表示 START 信号已发出3in cpi ldi out ldi outr16,TWSR r16, START r16, SLA_W TWDR, r16 r16, (1&&TWINT) | (1&&TWEN) TWCR, r16if ((TWSR & 0xF8) != START) ERROR();andi r16, 0xF8 brne ERROR检验 TWI 状态寄存器,屏蔽预分频位,如 果状态字不是 START 转出错处理TWDR = SLA_W; TWCR = (1&&TWINT) | (1&&TWEN);装入 SLA_W 到 TWDR 寄存器, TWINT 位清零,启动发送地址4wait2: in r16,TWCR sbrs r16,TWINT rjmp wait2while (!(TWCR & (1&&TWINT))) ;等待 TWINT 置位, TWINT 置位表示总线 命令 SLA+W 已发出,及收到应答信号 ACK/NACK 检验 TWI 状态寄存器,屏蔽预分频位,如 果状态字不是 MT_SLA_ACK 转出错处理5in cpi ldi out ldi outr16,TWSR r16, MT_SLA_ACK r16, DATA TWDR, r16 r16, (1&&TWINT) | (1&&TWEN) TWCR, r16if ((TWSR & 0xF8) != MT_SLA_ACK) ERROR();andi r16, 0xF8 brne ERRORTWDR = DATA; TWCR = (1&&TWINT) | (1&&TWEN);装入数据到 TWDR 寄存器, TWINT 清 零,启动发送数据6wait3: in r16,TWCR sbrs r16,TWINT rjmp wait3while (!(TWCR & (1&&TWINT))) ;等待 TWINT 置位, TWINT 置位表示总线 数据 DATA 已发送,及收到应答信号 ACK/NACK7in cpi ldi outr16,TWSR r16, MT_DATA_ACK r16, (1&&TWINT)|(1&&TWEN)| (1&&TWSTO) TWCR, r16andi r16, 0xF8 brne ERRORif ((TWSR & 0xF8) != MT_DATA_ACK) 检验 TWI 状态寄存器,屏蔽预分频器,如 ERROR(); 果状态字不是 MT_DATA_ACK 转出错处理TWCR = (1&&TWINT)|(1&&TWEN)| (1&&TWSTO);发送 STOP 信号172ATmega16(L)2466GCAVRC10/03 ATmega16(L)数据传输模式TWI 可以工作于 4 个不同的模式:主机发送器 (MT)、主机接收器 (MR)、从机发送器 (ST) 及从机接收器 (SR)。 同一应用程序可以使用几种模式。例如, TWI 可用 MT 模式给 TWI EEPROM 写入数据, 用 MR 模式从 EEPROM 读取数据。 如果系统中有其它主机存在 , 它 们可能给 TWI 发送数据,此时就可以用 SR 模式。应用程序决定采用何种模式。 下面对每种模式进行具体说明。每种模式的状态码在详细说明数据发送的图中进行描述。 这些图包含了如下的缩写: S: START 状态 Rs:REPEATED START 状态 R:读一个比特 (SDA 为高电平 ) W:写一个比特 (SDA 为低电平 ) A:应答位 (SDA 为低电平 ) A: 无应答位 (SDA 为高电平 ) Data:8 位数据 P: STOP 状态 SLA:从机地址 在 Figure 87 到 Figure 93 中,圆圈用来说明 TWINT 标志已经置位。 圆圈中的数字用来表 示预 TWSR 的数值,其中分频位屏蔽为 0。在这些地方应用程序必须执行合适的工作以 继续 / 完成 TWI 传输。 TWI 传输被挂起,一直到 TWINT 标志被软件清零。 TWINT 标志置位后, TWSR 的状态码用来决定适当的软件操作。Table 74 到 Table 77 给 出了每一个状态码所需的软件工作和后续串行传输的细节。注意在这些表中预分频位屏 蔽为 0。 主机发送模式 在主机发送模式,主机可以向从机发送数据,如 Figure 86 所示。为进入主机模式,必须 发送 START 信号。紧接着的地址包格式决定进入 MT 或 MR 模式。 如果发送 SLA+W 进 入 MT 模式;如果发送 SLA+R 则进入 MR 模式。本节所提到的状态字均假设其预分频位 为 &0”。 Figure 86. 主机发送模式下的数据传输VCCDevice 1MASTER TRANSMITTERDevice 2SLAVE RECEIVERDevice 3........Device nR1R2SDASCL通过在 TWCR 寄存器中写入下列数值发出 START 信号:TWCR 值 TWINT 1 TWEA X TWSTA 1 TWSTO 0 TWWC X TWEN 1 C 0 TWIE XTWEN 必须置位以使能两线接口, TWSTA 必须置 &1” 来发出 START 信号且 TWINT 必须置 &1” 来对 TWINT 标志清零。TWI 逻辑开始检测串行总线, 一旦总线空闲就发送 START。 接 着中断标志 TWINT 置位,TWSR 的状态码为 0x08 ( 见 Table 74)。 为进入 MT 模式 ,必 1732466GCAVRC10/03 须发送 SLA+W。 这可通过对 TWDR 写入 SLA+W 来实现。 完成此操作后软件清零 TWINT 标志, TWI 传输继续进行。这通过在 TWCR 寄存器中写入下述值完成:TWCR 值 TWINT 1 TWEA X TWSTA 0 TWSTO 0 TWWC X TWEN 1 C 0 TWIE X当 SLA+W 发送完毕并接收到确认信号, 主机的 TWINT 标志再次置位。 此时主机的 TWSR 状态码可能是 0x18、 0x20 或 0x38。对各状态码的正确响应列于 Table 74。 SLA+W 发送成功后可以开始发送数据包。 这通过对 TWDR 写入数据实现。 TWDR 只有在 TWINT 为高时方可写入。否则,访问被忽略,寄存器 TWCR 的写碰撞位 TWWC 置位。 TWDR 更新后, TWINT 位应清零来继续传送。 这通过在 TWCR 寄存器中写入下述值完成 :TWCR 值 TWINT 1 TWEA X TWSTA 0 TWSTO 0 TWWC X TWEN 1 C 0 TWIE X这过程会一直重复下去,直到最后的字节发送完且发送器产生 STOP 或 REPEATED START 信号 。 STOP 信号通过在 TWCR 中写入下述值实现:TWCR 值 TWINT 1 TWEA X TWSTA 0 TWSTO 1 TWWC X TWEN 1 C 0 TWIE XREPEATED START 信号通过在 TWCR 中写入下述值实现:TWCR 值 TWINT 1 TWEA X TWSTA 1 TWSTO 0 TWWC X TWEN 1 C 0 TWIE X在 REPEATED START ( 状态 0x10) 后,两线接口可以再次访问相同的从机,或不发送 STOP 信号来访问新的从机。 REPEATED START 使得主机可以在不丢失总线控制的条件 下在从机、主机发送器及主机接收器模式间进行切换。 Table 74. 主机发送模式的状态码应用软件的响应 状态码 (TWSR) 预分 频位为 &0”$08对 TWCR 的操作 2 线串行总线和 2 线串行硬件 的状态 START 已发送 重复 START 已发送 读 / 写 TWDR 加载 SLA+W 加载 SLA+W 或 加载 SLA+R STA0STO0TWIN T1TWE AX2 线串行硬件下一步应采取的动作 将发送 SLA+W 将接收到 ACK 或 NOT ACK 将发送 SLA+W 将接收到 ACK 或 NOT ACK 将发送 SLA+R 切换到主机接收模式$100 00 01 1X X$18SLA+W 已发送; 接收到 ACK加载数据 ( 字节 ) 或 不操作 TWDR 或 不操作 TWDR 或 不操作 TWDR0 1 0 10 0 1 11 1 1 1X X X X将发送数据,接收 ACK 或 NOT ACK 将发送重复 START 将发送 STOP, TWSTO 将复位 将发送 STOP,然后发送 START, TWSTO 将复 位 将发送数据,接收 ACK 或 NOT ACK 将发送重复 START 将发送 STOP, TWSTO 将复位 将发送 STOP,然后发送 START, TWSTO 将复 位$20SLA+W 已发送 接收到 NOT ACK加载数据 ( 字节 ) 或 不操作 TWDR 或 不操作 TWDR 或 不操作 TWDR0 1 0 10 0 1 11 1 1 1X X X X174ATmega16(L)2466GCAVRC10/03 ATmega16(L)Table 74. 主机发送模式的状态码$28数据已发送 接收到 ACK加载数据 ( 字节 ) 或 不操作 TWDR 或 不操作 TWDR 或 不操作 TWDR0 1 0 10 0 1 11 1 1 1X X X X将发送数据,接收 ACK 或 NOT ACK 将发送重复 START 将发送 STOP, TWSTO 将复位 将发送 STOP,然后发送 START, TWSTO 将复 位 将发送数据,接收 ACK 或 NOT ACK 将发送重复 START 将发送 STOP, TWSTO 将复位 将发送 STOP,然后发送 START, TWSTO 将复 位$30数据已发送 接收到 NOT ACK加载数据 ( 字节 ) 或 不操作 TWDR 或 不操作 TWDR 或 不操作 TWDR0 1 0 10 0 1 11 1 1 1X X X X$38SLA+W 或数据的仲裁失败不操作 TWDR 或 不操作 TWDR0 10 01 1X X2 线串行总线将被释放,并进入未寻址从机模式 总线空闲后将发送 STARTFigure 87. 主机发送模式的格式和状态MTSuccessfull transmission to a slave receiverSSLAWADATAAP$08Next transfer started with a repeated start condition$18$28RSSLAW$10Not acknowledge received after the slave addressAPR$20MRNot acknowledge received after a data byteAP$30Arbitration lost in slave address or data byteA or AOther master continuesA or AOther master continues$38Arbitration lost and addressed as slave$38Other master continuesA$68$78$B0To corresponding states in slave modeFrom master to slaveDATAAAny number of data bytes and their associated acknowledge bits This number (contained in TWSR) corresponds to a defined state of the Two-wire Serial Bus. The prescaler bits are zero or masked to zeroFrom slave to mastern1752466GCAVRC10/03 主机接收模式在主机接收模式,主机可以从从机接收数据,如 Figure 88 所示。为进入主机模式,必须 发送 START 信号。紧接着的地址包格式决定进入 MT 或 MR 模式。 如果发送 SLA+W 进 入 MT 模式;如果发送 SLA+R 则进入 MR 模式。本节所提到的状态字均假设其预分频位 为 &0”。 Figure 88. 主机接收模式下的数据传输VCCDevice 1MASTER RECEIVERDevice 2SLAVE TRANSMITTERDevice 3........Device nR1R2SDASCL通过在 TWCR 寄存器中写入下列数值发出 START 信号:TWCR 值 TWINT 1 TWEA X TWSTA 1 TWSTO 0 TWWC X TWEN 1 C 0 TWIE XTWEN 必须置位以使能两线接口, TWSTA 必须置 &1” 来发出 START 信号且 TWINT 必须置 &1” 来对 TWINT 标志清零。TWI 逻辑开始检测串行总线, 一旦总线空闲就发送 START。 接 着中断标志 TWINT 置位,TWSR 的状态码为 0x08 ( 见 Table 74)。 为进入 MR 模式 ,必 须发送 SLA+R。这可通过对 TWDR 写入 SLA+R 来实现。完成此操作后软件清零 TWINT 标志, TWI 传输继续进行。这通过在 TWCR 寄存器中写入下述值完成:TWCR 值 TWINT 1 TWEA X TWSTA 0 TWSTO 0 TWWC X TWEN 1 C 0 TWIE X当 SLA+R 发送完毕并接收到确认信号, 主机的 TWINT 标志再次置位。 此时主机的 TWSR 状态码可能是 0x38、 0x40 或 0x48。对各状态码的正确响应列于 Table 75。 TWDR 只有 在 TWINT 为高时才能读收到的数据。 这过程会一直重复下去, 直到最后的字节接收结束。 接收完成后, MR 应通过在接收到最后的字节后发送 NACK 信号。发送器产生 STOP 或 REPEATED START 信号结束传送。 STOP 信号通过在 TWCR 中写入下述值实现:TWCR 值 TWINT 1 TWEA X TWSTA 0 TWSTO 1 TWWC X TWEN 1 C 0 TWIE XREPEATED START 信号结束传送。 STOP 信号通过在 TWCR 中写入下述值实现:TWCR 值 TWINT 1 TWEA X TWSTA 1 TWSTO 0 TWWC X TWEN 1 C 0 TWIE X在 REPEATED START ( 状态 0x10) 后,两线接口可以再次访问相同的从机,或不发送 STOP 信号来访问新的从机。 REPEATED START 使得主机可以在不丢失总线控制的条件 下在从机、主机发送器及主机接收器模式间进行切换。 Table 75. 主机接收模式的状态码应用软件的响应 状态码 (TWSR) 预分 频位为 &0” 对 TWCR 的操作 2 线串行总线和 2 线串行硬件 的状态 读 / 写 TWDR STA STO TWIN T TWE A 2 线串行硬件下一步应采取的动作176ATmega16(L)2466GCAVRC10/03 ATmega16(L)Table 75. 主机接收模式的状态码 (Continued)$08START 已发送 重复 START 已发送加载 SLA+R 加载 SLA+R 或 加载 SLA+W001X将发送 SLA+R 将接收到 ACK 或 NOT ACK 将发送 SLA+R 将接收到 ACK 或 NOT ACK 将发送 SLA+W 逻辑切换到主机发送模式$100 00 01 1X X$38SLA+R 或 NOT ACK 的仲裁 失败 SLA+R 已发送 接收到 ACK SLA+R 已发送 接收到 NOT ACK不操作 TWDR 或 不操作 TWDR0 10 0 0 0 0 1 11 1 1 1 1 1 1X X 0 12 线串行总线将被释放,并进入未寻址从机模式 总线空闲后将发送 START 接收数据,返回 NOT ACK 接收数据,返回 ACK$40不操作 TWDR 或 不操作 TWDR0 0$48不操作 TWDR 或 不操作 TWDR 或 不操作 TWDR1 0 1X X X将发送重复 START 将发送 STOP, TWSTO 将复位 将发送 STOP,然后发送 START, TWSTO 将复 位$50接收到数据 ACK 已返回 接收到数据 NOT ACK 已返回读数据或 读数据0 00 0 0 1 11 1 1 1 10 1接收数据,返回 NOT ACK 接收数据,返回 ACK$58读数据或 读数据或 读数据1 0 1X X X将发送重复 START 将发送 STOP, TWSTO 将复位 将发送 STOP,然后发送 START, TWSTO 将复 位1772466GCAVRC10/03 Figure 89. 主机接收模式的格式和状态MRSuccessfull reception from a slave receiverSSLARADATAADATAAP$08Next transfer started with a repeated start condition$40$50$58RSSLAR$10Not acknowledge received after the slave addressAPW$48MTArbitration lost in slave address or data byteA or AOther master continuesAOther master continues$38Arbitration lost and addressed as slave$38Other master continuesA$68$78$B0To corresponding states in slave modeFrom master to slaveDATAAAny number of data bytes and their associated acknowledge bits This number (contained in TWSR) corresponds to a defined state of the Two-wire Serial Bus. The prescaler bits are zero or masked to zeroFrom slave to mastern从机接收模式在从机接收模式,从机自主机接收数据,如 Figure 90 所示。本节所提到的状态字均假设 其预分频位为 &0”。 Figure 90. 从机接收模式下的数据传输VCCDevice 1SLAVE RECEIVERDevice 2MASTER TRANSMITTERDevice 3........Device nR1R2SDASCL为启动从机接收模式, TWAR 与 TWCR 设置如下:TWAR 值 TWA6 TWA5 TWA4 TWA3 器件本身从机地址 TWA2 TWA1 TWA0 TWGCE178ATmega16(L)2466GCAVRC10/03 ATmega16(L)前 7 位是主机寻址时从机响应的 TWI 接口地址。若 LSB 置位,则 TWI 接口响应广播地址 0x00。否则忽略广播地址。TWCR 值 TWINT 0 TWEA 1 TWSTA 0 TWSTO 0 TWWC 0 TWEN 1 C 0 TWIE XTWEN 必须置位以使能 TWI 接口。 TWEA 也要置位以使主机寻址到自己(从机地址或广播) 时返回确认信息 ACK。 TWSTA 和 TWSTO 必须清零。 初始化 TWAR 和 TWCR 之后, TWI 接口即开始等待,直到自己的从机地址 ( 或广播地 址,如果 TWAR 的 TWGCE 置位的话 ) 出现在主机寻址地址当中,并且数据方向位为 0 ( 写 )。然后 TWINT 标志置位, TWSR 则包含了相应的状态码。对各状态码的正确响应列 于 Table 76。当 TWI 接口处于主机模式 ( 状态 0x68 或 0x78) 并发生仲裁失败时 CPU 将 进入从机接收模式。 如果在传输过程中 TWEA 复位, TWI 接口在接收到下一个字节后将向 SDA 返回 “ 无应 答” 。 TWEA 复位时 TWI 接口不再响应自己的从机地址,但是会继续监视总线。一旦 TWEA 置位就可以恢复地址识别和响应。 也就是说, 可以利用 TWEA 暂时将 TWI 接口从总 线中隔离出来。 在除空闲模式外的其它休眠模式时, TWI 接口的时钟被关闭。若使能了从机接收模式, 接口将利用总线时钟继续响应广播地址 / 从机地址。地址匹配将唤醒 CPU。在唤醒期间, TWI 接口将保持 SCL 为低电平, 直至 TWCINT 标志清零。 当 AVR 时钟恢复正常运行后 TWI 可以接收更多的数据。显然如果 AVR 设置为长启动时间,时钟线 SCL 可能会长时间保持 低,阻塞其它数据的传送。 当 MCU 从这些休眠模式唤醒时,和正常工作模式不同的是,数据寄存器 TWDR 的数据 并不反映总线上出现的最后一个字节。1792466GCAVRC10/03 Table 76. 从机接收模式的状态码应用软件的响应 状态码 (TWSR) 预分 频位为 &0”$60对 TWCR 的操作 2 线串行总线和 2 线串行硬件的 状态 自己的 SLA+W 已经被接收 ACK 已返回 SLA+R/W 作为主机的仲裁失 败;自己的 SLA+W 已经被接 收 ACK 已返回 接收到广播地址 ACK 已返回 SLA+R/W 作为主机的仲裁失 败;接收到广播地址 ACK 已返回 以前以自己的 SLA+W 被寻址 ;数据已经被接收 ACK 已返回 以前以自己的 SLA+W 被寻址 ;数据已经被接收 NOT ACK 已返回 读 / 写 TWDR 不操作 TWDR 或 不操作 TWDR STAX XSTO0 0 0 0TWIN T1 1 1 1TWE A0 12 线串行硬件下一步应采取的动作 接收数据,返回 NOT ACK 接收数据,返回 ACK$68不操作 TWDR 或 不操作 TWDR 不操作 TWDR 或 不操作 TWDRX X0 1接收数据,返回 NOT ACK 接收数据,返回 ACK$70X X0 0 0 0 0 0 0 0 01 1 1 1 1 1 1 1 10 1接收数据,返回 NOT ACK 接收数据,返回 ACK$78不操作 TWDR 或 不操作 TWDR 不操作 TWDR 或 不操作 TWDR 读数据或 读数据或X X X X 0 0 10 1接收数据,返回 NOT ACK 接收数据,返回 ACK$800 1 0 1 0接收数据,返回 NOT ACK 接收数据,返回 ACK 切换到未寻址从机模式;不再识别自己的 SLA 或 GCA 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别 切换到未寻址从机模式;不再识别自己的 SLA 或 GCA ;总线空闲时发送 START 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别;总线空 闲时发送 START$88读数据或1 0 1 1读数据180ATmega16(L)2466GCAVRC10/03 ATmega16(L)Table 76. 从机接收模式的状态码 (Continued)$90以前以广播方式被寻址;数据 已经被接收 ACK 已返回 以前以广播方式被寻址;数据 已经被接收 NOT ACK 已返回读数据或 读数据 读数据或 读数据或 rX X 0 0 10 0 0 0 01 1 1 1 10 1接收数据,返回 NOT ACK 接收数据,返回 ACK$980 1 0切换到未寻址从机模式;不再识别自己的 SLA 或 GCA 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别 切换到未寻址从机模式;不再识别自己的 SLA 或 GCA ;总线空闲时发送 START 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别;总线空 闲时发送 START读数据或1 0 1 1读数据$A0在以从机工作时接收到 STOP 或重复 START无操作0 0 10 0 01 1 10 1 0切换到未寻址从机模式;不再识别自己的 SLA 或 GCA 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别 切换到未寻址从机模式;不再识别自己的 SLA 或 GCA ;总线空闲时发送 START 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别;总线空 闲时发送 START10111812466GCAVRC10/03 Figure 91. 从机接收模式的格式和状态Reception of the own slave address and one or more data bytes. All are acknowledgedSSLAWADATAADATAAP or S$60Last data byte received is not acknowledged$80$80$A0AP or S$88Arbitration lost as master and addressed as slaveA$68Reception of the general call address and one or more data bytesGeneral CallADATAADATAAP or S$70Last data byte received is not acknowledged$90$90$A0AP or S$98Arbitration lost as master and addressed as slave by general callA$78From master to slaveDATAAAny number of data bytes and their associated acknowledge bits This number (contained in TWSR) corresponds to a defined state of the Two-wire Serial Bus. The prescaler bits are zero or masked to zeroFrom slave to mastern从机发送模式在从机发送模式,从机可以向主机发送数据,如 Figure 92 所示。 本节所提到的状态字均 假设其预分频位为 &0”。 Figure 92. 从机发送模式下的数据传输VCCDevice 1SLAVE TRANSMITTERDevice 2MASTER RECEIVERDevice 3........Device nR1R2SDASCL为启动从机发送模式, TWAR 与 TWCR 设置如下:TWAR 值 TWA6 TWA5 TWA4 TWA3 器件本身从机地址 TWA2 TWA1 TWA0 TWGCE182ATmega16(L)2466GCAVRC10/03 ATmega16(L)前 7 位是主机寻址时从机响应的 TWI 接口地址。若 LSB 置位,则 TWI 接口响应广播地址 0x00。否则忽略广播地址。TWCR 值 TWINT 0 TWEA 1 TWSTA 0 TWSTO 0 TWWC 0 TWEN 1 C 0 TWIE XTWEN 必须置位以使能 TWI 接口。 TWEA 也要置位以便主机寻址到自己(从机地址或广播) 时返回确认信息 ACK。 TWSTA 和 TWSTO 必须清零。 初始化 TWAR 和 TWCR 之后, TWI 接口即开始等待,直到自己的从机地址 ( 或广播地 址,如果 TWAR 的 TWGCE 置位的话 ) 出现在主机寻址地址当中,并且数据方向位为 &1” ( 读 )。 然后 TWI 中断标志置位, TWSR 则包含了相应的状态码。 对各状态码的正确响应列 于 Table 77。 当 TWI 接口处于主机模式 ( 状态 0xB0) 并发生仲裁失败时 CPU 将进入从机 发送模式。 如果在传输过程中 TWEA 复位,TWI 接口发送完数据之后进入状态 0xC0 或 0xC8。接口 也切换到未寻址从机模式,忽略任何后续总线传输。从而主机接收到的数据全为 “1”。如 果主机需要附加数据位 ( 通过发送 ACK),即使从机已经传送结束,也进入状态 0xC8。 TWEA 复位时 TWI 接口不再响应自己的从机地址, 但是会继续监视总线。 一旦 TWEA 置位 就可以恢复地址识别和响应。也就是说,可以利用 TWEA 暂时将 TWI 接口从总线中隔离 出来。 在除空闲模式外的其它休眠模式时, TWI 接口的时钟被关闭。若使能了从机接收模式, 接口将利用总线时钟继续响应广播地址 / 从机地址。地址匹配将唤醒 CPU。在唤醒期间, TWI 接口将保持 SCL 为低电平, 直至 TWCINT 标志清零。 当 AVR 时钟恢复正常运行后可以 发送更多的数据。显然如果 AVR 设置为长启动时间,时钟线 SCL 可能会长时间保持低, 阻塞其它数据的传送。 当 MCU 从这些休眠模式唤醒时,和正常工作模式不同的是,数据寄存器 TWDR 的数据 并不反映总线上出现的最后一个字节。1832466GCAVRC10/03 Table 77. 从机发送模式的状态码应用软件的响应 状态码 (TWSR) 预分 频位为 &0”$A8对 TWCR 的操作 2 线串行总线和 2 线串行硬件的 状态 自己的 SLA+R 已经被接收 ACK 已返回 读 / 写 TWDR 加载一字节的数 据或 加载一字节的数 据 STAX XSTO0 0TWIN T1 1TWE A0 12 线串行硬件下一步应采取的动作 发送一字节的数据,接收 NOT ACK 发送数据,接收 ACK$B0SLA+R/W 作为主机的仲裁失 败;自己的 SLA+R 已经被接 收 ACK 已返回 TWDR 里数据已经发送 接收到 ACK加载一字节的数 据或 加载一字节的数 据 加载一字节的数 据或 加载一字节的数 据X X0 01 10 1发送一字节的数据,接收 NOT ACK 发送数据,接收 ACK$B8X X0 01 10 1发送一字节的数据,接收 NOT ACK 发送数据,接收 ACK$C0TWDR 里数据已经发送 接收到 NOT ACK不操作 TWDR 或 不操作 TWDR 或0 0 10 0 01 1 10 1 0切换到未寻址从机模式;不再识别自己的 SLA 或 GCA 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别 切换到未寻址从机模式;不再识别自己的 SLA 或 GCA ;总线空闲时发送 START 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别;总线空 闲时发送 START不操作 TWDR 或1 0 1 1不操作 TWDR$C8TWDR 的一字节数据已经发送 (TWAE = “0”); 接收到 ACK不操作 TWDR 或 不操作 TWDR 或0 0 10 0 01 1 10 1 0切换到未寻址从机模式;不再识别自己的 SLA 或 GCA 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别 切换到未寻址从机模式;不再识别自己的 SLA 或 GCA ;总线空闲时发送 START 切换到未寻址从机模式;能够识别自己的 SLA ;若 TWGCE = “1”, GCA 也可以识别;总线空 闲时发送 START不操作 TWDR 或1 0 1 1不操作 TWDR184ATmega16(L)2466GCAVRC10/03 ATmega16(L)Figure 93. 从机发送模式的格式和状态Reception of the own slave address and one or more data bytesSSLARADATAADATAAP or S$A8Arbitration lost as master and addressed as slave$B8$C0A$B0Last data byte transmitted. Switched to not addressed slave (TWEA = '0')AAll 1'sP or S$C8From master to slaveDATAAAny number of data bytes and their associated acknowledge bits This number (contained in TWSR) corresponds to a defined state of the Two-wire Serial Bus. The prescaler bits are zero or masked to zeroFrom slave to mastern其他状态有两个状态码没有相应的 TWI 状态定义,见 Table 78。 状态 0xF8 表明当前没有相关信息,因为中断标志 TWINT 为 &0”。这种状态可能发生在自 己的 TWI 接口没有参与串行传输的时候。 状态 0x00 表示在串行传输过程中发生了总线错误。当 START 或 STOP 出现在错误的位 置时总线错误就会发生。 比如说在地址和数据、 地址和 ACK 之间出现了 START 或 STOP。 总线错误将导致 TWINT 置位。为了从错误中恢复出来,必须置位标志 TWSTO,并通过 写 &1” 以清零 TWINT。这将导致 TWI 接口进入未寻址从机模式、标志 TWSTO 被清零 (TWCR 的其他位不受影响 ),以及 SDA 和 SCL 被释放,但是不会产生 STOP。Table 78. 其它状态码应用软件的响应 状态码 (TWSR) 预分 频位为 ”0”$F8对 TWCR 的操作 2 线串行总线和 2 线串行硬件 的状态 没有相关的状态信息; TWINT = “0” 由于非法的 START 或 STOP 引起的总线错误 读 / 写 TWDR 不操作 TWDR 不操作 TWDR0STASTOTWIN TTWE A2 线串行硬件下一步应采取的动作 等待或进行当前传输不操作 TWCR$0011X只影响内部硬件;不会发送 STOP 到总线上。总 线将释放并清零 TWSTO1852466GCAVRC10/03 将几个 TWI 模式组合到一起在某些情况下, 为完成期望的工作, 必须将几种 TWI 模式组合起来。 例如从串行 EEPROM 读取数据。典型的这种传输包括以下步骤: 1. 传输必须启动 2. 必须告诉 EEPROM 读取的位置 3. 必须完成读操作 4. 传送必须结束 注意数据可从主机传到从机,反之也可。首先主机必须告诉读从机读取实际的位置,因此 需要使用 MT 模式;然后数据必须由从机读出,需要使用 MR 模式,但传送方向必须改 变。在上述步骤中,主机必须保持对总线的控制,且以上各步骤应该自动进行。如果在多 主机系统中违反这一规则,即在第二步与第三步之间其它主机改变 EEPROM 中的数据指 针,则主机读取的数据位置是错误的。传送方向改变是通过在发送地址字节与接收数据之 间发送 REPEATED START 信号来实现的。在发送 REPEATED START 信号后,主机继 续保持总线的控制权。下图给出传送的流程图。 Figure 94. 几种 TWI 模式联合访问串行 EEPROMMaster Transmitter Master ReceiverSSLA+WAADDRESSARsSLA+RADATAAPS = START Transmitted from Master to SlaveRs = REPEATED START Transmitted from Slave to MasterP = STOP多主机系统和仲裁如果有多个主机连接在同一总线上,它们中的一个或多个也许会同时开始一个数据传送。 TWI 协议确保在这种情况下,通过一个仲裁过程,允许其中的一个主机进行传送而不会丢 失数据。总线仲裁的例子如下所述,该例中有两个主机试图向从接收器发送数据。 Figure 95. 仲裁示例VCCDevice 1MASTER TRANSMITTERDevice 2MASTER TRANSMITTERDevice 3SLAVE RECEIVER........Device nR1R2SDASCL有几种不同的情况会产生总线仲裁过程: ? ? 两个或更多的主机同时与一个从机进行通信。在这种情况下,无论主机或从机都不 知道有总线的竞争。 两个或更多的主机同时对同一个从机进行不同的数据或方向的访问。在这种情况下, 会在 READ/WRITE 位或数据间发生仲裁。主机试图在 SDA 线上输出一个高电平 时,如果其他主机已经输出 &0”,则该主机在总线仲裁中失败。失败的主机将转换成 未被寻址的从机模式,或等待总线空闲后发送一个新的 START 信号,这由应用程序 决定。186ATmega16(L)2466GCAVRC10/03 ATmega16(L)? 两个或更多的主机访问不同的从机。在这种情况下,总线仲裁在 SLA 发生。主机试 图在 SDA 线上输出一个高电平时,如有其它主机已经输出 &0”,则该主机将在总线 仲裁中失败。在 SLA 总线仲裁失败的主机将切换到从机模式,并检查自己是否被获 得总线控制权的主机寻址。如果被寻址,它将进入 SR 或 ST 模式,这取决于 SLA 的 READ/WRITE 位的值。如果它未被寻址,将转换到未被寻址的从机模式或等待总 线空闲,发送一个新的 START 信号,这由应用程序决定。Figure 96 描述了总线仲裁的过程,图中的数字为 TWI 的状态值。 Figure 96. 总线仲裁过程START SLA Data STOPArbitration lost in SLAArbitration lost in DataOwn Address / General Call receivedNo38TWI bus will be released and not addressed slave mode will be entered A START condition will be transmitted when the bus becomes freeYes Write 68/78Data byte will be received and NOT ACK will be returned Data byte will be received and ACK will be returnedDirectionRead B0Last data byte will be transmitted and NOT ACK should be received Data byte will be transmitted and ACK should be received1872466GCAVRC10/03 模拟比较器模拟比较器对正极 AIN0 的值与负极 AIN1 的值进行比较。当 AIN0 上的电压比负极 AIN1 上的电压要高时,模拟比较器的输出 ACO 即置位。比较器的输出可用来触发定时器 / 计 数器 1 的输入捕捉功能。此外,比较器还可触发自己专有的、独立的中断。用户可以选择 比较器是以上升沿、下降沿还是交替变化的边沿来触发中断。 Figure 97 为比较器及其外 围逻辑电路的框图。 Figure 97. 模拟比较器框图 (2)BANDGAP REFERENCE ACBGACME ADEN ADC MULTIPLEXER OUTPUT (1)Notes:1. 见 P190Table 80。 2. 模拟比较器的管脚分布见 P2Figure 1 及 P56Table 25。特殊功能 IO 寄存器- SFIORBit 读/写 初始值 7 ADTS2 R/W 0 6 ADTS1 R/W 0 5 ADTS0 R/W 0 4 C R 0 3 ACME R/W 0 2 PUD R/W 0 1 PSR2 R/W 0 0 PSR10 R/W 0 SFIOR? Bit 3 C ACME: 模拟比较器多路复用器使能 当此位为逻辑 &1”,且 ADC 处于关闭状态 (ADCSRA 寄存器的 ADEN 为 &0”) 时,ADC 多 路复用器为模拟比较器选择负极输入。当此位为 &0” 时, AIN1 连接到比较器的负极输入 端。更详细描述的请参见 P191“ 模拟比较器多工输入 ” 。188ATmega16(L)2466GCAVRC10/03 ATmega16(L)模拟比较器控制和状态寄存器- ACSRBit 读/写 初始值7 ACD R/W 06 ACBG R/W 05 ACO R N/A4 ACI R/W 03 ACIE R/W 02 ACIC R/W 01 ACIS1 R/W 00 ACIS0 R/W 0 ACSR? Bit 7 C ACD: 模拟比较器禁用 ACD 置位时, 模拟比较器的电源被切断。 可以在任何时候设置此位来关掉模拟比较器。 这 可以减少器件工作模式及空闲模式下的功耗。改变 ACD 位时,必须清零 ACSR 寄存器的 ACIE 位来禁止模拟比较器中断。否则 ACD 改变时可能会产生中断。 ? Bit 6 C ACBG: 选择模拟比较器的能隙基准源 ACBG 置位后,模拟比较器的正极输入由能隙基准源所取代。否则, AIN0 连接到模拟比 较器的正极输入。见 P40 “ 片内基准电压 ” 。 ? Bit 5 C ACO: 模拟比较器输出 模拟比较器的输出经过同步后直接连到 ACO。同步机制引入了 1-2 个时钟周期的延时。 ? Bit 4 C ACI: 模拟比较器中断标志 当比较器的输出事件触发了由 ACIS1 及 ACIS0 定义的中断模式时, ACI 置位。 如果 ACIE 和 SREG 寄存器的全局中断标志 I 也置位, 那么模拟比较器中断服务程序即得以执行,同 时 ACI 被硬件清零。 ACI 也可以通过写 &1” 来清零。 ? Bit 3 C ACIE: 模拟比较器中断使能 当 ACIE 位被置 &1” 且状态寄存器中的全局中断标志 I 也被置位时,模拟比较器中断被激 活。否则中断被禁止。 ? Bit 2 C ACIC: 模拟比较器输入捕捉使能 ACIC 置位后允许通过模拟比较器来触发 T/C1 的输入捕捉功能。 此时比较器的输出被直接 连接到输入捕捉的前端逻辑,从而使得比较器可以利用 T/C1 输入捕捉中断逻辑的噪声抑 制器及触发沿选择功能。 ACIC 为 &0” 时模拟比较器及输入捕捉功能之间没有任何联系。 为了使比较器可以触发 T/C1 的输入捕捉中断,定时器中断屏蔽寄存器 TIMSK 的 TICIE1 必须置位。 ? Bits 1, 0 C ACIS1, ACIS0: 模拟比较器中断模式选择 这两位确定触发模拟比较器中断的事件。 Table 79 给出了不同的设置。 Table 79. ACIS1/ACIS0 设置ACIS1 0 0 1 1 ACIS0 0 1 0 1 中断模式 比较器输出变化即可触发中断 保留 比较器输出的下降沿产生中断 比较器输出的上升沿产生中断需要改变 ACIS1/ACIS0 时,必须清零 ACSR 寄存器的中断使能位来禁止模拟比较器中 断。否则有可能在改变这两位时产生中断。1892466GCAVRC10/03 模拟比较器多工输入可以选择 ADC7..0 之中的任意一个来代替模拟比较器的负极输入端。 ADC 复用器可用来 完成这个功能。当然,为了使用这个功能首先必须关掉 ADC。如果模拟比较器复用器使 能位 (SFIOR 中的 ACME) 被置位, 且 ADC 也已经关掉 (ADCSRA 寄存器的 ADEN 为 0), 则可以通过 ADMUX 寄存器的 MUX2..0 来选择替代模拟比较器负极输入的管脚,详见 Table 80。如果 ACME 清零或 ADEN 置位,则模拟比较器的负极输入为 AIN1。 Table 80. 模拟比较器复用输入ACME 0 1 1 1 1 1 1 1 1 1 ADEN x 1 0 0 0 0 0 0 0 0 MUX2..0 xxx xxx 000 001 010 011 100 101 110 111 模拟比较器负极输入 AIN1 AIN1 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7190ATmega16(L)2466GCAVRC10/03 ATmega16(L)模数转换器特点? ? ? ? ? ? ? ? ? ? ? ? ? ? ?10 位 精度 0.5 LSB 的非线性度 ± 2 LSB 的绝对精度 65 - 260 ?s 的转换时间 最高分辨率时采样率高达 15 kSPS 8 路复用的单端输入通道 7 路差分输入通道 2 路可选增益为 10x 与 200x 的差分输入通道 可选的左对齐 ADC 读数 0 - VCC 的 ADC 输入电压范围 可选的 2.56V ADC 参考电压 连续转换或单次转换模式 通过自动触发中断源启动 ADC 转换 ADC 转换结束中断 基于睡眠模式的噪声抑制器 1. 在 PDIP 封装下的差分输入通道器件未经测试。 只保证器件在 TQFP 与 MLF 封装下正常 工作。Note:ATmega16 有一个 10 位的逐次逼近型 ADC。 ADC 与一个 8 通道的模拟多路复用器连接, 能 对来自端口 A 的 8 路单端输入电压进行采样。单端电压输入以 0V (GND) 为基准。 器件还支持 16 路差分电压输入组合。两路差分输入 (ADC1、 ADC0 与 ADC3、 ADC2) 有可编程增益级, 在 A/D 转换前给差分输入电压提供 0dB(1x)、 20dB(10x) 或 46dB(200x) 的放大级。七路差分模拟输入通道共享一个通用负端 (ADC1), 而其他任何 ADC 输入可做 为正输入端。如果使用 1x 或 10x 增益,可得到 8 位分辨率。如果使用 200x 增益,可得 到 7 位分辨率。 ADC 包括一个采样保持电路, 以确保在转换过程中输入到 ADC 的电压保持恒定。 ADC 的 框图如 Figure 98 所示。 ADC 由 AVCC 引脚单独提供电源。 AVCC 与 VCC 之间的偏差不能超过 ± 0.3V。请参考 P198“ADC 噪声抑制器 ” 来了解如何连接这个引脚。 标称值为 2.56V 的基准电压,以及 AVCC,都位于器件之内。基准电压可以通过在 AREF 引脚上加一个电容进行解耦,以更好地抑制噪声。1912466GCAVRC10/03 Figure 98. 模数转换器方框图ADC CONVERSION COMPLETE IRQINTERRUPT FLAGS ADTS[2:0]8-BIT DATA BUSADIF ADIE15 ADC DATA REGISTER (ADCH/ADCL)ADPS0 ADC[9:0]0ADC MULTIPLEXER SELECT (ADMUX)MUX3 MUX1 REFS1 ADLAR REFS0 MUX4 MUX2 MUX0ADC CTRL. & STATUS REGISTER (ADCSRA)ADATE ADPS2 ADPS1 ADENADSCADIFTRIGGER SELECT MUX DECODERCHANNEL SELECTIONPRESCALERGAIN SELECTIONSTARTCONVERSION LOGICAVCCINTERNAL 2.56V REFERENCE AREF10-BIT DACSAMPLE & HOLD COMPARATOR +GNDBANDGAP REFERENCEADC7SINGLE ENDED / DIFFERENTIAL SELECTIONADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 + POS. INPUT MUXADC MULTIPLEXER OUTPUTGAIN AMPLIFIERNEG. INPUT MUX操作ADC 通过逐次逼近的方法将输入的模拟电压转换成一个 10 位的数字量。最小值代表 GND, 最大值代表 AREF 引脚上的电压再减去 1 LSB。 通过写 ADMUX 寄存器的 REFSn 位 可以把 AVCC 或内部 2.56V 的参考电压连接到 AREF 引脚。在 AREF 上外加电容可以对 片内参考电压进行解耦以提高噪声抑制性能。 模拟输入通道与差分增益可以通过写 ADMUX 寄存器的 MUX 位来选择。任何 ADC 输入 引脚,像 GND 及固定能隙参考电压,都可以作为 ADC 的单端输入。 ADC 输入引脚可选 做差分增益放大器的正或负输入。 如果选择差分通道,通过选择被选输入信号对的增益因子得到电压差分放大级。然后放大 值成为 ADC 的模拟输入。如果使用单端通道,将绕过增益放大器。 通过设置 ADCSRA 寄存器的 ADEN 即可启动 ADC。只有当 ADEN 置位时参考电压及输 入通道选择才生效。 ADEN 清零时 ADC 并不耗电,因此建议在进入节能睡眠模式之前关 闭 ADC。192ATmega16(L)2466GCAVRC10/03 ATmega16(L)ADC 转换结果为 10 位, 存放于 ADC 数据寄存器 ADCH 及 ADCL 中。 默认情况下转换结果为 右对齐,但可通过设置 ADMUX 寄存器的 ADLAR 变为左对齐。 如果要求转换结果左对齐, 且最高只需 8 位的转换精度, 那么只要读取 ADCH 就足够了。 否则要先读 ADCL,再读 ADCH,以保证数据寄存器中的内容是同一次转换的结果。一旦 读出 ADCL, ADC 对数据寄存器的寻址就被阻止了。也就是说,读取 ADCL 之后,即使 在读 ADCH 之前又有一次 ADC 转换结束,数据寄存器的数据也不会更新,从而保证了转 换结果不丢失。 ADCH 被读出后, ADC 即可再次访问 ADCH 及 ADCL 寄存器。 ADC 转换结束可以触发中断。 即使由于转换发生在读取 ADCH与 ADCL 之间而造成 ADC 无 法访问数据寄存器,并因此丢失了转换数据,中断仍将触发。启动一次转换向 ADC 启动转换位 ADSC 位写 &1” 可以启动单次转换。在转换过程中此位保持为高,直 到转换结束,然后被硬件清零。如果在转换过程中选择了另一个通道,那么 ADC 会在改 变通道前完成这一次转换。 ADC 转换有不同的触发源。 设置 ADCSRA 寄存器的 ADC 自动触发允许位 ADATE 可以使能 自动触发。设置 ADCSRB 寄存器的 ADC 触发选择位 ADTS 可以选择触发源 ( 见触发源 列表中对 ADTS 的描述 )。当所选的触发信号产生上跳沿时, ADC 预分频器复位并开始 转换。这提供了一个在固定时间间隔下启动转换的方法。转换结束后即使触发信号仍然存 在,也不会启动一次新的转换。如果在转换过程中触发信号中又产生了一个上跳沿,这个 上跳沿将被忽略。即使特定的中断被禁止或全局中断使能位为 0,中断标志仍将置位。这 样可以在不产生中断的情况下触发一次转换。但是为了在下次中断事件发生时触发新的 转换,必须将中断标志清零。 Figure 99. ADC 自动触发逻辑ADTS[2:0] PRESCALERSTART ADIF SOURCE 1 . . . . SOURCE n ADSC ADATECLKADCCONVERSION LOGIC EDGE DETECTOR使用 ADC 中断标志作为触发源, 可以在正在进行的转换结束后即开始下一次 ADC 转换。 之后 ADC 便工作在连续转换模式,持续地进行采样并对 ADC 数据寄存器进行更新。第 一次转换通过向 ADCSRA 寄存器的 ADSC 写 1 来启动。在此模式下,后续的 ADC 转换 不依赖于 ADC 中断标志 ADIF 是否置位。 如果使能了自动触发,置位 ADCSRA 寄存器的 ADSC 将启动单次转换。 ADSC 标志还 可用来检测转换是否在进行之中。不论转换是如何启动的,在转换进行过程中 ADSC 一 直为 1。1932466GCAVRC10/03 预分频及 ADC 转换时序Figure 100. ADC 预分频器ADEN START CK Reset 7-BIT ADC PRESCALERADPS0 ADPS1 ADPS2ADC CLOCK SOURCE在默认条件下, 逐次逼近电路需要一个从 50 kHz 到 200 kHz 的输入时钟以获得最大精度。 如果所需的转换精度低于 10 比特,那么输入时钟频率可以高于 200 kHz,以达到更高的 采样率。 ADC 模块包括一个预分频器,它可以由任何超过 100 kHz 的 CPU 时钟来产生可接受的 ADC 时钟。预分频器通过 ADCSRA 寄存器的 ADPS 进行设置。置位 ADCSRA 寄存器的 ADEN 将使能 ADC,预分频器开始计数。只要 ADEN 为 1,预分频器就持续计数,直到 ADEN 清零。 ADCSRA 寄存器的 ADSC 置位后, 单端转换在下一个 ADC 时钟周期的上升沿开始启动。 差 分转换时序见 P197“ 差分增益信道 ” 。 正常转换需要 13 个 ADC 时钟周期。为了初始化模拟电路, ADC 使能 (ADCSRA 寄存器 的 ADEN 置位 ) 后的第一次转换需要 25 个 ADC 时钟周期。 在普通的 ADC 转换过程中, 采样保持在转换启动之后的 1.5 个 ADC 时钟开始;而第一次 ADC 转换的采样保持则发生在转换启动之后的 13.5 个 ADC 时钟。 转换结束后, ADC 结果 被送入 ADC 数据寄存器,且 ADIF 标志置位。 ADSC 同时清零 ( 单次转换模式 )。之后软 件可以再次置位 ADSC 标志,从而在 ADC 的第一个上升沿启动一次新的转换。 使用自动触发时,触发事件发生将复位预分频器。这保证了触发事件和转换启动之间的延 时是固定的。在此模式下,采样保持在触发信号上升沿之后的 2 个 ADC 时钟发生。为了 实现同步逻辑需要额外的 3 个 CPU 时钟周期。如果使用差分模式,加上不是由 ADC 转 换结束实现的自动触发,每次转换需要 25 个 ADC 时钟周期。因为每次转换结束后都要 关闭 ADC 然后又启动它。 在连续转换模式下,当 ADSC 为 1 时,只要转换一结束,下一次转换马上开始。转换时 间请见 Table 81。194ATmega16(L)2466GCAVRC10/03CK/128CK/16CK/32CK/64CK/2CK/4CK/8 ATmega16(L)Figure 101. ADC 时序图, 第一次转换 ( 单次转换模式 )First Conversion Next ConversionCycle Number ADC Clock ADEN ADSC ADIF ADCH ADCL121213141516171819202122232425123MSB of Result LSB of ResultMUX and REFS UpdateSample & HoldConversion CompleteMUX and REFS UpdateFigure 102. ADC 时序图,单次转换One Conversion 1 2 3 4 5 6 7 8 9 10 11 12 13 Next Conversion 1 2 3Cycle Number ADC Clock ADSC ADIF ADCH ADCLMSB of Result LSB of Result Sample & Hold MUX and REFS Update Conversion CompleteMUX and REFS UpdateFigure 103. ADC 时序图,自动触发的转换One Conversion 1 2 3 4 5 6 7 8 9 10 11 12 13 Next Conversion 1 2Cycle Number ADC Clock Trigger Source ADATE ADIF ADCH ADCLMSB of Result LSB of Result Sample & Hold MUX and REFS Update Conversion Complete Prescaler ResetPrescaler Reset1952466GCAVRC10/03 Figure 104. ADC 时序图,连续转换One Conversion 11 }

我要回帖

更多关于 atmega128 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信