MC9S12XS模塊及其應(yīng)用實(shí)例_第1頁(yè)
MC9S12XS模塊及其應(yīng)用實(shí)例_第2頁(yè)
MC9S12XS模塊及其應(yīng)用實(shí)例_第3頁(yè)
MC9S12XS模塊及其應(yīng)用實(shí)例_第4頁(yè)
MC9S12XS模塊及其應(yīng)用實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩237頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

通用I/O口通過(guò)配置相應(yīng)寄存器位,可以設(shè)置輸入/輸出端口、驅(qū)動(dòng)能力、內(nèi)置上拉/下拉電阻使用、中斷輸入方式等多種功能。通過(guò)對(duì)DDR、I/O、RDR、PE、PS和IE等寄存器的設(shè)置,用戶(hù)可以獲得通用I/O口的不同工作方式。其中,DDR(數(shù)據(jù)方向寄存器)設(shè)定I/O口為輸入/輸出端口。數(shù)據(jù)寄存器(I/O寄存器)用于設(shè)定I/O口的高低電平。RDR(驅(qū)動(dòng)控制寄存器)用于設(shè)定I/O口的輸出驅(qū)動(dòng)能力。PE(上拉/下拉使能寄存器)用于當(dāng)I/O口為輸入口時(shí)使能內(nèi)置上拉電阻或下拉電阻的使用。PS(上拉/下拉選擇寄存器)當(dāng)中斷允許位置位時(shí),用于選擇上升沿觸發(fā)或下降沿觸發(fā)中斷;當(dāng)使能內(nèi)置上拉/下拉電阻時(shí),用于選擇使用上拉電阻或下拉電阻。IE(中斷使能寄存器)用于使能I/O口的中斷功能。 1.?dāng)?shù)據(jù)寄存器(Px)

數(shù)據(jù)寄存器Px中的8位對(duì)應(yīng)每個(gè)端口中的相應(yīng)引腳,如果某端口的引腳被定義為輸出時(shí),寫(xiě)入數(shù)據(jù)寄存器Px中的數(shù)值,則從對(duì)應(yīng)引腳輸出;如果某端口的引腳被定義為輸入時(shí),可以讀取數(shù)據(jù)寄存器Px對(duì)應(yīng)引腳的電平值。需要注意PORTE端口是一個(gè)特例,它的最低兩位只能為輸入口,所以PORTE端口的數(shù)據(jù)寄存器最低兩位是只讀位。 2.?dāng)?shù)據(jù)方向寄存器(DDRx) DDRx決定對(duì)應(yīng)引腳配置為輸出口還是輸入口,如果某位為“0”,則對(duì)應(yīng)引腳設(shè)定為輸入口;如果某位為“1”,則對(duì)應(yīng)引腳設(shè)定為輸出口。MCU復(fù)位后,DDRx值為0x00,引腳默認(rèn)為輸入口。 需要注意的是,PORTE端口是一個(gè)特例,它的最低兩位只能為輸入口,所以PORTE端口的數(shù)據(jù)方向寄存器最低兩位是只讀位,讀取這兩位始終返回“0”。 3.上拉電阻控制寄存器(PUCR) PORTA、PORTB、PORTE和PORTK端口都有內(nèi)置上拉電阻,PUCR有4位分別配置4個(gè)端口選擇使用內(nèi)置上拉電阻,即第7、4、1和0位分別設(shè)置K、E、B和A端口。當(dāng)控制位為“1”時(shí),設(shè)定對(duì)應(yīng)端口使用上拉電阻;當(dāng)控制位為“0”時(shí),禁止對(duì)應(yīng)端口使用上拉電阻。MCU復(fù)位后,設(shè)定PORTK和PORTE端口使用上拉電阻,PORTB和PORTA端口禁用上拉電阻。

PUCR第6位設(shè)置BKGD引腳使用上拉電阻。當(dāng)該位為“1”時(shí),設(shè)定該端口使用上拉電阻;當(dāng)控制位為“0”時(shí),禁止該端口使用上拉電阻。MCU復(fù)位后,該位為“1”,引腳默認(rèn)為使用內(nèi)置上拉電阻。 4.驅(qū)動(dòng)控制寄存器(RDR)

如果PORTA、PORTB、PORTE和PORTK端口為輸出口時(shí),每個(gè)端口都可以設(shè)置其輸出驅(qū)動(dòng)能力,RDR有4位分別設(shè)定4個(gè)端口輸出驅(qū)動(dòng)能力,即第7、4、1和0位分別設(shè)置K、E、B和A端口。如果某個(gè)控制位為“1”時(shí),設(shè)定對(duì)應(yīng)端口輸出驅(qū)動(dòng)能力降低;如果某個(gè)控制位為“0”時(shí),設(shè)定對(duì)應(yīng)端口為正常驅(qū)動(dòng)輸出方式。 1.?dāng)?shù)據(jù)寄存器(PTx)

如果數(shù)據(jù)方向寄存器DDRx的對(duì)應(yīng)位為“0”,即對(duì)應(yīng)引腳定義為輸入時(shí),讀取數(shù)據(jù)寄存器PTx的對(duì)應(yīng)位,則為對(duì)應(yīng)引腳的輸入電平值;如果DDRx的對(duì)應(yīng)位為“1”,即對(duì)應(yīng)引腳定義為輸出時(shí),寫(xiě)入PTx寄存器的對(duì)應(yīng)位,則為對(duì)應(yīng)引腳的輸出電平值。 2.輸入寄存器(PTIx)

輸入寄存器PTIx是一個(gè)只讀寄存器,如果DDRx的對(duì)應(yīng)位為“0”,即對(duì)應(yīng)引腳定義為輸入時(shí),讀取PTIx總是返回引腳電平值;如果DDRx的對(duì)應(yīng)位為“1”,即對(duì)應(yīng)引腳定義為輸出時(shí),利用PTIx可以監(jiān)視對(duì)應(yīng)引腳是否過(guò)載或短路。 3.?dāng)?shù)據(jù)方向寄存器(DDRx)

DDRx決定對(duì)應(yīng)引腳配置為輸出口還是輸入口,如果某位為“0”,則對(duì)應(yīng)引腳設(shè)定為輸入;如果某位為“1”,則對(duì)應(yīng)引腳設(shè)定為輸出。復(fù)位后,DDRx值為0x00,即MCU復(fù)位后引腳默認(rèn)為輸入口。

PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 4.驅(qū)動(dòng)控制寄存器(RDRx)

如果端口為輸出口時(shí),RDRx可以設(shè)置端口對(duì)應(yīng)引腳的輸出驅(qū)動(dòng)能力。如果RDRx某位為“1”,則對(duì)應(yīng)引腳的輸出驅(qū)動(dòng)能力為正常時(shí)的1/5;如果某位為“0”,則對(duì)應(yīng)引腳輸出為正常驅(qū)動(dòng)能力。復(fù)位后,驅(qū)動(dòng)控制寄存器值為0x00,即MCU復(fù)位后引腳默認(rèn)為滿(mǎn)功率驅(qū)動(dòng)輸出。PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 5.上拉/下拉使能寄存器(PERx)

如果端口為輸入口或者“線(xiàn)或”模式時(shí),可以通過(guò)上拉/下拉使能寄存器PERx使能選擇使用內(nèi)置上拉/下拉電阻。如果PERx某位為“1”時(shí),則對(duì)應(yīng)引腳允許使用內(nèi)置上拉/下拉電阻;如果某位為“0”時(shí),則對(duì)應(yīng)引腳禁用內(nèi)置上拉/下拉電阻。

PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 6.上拉/下拉選擇寄存器(PPSx)

當(dāng)某引腳被定義為輸入且使能內(nèi)置上拉/下拉電阻時(shí),上拉/下拉選擇寄存器PPSx用于選擇使用內(nèi)置上拉或者下拉電阻。如果PPSx某位為“0”,則對(duì)應(yīng)引腳使用上拉電阻;如果某位為“1”,則對(duì)應(yīng)引腳使用下拉電阻。

PORTP、PORTH和PORTJ三個(gè)端口都具有中斷功能,當(dāng)某端口允許中斷時(shí),PPSx還具有第二個(gè)作用,用于選擇該端口中的引腳中斷為上升沿觸發(fā)或下降沿觸發(fā)。當(dāng)端口某引腳使能中斷時(shí),當(dāng)PPSx對(duì)應(yīng)位為“0”時(shí),則該引腳中斷為下降沿觸發(fā);當(dāng)PPSx對(duì)應(yīng)位為“1”,則該引腳中斷為上升沿觸發(fā)。

PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 7.中斷使能寄存器(PIEx)

PORTP、PORTH和PORTJ三個(gè)端口具有中斷功能,且都有中斷使能寄存器PIEx,PIEx允許或者禁止相應(yīng)端口的中斷請(qǐng)求。如果PIEx某位為“1”,則對(duì)應(yīng)引腳允許中斷;如果某位為“0”,則對(duì)應(yīng)引腳禁止中斷。復(fù)位后,中斷使能寄存器值為0x00,MCU復(fù)位后關(guān)閉所有端口中斷請(qǐng)求。 5.2.2PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 8.中斷標(biāo)志寄存器(PIFx)

PORTP、PORTH和PORTJ三個(gè)端口具有中斷功能,且都有中斷標(biāo)志寄存器PIFx?;赑PSx寄存器設(shè)置的邊沿觸發(fā)中斷方式,當(dāng)端口相應(yīng)引腳發(fā)生中斷,并產(chǎn)生有效電平時(shí),則PIFx中的中斷引腳對(duì)應(yīng)位被置位。為了清除PIFx中的中斷標(biāo)志位,需要向該位進(jìn)行寫(xiě)“1”操作。 5.2.2PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ

PORTP、PORTH和PORTJ三個(gè)端口的中斷向量地址及相關(guān)標(biāo)志位、控制位如表5-2所示。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 1.AD0數(shù)據(jù)寄存器0(PT0AD0)

