




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第3章 RFID閱讀器開發基礎 3.1 閱讀器電路組成 3.2 AVR單片機概述 3.3 AVR時鐘與熔絲位 3.4 AVR通用I/O口 3.5 AVR中斷 3.6 AVR定時器 3.7 AVR USART 3.8 AVR SPI 3.1 閱讀器電路組成從電路上來看,閱讀器是一個嵌入式系統,一般由MCU控制器、射頻收發、通信接口、天線以及其他外圍電路組成,其組成如圖3-1所示。本章將首先講解閱讀器電路組成,然后講解作為閱讀器核心MCU的AVR單片機及其外圍電路。具體收發通道等會根據不同頻段RFID系統的需求將在后續章節進行分析和講解。 圖3-1 閱讀器組成 3.1.1 MCU及外圍電路MCU是
2、閱讀器的核心,配合外圍電路完成收發控制、向應答器發送命令與寫數據、應答器數據讀取與處理、與應用系統的高層進行通信等任務。MCU及外圍電路的結構如圖3-2所示。本書配套閱讀器的MCU為Atmel公司出品的AVR單片機,具體型號為Atmega16A。圖3-2 MPU及外圍電路的結構 3.1.2 收發通道收發通道主要負責數據的鏈路和無線鏈路,由以下兩部分組成: 發送通道,包括編碼、調制和功率放大電路,用于向應答器傳送命令和寫數據。 接收通道,包括解調、解碼電路,用于接收應答器返回的應答信息和數據。其收發通道電路的結構如圖3-3所示。另外,需要注意的是在實際的電路設計中,根據應答器的防碰撞能力的設置,
3、還應考慮防碰撞電路的設計。圖3-3 收發通道電路的結構3.1.3 天線閱讀器和應答器都需要安裝天線,天線的應用目標是取得最大的能量傳輸效果。選擇天線時,需要考慮天線類型、天線的阻抗、應答器附著物的射頻特性、閱讀器與應答器周圍金屬物體等因素。RFID系統所用的天線類型主要有偶極子天線、微帶貼片天線和線圈天線等。 偶極子天線輻射能力強,制造工藝簡單,成本低,具有全面方向性,常用于遠距離RFID系統。 微帶貼片天線的方向圖是定向的,工藝較復雜,成本較高。 線圈天線用于電感耦合方式的RFID系統中(閱讀器和應答器之間的耦合電感線圈在這里也稱為天線)。線圈天線適用于近距離的RFID系統,在超高頻頻段和工
4、作距離、方向不定的場合難以得到廣泛應用。在應答器中,天線和應答器芯片是封裝在一起的,由于應答器尺寸的限制,天線的小型化和微型化現已成為RFID系統性能的重要因素。近年來研制的嵌入式線圈天線、分型開槽天線、地坡面圓極化EBG(電磁帶隙)天線等新型天線為應答器天線小型化提供了技術保證。3.2 AVR單片機概述1997年,Atmel公司挪威設計中心的A先生和V先生利用Atmel公司的Flash新技術,共同研發出RISC精簡指令集高速8位單片機,簡稱AVR。AVR的單片機可以廣泛應用于計算機外部設備、工業實時控制、儀器儀表、通信設備和家用電器等各個領域。3.2.1 AVR主要功能特性AVR單片機硬件結
5、構采取8位機與16位機的折中策略,即采用局部寄存器存堆和單體高速輸入/輸出的方案,既提高了指令執行速度,又克服了瓶頸現象,增強了功能。同時也減少了對外設管理的開銷,相對簡化了硬件結構,降低了成本。因而,AVR單片機在軟/硬件開銷、速度、性能和成本等諸多方面取得了優化平衡。AVR單片機其他特點如下:哈佛結構,具備1MIPS/MHz的高速運行處理能力。超功能精簡指令集(RISC),具有32個通用工作寄存器??焖俚卮嫒〖拇嫫鹘M、單周期指令系統,大大優化了目標代碼的大小和執行效率。部分型號Flash非常大,特別適用于使用高級語言進行開發。作輸出時可輸出40 mA(單一輸出);作輸入時可設置為三態高阻抗
6、輸入或帶上拉電阻輸入,具備1020 mA灌電流的能力。片內集成多種頻率的RC振蕩器、上電自動復位、看門狗、啟動延時等功能,外圍電路更加簡單,系統更加穩定可靠。大部分AVR片上資源豐富:帶EEPROM、PWM、RTC、SPI、USART、TWI、ISP、AD、Analog Comparator和WDT等。大部分AVR除了有ISP功能外,還有IAP功能,方便升級或銷毀應用程序。3.2.2 ATmega16AATmega16A是AVR系列單片機中的一個型號,因其功能豐富、性價比高而被廣泛應用。ATmega16A常用的有兩種封裝,分別為40引腳PDIP封裝和44引腳TQFP封裝。其中,40引腳PDIP
7、封裝如圖3-4所示,44引腳TQFP封裝如圖3-5所示。本書配套讀寫器的ATmega16A采用44引腳TQFP封裝。ATmega16A引腳功能較多,其具體說明如表3-1所示。圖3-4 40引腳PDIP封裝圖3-5 44引腳TQFP封裝 表3-1 ATmega16A 引腳說明 3.3 AVR時鐘與熔絲位AVR單片機的運行,需要有時鐘的驅動,而時鐘源的選擇需要設置相關熔絲位。3.3.1 AVR系統時鐘AVR有一套時鐘系統,也有多個時鐘源可作為系統時鐘,這些時鐘并不需要同時工作。為了降低功耗,可以通過使用不同的睡眠模式來禁止無需工作模塊的時鐘。具體時鐘分布如圖3-6所示。上圖中涉及的時鐘功能如表3-
8、2所示。圖3-6 AVR時鐘單元 表3-2 時鐘功能說明 AVR單片機的多種時鐘源通過一個時鐘多路選擇器來驅動系統時鐘或用作其他功能,時鐘源的選擇需要對熔絲位進行配置。被選擇的時鐘輸入到AVR時鐘發生器,再分配到相應模塊。AVR有六個時鐘源,分別如下: 外部晶體/陶瓷振蕩器,常用作主時鐘源,這個振蕩器可以使用石英晶體也可以使用陶瓷諧振器。XTAL1和XTAL2分別用作片內振蕩器的反相放大器的輸入和輸出。 外部低頻振蕩器,一般用來連接32.768 kHz晶振。需要對熔絲位編程,使能XTAL1和XTAL2的內部電容,從而除去外部電容。內部電容的標稱數為36 pF。 外部RC振蕩器。對于時間不敏感的
9、應用可以使用外部RC振蕩器。頻率可以通過f=1/(3RC)進行粗略的估算。電容至少需要22 pF。 標定的內部RC振蕩器。標定的片內RC振蕩器提供了固定的1.0、2.0、4.0或8.0 MHz的時鐘。這個時鐘也可作為系統時鐘。選擇這個時鐘之后就無需外部器件了。 外部時鐘。XTAL1連接外部來的時鐘信號,作為系統時鐘驅動整個CPU運行。XTAL2可懸空。 定時器振蕩器。對于擁有定時器/振蕩器引腳(TOSC1和TOSC2)的AVR微處理器,晶體可以直接與這兩個引腳相連,無需外部電容。此振蕩器針對32.768kHz的中標晶體作了優化。器件出廠時,缺省設置的時鐘源是1 MHz的內部RC振蕩器,啟動時間
10、為最長。這種設置保證用戶可以通過ISP或并行編程器得到所需的時鐘源。3.3.2 AVR熔絲位在AVR內部有多組與器件配置和運行環境相關的熔絲位,這些熔絲位非常重要,用戶可以通過設定和配置熔絲位,使AVR具備不同的特性,以更加適合實際的應用。ATmega16A有兩個熔絲位字節,分別為熔絲位高字節和熔絲位低字節。如果熔絲位被編程則讀返回值為“0”。其中,熔絲位高字節每個Bit的定義如表3-3所示;熔絲位低字節每個Bit的定義如表3-4所示。在熔絲位中,與系統時鐘有關的有CKOPT和CKSEL3:0,主要用來選擇振蕩器種類和工作頻率,具體配置如表3-5所示。表3-3 熔絲位高字節定義表3-4 熔絲位
11、低字節定義 表3-5 CKOPT與CKSEL3:0的配置 CKOPT的數值決定了振蕩器輸出幅度的大小,不同振幅決定了其適應場合的不同,具體含義如下: 在CKOPT=0時,振蕩器的輸出振幅較大,容易起振,適合在干擾大的場合以及使用晶體振蕩器超過8 MHz的情況下。 當CKOPT=1時,振蕩器的輸出振幅較小,這樣可以減少對電源的消耗,對外的電磁輻射也較小。3.4 AVR通用I/O口ATmega16A有四組通用I/O端口,分別為PORTA、PORTB、PORTC和PORTD,簡稱PA、PB、PC和PD。每組I/O端口有8個I/O管腳。這些管腳都是相互獨立的,具有真正的讀、改、寫功能。AVR通用I/O
12、口的主要特點如下: 雙向獨立位控的I/O口。每一位都可以單獨進行配置,互不影響。 大電流驅動,每個I/O口輸出采用推挽方式,最大20 mA灌電流,可直接驅動LED。 I/O端口可以復用,作為USART、SPI等外設接口。3.4.1 通用I/O口結構AVR的通用I/O口的結構并不復雜,其結構如圖3-7所示。每一組I/O端口內部配備三個8位寄存器,對應著該組的8個引腳,分別為: 方向控制寄存器DDRx(x=A,B,C,D)。 數據寄存器PORTx(x=A,B,C,D)。 輸入引腳寄存器PINx(x=A,B,C,D)。此外,每個I/O口內部還有一個上拉電阻。方向控制寄存器DDRx用于控制I/O口的輸
13、入輸出方向,即控制I/O口的工作方式為輸入方式還是輸出方式。圖3-7 通用I/O口結構 當DDRx=1時,I/O口處于輸出工作方式,此時數據寄存器PORTx中的數據通過一個推挽電路輸出到外部引腳,當PORTx=1時,I/O引腳呈現高電平,同時可以提供輸出20 mA的電流;而當PORTx=0時,I/O引腳呈現低電平,同時可以吸納20 mA電流。因此,AVR的I/O口在輸出方式下提供了比較大的驅動能力,可以直接驅動LED燈小功率外圍器件。 當DDRx=0時,I/O口處于輸入方式。此時引腳寄存器PINx中的數據就是外部引腳的實際電平,通過讀PINx寄存器可以獲得外部引腳上的真實電平。在輸入方式下,P
14、ORTx可以控制使用或者不使用內部的上拉電阻。此外,在寄存器SFIOR中,有一位稱做PUD,它是AVR全部I/O口內部上拉電阻的總開關。當PUD=1時,AVR所有I/O內部上拉電阻都不起作用。當PUD=0時,各個I/O口內部的上拉電阻取決于PORTx的設置。3.4.2 通用I/O寄存器ATmega16A的四個端口都有各自對應的三個I/O口寄存器,分別為數據寄存器PORT、數據方向寄存器DDR和輸入引腳PIN。它們占用了I/O空間的12個地址。以PA口寄存器為例,數據寄存器PORTA的具體定義如表3-6所示;數據方向寄存器DDRA的具體定義如表3-7所示;輸入引腳寄存器PINA的具體定義如表3-
15、8所示。表3-6 PORTA寄存器 表3-7 DDRA寄存器表3-8 PINA寄存器 3.4.3 通用I/O程序設計通用I/O口常用于MCU對外數據輸出和輸入,LED驅動和按鍵檢測等。下述內容用于實現描述3.D.1,即使用PC7管腳交替點亮和熄滅一只LED。1. LED初始化基于模塊化和移植的考慮,可將I/O口設置子程序單獨封裝成一個子函數。例如,LED相關管腳的配置可封裝成子函數LED_Config(),具體源碼如下:【描述3.D.1】LED_Config()/* LED初始化函數 */void LED_Config(void)/PC7引腳連接一個LED,低電平點亮/設置PC7為輸出DDRC
16、 |= (1PC7);/設置PC7為高電平PORTC |= (1PC7);2. 主函數編寫主函數main()存放在main.c文件中,除了相關初始化函數和主循環外,還需要定義一些必需的宏定義和頭文件等,詳細代碼清單如下:【描述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
17、_Config(); while(1)/點亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);單步執行如下語句時,會看到LED亮滅轉換。while(1) /點亮LEDPORTC &= (1PC7);/熄滅LEDPORTC |= (1PC7);3.4.4 I/O端口第二功能AVR的I/O端口除了通用I/O功能外,大多數端口引腳都具有第二功能,使能某些引腳的第二功能,不會影響到同一端口其他引腳作為通用I/O口的功能。ATmega16A的I/O端口第二功能如表3-9所示。表3-9 I/O端口第二功能 3.5 AVR中斷AVR單片機的中斷源種類多、門類全,便于設計實時、
18、多功能、高效率的嵌入式應用系統。但同時由于其功能更為強大,因此比一般8位單片機的中斷使用和控制相對復雜些。3.5.1 中斷向量AVR單片機一般擁有數十個中斷源,每個中斷源都有獨立的中斷向量。默認情況下,程序存儲器的最低端,即從Flash地址的0 x0000開始用于放置中斷向量,稱做中斷向量區。ATmega16A共有21個中斷源。默認狀態下,ATmega16A的中斷向量如表3-10所示。表3-10 ATmega16A中斷向量表 在這21個中斷中,包含1個非屏蔽中斷(RESET)、3個外部中斷(INT0、INT1、INT2)和17個內部中斷。本節只簡要介紹RESET和外部中斷。 系統復位中斷RES
19、ET,也稱為系統復位源。RESET是一個特殊的中斷源,是AVR中唯一不可屏蔽的中斷。當ATmega16A由于各種原因被復位后,程序將跳到復位向量(默認為0 x0000)處,在該地址處通常放置一條跳轉指令,跳轉到主程序繼續執行。 INT0、INT1和INT2是三個外部中斷源,它們分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態觸發。通過對控制寄存器MCUCR和控制與狀態寄存器MCUCSR的配置定義觸發方式。3.5.2 中斷控制AVR單片機的中斷,有優先級和屏蔽等功能和控制手段,也支持中斷的嵌套,并可以靈活地進行配置和使用。1. 中斷優先級在AVR單片機中,一個中斷在中斷向量區的位置決定
20、了它的優先級,即位于低地址的中斷優先級高于位于高地址的中斷優先級。因此,對于ATmega16A來說,復位中斷RESET具有最高優先級,外部中斷INT0次之,而SPM_RDY的中斷優先級最低。AVR單片機采用固定的硬件優先級方式,不支持通過軟件對中斷優先級的重新設定。因此,中斷優先級的作用僅體現在同一時刻有兩個及兩個以上中斷源向MCU申請中斷的情況中。在這種情況下,MCU根據優先級的不同,首先響應其中最高優先級的中斷,待該中斷服務程序執行完返回后,再依次響應優先級較低的中斷。2. 中斷標志AVR有兩種不同機制的中斷:帶有中斷標志的中斷和不帶中斷標志的中斷。中斷標志是指每個中斷源在其I/O空間寄存
21、器中具有自己的一個中斷標志位。在AVR中,大多數的中斷都屬于帶中斷標志的中斷。中斷標志位一般在MCU響應該中斷時由硬件自動清除,或在中斷服務程序中通過讀寫專門數據寄存器的方式自動清除。關于中斷標志,還有下述規則和情況:當中斷被禁止或MCU不能馬上響應中斷時,則該中斷標志將會一直保持,直到中斷允許并得到響應為止。已建立的中斷標志,實際就是一個中斷的請求信號,如果暫時不能被響應,則該中斷標志會一直保留(除非被用戶軟件清除),此時該中斷被“掛起”。如果有多個中斷被掛起,一旦中斷允許后,各個被掛起的中斷將按優先級依次得到中斷響應服務。在AVR中,還有個別的中斷不帶中斷標志,如配置為低電平觸發的外部中斷
22、。這類中斷只要條件滿足,就會一直向MCU發出中斷請求。如果由于等待時間過長而得不到響應,則可能因中斷條件結束而失去一次中斷服務的機會。如果這個低電平維持時間過長,則會使中斷服務完成返回后再次響應,即MCU重復響應同一中斷的請求,進行重復服務。3. 中斷屏蔽與管理為了能夠靈活地管理中斷,AVR對中斷采用兩級控制方式。所謂兩級控制,是指AVR有一個中斷允許的總控制位I(即AVR狀態寄存器SREG中的I標志位),通常稱為全局中斷允許控制位。狀態寄存器SREG的定義如表3-11所示。其中,I位置位時,使能全局中斷,清零時則不論單獨中斷標志置位與否,都不會產生中斷。任一中斷發生后I清零,而執行RETI(
23、中斷返回)指令后,I位恢復置位以使能中斷。同時,AVR為每一個中斷源都設置了獨立的中斷允許位,這些中斷允許位分散在每個中斷源所屬模塊的控制寄存器中。表3-11 狀態寄存器SREG 4. 中斷嵌套由于AVR在響應一個中斷的過程中通過硬件將I標志位自動清0,這樣就阻止了MCU響應其他中斷,因此通常情況下,AVR是不能自動實現中斷嵌套的。如果要實現中斷嵌套的應用,用戶可在中斷服務程序中使用指令使能全局中斷允許位I,通過間接的方式實現中斷的嵌套處理。3.5.3 外部中斷ATmega16A有INT0、INT1和INT2三個外部中斷源,分別由芯片外部引腳PD2、PD3和PB2上的電平變化或狀態作為中斷觸發
24、信號。1. 外部中斷觸發方式INT0、INT1和INT2的中斷觸發方式取決于用戶程序對MCU控制寄存器MCUCR和MCU控制與狀態寄存器MCUCSR的設定。其中,INT0和INT1支持4種中斷觸發方式,INT2支持2種,觸發方式如表3-12所示。表3-12 外部中斷觸發方式 2. 外部中斷寄存器在ATmega16A中,除了寄存器SREG中的全局中斷允許標志位I以外,與外部中斷有關的寄存器有4個,共有11個標志位,其作用分別是這三個外部中斷的中斷標志位、中斷允許控制位及定義外部中斷的觸發類型。MCU控制寄存器MCUCR的低4位為INT0(ISC01、ISC00)和INT1(ISC11、ISC10
25、)中斷觸發類型控制位。MCUCR定義如表3-13所示。INT0和INT1的中斷觸發方式定義如表3-14所示。表3-13 MCUCR定義表3-14 INT0與INT1中斷觸發方式定義 MCU控制與狀態寄存器MCUCSR中的第6位(ISC2)為INT2的中斷觸發類型控制位。MCUCSR定義如表3-15所示。INT2的中斷觸發方式如表3-16所示。通用中斷控制寄存器GICR的高3位為INT0、INT1和INT2的中斷允許控制位,其各位定義如表3-17所示。通用中斷標志寄存器GIFR的高3位為INT0、INT1和INT2的中斷標志位。GIFR各位定義如表3-18所示。表3-15 MCUCSR定義 表3
26、-16 INT2中斷觸發方式 表3-17 GICR定義 表3-18 GIFR定義 當INT0、INT1和INT2引腳上的有效事件滿足中斷觸發條件后,INTF0、INTF1和INTF2位會變成1。如果此時SREG寄存器中的I位為1,而且GICR寄存器中的INTn置1,則MCU將響應中斷請求,跳至相應的中斷向量處開始執行中斷服務程序,同時硬件自動將INTFn標志清0。3.5.4 中斷程序設計外部中斷常用作檢測外部事件,如檢測按鍵的狀態。下述內容用于實現描述3.D.2,即在PD2管腳連接一個按鍵,使用外部中斷檢測該按鍵并翻轉LED狀態。1. 按鍵配置出于模塊化的設計要求,可將按鍵相關管腳的配置封裝成
27、子函數SW_Config(),具體源碼如下:【描述3.D.2】 SW_Config()/* 按鍵初始化函數 */void SW_Config(void)/PD2為外部中斷INT0引腳/PD2引腳連接一個按鍵,按下為低電平/設置PD2為輸入DDRD &= (1PD2);/啟用PD2的上拉電阻PORTD |= (1PD2);/設置INT0為低電平觸發中斷MCUCR &=(1ISC01) | (1ISC00);/使能INT0GICR |=(1INT0);2. 主函數編寫主函數main()存放在main.c文件中,除了相關初始化函數和主循環外,還需要定義一些必需的宏定義和頭文件等,詳細代碼清單如下:【
28、描述3.D.2】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BIT_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關寄存器名稱#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. 中斷服
29、務函數中斷服務程序用于處理外部中斷的相關事務,本例中需要將LED的顯示狀態進行翻轉,詳細代碼清單如下:【描述3.D.2】 INT0_S()/* 中斷服務函數 */INT0中斷服務函數#pragma vector = INT0_vect_interrupt void INT0_S(void) /每次按下按鍵,LED狀態翻轉一次if(PORTC&(1PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);運行上述程序后,觀察開發板,每次按下相關按鍵都會看到LED的亮滅狀態隨之翻轉。3.6 AVR定時器相對于一般的8位單片機而言,AVR不僅配備了更多的定時/計數器(簡稱定時器
30、)接口,而且還是增強型的。例如,通過定時器與比較匹配寄存器互相配合,生成占空比可變的方波信號,即脈沖寬度調制輸出PWM信號,用于D/A轉換、電機無級調速和變頻控制等。3.6.1 定時器概述ATmega16A配置了兩個8位和一個16位共三個定時器。它們是8位的定時器T/C0及T/C2和16位的T/C1。它們之間的功能比較如表3-19所示。定時器原理圖如圖3-8所示。表3-19 定時器功能比較 圖3-8 定時器原理圖 1. 時鐘源與預分頻器對于定時器來說,首先需要明確的是時鐘源,不同的時鐘源決定了其定時和計數的時間間隔以及穩定性。1) 內部時鐘源T/C可以由內部同步時鐘或外部異步時鐘驅動。時鐘源是
31、由時鐘選擇邏輯決定的,而時鐘選擇邏輯是由位于T/C控制寄存器TCCR0的時鐘選擇位CS02:0控制的。T/C1與T/C0雖共用一個預分頻模塊,但可以有不同的分頻設置。當CSn2:0=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。2) 外部時鐘源由T1/T0引腳提供的外部時鐘源可以用作T/C時鐘clkT1/clkT0。引腳同步邏輯在每個系統時鐘周期對引腳T1/T0進行采樣。然后將同步(采樣)信號送到邊沿
32、檢測器。寄存器由內部系統時鐘clkI/O的上跳沿驅動。當內部時鐘為高時,鎖存器可以看做是透明的。2. 計數單元8位T/C0的主要功能部件為可編程的雙向計數單元。計數器單元原理圖如圖3-9所示。根據不同的工作模式,計數器針對每一個clkT0實現清零、加一或減一操作。其時鐘和操作有如下特點:clkT0可以由內部時鐘源或外部時鐘源產生,具體由時鐘選擇位CS02:0確定。沒有選擇時鐘源時(CS02:0 = 0)定時器即停止。不管有沒有clkT0,CPU都可以訪問TCNT0。CPU寫操作比計數器其他操作(如清零、加減操作)的優先級高。計數序列由T/C控制寄存器(TCCR0)的WGM01和WGM00決定。
33、計數器計數行為與輸出比較OC0的波形有緊密的關系。T/C的溢出中斷標志TOV0根據WGM01:0設定的工作模式來設置。TOV0可以用于產生CPU中斷。圖3-9 計數器單元原理圖 3. 輸出比較單元當定時器作輸出比較時,8位比較器持續對TCNT0和輸出比較寄存器OCR0進行比較。輸出比較單元結構圖如圖3-10所示。一旦TCNT0等于OCR0,比較器就給出匹配信號,在匹配發生的下一個定時器時鐘周期輸出比較標志OCF0置位。若此時OCIE0=1且SREG的全局中斷標志I置位,CPU將產生輸出比較中斷。執行中斷服務程序時,OCF0自動清零,或者通過軟件寫“1”的方式來清零。另外,根據WGM21:0和C
34、OM01:0設定的不同的工作模式,波形發生器利用匹配信號產生不同的波形。同時,波形發生器還利用max和bottom信號來處理極值條件下的特殊情況。圖3-10 輸出比較單元結構圖 3.6.2 定時器工作模式AVR的定時器工作模式比較多,具體有如下幾種:普通模式。CTC(比較匹配時清零定時器)模式??焖貾WM模式。相位修正PWM模式。相位與頻率修正PWM模式。在這幾種工作模式中,普通模式為最常用的工作模式。限于篇幅,本節只介紹普通模式,其他工作模式可參考相關資料。以定時器0為例,在普通模式下計數器不停地累加,直至:計到最大值(TOP = 0 xFF),數值溢出,計數器簡單地返回到最小值0 x00并
35、重新開始。在TCNT0為零的同一個定時器時鐘里,T/C溢出標志TOV0置位。TOV0有點像第17位,只能置位,不會清零。由于定時器中斷服務程序能夠自動清零TOV0,因此可通過軟件提高定時器的分辨率。在普通模式下用戶可以隨時寫入新的計數器數值。如果定時時間太長,必須使用定時器溢出中斷或預分頻器來擴展定時范圍。3.6.3 定時器寄存器定時器寄存器是與定時器有關的寄存器。以定時器0為例,計數寄存器TCNT0的各位定義如表3-20所示。輸出比較寄存器OCR0的各位定義如表3-21所示。8位寄存器OCR0中的數據用于與寄存器TCNT0中的計數值進行匹配比較。在T/C0運行期間,比較匹配單元一直將寄存器T
36、CNT0的計數值與寄存器OCR0的內容進行比較,一旦TCNT0的計數值與OCR0的數值匹配相等,將產生一個中斷申請或改變OCR0的輸出電平。定時/計數器中斷屏蔽寄存器TIMSK的各位定義如表3-22所示。表3-20 寄存器TCNT0定義 表3-21 寄存器OCR0定義 表3-22 寄存器TIMSK定義 涉及定時器的相關位定義如表3-23所示。定時器中斷標志寄存器TIFR的各位定義如表3-24所示。表3-23 相關位定義表3-24 寄存器TIFR定義 涉及定時器的相關位定義如表3-25所示。定時器控制寄存器TCCR0的各位定義如表3-26所示。表3-25 相關位定義表3-26 寄存器TCCR0定
37、義涉及定時器的相關位定義如表3-27所示。波形產生模式的相關定義如表3-28所示。表3-27 相關位定義 表3-28 波形產生模式定義 普通模式和非PWM模式(WGM=0,2)下的COM0位功能定義如表3-29所示。 快速PWM模式(WGM0=3)下的COM0位功能定義如表3-30所示。表3-29 COM0位功能定義 表3-30 COM0位功能定義相位可調PWM模式(WGM=1)下的COM0位功能定義如表3-31所示。表3-31 COM0位功能定義定時器0的時鐘源選擇如表3-32所示。表3-32 時鐘源選擇 3.6.4 定時器程序設計定時器常用作周期性事務的處理和操作,下述內容用于實現描述3.
38、D.3,即使用定時器1的溢出中斷實現1秒定時驅動LED閃爍。1. 選擇定時器當AVR單片機晶振為8MHz(十進制),計數器的時鐘源為內部時鐘時,需要計數8 000 000個時鐘周期才能達到定時1秒一次溢出的功能,顯然大大超過了計數器的計數范圍。實踐中采用預分頻器進行分頻,以256分頻為例,則需要的時鐘周期為8000000/256=31250若16位的計數器1的計數范圍為065 535(0 xffff),則可以達到要求。本例中可選定時器1。2. 計算計數值由于普通模式下定時器計數到0 xffff即產生中斷,并翻轉到0 x0000開始計數,則需要每次溢出后改變定時器的計數初值,以便使其每次計數31
39、250后產生溢出中斷。更改定時器1的計數初值可使用如下語句:TCNT1 =0 xffff-31250;使用計算的形式可以提高程序的可讀性及避免計算錯誤,修改起來也方便。3. 定時器初始化出于模塊化的設計要求,定時器相關的配置可封裝成子函數TIM_Config(),具體源碼如下:【描述3.D.3】TIM_Config()/* 定時器初始化函數 */void TIM_Config(void) /配置時鐘為clkio/256TCCR1B &=(1CS11)|(1CS10); TCCR1B |=(1CS12);/配置計數初值TCNT1 =0 xffff-31250;/開啟定時器1溢出中斷TIMSK |
40、=(1TOIE1);4. 主函數編寫主函數main()存放在main.c文件中,除了相關初始化函數和主循環外,還要定義一些必需的宏定義和頭文件等,詳細代碼清單如下:【描述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(v
41、oid)/LED初始化函數LED_Config();/TIM初始化函數TIM_Config();/開總中斷SREG |= (17);while(1)/等待中斷5. 中斷服務函數中斷服務程序用于處理外部中斷的相關事務,本例中需要將LED的顯示狀態進行翻轉,詳細代碼清單如下:【描述3.D.3】 TIMER1_ov()/* 中斷服務函數 */定時器1溢出中斷服務函數#pragma vector = TIMER1_OVF_vect_interrupt void TIMER1_ov(void) /重置計數初值TCNT1 =0 xffff-31250;/每次進中斷,LED狀態翻轉一次if(PORTC&(1
42、PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);運行上述程序后,觀察開發板,將看到LED以1秒鐘改變一次亮滅的狀態進行閃爍。3.7 AVR USARTAVR中集成了一個增強型的串行接口,簡稱USART(Universal Synchronous and Asynchronous serial Receiver and Transimitter,通用同步異步串行收發器)。該接口在嵌入式系統中一直是重要的應用接口,它不僅可以應用于板級芯片之間的通信,而且更多地應用在實現系統之間的通信和系統調試中。3.7.1 USART結構ATmega16A中集成了一個全雙工通用同步
43、/異步串行收發模塊USART,其原理圖如圖3-11所示。USART收發模塊分為三大部分:時鐘發生器、數據發送器和數據接收器。其各自功能如下: 時鐘發生器主要為發送器和接收器提供基本的時鐘。USART支持四種時鐘工作模式:普通異步模式、雙倍速異步模式、主機同步模式和從機同步模式。 數據發送器將MCU內部的并行數據根據串口波特率串行逐位送出。圖3-11 USART原理圖 數據接收器將外部收到的串行數據根據波特率逐位送入MCU并存儲。整個USART模塊受UCSRA、UCSRB和UCSRC三個寄存器的控制。3.7.2 USART寄存器USART數據寄存器UDR的各位定義如表3-33所示。UDR寄存器實
44、際上由兩個物理上分離的寄存器RXB、TXB構成,它們使用相同的I/O地址: 寫UDR的操作,是將發送的數據寫入到寄存器TXB中。 讀UDR的操作,讀取的是接收寄存器RXB的內容。當設定使用5、6或7位的數字幀時,高位未用到的位在發送時被忽略,在接收時由硬件自動清零。表3-33 寄存器UDR定義 只有在UCSRA寄存器中的UDRE為1時(數據寄存器空),UDR才能被寫入,否則寫入的數據將被USART忽略。在發送使能情況下,寫入UDR的數據將進入發送器的移位寄存器,由引腳TXD串行移出。USART控制和狀態寄存器UCSRA的各位定義如表3-34所示,其中每一位的具體含義如表3-35所示。USART
45、控制和狀態寄存器UCSRB的各位定義如表3-36所示,其中每一位的具體含義如表3-37所示。表3-34 寄存器UCSRA定義 表3-35 位 含 義 表3-36 寄存器UCSRB定義 表3-37 位 含 義 USART控制和狀態寄存器UCSRC的各位定義如表3-38所示,其中每一位的具體含義如表3-39所示。UPM設置涉及兩位,具體定義如表3-40所示。UCSZ設置涉及三位,具體定義如表3-41所示。 USART 波特率寄存器UBRRL和UBRRH的設置如表3-42所示。表3-38 寄存器UCSRC定義 表3-39 位 含 義 表3-40 UPM設置 表3-41 UCSZ設置 表3-42 寄存
46、器UBRRL和UBRRH設置 12位的USART波特率寄存器包含了USART的波特率信息。其中,UBRRH包含了USART波特率的高4位,UBRRL包含了低8位。波特率的改變將造成正在進行的數據傳輸受到破壞。寫UBRRL將立即更新波特率分頻器。對標準晶振及諧振器頻率來說,異步模式下最常用的波特率可通過寄存器UBRR的設置來產生。波特率與目標波特率的偏差不應超過0.5%,更高的誤差雖然也可以接受,但發送器的抗噪性會降低,特別是需要傳輸大量數據時。以常用的8MHz晶振和7.3728MHz晶振為例,其波特率和誤差表如表3-43所示。表3-43 波特率和誤差表 3.7.3 USART程序設計USART
47、接口經過電平轉換后,常用作與PC的通信。下述內容用于實現描述3.D.4,即配置USART波特率為115 200,使用中斷法對PC發來的數據進行回顯,并驅動LED狀態翻轉。1. USART配置出于模塊化的設計要求,USART相關的配置可封裝成子函數USART_Config(),具體源碼如下:【描述3.D.4】USART_Config()/* USART初始化函數 */void USART_Config(void) /USART倍速發送UCSRA |=(1U2X);/選擇UCSRC寄存器,字符長度8位UCSRC |=(1URSEL)|(1UCSZ1)|(1UCSZ0);/異步模式,無檢驗,1位停止
48、位UCSRC &= (1UMSEL)|(1UPM1)|(1UPM0)|(1USBS);/選擇UBRRH寄存器UBRRH &=(1URSEL);/晶振7.3728,波特率115200UBRRH =0;UBRRL =7;/接收中斷使能UCSRB |=(1RXCIE);/USART接收和發送使能UCSRB |=(1RXEN)|(1TXEN);2. 主函數編寫主函數main()存放在main.c文件中,除了相關初始化函數和主循環外,還要定義一些必需的宏定義和頭文件等,詳細代碼清單如下:【描述3.D.4】main.c/* 宏定義 */開啟iom16.h文件中的bit模式#define ENABLE_BI
49、T_DEFINITIONS 1/* 頭文件 */IAR中已定義的ATmega16相關寄存器名稱#include /* 子函數 */LED初始化函數,代碼請參考描述3.D.1void LED_Config(void);/USART初始化函數void USART_Config(void);/* 主函數 */void main(void)/LED初始化函數LED_Config();/USART初始化函數USART_Config();/開總中斷SREG |= (1 7);while(1)/等待中斷3. 中斷服務函數中斷服務程序用于處理外部中斷的相關事務,本例中需要將USART收到的數據原樣返回,進行回
50、顯,并驅動LED的顯示狀態進行翻轉,詳細代碼清單如下:【描述3.D.4】USART_RX()/* 中斷服務函數 */USART接收中斷服務函數#pragma vector = USART_RXC_vect _interrupt void USART_RX(void) char cn;/緩存USART接收到的數據cn =UDR;/將緩存的數據發送,進行回顯UDR =cn;/每次進中斷,LED狀態翻轉一次if(PORTC&(1PC7)PORTC &= (1PC7);elsePORTC |= (1PC7);連接好串口線后運行程序,AVR的串口將收到的字符送回到超級串口上,如果發送的字符為“12345
51、67”,則回顯字符如圖3-12所示。同時,LED會根據收到的字符數目進行閃爍。圖3-12 串口回顯數據 3.8 AVR SPI串行外設接口(Serial Perpheral Interface,SPI)是摩托羅拉公司開發的全雙工同步串行總線。該總線主要用于近距離低速的同步串行數據傳輸,如EEPROM、FLASH、晶屏和SD卡等器件。AVR的SPI是采用硬件方式實現面向字節的全雙工三線同步通信接口,它支持主機、從機模式及四種不同傳輸模式的SPI時序,通信速率有7種選擇。同時,AVR內部的SPI接口也被用作對芯片內部的程序存儲器和數據EEPROM的編程下載口。3.8.1 SPI結構ATmega16A的同步串行SPI接口允許在芯片與外設或幾個AVR之間,采用與標準SPI接口協議兼容的方式進行高速的同步數據傳輸,其主要特征如下:全雙工、三線同步數據傳輸??蛇x擇的主/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業污水處理設施工程可行性研究報告(模板范文)
- 2025年現代企業制度與管理創新的綜合能力考試卷及答案
- 2025年網絡安全測評師考試試題及答案
- 2025年實驗室安全與操作規范知識測試題及答案
- 2025年企業會計信息化管理考試試題及答案
- 2025年農村人居環境改善與發展考試試題及答案
- 2025年計算機網絡安全與防護考試試卷及答案
- 2025年城市交通管理與可持續發展的能力測試題及答案
- 2025年國際商務師考試試題及答案
- 物資驗收標準管理制度
- CSCO惡性血液病診療指南(2025)解讀
- 廣東省風力發電內蒙古分公司廣東能源集團招聘筆試題庫2025
- 父親節你了解你的爸爸嗎禮贊父親學會感恩模板
- 2023-2024學年安徽省合肥市六校聯盟高一下學期期末聯考地理試題(解析版)
- 新設備專項安全風險辨識評估報告示例-副本
- 蘇州市昆山市惠民物業管理有限公司招聘筆試真題2024
- 初級銀行從業資格考試《個人貸款》新版真題卷(2025年含答案)
- 民航飛行員招飛心理測試題及答案
- 生地考試測試題及答案
- 《動物保定技術》課件
- 2025年出版:全球市場光伏硅膠總體規模、主要生產商、主要地區、產品和應用細分調研報告
評論
0/150
提交評論