資源描述:
《飛思卡爾xs128單片機中斷優(yōu)先級設(shè)置簡易教程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、本教程試圖用最少的時間教你飛思卡爾XS128單片機的中斷優(yōu)先級設(shè)置方法和中斷嵌套的使用,如果是新手請先學(xué)習(xí)中斷的基本使用方法。先來看看XS128DataSheet中介紹的相關(guān)知識,只翻譯有用的:七個中斷優(yōu)先級每一個中斷源都有一個可以設(shè)置的級別高優(yōu)先級中斷的可以嵌套低優(yōu)先級中斷復(fù)位后可屏蔽中斷默認優(yōu)先級為1同一優(yōu)先級的中斷同時觸發(fā)時,高地址(中斷號較?。┑闹袛嘞软憫?yīng)注意:高地址中斷只能優(yōu)先響應(yīng),但不能嵌套同一優(yōu)先級低地址的中斷下面直接進入正題,看看怎么設(shè)置中斷優(yōu)先級:XS128中包括預(yù)留的中斷一共有128個中斷位,如果為每個中斷都分配一個優(yōu)先
2、級寄存器的話會非常浪費資源,因此飛思卡爾公司想出了這樣一種辦法:把128個中斷分為16個組,每組8個中斷。每次設(shè)置中斷時,先把需要的組別告訴某個寄存器,再設(shè)置8個中斷優(yōu)先寄存器的某一個,這樣只需9個寄存器即可完成中斷的設(shè)置。分組的規(guī)則是這樣的:中斷地址位7到位3相同的中斷為一組,比如MC9SX128.h中這些中斷的位7到位3都為D,他們就被分成了一組。0~F正好16個組。INT_CFADDR就是上面說到的用來設(shè)置組別的寄存器:我們需要設(shè)置某個組別的中斷時,只要寫入最后8位地址就行了,比如設(shè)置SCI0的中斷優(yōu)先級,就寫入0xD0。設(shè)置好組別之
3、后,我們就要該組中相應(yīng)的中斷進行設(shè)置,設(shè)置中斷的寄存器為這其實是一組寄存器,一共有8個,每個都代表中斷組中的一個中斷。對應(yīng)規(guī)則是這樣的:中斷地址的低四位除以2比如還是SCI0,低四位是6,除以二就是3,那么我們就需要設(shè)置INT_CFDATA3往INT_CFDATAx中寫入0~7就能設(shè)置相應(yīng)的中斷優(yōu)先級了拿我本次比賽的程序來舉個例子:我們的程序中需要3個中斷:PIT0,PORTH,SCI0。PIT0定時檢測傳感器數(shù)值,PORTH連接干簧管進行起跑線檢測,SCI0接收上位機指令實現(xiàn)急停等功能。因此中斷優(yōu)先級要SCI0>PORTH>PIT0。我們
4、先要從頭文件中找出相應(yīng)中斷的地址:PIT0【7:4】位為7,選擇中斷組:INT_CFADDR=0x70;【3:0】為A,A/2=5,設(shè)置為第5優(yōu)先級那么INT_CFDATA5=5;porth【7:4】位為C,選擇中斷組:INT_CFADDR=0xC0;【3:0】為C,C/2=6,設(shè)置為第6優(yōu)先級那么INT_CFDATA6=6;Sci0【7:4】位為D,選擇中斷組:INT_CFADDR=0xD0;【3:0】為6,6/2=3,設(shè)置為第7優(yōu)先級那么INT_CFDATA3=7;最終程序為:voidInterrupt_Priority_Set(voi
5、d){INT_CFADDR=0x70;INT_CFDATA5=0x05;INT_CFADDR=0xC0;INT_CFDATA6=0x06;INT_CFADDR=0xD0;INT_CFDATA3=0x07;}還要注意一點,如果要實現(xiàn)中斷嵌套,需要在低級中斷中再開一次總中斷,比如這樣才能實現(xiàn)中斷的嵌套QufuNormalUniversitySonicTeam2011