當(dāng)不使用AD功能時(shí),如果AD0端口數(shù)據(jù)方向寄存器0DDR0AD0的對(duì)應(yīng)位為“0”,即對(duì)應(yīng)引腳定義為輸入時(shí),讀取PT0AD0的對(duì)應(yīng)位,則為對(duì)應(yīng)引腳的輸入電平值;如果DDR0AD0的對(duì)應(yīng)位為“1”,即對(duì)應(yīng)引腳定義為輸出時(shí),寫(xiě)入PT0AD0寄存器的對(duì)應(yīng)位,則為對(duì)應(yīng)引腳的輸出電平值。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 2.AD0數(shù)據(jù)寄存器1(PT1AD0)

當(dāng)不使用AD功能時(shí),如果AD0端口數(shù)據(jù)方向寄存器1DDR1AD0的對(duì)應(yīng)位為“0”,即對(duì)應(yīng)引腳定義為輸入時(shí),讀取PT1AD0的對(duì)應(yīng)位,則為對(duì)應(yīng)引腳的輸入電平值;如果DDR1AD0的對(duì)應(yīng)位為“1”,即對(duì)應(yīng)引腳定義為輸出時(shí),寫(xiě)入PT1AD0寄存器的對(duì)應(yīng)位,則為對(duì)應(yīng)引腳的輸出電平值。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 3.AD0數(shù)據(jù)方向寄存器0(DDR0AD0)

DDR0AD0決定AN00~AN07對(duì)應(yīng)引腳為輸出口還是輸入口,如果某位為“0”,則對(duì)應(yīng)引腳設(shè)定為輸入口;如果某位為“1”,則對(duì)應(yīng)引腳設(shè)定為輸出口。如果希望設(shè)置AD0端口為通用I/O口功能,ATD0DIEN(數(shù)字輸入使能)寄存器必須設(shè)置為“1”,關(guān)于ATD0DIEN寄存器的詳細(xì)介紹,請(qǐng)參閱第8章。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 4.AD0數(shù)據(jù)方向寄存器1(DDR1AD0)

DDR1AD0決定AN08~AN15對(duì)應(yīng)引腳為輸出口還是輸入口,如果某位為“0”,則對(duì)應(yīng)引腳設(shè)定為輸入口;如果某位為“1”,則對(duì)應(yīng)引腳設(shè)定為輸出口。如果希望設(shè)置AD0端口為通用I/O口功能,ATD0DIEN寄存器必須設(shè)置為“1”,關(guān)于ATD0DIEN寄存器的詳細(xì)介紹,請(qǐng)參閱第8章。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 5.AD0驅(qū)動(dòng)控制寄存器0(RDR0AD0)

如果端口為輸出口時(shí),RDR0AD0可以設(shè)置端口對(duì)應(yīng)引腳的輸出驅(qū)動(dòng)能力。如果RDR0AD0某位為“1”,則對(duì)應(yīng)引腳的輸出驅(qū)動(dòng)能力為正常時(shí)的1/5;如果某位為“0”,則對(duì)應(yīng)引腳輸出為正常驅(qū)動(dòng)能力。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 6.AD0驅(qū)動(dòng)控制寄存器1(RDR1AD0)

如果端口為輸出口時(shí),RDR1AD0可以設(shè)置端口對(duì)應(yīng)引腳的輸出驅(qū)動(dòng)能力。如果RDR1AD0某位為“1”,則對(duì)應(yīng)引腳的輸出驅(qū)動(dòng)能力為正常時(shí)的1/5;如果某位為“0”,則對(duì)應(yīng)引腳輸出為正常驅(qū)動(dòng)能力。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 7.AD0上拉使能寄存器0(PER0AD0)

如果端口為輸入口時(shí),可以通過(guò)PER0AD0使能選擇使用內(nèi)置上拉電阻。如果PER0AD0某位為“1”時(shí),則對(duì)應(yīng)引腳允許使用內(nèi)置上拉電阻;如果某位為“0”時(shí),則對(duì)應(yīng)引腳禁用內(nèi)置上拉電阻。 5.2.3PORTT、PORTS、PORTM、PORTP、PORTH和PORTJ 8.AD0上拉使能寄存器1(PER1AD0)

如果端口為輸入口時(shí),可以通過(guò)PER1AD0使能選擇使用內(nèi)置上拉電阻。如果PER1AD0某位為“1”時(shí),則對(duì)應(yīng)引腳允許使用內(nèi)置上拉電阻;如果某位為“0”時(shí),則對(duì)應(yīng)引腳禁用內(nèi)置上拉電阻。 5.3.1控制輸出設(shè)備LED實(shí)例

典型LED有陽(yáng)極和陰極兩個(gè)引腳,LED在正向偏置的狀態(tài)下能夠發(fā)光,通過(guò)通用I/O口控制LED一個(gè)引腳,LED另外一個(gè)引腳接固定電平,即可實(shí)現(xiàn)LED的點(diǎn)亮控制。

本應(yīng)用實(shí)例硬件連接如圖5.21所示,PORTB端口連接8只LED,通過(guò)編程實(shí)現(xiàn)LED流水燈操作。 5.3.1控制輸出設(shè)備LED實(shí)例

由電路圖可知,使用MC9S12XS128的PORTB端口控制8只LED,PORTB端口輸出低電平點(diǎn)亮相應(yīng)LED。本例中流水燈的流動(dòng)速度沒(méi)有實(shí)現(xiàn)精確控制,即延時(shí)時(shí)間沒(méi)有精確計(jì)算,本書(shū)后面章節(jié)會(huì)論述如何實(shí)現(xiàn)精確定時(shí)。 5.3.1控制輸出設(shè)備LED實(shí)例

流水燈應(yīng)用實(shí)例程序清單如下所示。

通過(guò)讀取通用I/O口引腳的輸入電平值,可以獲悉輸入設(shè)備撥碼開(kāi)關(guān)的狀態(tài)。本應(yīng)用實(shí)例硬件連接如圖5.22所示。

由電路圖可知,通過(guò)MC9S12XS128的PORTA端口可以讀取8位撥碼開(kāi)關(guān)狀態(tài)。本例依然使用圖5.21所示的控制LED電路,使用MC9S12XS128的PORTB端口控制8只LED燈,考慮通過(guò)8只LED燈的亮滅反映8位撥碼開(kāi)關(guān)狀態(tài)的設(shè)置情況。 5.3.2讀取輸入設(shè)備撥碼開(kāi)關(guān)狀態(tài)實(shí)例

實(shí)例程序清單如下所示。.1MC9S12系列中斷系統(tǒng)概述

6.1.2中斷 MC9S12系列MCU的中斷分為可屏蔽中斷和不可屏蔽中斷。MCU有一個(gè)條件代碼寄存器(CCR),如圖6.2所示,其中的X位和I位與中斷相關(guān),X位是不可屏蔽中斷的屏蔽位,置為“1”則關(guān)閉不可屏蔽中斷,置為“0”則允許不可屏蔽中斷;I位是可屏蔽中斷的屏蔽位,置為“1”則關(guān)閉可屏蔽中斷,置為“0”則允許可屏蔽中斷。在系統(tǒng)復(fù)位時(shí),CCR這些中斷屏蔽位默認(rèn)為“1”,所以MCU復(fù)位后,不可屏蔽中斷和可屏蔽中斷都處于關(guān)閉狀態(tài)。

6.1.2中斷 1.不可屏蔽中斷 不可屏蔽中斷包括軟件中斷、非法指令陷阱和XIRQ中斷,下面簡(jiǎn)要介紹常用的幾個(gè)不可屏蔽中斷。 (1)軟件中斷

SWI實(shí)質(zhì)上是一條指令,但其執(zhí)行過(guò)程與中斷相同,即通過(guò)中斷矢量確定目標(biāo)地址,中斷矢量為$FFF6~$FFF7,它自動(dòng)保存MCU的寄存器和返回地址,最后必須通過(guò)RTI指令返回。 (2)非法指令陷阱

MCU正常工作時(shí),每次獲得的都是由匯編或編譯程序生成的有效操作碼,MCU能夠正確解釋并執(zhí)行它們,但當(dāng)受到干擾或系統(tǒng)出現(xiàn)混亂時(shí),可能得到無(wú)法識(shí)別的操作碼,即非法指令,這時(shí)MCU自動(dòng)產(chǎn)生一次中斷,中斷矢量地址為$FFF8~$FFF9。

6.1.2中斷 1.不可屏蔽中斷 (3)XIRQ XIRQ是非屏蔽中斷引腳,無(wú)論MCU處于哪種運(yùn)行狀態(tài),該引腳一旦被拉成低電平,MCU執(zhí)行完當(dāng)前指令后,都會(huì)響應(yīng)該中斷,中斷矢量為$FFF4~$FFF5。該中斷一般用于系統(tǒng)掉電檢測(cè)、硬件故障等重要事件處理,當(dāng)MCU處于等待或暫停模式時(shí),該中斷將喚醒MCU。

6.1.2中斷 2.可屏蔽中斷

可屏蔽中斷可以在程序控制下由用戶(hù)開(kāi)啟或者關(guān)閉??善帘沃袛嗟拈_(kāi)關(guān)是條件代碼寄存器(CCR)中的I位。通過(guò)清除I可以開(kāi)啟可屏蔽中斷。S12系列單片機(jī)中的可屏蔽中斷數(shù)量非常多,這里僅對(duì)IRQ做簡(jiǎn)要介紹,其他的可屏蔽中斷可參見(jiàn)相關(guān)功能模塊的章節(jié)。

MC9S12系列MCU有一個(gè)標(biāo)記為IRQ引腳,當(dāng)該引腳出現(xiàn)低電平或者下降沿時(shí),則會(huì)產(chǎn)生中斷請(qǐng)求信號(hào),這也是MCU接受外部事件中斷的主要手段。IRQ控制寄存器(IRQCR)和IRQ的中斷設(shè)置相關(guān),如圖6.3所示。

6.1.2中斷

通過(guò)該寄存器中的IRQE位和IRQEN位對(duì)IRQ中斷進(jìn)行設(shè)置。

IRQE:中斷電平/邊沿有效選擇:

0表示IRQ引腳配置為低電平有效;

1表示IRQ引腳配置為下降沿有效。

IRQEN:外部IRQ中斷請(qǐng)求使能:

0表示IRQ中斷關(guān)閉;

1表示IRQ中斷允許。

