版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 RFID阅读器开发基础目录 3.1 阅读器电路组成 3.2 AVR单片机概述 3.3 AVR时钟与熔丝位 3.4 AVR通用IO口 3.5 AVR中断 3.6 AVR定时器 3.7 AVR USART 3.8 AVR SPI 本章目标 掌握阅读器电路组成了解ATmega16的主要特性了解AVR熔丝位作用掌握AVR通用IO口的配置和使用掌握AVR中断的配置和使用掌握AVR定时器的配置和使用掌握AVR USART的配置和使用掌握AVR SPI的配置 学习导航 任务描述 【描述】3.D. 1使用PC7管脚交替点亮和熄灭一只LED。【描述】3.D. 2在PD2管脚连接一个按键,使用外部中断检测
2、该按键并翻转LED状态。【描述】3.D. 3使用定时器1的溢出中断,1秒定时驱动LED闪烁。【描述】3.D. 4配置USART波特率为115200,使用中断法对PC机发来数据进行回显,并驱动LED状态翻转。 3.1 阅读器电路组成 从电路上来看,阅读器是一个嵌入式系统,一般由MCU控制器、射频收发、通信接口、天线以及其他外围电路组成。其组成框图如图3- 1所示。本章将首先讲解阅读器电路组成,然后讲解作为阅读器核心MCU的AVR单片机及其外围电路。具体收发通道等会根据不同频段RFID系统的需求在后续章节具体分析和讲解。 3.1 阅读器电路组成-MCU及外围电路 MCU是阅读器的核心,配合外围电路
3、完成收发控制、向应答器发送命令与写数据、应答器数据读取与处理、与应用系统的高层进行通信等任务。MCU及外围电路的结构框图如图3- 2所示。 本教材配套阅读器的MCU为ATMEL公司出品的AVR单片机,具体型号为Atmega16A。 3.1 阅读器电路组成-收发通道 收发通道主要负责数据的链路和无线链路,由以下两部分组成:发送通道,包括编码、调制和功率放大电路,用于向应答器传送命令和写数据。接收通道,包括解调、解码电路,用于接收应答器返回的应答信息和数据。其收发通道的电路的结构框图如图3- 3所示。另外需要注意的是在实际的电路设计中,根据应答器的防碰撞能力的设置,还应考虑防碰撞电路的设计。 3.
4、2 AVR单片机概述 1997年,由Atmel公司挪威设计中心的A先生和V先生,利用Atmel公司的Flash新技术,共同研发出RISC精简指令集高速8位单片机,简称AVR。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。 3.2 AVR单片机概述 -AVR主要功能特性 AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆和单体高速输入/输出的方案。提高了指令执行速度,克服了瓶颈现象,增强了功能。同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。因而AVR单片机在软/硬件开销、速度、性能和成本诸多方面取得了优化平
5、衡。 AVR单片机其他特点如下:哈佛结构,具备1MIPS / MHz的高速运行处理能力。超功能精简指令集(RISC),具有32个通用工作寄存器。快速的存取寄存器组、单周期指令系统,大大优化了目标代码的大小、执行效率,部分型号Flash非常大,特别适用于使用高级语言进行开发。作输出时可输出40mA(单一输出),作输入时可设置为三态高阻抗输入或带上拉电阻输入,具备10mA-20mA灌电流的能力。3.2 AVR单片机概述 -AVR主要功能特性 AVR单片机其他特点如下:片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,外围电路更加简单,系统更加稳定可靠。大部分AVR片上资源丰富:带
6、EEPROM、PWM、RTC、SPI、USART、TWI、ISP、AD、Analog Comparator、WDT等。大部分AVR除了有ISP功能外,还有IAP功能,方便升级或销毁应用程序。 3.2 AVR单片机概述 -AVR主要功能特性 3.2 AVR单片机概述 -ATmega16A ATmega16A是AVR系列单片机中的一个型号,因其功能丰富、性价比高,被广泛应用。ATmega16A常用的有两种封装,分别为40引脚PDIP封装和44引脚TQFP封装。本教材配套读写器的ATmega16A采用44引脚TQFP封装。其中40引脚PDIP封装引脚图如图3- 4所示。 44引脚TQFP封装引脚图如
7、图3- 5所示。 3.2 AVR单片机概述 -ATmega16A ATmega16A引脚功能较多,其具体说明如表3- 1所示。 名称功能VCC数字电路电源GND地端口A(PA7.PA0)A/D转换器的模拟输入端8位双向I/O口,具有可编程的内部上拉电阻。在复位过程中,即使系统时钟还未起振,端口A处于高阻状态端口B(PB7.PB0)8位双向I/O口,具有可编程的内部上拉电阻。在复位过程中,即使系统时钟还未起振,端口B处于高阻状态端口B可以用做其他不同的特殊功能端口C(PC7.PC0)8位双向I/O口,具有可编程的内部上拉电阻。在复位过程中,即使系统时钟还未起振,端口C处于高阻状态。如果JTAG接
8、口使能,即使复位出现引脚PC5(TDI)、PC3(TMS)与PC2(TCK)的上拉电阻被激活,端口C也可以用做其他不同的特殊功能端口D(PD7.PD0)8位双向I/O口,具有可编程的内部上拉电阻。在复位过程中,即使系统时钟还未起振,端口D处于高阻状态,端口D可以用做其他不同的特殊功能RESET复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。持续时间小于门限间的脉冲不能保证可靠复位XTAL1反向振荡放大器与片内时钟操作电路的输入端XTAL2反向振荡放大器的输出端AVCCAVCC是端口A与A/D转换器的电源。不使用ADC时,该引脚应直接与VCC连接。使用ADC时应通过一个低通滤波器与
9、VCC连接AREFA/D 的模拟基准输入引脚3.2 AVR单片机概述 -ATmega16A 3.3 AVR时钟与熔丝位 AVR单片机的运行,需要有时钟的驱动,而时钟源的选择需要设置相关熔丝位。 3.3 AVR时钟与熔丝位 -AVR系统时钟 AVR有一套时钟系统,也有多个时钟源可作为系统时钟,这些时钟并不需要同时工作。为了降低功耗,可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟,具体时钟分布如图3- 6所示。 上图中涉及的时钟功能如表3- 2所示。 时钟名称功能CPU时钟CPU时钟与操作AVR内核的子系统相连,如通用寄存器、状态寄存器及保存堆栈指针的数据存储器。终止CPU时钟将使内核停止工
10、作和计算IO时钟I/O时钟用于主要的I/O模块,如定时器/计数器、SPI和USART。I/O时钟还用于外部中断模块。要注意的是有些外部中断由异步逻辑检测,因此即使I/O时钟停止了这些中断仍然可以得到监控Flash时钟Flash 时钟控制Flash接口的操作。此时钟通常与CPU时钟同时挂起或激活异步定时器时钟异步定时器时钟允许异步定时器/计数器与LCD控制器直接由外部32kHz时钟晶体驱动。使得此定时器/计数器即使在睡眠模式下仍然可以为系统提供一个实时时钟ADC时钟ADC具有专门的时钟。这样可以在ADC工作的时候停止CPU和I/O时钟以降低数字电路产生的噪声,从而提高ADC转换精度3.3 AVR
11、时钟与熔丝位 -AVR系统时钟 AVR单片机的多种时钟源通过一个时钟多路选择器,用来驱动系统时钟或作为其他功能,时钟源的选择需要通过对熔丝位进行配置。被选择的时钟输入到AVR时钟发生器,再分配到相应模块。 3.3 AVR时钟与熔丝位 -AVR系统时钟 AVR有6个时钟源如下所示:外部晶体/陶瓷振荡器,常用作主时钟源,这个振荡器可以使用石英晶体也可以使用陶瓷谐振器。XTAL1和XTAL2分别为用作片内振荡器的反相放大器的输入和输出。外部低频振荡器,一般用来连接32.768kHz晶振。需要对熔丝位编程,使能XTAL1和XTAL2的内部电容,从而除去外部电容。内部电容的标称数为36pF。外部RC振荡
12、器,对于时间不敏感的应用可以使用外部RC振荡器。频率可以通过方程f=1/(3RC)进行粗略的估算。电容至少需要22Pf。3.3 AVR时钟与熔丝位 -AVR系统时钟 AVR有6个时钟源如下所示:标定的内部RC振荡器,标定的片内RC振荡器提供了固定的1.0、2.0、4.0或8.0MHz的时钟。这个时钟也可作为系统时钟。选择这个时钟之后就无需外部器件了。外部时钟,XTAL1连接外部来的时钟信号,作为系统时钟驱动整个CPU运行。XTAL2可悬空。定时器振荡器,对于拥有定时器/振荡器引脚(TOSC1和TOSC2)的AVR微处理器,晶体可以直接与这两个引脚相连,无需外部电容。此振荡器针对32.768kH
13、z的中标晶体做了优化。 3.3 AVR时钟与熔丝位 -AVR系统时钟 缺省时钟源 器件出厂时,缺省设置的时钟源是1MHz的内部RC振荡器,启动时间为最长。这种设置保证用户可以通过ISP或并行编程器得到所需的时钟源。 3.3 AVR时钟与熔丝位 -AVR系统时钟 在AVR内部有多组与器件配置和运行环境相关的熔丝位,这些熔丝位非常重要,用户可以通过设定和配置熔丝位,使AVR具备不同的特性,以更加适合实际的应用。ATmega16A有两个熔丝位字节,分别为熔丝位高字节和熔丝位低字节。如果熔丝位被编程则读返回值为”0”。其中高字节每个Bit的含义如表3- 3所示。 熔丝位高字节位号描述默认值OCDEN7
14、使能OCD1(未编程,OCD禁用)JTAGEN6使能JTAG0(编程,JTAG使能)SPIEN5使能串行程序和数据下载0(编程,SPI编程使能)CKOPT4振荡器选项1(未编程)EESAVE3执行芯片擦除时EEPROM的内容保留1(未编程,内容不保留)BOOTSZ12选择Boot区大小0(编程)BOOTSZ01选择Boot区大小0(编程)BOOTRST0选择复位向量1(未编程)3.3 AVR时钟与熔丝位 AVR熔丝位 熔丝位低字节每个Bit的含义如表3- 4所示。 熔丝位低字节位号描述默认值BODLEVEL7BOD触发电平1(未编程)BODEN6BOD使能1(未编程,BOD禁用)SUT15选择
15、启动时间1(未编程)SUT04选择启动时间0(编程)CKSEL33选择时钟源0(编程)CKSEL22选择时钟源0(编程)CKSEL11选择时钟源0(编程)CKSEL00选择时钟源1(未编程)3.3 AVR时钟与熔丝位 AVR熔丝位 在熔丝位中,与系统时钟有关的有CKOPT和CKSEL3:0几位,主要用来选择振荡器种类和工作频率,具体配置如表3- 5所示。 CKOPTCKSEL3:0描述默认值100011.0MHz内部RC振荡器100102.0MHz100114.0MHz101008.0MHz1101x0.40.9MHz仅适用于陶瓷振荡器1110 x0.93.0MHz1222pF1111x3.0
16、8.0MHz1222pF0101x,110 x,111x大于等于1.0MHz1222pF3.3 AVR时钟与熔丝位 AVR熔丝位 CKOPT的数值决定了振荡器输出幅度大小,不同振幅决定了其适应场合的不同,具体含义如下所述:在CKOPT=0时,振荡器的输出振幅较大,容易起振,适合在干扰大的场合以及使用晶体振荡器超过8MHz的情况下使用。当CKOPT=1时,振荡器的输出振幅较小,这样可以减少对电源的消耗,对外的电磁辐射也较小。注意 熔丝位的设置需要用特殊的软件和方法,一旦配置,不建议轻易更改。如果修改不当,轻则造成运行不正常,重则锁死芯片。 3.3 AVR时钟与熔丝位 AVR熔丝位 3.4 AVR
17、通用IO口 ATmega16A有4组通用IO端口,分别称为PORTA、PORTB、PORTC和PORTD,简称PA、PB、PC和PD。每组IO端口有8个IO管脚。这些管脚都是相互独立,具有真正的读-改-写功能。AVR通用IO口的主要特点如下:双向独立位控的IO口。每一位都可以单独进行配置,互不影响。大电流驱动,每个IO口输出采用推挽方式,最大20mA灌电流,可直接驱动LED。IO端口可以复用,作为USART、SPI等外设接口。 3.4 AVR通用IO口 -通用IO口结构 AVR的通用IO口的结构并不复杂,其结构图如图3- 7所示。 每一组IO端口内部配备3个8位寄存器,对应着该组的8个引脚,它
18、们分别为:方向控制寄存器DDRx(x=A、B、C、D)。数据寄存器PORTx(x=A、B、C、D)。输入引脚寄存器PINx(x=A、B、C、D)。 此外每个IO口内部还有一个上拉电阻。方向控制寄存器DDRx,用于控制IO口的输入输出方向,即控制IO口的工作方式为输入方式还是输出方式。当DDRx=1时,IO口处于输出工作方式,此时数据寄存器PORTx中的数据通过一个推挽电路输出到外部引脚当PORTx=1时,IO引脚呈现高电平,同时可以提供输出20mA的电流而当PORTx=0时,IO引脚呈现低电平,同时可以吸纳20mA电流。因此,AVR的IO口在输出方式下提供了比较大的驱动能力,可以直接驱动LED
19、灯小功率外围器件。3.4 AVR通用IO口 -通用IO口结构 当DDRx=0时,IO口处于输入方式。此时引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读PINx寄存器可以获得外部引脚上的真实电平。在输入方式下,PORTx可以控制使用或者不使用内部的上拉电阻。此外,在寄存器SFIOR中,有一位称作PUD,它是AVR全部IO口内部上拉电阻的总开关。当PUD=1时,AVR所有IO内部上拉电阻都不起作用。当PUD=0时,各个IO口内部的上拉电阻取决于PORTx的设置。 3.4 AVR通用IO口 -通用IO口结构 ATmega16A的4个端口都有各自对应的3个IO口寄存器,分别为数据寄存器POR
20、T、数据方向寄存器DDR和输入引脚PIN。它们占用了IO空间的12个地址,以PA口寄存器为例,数据寄存器PORTA具体定义如表3- 6所示。 Bit76543210名称PORTA7PORTA6PORTA5PORTA4PORTA3PORTA2PORTA1PORTA0读写R/WR/WR/WR/WR/WR/WR/WR/W初始值000000003.4 AVR通用IO口 -通用IO口寄存器 数据方向寄存器DDRA具体定义如表3- 7所示。输入引脚寄存器PINA具体定义如表3- 8所示。注意 并非所有寄存器都可读写,R代表只读,W代表只写,R/W代表可读可写。寄存器的初值也都并非确定的1或0,使用N/A表
21、示初始值不确定。 Bit76543210名称DDRA7DDRA6DDRA5DDRA4DDRA3DDRA2DDRA1DDRA0读写R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000Bit76543210名称PINA7PINA6PINA5PINA4PINA3PINA2PINA1PINA0读写RRRRRRRR初始值N/AN/AN/AN/AN/AN/AN/AN/A3.4 AVR通用IO口 -通用IO口寄存器 通用IO口常用于MCU对外数据输出和输入,LED驱动和按键检测等。下述内容用于实现任务描述3.D.1,使用PC7管脚交替点亮和熄灭一只LED。 3.4 AVR通用IO口 -通用
22、IO口程序设计 1. LED初始化基于模块化和移植的考虑,可将IO口设置子程序单独封装成为一个子函数,例如LED相关管脚的配置,可封装成为子函数LED_Config(),具体源码如下所示:【描述3.D.1】 LED_Config()/* LED初始化函数 */void LED_Config(void)/PC7引脚连接一个LED,低电平点亮/设置PC7为输出DDRC |= (1PC7);/设置PC7为高电平PORTC |= (1PC7);3.4 AVR通用IO口 -通用IO口程序设计 2. 主函数编写主函数main()存放在main.c文件中,除了相关初始化函数和主循环外,还需要定义一些必需的宏
23、定义和头文件等,详细代码清单如下所示:【描述3.D.1】 main.c/* 宏定义 */开启iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 头文件 */IAR中已定义的ATmega16相关寄存器名称#include /* 子函数 */LED初始化函数void LED_Config(void);/* 主函数 */void main(void)/LED初始化函数LED_Config(); while(1)/点亮LEDPORTC &= (1PC7);/熄灭LEDPORTC |= (1PC7);3.4 AVR通用IO口 -通用IO口程序设计 单步执
24、行如下语句时,会看到LED亮灭转换。while(1)/点亮LEDPORTC &= (1PC7);/熄灭LEDPORTC |= (1PC7);3.4 AVR通用IO口 -通用IO口程序设计 3.4 AVR通用IO口 -IO端口第二功能 AVR的IO端口除了通用IO功能外,大多数端口引脚都具有第二功能,使能某些引脚的第二功能,不会影响到同一端口其他引脚作为通用IO口的功能。ATmega16A的IO端口第二功能如表3- 9所示。 端口第二功能功能说明PA7ADC7ADC输入通道7PA6ADC6ADC输入通道6PA5ADC5ADC输入通道5PA4ADC4ADC输入通道4PA3ADC3ADC输入通道3P
25、A2ADC2ADC输入通道2PA1ADC1ADC输入通道1PA0ADC0ADC输入通道0PB7SCKSPI总线的串行时钟PB6MISOSPI总线的主机输入/从机输出信号PB5MOSISPI总线的主机输出/从机输入信号PB4/SSSPI从机选择引脚PB3AIN1/OC0模拟比较负输入/T/C0输出比较匹配输出PB2AIN0/INT2模拟比较正输入/外部中断2输入PB1T1T/C1外部计数器输入端口第二功能功能说明PC7TOSC2定时振荡器引脚2PC6TOSC1定时振荡器引脚1PC5TDIJTAG测试数据输入PC4TDOJTAG测试数据输出PC3TMSJTAG测试模式选择PC2TCKJTAG测试时
26、钟PC1SDA两线串行总线数据输入/输出线PC0SCL两线串行总线时钟线PD7OC2T/C2输出比较匹配输出PD6ICP1T/C1输入捕捉引脚PD5OC1AT/C1输出比较A匹配输出PD4OC1BT/C1输出比较B匹配输出PD3INT1外部中断1的输入PD2INT0外部中断0的输入PD1TXDUSART输出引脚PD0RXDUSART输入引脚3.5 AVR中断 AVR单片机的中断源种类多、门类全,便于设计实时、多功能、高效率的嵌入式应用系统。但同时由于其功能更为强大,因此比一般8位单片机的中断使用和控制也相对复杂些。 3.5 AVR中断 -中断向量 AVR单片机一般拥有数十个中断源,每个中断源都
27、有独立的中断向量。默认情况下,程序存储器的最低端,即从Flash地址的0 x0000开始用于放置中断向量,称作中断向量区。ATmega16A共有21个中断源。默认状态下,ATmega16A的中断向量表如表3- 10所示。 向量号程序地址中断源中断定义10 x000RESET外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位,以及JTAG AVR复位20 x002INT0外部中断请求030 x004INT1外部中断请求140 x006TIMER2 COMP定时器/计数器2比较匹配50 x008TIMER2 OVF定时器/计数器2溢出60 x00ATIMER1 CAPT定时器/计数器1事件
28、捕捉70 x00CTIMER1 COMPA定时器/计数器1比较匹配 A80 x00ETIMER1 COMPB定时器/计数器1比较匹配B90 x010TIMER1 OVF定时器/计数器1溢出100 x012TIMER0 OVF定时器/计数器0溢出110 x014SPI,STCSPI串行传输结束向量号程序地址中断源中断定义120 x016USART,RXCUSART Rx 结束130 x018USART,UDREUSART数据寄存器空140 x01AUSART,TXCUSART,Tx 结束150 x01CADCADC转换结束160 x01EEE_RDYEEPROM就绪170 x020ANA_COM
29、P模拟比较器180 x022TWI两线串行接口190 x024INT2外部中断请求2200 x026TIMER0 COMP定时器/计数器 0比较匹配210 x028SPM_RDY保存程序存储器内容就绪在这21个中断中,包含1个非屏蔽中断(RESET)、3个外部中断(INT0、INT1、INT2)和17个内部中断。本节只简要介绍RESET和外部中断。系统复位中断RESET,也称为系统复位源。RESET是一个特殊的中断源,是AVR中唯一不可屏蔽的中断。当ATmega16A由于各种原因被复位后,程序将跳到复位向量(默认为0 x0000)处,在该地址处通常放置一条跳转指令,跳转到主程序继续执行。INT
30、0、INT1和INT2是三个外部中断源,它们分别由芯片外部引脚PD2、PD3和PB2上的电平变化或状态触发。通过对控制寄存器MCUCR和控制与状态寄存器MCUCSR的配置定义触发方式。 3.5 AVR中断 -中断向量 AVR单片机的中断,有优先级和屏蔽等功能和控制手段,也支持中断的嵌套。可以灵活的进行配置和使用。1. 中断优先级在AVR单片机中,一个中断在中断向量区的位置决定了它的优先级,位于低地址的中断优先级高于位于高地址的中断。因此,对于ATmega16A来说,复位中断RESET具有最高优先级,外部中断INT0次之,而SPM_RDY的中断优先级最低。3.5 AVR中断 -中断控制 AVR单
31、片机采用固定的硬件优先级方式,不支持通过软件对中断优先级的重新设定。因此中断优先级的作用仅体现在当同一时刻有两个及两个以上中断源向MCU申请中断的情况中。在这种情况下,MCU将根据优先级的不同,将低优先级的中断挂起,首先响应其中最高优先级的中断,待该中断服务程序执行完返回后,再顺序响应优先级较低的中断。 3.5 AVR中断 -中断控制 2. 中断标志AVR有两种机制不同的中断:带有中断标志的中断。不带中断标志的中断。中断标志是指每个中断源在其IO空间寄存器中具有自己的一个中断标志位。在AVR中,大多数的中断都属于带中断标志的中断。中断标志位一般在MCU响应该中断时由硬件自动清除,或在中断服务程
32、序中通过读写专门数据寄存器的方式自动清除。 3.5 AVR中断 -中断控制 关于中断标志,还有下述规则和情况:当中断被禁止或MCU不能马上响应中断时,则该中断标志将会一直保持,直到中断允许并得到响应为止。已建立的中断标志,实际就是一个中断的请求信号,如果暂时不能被响应,则该中断标志会一直保留(除非被用户软件清除掉),此时该中断被“挂起”。如果有多个中断被挂起,一旦中断允许后,各个被挂起的中断将按优先级依次得到中断响应服务。3.5 AVR中断 -中断控制 在AVR中,还有个别的中断不带中断标志例如配置为低电平触发的外部中断。这类中断只要条件满足,就会一直向MCU发出中断请求。如果由于等待时间过长
33、而得不到响应,则可能因中断条件结束而失去一次中断服务的机会。如果这个低电平维持时间过长,则会使中断服务完成返回后再次响应,使MCU重复响应同一中断的请求,进行重复服务。 3.5 AVR中断 -中断控制 3. 中断屏蔽与管理为了能够灵活的管理中断,AVR对中断采用两级控制方式。所谓两级控制是指AVR有一个中断允许的总控制位I(即AVR状态寄存器SREG中的I标志位)通常称为全局中断允许控制位。状态寄存器SREG定义如表3- 11所示。 Bit76543210名称ITHSVNZC读写R/WR/WR/WR/WR/WR/WR/WR/W初始值000000003.5 AVR中断 -中断控制 其中,I位置位
34、时,使能全局中断,清零时则不论单独中断标志置位与否,都不会产生中断。任一中断发生后I清零,而执行RETI(中断返回)指令后,I位恢复置位以使能中断。同时,AVR为每一个中断源都设置了独立的中断允许位,这些中断允许位分散在每个中断源所属模块的控制寄存器中。 3.5 AVR中断 -中断控制 4. 中断嵌套由于AVR在响应一个中断的过程中通过硬件将I标志位自动清0,这样就阻止了MCU响应其他中断,因此通常情况下,AVR是不能自动实现中断嵌套的。如果要实现中断嵌套的应用,则用户可在中断服务程序中使用指令使能全局中断允许位I,通过间接的方式实现中断的嵌套处理。 3.5 AVR中断 -中断控制 注意 除非
35、确实需要中断嵌套,一般情况下不建议采用中断嵌套。 3.5 AVR中断 -中断控制 ATmega16A有INT0、INT1和INT2这3个外部中断源,分别由芯片外部引脚PD2、PD3和PB2上的电平变化或状态作为中断触发信号。1. 外部中断触发方式INT0、INT1和INT2的中断触发方式取决于用户程序对MCU控制寄存器MCUCR和MCU控制与状态寄存器MCUCSR的设定。其中,INT0和INT1支持4种中断触发方式,INT2支持2种,触发方式如表3- 12所示。 触发方式INT0INT1INT2说明上升沿触发支持支持支持(异步)INT2为异步(不需要与IO时钟同步)边沿检测下降沿触发支持支持支
36、持(异步)INT2为异步(不需要与IO时钟同步)边沿检测任意电平变化触发支持支持不支持低电平触发支持支持不支持不带中断标志3.5 AVR中断 外部中断 2. 外部中断寄存器在ATmega16A中,除了寄存器SREG中的全局中断允许标志位I外,与外部中断有关的寄存器有4个,共有11个标志位其作用分别是这3个外部中断的中断标志位、中断允许控制位及定义外部中断的触发类型。MCU控制寄存器MCUCR的低4位为INT0(ISC01、ISC00)和INT1(ISC11、ISC10)中断触发类型控制位,MCUCR定义如表3- 13所示。 Bit76543210名称SM2SESM1SM0ISC11ISC10I
37、SC01ISC00读写R/WR/WR/WR/WR/WR/WR/WR/W初始值000000003.5 AVR中断 外部中断 INT0和INT1的中断触发方式定义如表3- 14所示。 ISCn1ISCn0中断触发方式00INTn的低电平产生一个中断请求01INTn的下降沿和上升沿都产生一个中断请求10INTn的下降沿产生一个中断请求11INTn的上升沿产生一个中断请求3.5 AVR中断 外部中断 MCU控制和状态寄存器MCUCSR中的第6位(ISC2)为INT2的中断触发类型控制位,MCUCSR定义如表3- 15所示。 INT2的中断触发方式如表3- 16所示。 Bit76543210名称JTDI
38、SC2-JTRFWDRFBORFEXTPFPORF读写R/WR/WRR/WR/WR/WR/WR/W初始值0005个RESET复位标志ISC2中断触发方式0INT2的下降沿产生一个异步中断请求1INT2的上升沿产生一个异步中断请求3.5 AVR中断 外部中断 通用中断控制寄存器GICR的高3位为INT0、INT1和INT2的中断允许控制位。各位定义如表3- 17所示。通用中断标志寄存器GIFR的高3位为INT0、INT1和INT2的中断标志位,GIFR各位定义如表3- 18所示。 Bit76543210名称INT1INT0INT2-IVSELIVCE读写R/WR/WR/WRRRR/WR/W初始值
39、00000000Bit76543210名称INTF1INTF0INTF2-读写R/WR/WRRRRRR初始值000000003.5 AVR中断 外部中断 当INT0、INT1和INT2引脚上的有效事件满足中断触发条件后,INTF0、INTF1和INTF2位会变成1。如果此时SREG寄存器中的I位为1,而且GICR寄存器中的INTn置1,则MCU将响应中断请求,跳至相应的中断向量处开始执行中断服务程序,同时硬件自动将INTFn标志清0。 Bit76543210名称INT1INT0INT2-IVSELIVCE读写R/WR/WR/WRRRR/WR/W初始值00000000Bit76543210名称I
40、NTF1INTF0INTF2-读写R/WR/WRRRRRR初始值000000003.5 AVR中断 外部中断 外部中断常用作检测外部事件例如检测按键的状态下述内容用于实现任务描述3.D.2,在PD2管脚连接一个按键,使用外部中断检测该按键并翻转LED状态。 3.5 AVR中断 中断程序设计 1. 按键配置出于模块化的设计要求,可将按键相关管脚的配置,封装成为子函数SW_Config(),具体源码如下所示:【描述3.D.2】 SW_Config()/* 按键初始化函数 */void SW_Config(void)/PD2为外部中断INT0引脚/PD2引脚连接一个按键,按下为低电平/设置PD2为输
41、入DDRD &= (1PD2);/启用PD2的上拉电阻PORTD |= (1PD2);/设置INT0为低电平触发中断MCUCR &=(1ISC01) | (1ISC00);/使能INT0GICR |=(1INT0);3.5 AVR中断 中断程序设计 2. 主函数编写主函数main()存放在main.c文件中,除了相关初始化函数和主循环外,还需要定义一些必需的宏定义和头文件等,详细代码清单如下所示:【描述3.D.2】 main.c/* 宏定义 */开启iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 头文件 */IAR中已定义的ATmega16
42、相关寄存器名称#include /* 子函数 */LED初始化函数,代码请参考描述3.D.1void LED_Config(void);/按键初始化函数void SW_Config(void);/* 主函数 */void main(void)/LED初始化函数LED_Config();/SW初始化函数SW_Config(); /开总中断SREG |= (1 7); while(1)/等待中断3.5 AVR中断 中断程序设计 3. 中断服务函数中断服务程序用于处理外部中断的相关事务,本例中需要将LED的显示状态进行翻转,详细代码清单如下所示:【描述3.D.2】 INT0_S()/* 中断服务函数
43、 */INT0中断服务函数#pragma vector = INT0_vect_interrupt void INT0_S(void)/每次按下按键,LED状态翻转一次if(PORTC&(1PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);运行上述程序后,观察开发板,每次按下相关按键都会看到LED的亮灭状态随之翻转。3.5 AVR中断 中断程序设计 3.6 AVR定时器 相对于一般的8位单片机而言,AVR不仅配备了更多的定时/计数器(简称定时器)接口,而且还是增强型的。例如通过定时器与比较匹配寄存器互相配合,生成占空比可变的方波信号即脉冲宽度调制输出PWM信号,用
44、于D/A转换、电机无级调速和变频控制等。 3.6 AVR定时器-定时器概述 ATmega16A配置了2个8位和1个16位共3个定时器。它们是8位的定时器T/C0和T/C2和16位的T/C1。它们之间的功能比较如表3-19所示。 名称T/C0和T/C2T/C1位宽8位计数器16位设计(即允许16位的PWM)通道单通道计数器2个独立的输出比较单元输出缓冲-双缓冲的输出比较寄存器输入捕捉-一个输入捕捉单元输入噪声-输入捕捉噪声抑制器比较匹配比较匹配发生时清除定时器(自动加载)PWM脉冲无干扰脉冲,相位正确的PWM可变PWM周期-可变的PWM周期频率发生器频率发生器外部事件计数器外部事件计数器预分频器
45、10位的时钟预分频器中断源溢出和比较匹配中断源(TOV0和OCF0)4个独立的中断源(TOV1、OCF1A、OCF1B与ICF1)定时器原理框图如图3- 8所示。 3.6 AVR定时器-定时器概述 1. 时钟源与预分频器对于定时器来说,首先需要明确的就是时钟源,不同的时钟源决定了其定时和计数的时间间隔以及稳定性。1)内部时钟源T/C可以由内部同步时钟或外部异步时钟驱动。时钟源是由时钟选择逻辑决定的,而时钟选择逻辑是由位于T/C控制寄存器TCCR0的时钟选择位CS02:0控制的。3.6 AVR定时器-定时器概述 T/C1与T/C0共用一个预分频模块,但它们可以有不同的分频设置。当CSn2:0 =
46、 1时,系统内部时钟直接作为T/C的时钟源,这也是T/C最高频率的时钟源fCLK_I/O,与系统时钟频率相同。预分频器可以输出4个不同的时钟信号fCLK_I/O/8、fCLK_I/O/64、fCLK_I/O/256或fCLK_I/O/1024。3.6 AVR定时器-定时器概述 2)外部时钟源由T1/T0引脚提供的外部时钟源可以用作T/C时钟clkT1/clkT0。引脚同步逻辑在每个系统时钟周期对引脚T1/T0进行采样。然后将同步(采样)信号送到边沿检测器。寄存器由内部系统时钟clkI/O的上跳沿驱动。当内部时钟为高时,锁存器可以看作时透明的。3.6 AVR定时器-定时器概述 2. 计数单元8位
47、T/C0的主要功能部件为可编程的双向计数单元。原理框图如图3- 9所示。 根据不同的工作模式,计数器针对每一个clkT0实现清零、加一或减一操作。其时钟和操作有如下特点:clkT0可以由内部时钟源或外部时钟源产生,具体由时钟选择位CS02:0确定。3.6 AVR定时器-定时器概述 没有选择时钟源时(CS02:0 = 0)定时器即停止。不管有没有clkT0,CPU都可以访问TCNT0。CPU写操作比计数器其他操作(如清零、加减操作)的优先级高。计数序列由T/C控制寄存器(TCCR0)的WGM01和WGM00决定。计数器计数行为与输出比较OC0的波形有紧密的关系。T/C溢出中断标志TOV0根据WG
48、M01:0设定的工作模式来设置。TOV0可以用于产生CPU中断。 3.6 AVR定时器-定时器概述 3. 输出比较单元当定时器作输出比较时,8位比较器持续对TCNT0和输出比较寄存器OCR0进行比较。输出比较单元结构图如图3- 10所示。 一旦TCNT0等于OCR0,比较器就给出匹配信号。在匹配发生的下一个定时器时钟周期输出比较标志OCF0置位。3.6 AVR定时器-定时器概述 3. 输出比较单元若此时OCIE0=1且SREG的全局中断标志I置位,CPU将产生输出比较中断。执行中断服务程序时OCF0自动清零,或者通过软件写“1”的方式来清零。另外,根据由WGM21:0和COM01:0设定的不同
49、的工作模式,波形发生器利用匹配信号产生不同的波形。同时,波形发生器还利用max和bottom信号来处理极值条件下的特殊情况。3.6 AVR定时器-定时器概述 AVR的定时器工作模式比较多,具体有如下几种:普通模式。CTC(比较匹配时清零定时器)模式。快速PWM模式。相位修正PWM模式。相位与频率修正PWM模式。在这几种工作模式中,普通模式为最常用的工作模式。限于篇幅,本节只介绍普通模式,其他工作模式可参考相关资料。3.6 AVR定时器-定时器工作模式 以定时器0为例,在普通模式下计数器不停地累加,直至:计到最大值后(TOP = 0 xFF)数值溢出计数器简单地返回到最小值0 x00重新开始。在
50、TCNT0为零的同一个定时器时钟里T/C溢出标志TOV0置位。TOV0有点象第17位,只是只能置位,不会清零。由于定时器中断服务程序能够自动清零TOV0,因此可以通过软件提高定时器的分辨率。在普通模式下用户可以随时写入新的计数器数值。如果定时时间太长,必须使用定时器溢出中断或预分频器来扩展定时范围。 3.6 AVR定时器-定时器工作模式 与定时器有关的寄存器,以定时器0为例,计数寄存器TCNT0各位定义如表3- 20所示。输出比较寄存器OCR0各位的定义如表3- 21所示。Bit76543210名称TCNT0读写R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000Bit765
51、43210名称OCR0读写R/WR/WR/WR/WR/WR/WR/WR/W初始值000000003.6 AVR定时器-定时器寄存器 8位寄存器OCR0中的数据用于与寄存器TCNT0中的计数值进行匹配比较。在T/C0运行期间,比较匹配单元一直将寄存器TCNT0的计数值与寄存器OCR0的内容进行比较一旦TCNT0的计数值与OCR0的数值匹配相等,将产生一个中断申请或改变OC0的输出电平。定时/计数器中断屏蔽寄存器TIMSK各位定义如表3- 22所示。 Bit76543210名称OCIE2TOIE2TICIE1OC1E1AOCIE1BTOIE1OCIE0TOIE0读写R/WR/WR/WR/WR/WR
52、/WR/WR/W初始值000000003.6 AVR定时器-定时器寄存器 涉及定时器的相关位定义如表3- 23所示。定时器中断标志寄存器TIFR各位定义如表3- 24所示。 涉及定时器的相关位定义如表3- 25所示。 位名称说明OCIE2定时器2输出比较匹配中断允许标志OCIE0定时器0输出比较匹配中断允许标志TOIE2定时器2溢出中断允许标志TOIE0定时器0溢出中断允许标志Bit176543210名称OCF2TOV2ICF1OCF1AOCF1BTOV1OCF0TOV0读写R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名称说明OCF2定时器2比较匹配输出的中断标志位
53、OCF0定时器0比较匹配输出的中断标志位TOV2定时器2溢出中断标志位TOV0定时器0溢出中断标志位3.6 AVR定时器-定时器寄存器 定时器控制寄存器TCCR0各位定义如表3- 26所示。涉及定时器的相关位定义如表3- 27所示。 波形产生模式相关定义如表3- 28所示。 Bit76543210名称FOC0WGM00COM01COM00WGM01CS02CS01CS00读写R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名称说明FOC0强制输出比较位,非PWM模式下有效WGM01:0波形发生模式位COM01:0比较匹配输出方式CS02:0时钟源选择模式WGM01WGM
54、00工作模式计数上限OCR0更新TOV0更新000普通模式0 xFF立即0 xFF101PWM相位可调0 xFF0 xFF0 x00210CTC模式OCR0立即0 xFF311快速PWM0 xFF0 xFF0 xFF3.6 AVR定时器-定时器寄存器 普通模式和非PWM模式(WGM=0、2)下的COM0位功能定义如表3- 29所示。快速PWM模式(WGM0=3)下的COM0位功能定义如表3- 30所示。 相位可调PWM模式(WGM=1)下的COM0位功能定义如表3- 31所示。 COM01COM00说明00PB3为通用IO引脚(OC0与引脚不连接)01比较匹配时,触发OC0(OC0为源OC0的
55、取反)10比较匹配时,清零OC011比较匹配时,置位OC0COM01COM00说明00PB3为通用IO引脚(OC0与引脚不连接)01保留10比较匹配时,清零OC0;计数值为0 xFF时,置位OC011比较匹配时,置位OC0;计数值为0 xFF时,清零OC0COM01COM00说明00PB3为通用IO引脚(OC0与引脚不连接)01保留10向上计数过程中比较匹配时,清零OC0向下计数过程中比较匹配时,置位OC011向上计数过程中比较匹配时,置位OC0向下计数过程中比较匹配时,清零OC03.6 AVR定时器-定时器寄存器 定时器控制寄存器TCCR0各位定义如表3- 26所示。涉及定时器的相关位定义如
56、表3- 27所示。 波形产生模式相关定义如表3- 28所示。 Bit76543210名称FOC0WGM00COM01COM00WGM01CS02CS01CS00读写R/WR/WR/WR/WR/WR/WR/WR/W初始值00000000位名称说明FOC0强制输出比较位,非PWM模式下有效WGM01:0波形发生模式位COM01:0比较匹配输出方式CS02:0时钟源选择模式WGM01WGM00工作模式计数上限OCR0更新TOV0更新000普通模式0 xFF立即0 xFF101PWM相位可调0 xFF0 xFF0 x00210CTC模式OCR0立即0 xFF311快速PWM0 xFF0 xFF0 xF
57、F3.6 AVR定时器-定时器寄存器 定时器0的时钟源选择如表3- 32所示。 CS02CS01CS00说明000无时钟源(停止定时器)001CLKtos(不经过分频器)010CLKtos/8(来自分频器)011CLKtos/64(来自分频器)100CLKtos/256(来自分频器)101CLKtos/1024(来自分频器)110外部T0引脚,下降沿驱动111外部T0引脚,上升沿驱动3.6 AVR定时器-定时器寄存器 1. 选择定时器当AVR单片机晶振为8MHz(十进制),计数器的时钟源为内部时钟时,需要计数8000000个时钟周期才能达到定时1秒一次溢出的功能,显然大大超过了计数器的技术范围
58、。实践中采用预分频器进行分频,以256分频为例,则需要的时钟周期为:8000000/256=31250则16位的计数器1的计数范围为065535(0 xffff),可以达到要求。本例中可选定时器1。 3.6 AVR定时器-定时器程序设计 2. 计算计数值由于普通模式下定时器计数到0 xffff即产生中断,并翻转到0 x0000开始计数,则需要每次溢出后,改变定时器的计数初值,以便使其每次计数31250后,产生溢出中断。更改定时器1的计数初值可使用如下语句:TCNT1 =0 xffff-31250;使用计算的形式可以提高程序的可读性及避免计算错误,修改起来也方便。 3.6 AVR定时器-定时器程
59、序设计 3. 定时器初始化出于模块化的设计要求,定时器相关的配置可封装成为子函数TIM_Config(),具体源码如下所示:【描述3.D.3】 TIM_Config()/* 定时器初始化函数 */void TIM_Config(void)/配置时钟为clkio/256TCCR1B &=(1CS11)|(1CS10); TCCR1B |=(1CS12);/配置计数初值TCNT1 =0 xffff-31250;/开启定时器1溢出中断TIMSK |=(1TOIE1);3.6 AVR定时器-定时器程序设计 4. 主函数编写主函数main()存放在main.c文件中,除了相关初始化函数和主循环外,还需要
60、定义一些必需的宏定义和头文件等,详细代码清单如下所示:【描述3.D.3】 main.c/* 宏定义 */开启iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 头文件 */IAR中已定义的ATmega16相关寄存器名称#include /* 子函数 */LED初始化函数,代码请参考描述3.D.1void LED_Config(void);/定时器初始化函数void TIM_Config(void);/* 主函数 */void main(void)/LED初始化函数LED_Config();/TIM初始化函数TIM_Config();/开总中断S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度物业公司保安员夜间值班与休息合同
- 二零二五年度电梯井施工与电梯设备保养合同
- 2025年度幼儿园招生加盟与品牌转让合作协议
- 二零二五年度情感关系建立合同
- 二零二五年度2025年门面房租赁与社区配套服务合同
- 二零二五年度精装修公寓房购买与户外休闲设施使用合同3篇
- 二零二五版奶粉生产废弃物资源化利用服务合同范本页22篇
- 2025年度影视基地场地租赁合同及影视制作服务协议3篇
- 二零二五版电子商务SET协议安全风险评估与风险控制合同3篇
- 二零二五版淋浴房市场推广与广告投放合同3篇
- 城市基础设施维修计划
- 2024山西广播电视台招聘专业技术岗位编制人员20人历年高频500题难、易错点模拟试题附带答案详解
- 新材料行业系列深度报告一:新材料行业研究框架
- 人教版小学英语各册单词表(带英标)
- 广东省潮州市潮安区2023-2024学年六年级上学期期末考试数学试题
- 乡村治理中正式制度与非正式制度的关系解析
- 智能护理:人工智能助力的医疗创新
- 国家中小学智慧教育平台培训专题讲座
- 5G+教育5G技术在智慧校园教育专网系统的应用
- VI设计辅助图形设计
- 浅谈小学劳动教育的开展与探究 论文
评论
0/150
提交评论