6.1.2中斷 3.中斷堆棧操作順序 因?yàn)橹袛囗憫?yīng)過(guò)程中,會(huì)有隱含的堆棧操作,所以中斷響應(yīng)前,堆棧必須有效,即堆棧指針SP必須指向一個(gè)有效的RAM區(qū),而且堆棧的大小必須不少于9個(gè)字節(jié)。中斷響應(yīng)堆棧操作如表6-1所示。6.2MC9S12系列中斷優(yōu)先級(jí) MC9S12系列有多個(gè)中斷源,所以在同一時(shí)刻可能會(huì)有兩個(gè)或兩個(gè)以上的中斷源同時(shí)請(qǐng)求中斷,這就要求必須根據(jù)任務(wù)的輕重緩急給每個(gè)中斷源分配不同的中斷優(yōu)先級(jí)。當(dāng)兩個(gè)或兩個(gè)以上中斷源同時(shí)發(fā)生時(shí),優(yōu)先級(jí)高的中斷將先被處理。一般來(lái)說(shuō),不可屏蔽中斷的優(yōu)先級(jí)高于可屏蔽中斷的優(yōu)先級(jí)。復(fù)位以及不可屏蔽中斷的優(yōu)先級(jí)從高到低依次為:6.2MC9S12系列中斷優(yōu)先級(jí)6.2MC9S12系列中斷優(yōu)先級(jí)6.2MC9S12系列中斷優(yōu)先級(jí)6.2MC9S12系列中斷優(yōu)先級(jí) MC9S12系列默認(rèn)的中斷處理機(jī)制如圖6.4所示。從圖中可以看到,MC9S12系列默認(rèn)狀態(tài)下在進(jìn)入中斷服務(wù)程序時(shí),CCR中的I位自動(dòng)置1,所以禁止響應(yīng)其他可屏蔽中斷,盡管在處理中斷A的服務(wù)程序過(guò)程中又來(lái)了更高級(jí)別的中斷B的中斷請(qǐng)求,MCU也無(wú)法及時(shí)處理高優(yōu)先級(jí)B中斷,必須等待當(dāng)前A中斷服務(wù)程序執(zhí)行完以后才能響應(yīng)高優(yōu)先級(jí)B中斷6.2MC9S12系列中斷優(yōu)先級(jí)

如果希望在MC9S12系列中實(shí)現(xiàn)中斷嵌套,一個(gè)比較簡(jiǎn)單的方法是進(jìn)入中斷服務(wù)程序時(shí),將CCR中的可屏蔽中斷屏蔽位I清零。這樣可以實(shí)現(xiàn)如圖6.5所示的中斷嵌套。6.2MC9S12系列中斷優(yōu)先級(jí)

從圖6.5中可以看到,這樣簡(jiǎn)單的CCR中的I位處理也可能會(huì)帶來(lái)問(wèn)題,就是會(huì)出現(xiàn)低優(yōu)先級(jí)的中斷請(qǐng)求也可以?huà)炱鸶邇?yōu)先級(jí)中斷服務(wù)程序。因?yàn)樵谑紫软憫?yīng)B中斷服務(wù)程序中已經(jīng)清除了可屏蔽中斷屏蔽位I,所以此時(shí)任何可屏蔽中斷請(qǐng)求都能夠得到響應(yīng),這樣就出現(xiàn)了低優(yōu)先級(jí)的中斷A打斷高優(yōu)先級(jí)B中斷服務(wù)程序的情況。為了解決這個(gè)問(wèn)題,可以只在A中斷服務(wù)程序中清除可屏蔽中斷屏蔽位I,而在B中斷服務(wù)程序中對(duì)CCR中的I位不做處理,這樣就可以得到如圖6.6所示的中斷處理機(jī)制,即只存在高優(yōu)先級(jí)的中斷請(qǐng)求打斷低優(yōu)先級(jí)中斷服務(wù)程序的情況。6.3MC9S12系列中斷程序應(yīng)用實(shí)例

本實(shí)例硬件連接如圖6.7所示,PORTA端口與1個(gè)8位撥碼開(kāi)關(guān)連接,PORTB端口與8只LED連接,IRQ引腳與一個(gè)按鍵連接,按鍵按下為低電平。要求編程實(shí)現(xiàn)IRQ作為中斷源,采用中斷方式,利用8位撥碼開(kāi)關(guān)控制8只LED燈的循環(huán)點(diǎn)亮速度,撥碼開(kāi)關(guān)的不同狀態(tài)設(shè)置了燈的循環(huán)點(diǎn)亮速度值。6.3MC9S12系列中斷程序應(yīng)用實(shí)例

本實(shí)例中關(guān)于流水燈的實(shí)現(xiàn)已經(jīng)在第5章中介紹過(guò),本章著重介紹中斷服務(wù)程序的編寫(xiě)。中斷服務(wù)程序可以有兩種編寫(xiě)方式:一種是利用中斷編號(hào)關(guān)聯(lián)中斷服務(wù)程序;另一種是通過(guò)在.prm文件中的聲明關(guān)聯(lián)中斷服務(wù)程序。首先介紹利用中斷編號(hào)編寫(xiě)中斷服務(wù)程序。從表6.2中可以看到,中斷向量表依次自上而下從0開(kāi)始編號(hào),中斷在表格中是第7個(gè),所以編號(hào)為“6”。另外一種比較方便確定編號(hào)的方法是,可以打開(kāi)工程中“Includes”文件夾下的“MC9S12XS128.h”文件,頭文件的開(kāi)始處對(duì)所有中斷向量地址和中斷標(biāo)號(hào)都做了宏定義,中斷的中斷向量入口地址的宏定義語(yǔ)句為“#defineVirq0xFFF2U”,中斷的中斷標(biāo)號(hào)的宏定義語(yǔ)句為“#defineVectorNumber_Virq6U”,所以也可以用“VectorNumber_Virq”代替前文中提到的編號(hào)“6”。下面是部分實(shí)例程序代碼。6.3MC9S12系列中斷程序應(yīng)用實(shí)例6.3MC9S12系列中斷程序應(yīng)用實(shí)例6.3MC9S12系列中斷程序應(yīng)用實(shí)例6.3MC9S12系列中斷程序應(yīng)用實(shí)例6.3MC9S12系列中斷程序應(yīng)用實(shí)例

還有另外一種方法實(shí)現(xiàn)中斷服務(wù)程序的編寫(xiě),這里以CodeWarrior為開(kāi)發(fā)工具介紹。在CodeWarrior工程中,可以找到擴(kuò)展名是.prm的文件,在這個(gè)文件下定義中斷向量和中斷服務(wù)程序的名稱(chēng),這樣在編寫(xiě)中斷服務(wù)程序時(shí),就不用寫(xiě)編號(hào)了。因?yàn)槠渌糠值某绦驅(qū)崿F(xiàn)方式和上面一樣,此處只介紹中斷服務(wù)程序的設(shè)計(jì)。7.1PWM模塊概述

脈沖寬度調(diào)制(PWM)是產(chǎn)生精確脈沖序列輸出和實(shí)現(xiàn)D/A轉(zhuǎn)換的有效方法,微控制器的脈寬調(diào)制模塊被廣泛應(yīng)用于工業(yè)控制和新型消費(fèi)機(jī)電產(chǎn)品中(如智能空調(diào)、節(jié)能冰箱、電動(dòng)自行車(chē)等)。PWM信號(hào)通過(guò)軟件編程調(diào)節(jié)波形的占空比、周期和相位,能夠用于直流電動(dòng)機(jī)調(diào)速、伺服電動(dòng)機(jī)控制、D/A轉(zhuǎn)換器等應(yīng)用。例如,電視機(jī)遙控部分普遍采用14位或16位的PWM產(chǎn)生調(diào)諧電壓;在無(wú)人自動(dòng)駕駛汽車(chē)系統(tǒng)中,常用伺服電動(dòng)機(jī)來(lái)控制方向盤(pán),伺服電動(dòng)機(jī)的旋轉(zhuǎn)角度與給定的PWM信號(hào)占空比一致,每個(gè)占空比數(shù)值都對(duì)應(yīng)一個(gè)旋轉(zhuǎn)角度;在燈光亮度調(diào)節(jié)、直流電動(dòng)機(jī)速度控制等方面,采用PWM信號(hào)能夠很容易實(shí)現(xiàn)。 MC9S12XS系列產(chǎn)生PWM信號(hào)的方法主要有兩種:利用輸出比較功能和MCU內(nèi)置的PWM模塊實(shí)現(xiàn)。利用輸出比較功能可以通過(guò)軟件編程設(shè)定輸出任意脈沖信號(hào),但會(huì)占用CPU資源,而且不易產(chǎn)生精確的脈沖序列;而MCU內(nèi)部集成的PWM模塊專(zhuān)門(mén)用于輸出PWM信號(hào),使用時(shí)極少占用CPU資源。7.2PWM模塊結(jié)構(gòu)組成和特點(diǎn)

MC9S12XS128內(nèi)置的PWM模塊框圖如圖7.1所示。7.2PWM模塊概述

由圖7.1可知,MC9S12XS128的PWM模塊具有8路8位獨(dú)立PWM通道,通過(guò)相應(yīng)設(shè)置也可以變?yōu)?個(gè)16位PWM通道,每個(gè)PWM通道由獨(dú)立運(yùn)行的8位通道計(jì)數(shù)器PWMCNT、兩個(gè)比較寄存器為通道周期寄存器PWMPER和占空比寄存器PWMDTY等組成。通過(guò)對(duì)各寄存器的參數(shù)設(shè)置,確定PWM波形的輸出周期和占空比,另外還可以通過(guò)通道極性寄存器PWMPOL和居中對(duì)齊使能寄存器PWMCAE設(shè)置PWM輸出脈沖波形的極性和對(duì)齊方式。7.2PWM模塊概述PWM模塊具有以下基本特征:具有可編程周期和占空比的8個(gè)獨(dú)立PWM通道;每個(gè)PWM通道具有獨(dú)立的計(jì)數(shù)器;每個(gè)通道可編程允許/禁止PWM功能;每個(gè)通道可軟件選擇PWM脈沖極性;具有雙緩沖的周期和占空比寄存器,當(dāng)?shù)竭_(dá)有效周期終點(diǎn)(PWM計(jì)數(shù)器到達(dá)0)或通道禁止時(shí),修改值生效;每個(gè)通道可編程中心對(duì)齊或左對(duì)齊輸出;8個(gè)8位通道或4個(gè)16位通道PWM分辨率;4個(gè)時(shí)鐘源(A、B、SA和SB)提供寬頻帶頻率;可編程的時(shí)鐘選擇邏輯;緊急關(guān)閉功能。7.3PWM模塊寄存器及設(shè)置 7.3.1PWM使能寄存器(PWME) PWM使能寄存器(PWMEnableRegister,PWME)中的每個(gè)控制位對(duì)應(yīng)相應(yīng)的PWM通道,可以通過(guò)設(shè)置相應(yīng)的控制位啟動(dòng)或者停止PWM信號(hào)輸出。當(dāng)任意一個(gè)PWMEx位被置位(PWMEx=1)時(shí),相應(yīng)的PWM信號(hào)產(chǎn)生輸出。但是,由于PWMEx需要與時(shí)鐘源同步,直到PWM模塊時(shí)鐘的下一個(gè)周期到來(lái),才能輸出正確的PWM波形。

當(dāng)處于級(jí)聯(lián)模式時(shí),8個(gè)8位PWM通道通過(guò)兩兩級(jí)聯(lián)構(gòu)成4個(gè)16位的PWM通道,此時(shí)PWME1、PWME3、PWME5和PWME7對(duì)應(yīng)控制4個(gè)16位PWM通道,而其他控制位無(wú)效,如圖7.2所示。7.3PWM模塊寄存器及設(shè)置7.3.1PWM使能寄存器(PWME)

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。PWME7:PWM通道7使能位。 0表示禁止PWM通道7輸出; 1表示允許PWM通道7輸出。PWME6:PWM通道6使能位。 0表示禁止PWM通道6輸出; 1表示允許PWM通道6輸出,如果CON67=1,該位無(wú)效,且PWM通道6輸出無(wú)效。PWME5:PWM通道5使能位。 0表示禁止PWM通道5輸出; 1表示允許PWM通道5輸出。PWME4:PWM通道4使能位。 0表示禁止PWM通道4輸出; 1表示允許PWM通道4輸出,如果CON45=1,該位無(wú)效,且PWM通道4輸出無(wú)效。7.3PWM模塊寄存器及設(shè)置7.3.1PWM使能寄存器(PWME)PWME3:PWM通道3使能位。 0表示禁止PWM通道3輸出; 1表示允許PWM通道3輸出。PWME2:PWM通道2使能位。 0表示禁止PWM通道2輸出; 1表示允許PWM通道2輸出,如果CON23=1,該位無(wú)效,且PWM通道2輸出無(wú)效。PWME1:PWM通道1使能位。 0表示禁止PWM通道1輸出; 1表示允許PWM通道1輸出。PWME0:PWM通道0使能位。 0表示禁止PWM通道0輸出; 1表示允許PWM通道0輸出;如果CON01=1,該位無(wú)效,且PWM通道0輸出無(wú)效。7.3PWM模塊寄存器及設(shè)置 7.3.2PWM極性寄存器(PWMPOL)

每個(gè)PWM通道波形開(kāi)始時(shí)的信號(hào)極性由PWM極性寄存器(PWMPolarityRegister,PWMPOL)中的極性選擇位(PPOLx)決定,如果PPOLx位為1,周期脈沖開(kāi)始時(shí)PWM通道輸出高電平信號(hào),當(dāng)通道計(jì)數(shù)器PWMCNTx數(shù)值等于占空比寄存器PWMDTYx數(shù)值時(shí)翻轉(zhuǎn)為低電平信號(hào);相反,如果PPOLx位為0,周期脈沖開(kāi)始時(shí)PWM通道輸出低電平信號(hào),當(dāng)PWMCNTx數(shù)值等于PWMDTYx數(shù)值時(shí)翻轉(zhuǎn)為高電平信號(hào),PWMPOL寄存器如圖7.3所示。7.3PWM模塊寄存器及設(shè)置

7.3.2PWM極性寄存器(PWMPOL)

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。

注意:PWMPOL寄存器中的PPOLx位可以在任何時(shí)刻進(jìn)行寫(xiě)入操作。如果正在產(chǎn)生PWM信號(hào)時(shí)要求改變信號(hào)極性,則PWM輸出脈沖在信號(hào)極性轉(zhuǎn)換過(guò)程中可能被截短或延長(zhǎng)。 PPOLx:PWM通道x輸出波形極性位。 0表示PWM通道x在周期脈沖開(kāi)始時(shí)輸出低電平,當(dāng)?shù)竭_(dá)占空比計(jì)數(shù)值時(shí)翻轉(zhuǎn)為高電平; 1表示PWM通道x在周期脈沖開(kāi)始時(shí)輸出高電平,當(dāng)?shù)竭_(dá)占空比計(jì)數(shù)值時(shí)翻轉(zhuǎn)為低電平。7.3PWM模塊寄存器及設(shè)置 7.3.3PWM時(shí)鐘選擇寄存器(PWMCLK)

每一個(gè)PWM通道可以選擇兩個(gè)時(shí)鐘之一作為該通道的時(shí)鐘源。PWM時(shí)鐘選擇寄存器(PWMClockSelectRegister,PWMCLK)如圖7.4所示。 讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。 注意:PWMCLK寄存器中的PCLKx位可以在任何時(shí)刻寫(xiě)入。如果正在產(chǎn)生PWM信號(hào)時(shí)要求改變信號(hào)極性,則PWM輸出脈沖在信號(hào)極性轉(zhuǎn)換過(guò)程中可能被截短或延長(zhǎng)。 PCLK7、PCLK6、PCLK3、PCLK2:PWM通道7、6、3、2時(shí)鐘選擇位。 0表示ClockB作為相應(yīng)通道時(shí)鐘源; 1表示ClockSB作為相應(yīng)通道時(shí)鐘源。 PCLK5、PCLK4、PCLK1、PCLK0:PWM通道5、4、1、0時(shí)鐘選擇位。 0表示ClockA作為相應(yīng)通道時(shí)鐘源; 1表示ClockSA作為相應(yīng)通道時(shí)鐘源。7.3PWM模塊寄存器及設(shè)置 7.3.3PWM時(shí)鐘選擇寄存器(PWMCLK) PWM時(shí)鐘選擇框圖如圖7.5所示,從圖中可知,PWM模塊一共有4個(gè)時(shí)鐘源,分別為ClockA、ClockB、ClockSA和ClockSB,其中ClockA和ClockB由總線(xiàn)時(shí)鐘直接分頻得到,分頻因子由PWM預(yù)分頻時(shí)鐘選擇寄存器(PWMPRCLK)中的Bit2~Bit0或Bit6~Bit4確定(如圖7.6所示),PWMPRCLK寄存器的介紹詳見(jiàn)7.3.4節(jié)。ClockSA由ClockA通過(guò)PWM比例因子A寄存器(PWMSCLA)再次分頻得到,ClockSB由ClockB通過(guò)PWM比例因子B寄存器(PWMSCLB)再次分頻得到,PWMSCLA寄存器和PWMSCLB寄存器的介紹詳見(jiàn)7.3.7節(jié)和7.3.8節(jié)。7.3PWM模塊寄存器及設(shè)置 7.3.4PWM預(yù)分頻時(shí)鐘選擇寄存器(PWMPRCLK) 讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。

注意:PWMPRCLK寄存器中的位可以在任何時(shí)刻寫(xiě)入。如果正在產(chǎn)生PWM信號(hào)時(shí)要求改變極信號(hào)性,則PWM輸出脈沖在信號(hào)極性轉(zhuǎn)換過(guò)程中可能被截短或延長(zhǎng)。 PCKB2~PCKB0:ClockB預(yù)分頻因子選擇位。

這3位決定了ClockB的分頻因子,ClockB可以作為通道2、3、6或7的兩個(gè)時(shí)鐘源之一,如表7-2所示。7.3PWM模塊寄存器及設(shè)置 7.3.4PWM預(yù)分頻時(shí)鐘選擇寄存器(PWMPRCLK)7.3PWM模塊寄存器及設(shè)置 7.3.4PWM預(yù)分頻時(shí)鐘選擇寄存器(PWMPRCLK) PCKA2~PCKA0:ClockA預(yù)分頻因子選擇位。

這3位決定了ClockA的分頻因子,ClockA是可以作為通道0、1、4或5的兩個(gè)時(shí)鐘源之一,如表7-3所示。7.3PWM模塊寄存器及設(shè)置 7.3.5PWM居中對(duì)齊使能寄存器(PWMCAE) PWM居中對(duì)齊使能寄存器(PWMCenterAlignEnableRegister,PWMCAE)包含8個(gè)控制位,如圖7.7所示。用于控制相應(yīng)PWM通道輸出波形為中心對(duì)齊輸出或左對(duì)齊輸出。如果CAEx=1,相應(yīng)的PWM通道輸出波形為中心對(duì)齊;如果CAEX=0,相應(yīng)的PWM通道輸出波形為左對(duì)齊。7.3PWM模塊寄存器及設(shè)置 7.3.5PWM居中對(duì)齊使能寄存器(PWMCAE) 注意:僅當(dāng)相應(yīng)的通道被禁止輸出時(shí),才可以設(shè)置該寄存器。 CAEx:通道x居中對(duì)齊輸出方式位。 0表示通道x輸出波形為左對(duì)齊方式。 1表示通道x輸出波形為居中對(duì)齊方式。7.3PWM模塊寄存器及設(shè)置 7.3.5PWM居中對(duì)齊使能寄存器(PWMCAE) PWM左對(duì)齊輸出波形如圖7.8所示。當(dāng)使用左對(duì)齊方式輸出時(shí),8位通道計(jì)數(shù)器PWMCNTx只做加法計(jì)數(shù);當(dāng)PWMCNTx計(jì)數(shù)器加法計(jì)數(shù)到通道占空比寄存器PWMDTYx中設(shè)置的數(shù)值時(shí),PWM通道輸出波形發(fā)生變化;當(dāng)PWMCNTx計(jì)數(shù)器加法計(jì)數(shù)到通道周期寄存器PWMPERx中設(shè)置的數(shù)值時(shí),PWMCNTx清零,輸出波形電平發(fā)生變化,然后讀取PWMDTYx寄存器和PWMPERx寄存器中的數(shù)值作為下一次PWMCNTx加法計(jì)數(shù)參考使用。PWM通道計(jì)數(shù)器PWMCNTx介紹詳見(jiàn)7.3.9節(jié),PWM通道周期寄存器PWMPERx介紹詳見(jiàn)7.3.10節(jié),PWM通道占空比寄存器PWMDTYx介紹詳見(jiàn)7.3.11節(jié)。7.3PWM模塊寄存器及設(shè)置 7.3.5PWM居中對(duì)齊使能寄存器(PWMCAE) PWM居中對(duì)齊輸出波形如圖7.9所示。當(dāng)使用居中對(duì)齊格式輸出時(shí),8位計(jì)數(shù)器PWMCNTx既做加法計(jì)數(shù)器也能做減法計(jì)數(shù)器;當(dāng)PWMCNTx計(jì)數(shù)器加法計(jì)數(shù)到PWMDTYx寄存器中設(shè)置的數(shù)值時(shí),PWM通道輸出波形發(fā)生變化;當(dāng)PWMCNTx計(jì)數(shù)器加法計(jì)數(shù)到PWMPERx寄存器中設(shè)置的數(shù)值時(shí),PWMCNTx計(jì)數(shù)器會(huì)從加法計(jì)數(shù)器變?yōu)闇p法計(jì)數(shù)器;當(dāng)PWMCNTx計(jì)數(shù)器開(kāi)始減法計(jì)數(shù)到PWMDTYx寄存器中的數(shù)值時(shí),PWM通道輸出波形再次發(fā)生變化;當(dāng)PWMCNTx計(jì)數(shù)器中數(shù)值減到0時(shí),PWMCNTx重新變?yōu)榧臃ㄓ?jì)數(shù)器,然后讀取PWMDTYx寄存器和PWMPERx寄存器中的數(shù)值作為下一次PWMCNTx計(jì)數(shù)參考使用。7.3PWM模塊寄存器及設(shè)置 7.3.6PWM控制寄存器(PWMCTL) PWM控制寄存器(PWMControlRegister,PWMCTL)如圖7.10所示。該寄存器用于PWM模塊的各種控制,其中包括4個(gè)級(jí)聯(lián)控制位,用于將一對(duì)8位PWM通道級(jí)聯(lián)成一個(gè)16位通道。當(dāng)通道6和通道7級(jí)聯(lián)時(shí),通道6的寄存器成為16位寄存器中的高8位字節(jié),通道7的寄存器為16位寄存器中的低8位字節(jié);當(dāng)通道4和通道5級(jí)聯(lián)時(shí),通道4的寄存器成為16位寄存器中的高8位字節(jié);當(dāng)通道2和通道3級(jí)聯(lián)時(shí),通道2的寄存器成為16位寄存器中的高8位字節(jié);當(dāng)通道0和通道1級(jí)聯(lián)時(shí),通道0的寄存器成為16位寄存器中的高8位字節(jié)。

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。7.3PWM模塊寄存器及設(shè)置 7.3.6PWM控制寄存器(PWMCTL) 注意:僅當(dāng)需要級(jí)聯(lián)的兩個(gè)通道都被禁止輸出時(shí),才可以設(shè)置PWMCTL寄存器中相應(yīng)的控制位。

①CON67:通道6、通道7級(jí)聯(lián)位。 0表示通道6、7作為兩個(gè)獨(dú)立的8位PWM通道。 1表示8位PWM通道6、7級(jí)聯(lián)形成一個(gè)16位PWM通道。通道6的寄存器作為16位通道的高8位字節(jié),通道7作為低8位字節(jié),這時(shí)通道7的引腳用做16位PWM的信號(hào)輸出(端口PWM7),通道7的時(shí)鐘選擇控制位、極性控制位、輸出使能控制位、居中對(duì)齊使能位有效;通道6的相應(yīng)寄存器控制位均無(wú)效。

②CON45:通道4、通道5級(jí)聯(lián)位。 0表示通道4、5作為兩個(gè)獨(dú)立的8位PWM通道。 1表示8位PWM通道4、5級(jí)聯(lián)形成一個(gè)16位PWM通道。通道4的寄存器作為16位通道的高8位字節(jié),通道5作為低8位字節(jié),這時(shí)通道5的引腳用做16位PWM的信號(hào)輸出(端口PWM5),通道5的時(shí)鐘選擇控制位、極性控制位、輸出使能控制位、居中對(duì)齊使能位有效;通道4的相應(yīng)寄存器控制位均無(wú)效。7.3PWM模塊寄存器及設(shè)置 7.3.6PWM控制寄存器(PWMCTL)

③CON23:通道2、通道3級(jí)聯(lián)位。 0表示通道2、3作為兩個(gè)獨(dú)立的8位PWM通道。 1表示8位PWM通道2、3級(jí)聯(lián)形成一個(gè)16位PWM通道。通道2的寄存器作為16位通道的高8位字節(jié),通道3作為低8位字節(jié),這時(shí)通道3的引腳用做16位PWM的信號(hào)輸出(端口PWM3),通道3的時(shí)鐘選擇控制位、極性控制位、輸出使能控制位、居中對(duì)齊使能位有效;通道2的相應(yīng)寄存器控制位均無(wú)效。

④CON01:通道0、通道1級(jí)聯(lián)位。 0表示通道0、1作為兩個(gè)獨(dú)立的8位PWM通道。 1表示8位PWM通道0、1級(jí)聯(lián)形成一個(gè)16位PWM通道。通道0的寄存器作為16位通道的高8位字節(jié),通道1作為低8位字節(jié),這時(shí)通道1的引腳用做16位PWM的信號(hào)輸出(端口PWM1),通道1的時(shí)鐘選擇控制位、極性控制位、輸出使能控制位、居中對(duì)齊使能位有效;通道0的相應(yīng)寄存器控制位均無(wú)效。7.3PWM模塊寄存器及設(shè)置 7.3.6PWM控制寄存器(PWMCTL)

如果需要PWM輸出精度更高,可以將2個(gè)8位PWM通道級(jí)聯(lián)構(gòu)成1個(gè)16位PWM通道,如圖7.11所示。7.3PWM模塊寄存器及設(shè)置 7.3.6PWM控制寄存器(PWMCTL) PSWAI:MCU等待工作模式下PWM停止位。使能該位,可以禁止預(yù)分頻器的時(shí)鐘輸入,降低MCU等待模式下的功耗。 0表示等待模式時(shí),允許預(yù)分頻器時(shí)鐘輸入; 1表示等待模式時(shí),禁止預(yù)分頻器時(shí)鐘輸入。 PFRZ:MCU凍結(jié)工作模式下PWM停止位,在凍結(jié)模式下,PWM通道計(jì)數(shù)器PWMCNTx停止計(jì)數(shù)。 0表示凍結(jié)模式時(shí),允許凍結(jié)PWM工作; 1表示凍結(jié)模式時(shí),禁止預(yù)分頻器時(shí)鐘輸入。7.3PWM模塊寄存器及設(shè)置 7.3.7PWM比例因子A寄存器(PWMSCLA) PWM比例因子A寄存器(PWMScaleARegister,PWMSCLA)是可編程分頻寄存器,如圖7.12所示,用于將ClockA進(jìn)行分頻,產(chǎn)生ClockSA。通過(guò)將ClockA除以PWMSCLA寄存器中的值,再除以2,產(chǎn)生ClockSA信號(hào),公式為 讀:任何時(shí)刻;寫(xiě):任何時(shí)刻(將導(dǎo)致分頻計(jì)數(shù)器裝載新的PWMSCLA比例因子值)。 注意:PWMSCLA默認(rèn)值為256,當(dāng)PWMSCLA=$00時(shí),此時(shí)ClockSA等于ClockA的頻率除以512。7.3PWM模塊寄存器及設(shè)置 7.3.8PWM比例因子B寄存器(PWMSCLB) PWM比例因子B寄存器(PWMScaleBRegister,PWMSCLB)是可編程分頻寄存器,如圖7.13所示,用于將ClockB進(jìn)行分頻,產(chǎn)生ClockSB。通過(guò)將ClockB除以PWMSCLB寄存器中的值,再除以2,產(chǎn)生ClockSB信號(hào),其公式為 讀:任何時(shí)刻;寫(xiě):任何時(shí)刻(將導(dǎo)致分頻計(jì)數(shù)器裝載新的PWMSCLB比例因子值)。 注意:PWMSCLB默認(rèn)值為256,當(dāng)PWMSCLB=$00時(shí),此時(shí)ClockSB等于ClockB的頻率除以512。7.3PWM模塊寄存器及設(shè)置 7.3.9PWM通道計(jì)數(shù)器(PWMCNT)

每個(gè)通道有一個(gè)專(zhuān)用的8位加/減計(jì)數(shù)器PWMCNT(PWMChannelCounterRegisters,PWMCNT),計(jì)數(shù)器PWMCNTx的頻率和時(shí)鐘源頻率相關(guān)??梢栽谌魏螘r(shí)刻讀取PWMCNTx中數(shù)值,而不影響PWMCNTx和PWM通道的工作。當(dāng)處于左對(duì)齊輸出模式時(shí),PWMCNTx從0開(kāi)始做加法計(jì)數(shù),直到增加到PWM周期寄存器PWMPERx1的值;當(dāng)處于居中對(duì)齊輸出模式時(shí),PWMCNTx從0開(kāi)始進(jìn)行加法計(jì)數(shù),直到增加到PWMPERx的值,然后再進(jìn)行減法,直至回到0。PWMCNTx寄存器如圖7.14所示。7.3PWM模塊寄存器及設(shè)置 7.3.9PWM通道計(jì)數(shù)器(PWMCNT) 向計(jì)數(shù)器PWMCNTx寫(xiě)入任何值將導(dǎo)致其復(fù)位到$00,PWMCNTx計(jì)數(shù)器方向設(shè)置為向上計(jì)數(shù),從周期寄存器PWMPERx和占空比寄存器PWMDTYx的緩沖器中得到周期和占空比的數(shù)值,然后根據(jù)極性選擇位PPOLx改變輸出電平。當(dāng)相應(yīng)的PWM通道被禁止(PWMEx=0)時(shí),PWMCNTx計(jì)數(shù)器不工作;當(dāng)相應(yīng)的PWM通道使能時(shí)(PWMEx=1),計(jì)數(shù)器以PWMCNTx中的值作為初始值開(kāi)始計(jì)數(shù)。 在16位級(jí)聯(lián)模式下,無(wú)論對(duì)16位計(jì)數(shù)器訪(fǎng)問(wèn),還是對(duì)高8位和低8位計(jì)數(shù)器分開(kāi)訪(fǎng)問(wèn),都會(huì)使計(jì)數(shù)器PWMCNTx復(fù)位清零。讀取16位計(jì)數(shù)器必須用16位方式訪(fǎng)問(wèn),以保持?jǐn)?shù)據(jù)的一致性,高8位和低8位計(jì)數(shù)器分別讀取會(huì)得到不正確的數(shù)值。

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。

注意:當(dāng)通道使能時(shí)寫(xiě)PWMCNTx可能會(huì)產(chǎn)生一個(gè)無(wú)效的PWM周期脈沖。7.3PWM模塊寄存器及設(shè)置 7.3.10PWM通道周期寄存器(PWMPER) 每個(gè)PWM通道有一個(gè)獨(dú)立的周期寄存器PWMPER(PWMChannelPeriodRegister),該寄存器中的值決定相應(yīng)PWM通道的周期,如圖7.15所示。 周期寄存器PWMPERx中的數(shù)值是雙緩沖的,因此,當(dāng)PWMPERx寄存器中的數(shù)值改變后,并不立即生效,直到下列事件中的一個(gè)發(fā)生:

當(dāng)前有效周期結(jié)束;

寫(xiě)計(jì)數(shù)器PWMCNTx(計(jì)數(shù)器復(fù)位到$00);

通道被禁止。

因此,PWM將總是輸出以前的波形或新波形,而不是兩者之間的某種無(wú)效波形。如果PWM通道被禁止,寫(xiě)入周期寄存器的數(shù)值將直接進(jìn)入鎖存器和緩沖器。7.3PWM模塊寄存器及設(shè)置 7.3.10PWM通道周期寄存器(PWMPER)

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。

注意:讀PWMPERx寄存器返回最新寫(xiě)入的數(shù)值,而不是返回當(dāng)前有效的周期值。 PWM輸出波形的周期計(jì)算方法是,用選擇的時(shí)鐘周期(ClockA、ClockB、ClockSA或ClockSB)乘以周期寄存器PWMPERx中的數(shù)值。

左對(duì)齊方式輸出(CAEx=0): PWMx周期=通道時(shí)鐘周期×PWMPERx

居中對(duì)齊方式輸出(CAEx=1): PWMx周期=通道時(shí)鐘周期×2×PWMPERx7.3PWM模塊寄存器及設(shè)置 7.3.11PWM通道占空比寄存器(PWMDTY) 每個(gè)PWM通道有一個(gè)獨(dú)立的占空比寄存器PWMDTY(PWMChannelDutyRegister),該寄存器中的值決定相應(yīng)PWM通道的占空比,如圖7.16所示。 占空比寄存器PWMDTYx中的數(shù)值是雙緩沖的,因此,當(dāng)PWMDTYx寄存器中的數(shù)值改變后,并不立即生效,直到下列事件中的一個(gè)發(fā)生:

當(dāng)前有效周期結(jié)束;

寫(xiě)計(jì)數(shù)器PWMCNTx(計(jì)數(shù)器復(fù)位到$00);

通道被禁止。

因此,PWM將總是輸出以前的波形或新波形,而不是兩者之間的某種無(wú)效波形。如果PWM通道被禁止,寫(xiě)入占空比寄存器的數(shù)值將直接進(jìn)入鎖存器和緩沖器。7.3PWM模塊寄存器及設(shè)置 7.3.11PWM通道占空比寄存器(PWMDTY)

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。

注意:讀PWMDTYx寄存器返回最新寫(xiě)入的數(shù)值,而不是返回當(dāng)前有效的占空比值。 PWMDTYx寄存器中數(shù)值的含義,根據(jù)極性控制位PPOLx的不同而不同。如果PPOLx位是1,PWM輸出波形開(kāi)始為高電平,當(dāng)PWMCNTx計(jì)數(shù)器數(shù)值等于PWMDTYx寄存器數(shù)值時(shí)變?yōu)榈碗娖剑藭r(shí)PWMDTYx寄存器中的數(shù)值代表了高電平的持續(xù)時(shí)間;如果PPOLx位是0,PWM輸出波形開(kāi)始為低電平,當(dāng)PWMCNTx計(jì)數(shù)器數(shù)值等于PWMDTYx寄存器數(shù)值時(shí)變?yōu)楦唠娖?,此時(shí)PWMDTYx寄存器中的數(shù)值代表了低電平的持續(xù)時(shí)間。

PWM波形占空比計(jì)算公式如下:7.3PWM模塊寄存器及設(shè)置 7.3.11PWM通道占空比寄存器(PWMDTY)

表7-5總結(jié)了在忽略PWM輸出格式(左對(duì)齊或居中對(duì)齊方式)和分辨率(8位或16位)情況下,PWM輸出波形的臨界情況。7.3PWM模塊寄存器及設(shè)置 7.3.12PWM關(guān)閉寄存器(PWMSDN) PWM關(guān)閉寄存器(PWMShutdownRegister,PWMSDN)具有緊急情況下立即關(guān)閉PWM通道輸出的功能,PWM緊急關(guān)閉情況下,PWM通道7被配置為輸入端口。PWMSDN寄存器如圖7.19所示。

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。 PWMIF:PWM中斷標(biāo)志位。當(dāng)PWM7ENA=1時(shí),PWM通道7引腳上的電平變化將產(chǎn)生中斷并置位PWMIF。向PWMIF位寫(xiě)1操作實(shí)現(xiàn)清零,PWMIF位寫(xiě)0操作無(wú)效。 0表示PWM通道7輸入信號(hào)無(wú)變化; 1表示PWM通道7輸入信號(hào)有變化。 PWMIE:PWM中斷使能位。 0表示禁止PWM中斷; 1表示允許PWM中斷。7.3PWM模塊寄存器及設(shè)置 7.3.12PWM關(guān)閉寄存器(PWMSDN)

PWMRSTRT:PWM重新啟動(dòng)控制位。只有當(dāng)PWM通道7處于無(wú)效狀態(tài)(非緊急關(guān)閉)時(shí),才可以重新啟動(dòng)PWM模塊。向PWMRSTRT位寫(xiě)1(觸發(fā)事件)之后,當(dāng)計(jì)數(shù)器返回0時(shí),PWM通道才開(kāi)始運(yùn)行。如果PWM7ENA位被復(fù)位到0,只有當(dāng)計(jì)數(shù)器返回到0后,PWM模塊才能開(kāi)始工作。讀取該位始終返回0。 PWMLVL:PWM緊急關(guān)閉后輸出電平選擇位。PWM緊急關(guān)閉情況下,PWM通道7為輸入端口,其他PWM通道的輸出電平由PWMLVL位確定。 0表示其他PWM通道輸出低電平; 1表示其他PWM通道輸出高電平。 PWM7IN:PWM通道7輸入狀態(tài)位,該位反應(yīng)了PWM通道7引腳的電平狀態(tài)。 PWM7INL:PWM緊急關(guān)閉后通道7輸入電平選擇位。PWM緊急關(guān)閉(PWM7ENA=1)情況下,該位確定PWM通道7輸入電平有效值。 0表示有效電平為低電平; 1表示有效電平為高電平。 PWM7ENA:PWM緊急關(guān)閉使能位。如果該位為1,通道PWM7被強(qiáng)制配置為輸入端口,并啟用緊急關(guān)閉功能。PWMSDN寄存器中其他位僅在PWM7ENA=1時(shí)才有意義。 0表示禁止緊急關(guān)閉; 1表示允許緊急關(guān)閉。7.4PWM模塊應(yīng)用實(shí)例

本節(jié)通過(guò)一個(gè)簡(jiǎn)單實(shí)例,讓讀者掌握PWM模塊的使用和編程方法。

本實(shí)例使用某一路PWM輸出實(shí)現(xiàn)D/A轉(zhuǎn)換功能,通過(guò)調(diào)節(jié)PWM輸出波形占空比,控制LED燈的亮度,硬件連接如圖7.20所示,PWM輸出波形用做D/A輸出時(shí),最簡(jiǎn)單的方法就是使用一階低通濾波器(如圖7.20中R1、C1構(gòu)成一階低通濾波器)對(duì)PWM信號(hào)濾波,為了保持輸出電壓穩(wěn)定,要確保輸出阻抗盡可能大。為此,在低通濾波器后增加了電壓跟隨器(圖7.20中由LM324和R2構(gòu)成)。軟件編程實(shí)現(xiàn)PWM輸出占空比不斷增大,可以觀察到LED燈的亮度不斷增加;之后PWM輸出占空比不斷減小,可以觀察到LED燈的亮度不斷降低。7.4PWM模塊應(yīng)用實(shí)例程序清單:7.4PWM模塊應(yīng)用實(shí)例程序清單:7.4PWM模塊應(yīng)用實(shí)例程序清單:7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用

在智能車(chē)競(jìng)賽系統(tǒng)設(shè)計(jì)中,直流電動(dòng)機(jī)和伺服電動(dòng)機(jī)的控制涉及智能車(chē)的速度與方向控制,是智能車(chē)控制好壞兩大關(guān)鍵因素。鑒于篇幅有限,在此僅敘述運(yùn)用MC9S12XS128的PWM模塊實(shí)現(xiàn)對(duì)直流電動(dòng)機(jī)和伺服電動(dòng)機(jī)的簡(jiǎn)單控制應(yīng)用,更詳細(xì)的速度控制算法和方向(角度)控制算法,請(qǐng)讀者參見(jiàn)相關(guān)參考文獻(xiàn)。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用

7.5.1應(yīng)用PWM模塊控制直流電動(dòng)機(jī)

直流電動(dòng)機(jī)驅(qū)動(dòng)是智能車(chē)前行的動(dòng)力所在。要驅(qū)動(dòng)、控制一個(gè)直流電動(dòng)機(jī)需要設(shè)計(jì)直流電動(dòng)機(jī)驅(qū)動(dòng)電路,既可以使用分立的功率元件(如MOSFET)搭建驅(qū)動(dòng)電路,也可以使用集成的直流電動(dòng)機(jī)功率驅(qū)動(dòng)芯片。在此,以Freescale公司的H橋功率驅(qū)動(dòng)芯片MC33887為例,介紹應(yīng)用PWM模塊控制直流電動(dòng)機(jī),其芯片內(nèi)部結(jié)構(gòu)及引腳圖分別如圖7.21和圖7.22所示(芯片詳細(xì)資料請(qǐng)讀者參考MC33887數(shù)據(jù)手冊(cè))。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.1應(yīng)用PWM模塊控制直流電動(dòng)機(jī) MC33887引腳功能如表7-6所示。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.1應(yīng)用PWM模塊控制直流電動(dòng)機(jī)

在智能車(chē)系統(tǒng)中,運(yùn)用MC33887驅(qū)動(dòng)直流電動(dòng)機(jī)的原理圖如圖7.23所示。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.1應(yīng)用PWM模塊控制直流電動(dòng)機(jī)

在此用MC9S12XS128的PWM7和PWM3分別作為MC33887的IN1和IN2引腳的輸入控制端,并通過(guò)MC9S12XS128的ADC模塊采樣MC33887的反饋電流信號(hào)(FB引腳),以實(shí)時(shí)監(jiān)控H橋的高邊工作電流值,實(shí)現(xiàn)對(duì)電動(dòng)機(jī)的轉(zhuǎn)速和轉(zhuǎn)矩的閉環(huán)控制。將D1(引腳18)和D2(引腳13)分別通過(guò)下拉電阻和上拉電阻連接到GND和5V,以使能OUT1(引腳6、7)和OUT2(引腳14、15)的輸出控制。運(yùn)用PWM模塊控制直流電動(dòng)機(jī)的源代碼如下。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.1應(yīng)用PWM模塊控制直流電動(dòng)機(jī)7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.1應(yīng)用PWM模塊控制直流電動(dòng)機(jī)7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.1應(yīng)用PWM模塊控制直流電動(dòng)機(jī)7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.2應(yīng)用PWM模塊控制伺服電動(dòng)機(jī)

伺服電動(dòng)機(jī)(俗稱(chēng)為舵機(jī))是競(jìng)賽車(chē)模標(biāo)準(zhǔn)配件,它是一種位置(角度)伺服驅(qū)動(dòng)器,用于需要角度調(diào)整變化并可以保持某個(gè)角度的控制應(yīng)用要求。目前在高檔遙控玩具、各種航模,包括飛機(jī)模型,潛艇模型,遙控機(jī)器人等裝置中已得到普遍應(yīng)用。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.2應(yīng)用PWM模塊控制伺服電動(dòng)機(jī)

圖7.24是車(chē)模伺服電動(dòng)機(jī)的機(jī)械結(jié)構(gòu)圖。車(chē)模伺服電動(dòng)機(jī)的工作原理:控制信號(hào)(這里為PWM信號(hào))輸出作用到控制電路板上的信號(hào)調(diào)制芯片,獲得一個(gè)直流偏置電壓。在伺服電動(dòng)機(jī)的控制電路板上有一個(gè)內(nèi)部基準(zhǔn)電路,該電路可以產(chǎn)生一個(gè)周期為20ms,寬度為1.5ms的基準(zhǔn)信號(hào),獲得的直流偏置電壓與電位器的當(dāng)前電壓進(jìn)行比較,產(chǎn)生一個(gè)輸出電壓差;輸出電壓差的正值或負(fù)值輸入到控制電路板上確定小型直流電動(dòng)機(jī)的正轉(zhuǎn)或反轉(zhuǎn)。當(dāng)小型直流電動(dòng)機(jī)轉(zhuǎn)速一定時(shí),通過(guò)級(jí)聯(lián)的變速齒輪組帶動(dòng)可調(diào)電位器旋轉(zhuǎn),最終使得輸出電壓差為0,此時(shí)小型直流電動(dòng)機(jī)轉(zhuǎn)動(dòng)到某一位置,并保持該位置,停止轉(zhuǎn)動(dòng)。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.2應(yīng)用PWM模塊控制伺服電動(dòng)機(jī)

伺服電動(dòng)機(jī)的輸出轉(zhuǎn)角與輸入PWM波控制信號(hào)的占空比存在如圖7.25所示的關(guān)系。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.2應(yīng)用PWM模塊控制伺服電動(dòng)機(jī)

由伺服電動(dòng)機(jī)的工作原理和圖7.25可知,只需改變輸入PWM脈沖信號(hào)的占空比便能獲得不同的轉(zhuǎn)角,實(shí)現(xiàn)智能車(chē)系統(tǒng)的轉(zhuǎn)向控制功能。在此應(yīng)用MC9S12XS128的PWM5模塊控制伺服電動(dòng)機(jī),伺服電動(dòng)機(jī)的工作電源電壓是4.8~6.0V,為了提高智能車(chē)系統(tǒng)的轉(zhuǎn)向性能,在此使用最高工作電壓6.0V,原理圖如圖7.26所示。7.5智能車(chē)系統(tǒng)中PWM模塊的應(yīng)用 7.5.2應(yīng)用PWM模塊控制伺服電動(dòng)機(jī)

有關(guān)PWM5的初始化代碼已經(jīng)在前面7.5.1節(jié)中給出,以下僅給出伺服電動(dòng)機(jī)控制的相關(guān)代碼,即設(shè)置PWM的占空比值,能夠?qū)崿F(xiàn)伺服電動(dòng)機(jī)的相應(yīng)轉(zhuǎn)向要求。8.2ATD模塊結(jié)構(gòu)組成和特點(diǎn) MC9S12XS128內(nèi)置的ATD模塊如圖8.1所示。8.2ATD模塊結(jié)構(gòu)組成和特點(diǎn)ATD模塊具有以下基本特征:

8位/10位/12位可選轉(zhuǎn)換精度;停止模式下轉(zhuǎn)換使用內(nèi)部時(shí)鐘;轉(zhuǎn)換完成后為低功耗狀態(tài);自動(dòng)和可編程數(shù)值比較,可設(shè)定大于或者小于等于設(shè)定值時(shí)中斷申請(qǐng);可編程采樣時(shí)間;左對(duì)齊/右對(duì)齊轉(zhuǎn)換數(shù)值;外部觸發(fā)功能;轉(zhuǎn)換完成中斷申請(qǐng);16路模擬輸入通道多路開(kāi)關(guān);可實(shí)現(xiàn)VRH、VRL和(VRH+VRL)/2特殊轉(zhuǎn)換;轉(zhuǎn)換序列長(zhǎng)度為1~16;連續(xù)轉(zhuǎn)換模式;多通道掃描功能;外部觸發(fā)功能可配置為AD通道或4個(gè)外部附加觸發(fā)輸入端,外部觸發(fā)源可選擇片外或片內(nèi)信號(hào)。8.3ATD模塊寄存器及設(shè)置 MC9S12XS128的ATD模塊相關(guān)寄存器詳見(jiàn)表8-1。8.3ATD模塊寄存器及設(shè)置8.3ATD模塊寄存器及設(shè)置 8.3.1ATD控制寄存器0(ATDCTL0) ATD控制寄存器0(ATDControlRegister0,ATDCTL0),如圖8.2所示。該寄存器寫(xiě)操作將中止當(dāng)前轉(zhuǎn)換序列。8.3ATD模塊寄存器及設(shè)置 8.3.1ATD控制寄存器0(ATDCTL0)

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻,特殊模式下總是對(duì)保留位(Bit7)寫(xiě)0操作。 WRAP3~WRAP0:返轉(zhuǎn)通道選擇位。當(dāng)執(zhí)行多通道轉(zhuǎn)換時(shí),這4位確定返轉(zhuǎn)通道,多通道返轉(zhuǎn)編碼如表8-2所示。8.3ATD模塊寄存器及設(shè)置 8.3.2ATD控制寄存器1(ATDCTL1) ATD控制寄存器1(ATDControlRegister1,ATDCTL1),如圖8.3所示。該寄存器寫(xiě)操作將中止當(dāng)前轉(zhuǎn)換序列。8.3ATD模塊寄存器及設(shè)置 8.3.2ATD控制寄存器1(ATDCTL1)

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。 ETRIGSEL:外部觸發(fā)源選擇位。該位選擇外部觸發(fā)源是AD通道,還是ETRIG3~0輸入引腳。對(duì)于ERTIG3~0輸入端的使用請(qǐng)參考MC9S12XS128數(shù)據(jù)手冊(cè)。如果ETRIG3~0的某輸入端不可用,置位ETRIGSEL操作無(wú)效,這意味著只能選擇AD通道作為外部觸發(fā)源。ETRIGCH3~ETRIGCH0:外部觸發(fā)通道選擇位,這4位選擇AD某通道或ERTIG3~0某輸入端作為外部觸發(fā)源。外部觸發(fā)通道選擇編碼詳見(jiàn)表8-3。8.3ATD模塊寄存器及設(shè)置 8.3.2ATD控制寄存器1(ATDCTL1)8.3ATD模塊寄存器及設(shè)置 8.3.2ATD控制寄存器1(ATDCTL1) SRES1~SRES0:A/D分辨率選擇位。設(shè)置A/D轉(zhuǎn)換結(jié)果分辨率,詳見(jiàn)表8-4。 SMP_DIS:采樣前放電位選擇。0表示采樣前不放電; 1表示某通道采樣前,內(nèi)部采樣電容會(huì)放電。這會(huì)增加2個(gè)ATD時(shí)鐘周期的采樣時(shí)間,有助于采樣前進(jìn)行開(kāi)路檢測(cè)。8.3ATD模塊寄存器及設(shè)置 8.3.3ATD控制寄存器2(ATDCTL2) ATD控制寄存器2(ATDControlRegister2,ATDCTL2),如圖8.4所示。該寄存器寫(xiě)操作將中止當(dāng)前轉(zhuǎn)換序列。8.3ATD模塊寄存器及設(shè)置 8.3.3ATD控制寄存器2(ATDCTL2)

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。 AFFC:ATD模塊標(biāo)志快速清除位。 0表示ATD轉(zhuǎn)換完成標(biāo)志位由各自CCFn標(biāo)志位寫(xiě)1操作清除; 1表示通過(guò)快速清除序列修改所有ATD轉(zhuǎn)換完成標(biāo)志位。當(dāng)比較使能位CMPEn=0時(shí),讀取結(jié)果寄存器將自動(dòng)清除相應(yīng)CCF標(biāo)志位;當(dāng)比較使能位CMPEn=1時(shí),結(jié)果寄存器寫(xiě)操作將自動(dòng)清除相應(yīng)CCF標(biāo)志位。 ICLKSTP:停止模式下內(nèi)部時(shí)鐘位。該位使能停止模式下的AD轉(zhuǎn)換。當(dāng)進(jìn)入停止模式且ICLKSTP=1時(shí),ATD轉(zhuǎn)換時(shí)鐘自動(dòng)切換到內(nèi)部時(shí)鐘ICLK。當(dāng)前轉(zhuǎn)換序列將不受影響地繼續(xù)轉(zhuǎn)換,轉(zhuǎn)換速率將從預(yù)分頻總線(xiàn)頻率變?yōu)镮CLK頻率。ICLK頻率下,ATDCTL4寄存器中的PRS4~PRS0預(yù)分頻因子無(wú)效。停止模式下的AD轉(zhuǎn)換,外部觸發(fā)將不工作;自動(dòng)比較中斷或序列完成中斷用于軟件中斷處理AD采樣值。從運(yùn)行模式轉(zhuǎn)換到停止模式期間,或者從停止模式轉(zhuǎn)換到運(yùn)行模式期間,轉(zhuǎn)換結(jié)果不會(huì)寫(xiě)入結(jié)果寄存器,不置位CCF標(biāo)志位且不進(jìn)行比較處理。停止模式下且ICLKSTP=1時(shí),脫離停止模式需要有ATDCLK切換回總線(xiàn)時(shí)鐘的ATD停止恢復(fù)時(shí)間tATDSTPRCV,此時(shí)間內(nèi),不能訪(fǎng)問(wèn)ATD寄存器。 0表示進(jìn)入停止模式時(shí)如果AD轉(zhuǎn)換序列正在進(jìn)行,則中止當(dāng)前轉(zhuǎn)換序列。退出停止模式時(shí)AD轉(zhuǎn)換自動(dòng)重啟; 1表示停止模式下AD轉(zhuǎn)換使用內(nèi)部時(shí)鐘(ICLK)進(jìn)行轉(zhuǎn)換。8.3ATD模塊寄存器及設(shè)置 8.3.3ATD控制寄存器2(ATDCTL2) ETRIGLE:外部觸發(fā)電平/邊沿控制位。該位確定外部觸發(fā)信號(hào)是邊沿觸發(fā)還是電平觸發(fā)。該位和ETRIGP位配合使用,這2位外部觸發(fā)設(shè)置詳見(jiàn)表8-5。 ETRIGP:外部觸發(fā)極性控制位。該位確定外部觸發(fā)信號(hào)的極性。該位和ETRIGLE位配合使用,這2位外部觸發(fā)設(shè)置詳見(jiàn)表8-5。8.3ATD模塊寄存器及設(shè)置 8.3.3ATD控制寄存器2(ATDCTL2)ETRIGE:外部觸發(fā)模式使能位。該位允許表8-3中描述的AD通道或者ETRIG3~0輸入端作為外部觸發(fā)源。如果外部觸發(fā)源是AD某通道,則使能該通道的數(shù)字輸入緩沖功能。外部觸發(fā)允許與外部事件實(shí)現(xiàn)同步轉(zhuǎn)換。停止模式下的AD轉(zhuǎn)換,外部觸發(fā)不工作。 0表示禁止外部觸發(fā); 1表示允許外部觸發(fā)。ASCIE:ATD轉(zhuǎn)換序列完成中斷使能位。該位使能,當(dāng)SCF置位時(shí),則ATD轉(zhuǎn)換序列完成后將產(chǎn)生中斷請(qǐng)求。 0表示禁止ATD轉(zhuǎn)換序列完成產(chǎn)生中斷請(qǐng)求;1表示允許ATD轉(zhuǎn)換序列完成產(chǎn)生中斷請(qǐng)求。ACMPIE:ATD比較中斷使能位。該位使能,當(dāng)自動(dòng)比較功能使能,即ATDCMPE寄存器中的比較使能位CMPEn=1時(shí),則相應(yīng)比較位可申請(qǐng)中斷。如果CCFn標(biāo)志置位,將觸發(fā)比較中斷。 0表示禁止ATD比較中斷請(qǐng)求; 1表示允許ATD比較中斷請(qǐng)求。8.3ATD模塊寄存器及設(shè)置 8.3.4ATD控制寄存器3(ATDCTL3) ATD控制寄存器3(ATDControlRegister3,ATDCTL3),如圖8.5所示。該寄存器寫(xiě)操作將中止當(dāng)前轉(zhuǎn)換序列。8.3ATD模塊寄存器及設(shè)置 8.3.4ATD控制寄存器3(ATDCTL3)

讀:任何時(shí)刻;寫(xiě):任何時(shí)刻。DJM:結(jié)果寄存器數(shù)據(jù)對(duì)齊方式選擇位。該位確定結(jié)果寄存器中轉(zhuǎn)換數(shù)據(jù)的對(duì)齊格式,轉(zhuǎn)換結(jié)果數(shù)據(jù)總是無(wú)符號(hào)。 0表示結(jié)果寄存器中的數(shù)據(jù)格式左對(duì)齊; 1表示結(jié)果寄存器中的數(shù)據(jù)格式右對(duì)齊。

表8-6中給出輸入信號(hào)為0~5.12V情況下的ATD轉(zhuǎn)換結(jié)果示例。8.3ATD模塊寄存器及設(shè)置 8.3.4ATD控制寄存器3(ATDCTL3)

S8C、S4C、S2C、S1C:轉(zhuǎn)換序列長(zhǎng)度定義位。這4位控制每個(gè)序列轉(zhuǎn)換的長(zhǎng)度。A/D轉(zhuǎn)換序列長(zhǎng)度定義詳見(jiàn)表8-7。復(fù)位后,S4C默認(rèn)為1,所以默認(rèn)的A/D轉(zhuǎn)換序列的長(zhǎng)度為4。8.3ATD模塊寄存器及設(shè)置 8.3.4ATD控制寄存器3(ATDCTL3) FIFO:結(jié)果寄存器先進(jìn)先出(FIFO)模式選擇位。如果該位為0(非FIFO模式),則AD轉(zhuǎn)換結(jié)果基于轉(zhuǎn)換序列映射到結(jié)果寄存器,第1個(gè)轉(zhuǎn)換結(jié)果放入第1個(gè)結(jié)果寄存器ATDDR0,第2個(gè)轉(zhuǎn)換結(jié)果放入第2個(gè)結(jié)果寄存器ATDDR1,以此類(lèi)推。

如果該位為1(FIFO模式),則AD轉(zhuǎn)換開(kāi)始和結(jié)束時(shí),轉(zhuǎn)換計(jì)數(shù)器不復(fù)位,轉(zhuǎn)換結(jié)果被依次存放在結(jié)果寄存器。連續(xù)轉(zhuǎn)換序列模式(SCAN=1),到達(dá)最后結(jié)果寄存器時(shí),結(jié)果寄存器計(jì)數(shù)器將返轉(zhuǎn)。轉(zhuǎn)換計(jì)數(shù)器值(ATDSTAT0寄存器中的CC3~CC0)確定當(dāng)前轉(zhuǎn)換結(jié)果存放的相應(yīng)結(jié)果寄存器,結(jié)果寄存器保存的有效數(shù)據(jù)可查詢(xún)轉(zhuǎn)換完成標(biāo)志位獲悉。 FIFO模式下,中止當(dāng)前轉(zhuǎn)換或開(kāi)始新轉(zhuǎn)換將清除轉(zhuǎn)換計(jì)數(shù)器。ATDCTL5寄存器寫(xiě)操作,新轉(zhuǎn)換序列的第1個(gè)轉(zhuǎn)換結(jié)果,總是放入第1個(gè)結(jié)果寄存器ATDDR0。

如果FIFO位為1,禁用結(jié)果寄存器自動(dòng)比較功能,ATD模塊工作方式如同ACMPIE=0,CMPEn=0一樣。 0表示轉(zhuǎn)換結(jié)果根據(jù)選擇的轉(zhuǎn)換序列長(zhǎng)度放入相應(yīng)結(jié)果寄存器; 1表示轉(zhuǎn)換結(jié)果依次放入結(jié)果寄存器(到達(dá)最后結(jié)果寄存器時(shí)再返轉(zhuǎn))。8.3ATD模塊寄存器及設(shè)置 8.3.4ATD控制寄存器3(ATDCTL3) FRZ1、FRZ0:凍結(jié)模式下背景調(diào)試使能控制位。當(dāng)背景調(diào)試程序時(shí),如果遇到斷點(diǎn),有時(shí)希望此時(shí)ATD模塊停止工作。這2位共同確定凍結(jié)模式下遇到斷點(diǎn)時(shí)ATD模塊的工作狀態(tài),如表8-8所示。8.3ATD模塊寄存器及設(shè)置 8.3.5ATD控制寄存器4(ATDCTL4)

ATD控制寄存器4(ATDControlRegister4,ATDCTL4),如圖8.6所示,該寄存器寫(xiě)操作將中止當(dāng)前轉(zhuǎn)換序列。8.3ATD模塊寄存器及設(shè)置 8.3.5ATD控制寄存器4(ATDCTL4)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論