ARM硬件結(jié)構(gòu)應(yīng)用課件_第1頁
ARM硬件結(jié)構(gòu)應(yīng)用課件_第2頁
ARM硬件結(jié)構(gòu)應(yīng)用課件_第3頁
ARM硬件結(jié)構(gòu)應(yīng)用課件_第4頁
ARM硬件結(jié)構(gòu)應(yīng)用課件_第5頁
已閱讀5頁,還剩105頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.LPC和STM32簡介2.STM32固件庫3.系統(tǒng)控制模塊4.引腳連接模塊5.GPIO操作6.向量中斷控制器7.外中斷輸入LPC和STM32系列ARM硬件結(jié)構(gòu)與應(yīng)用8.定時器原理及應(yīng)用9.SPI接口及應(yīng)用10.UART接口及應(yīng)用11.A/D轉(zhuǎn)換器及應(yīng)用12.看門狗13.PWM原理與應(yīng)用14.實時時鐘1.LPC和STM32簡介LPC和STM32系列ARM硬件14引腳連接模塊概述LPC2000系列微控制器的大部分管腳都具有多種功能,即管腳復用,但是同一引腳在同一時刻只能使用其中一個功能,通過配置相關(guān)寄存器控制多路開關(guān)來連接引腳與片內(nèi)外設(shè)。引腳P0.0GPIOTXD0PWM1輸出保留PINSELx引腳連接寄存器PINSELx1:000011011P0.0默認為GPIO功能P0.0選擇TXD0功能,配置對應(yīng)位為01P0.0選擇PWM1功能,配置對應(yīng)位為10P0.0選擇保留功能,配置對應(yīng)位為114引腳連接模塊概述LPC2000系列微24引腳連接模塊LPC2000系列微控制器具有三個32位寬度PINSEL寄存器,其中PINSEL0和PINSEL1控制端口0,PINSEL2根據(jù)芯片的不同控制的端口數(shù)量也不同。寄存器描述寄存器LPC2100LPC2200PINSEL0P0[0:15]PINSEL1P0[16:31]PINSEL2P1[16:31]P1[0:1]、P1[16:31]、P2[0:31]、P3[0:31]4引腳連接模塊LPC2000系列微控制器34引腳連接模塊應(yīng)用示例PINSEL0=0x05<<16;要求將P0.8、P0.9設(shè)置為TxD1、RxD1通過查閱PINSE0寄存器設(shè)置表,得到P0.9和P0.8的控制位為PINSEL0[19:16],當該域設(shè)置為[0101](0x05)時選擇RxD1和TxD1。

為了不影響別的管腳連接設(shè)置,通常選擇下面的設(shè)置方法。PINSEL0=(PINSEL0&0xFFF0FFFF)|(0x05<<16);4引腳連接模塊應(yīng)用示例PINSEL0=0x05<<45GPIO引腳描述LPC2114/2124微控制器具有兩個端口——P0和P1,可以作為GPIO使用的引腳數(shù)為46個。LPC2210/2212/2214微控制器還包含另外兩個端口——P2和P3,這個兩個端口與外部存儲器總線復用,當它們?nèi)孔鳛镚PIO使用時,GPIO引腳數(shù)多達112個。GPIO與控制寄存器的關(guān)系PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10引腳5GPIO引腳描述LPC2114/2125PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10通用名稱描述訪問類型復位值IOPINGPIO引腳值寄存器,不管方向模式如何,引腳的當前狀態(tài)都可以從該寄存器中讀出只讀NAIOSETGPIO輸出置位寄存器。該寄存器控制引腳輸出高電平讀/置位0x00000000IOCLRGPIO輸出置位寄存器。該寄存器控制引腳輸出低電平只清零0x00000000IODIRGPIO方向控制寄存器。該寄存器單獨控制每個IO口的方向讀/寫0x00000000GPIO相關(guān)寄存器描述PINSELxIOxDIRIOxCLRIOxPINIOxSE6PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相關(guān)寄存器描述——IOxPINIOxPIN描述復位值31:0GPIO引腳值。IOxPIN[0]對應(yīng)于Px.0…IOxPIN[31]對應(yīng)于Px.31引腳未定義該寄存器反映了當前引腳的狀態(tài)。IOxPIN中的x對應(yīng)于某一個端口,如P1口對應(yīng)于IO1PIN。所以芯片存在多少個端口,就有多少個IOxPIN分別與之對應(yīng)。寫該寄存器會將值保存到輸出寄存器,具體使用稍后介紹。注意:無論引腳被設(shè)置為輸入還是輸出模式,都不影響引腳狀態(tài)的讀出。PINSELxIOxDIRIOxCLRIOxPINIOxSE7PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相關(guān)寄存器描述——IOxDIRIOxDIR描述復位值31:0方向控制位。IOxDIR[0]對應(yīng)于Px.0…IOxDIR[31]對應(yīng)于Px.31引腳0當引腳設(shè)置為GPIO輸出模式時,可使用該寄存器控制引腳的方向。向某位寫入1使對應(yīng)引腳作為輸出功能,寫入0時作為輸入功能。作為輸入功能時,引腳處于高阻態(tài)。PINSELxIOxDIRIOxCLRIOxPINIOxSE8PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相關(guān)寄存器描述——IOxSETIOxSET描述復位值31:0輸出置位。IOxSET[0]對應(yīng)于Px.0…IOxPIN[31]對應(yīng)于Px.31引腳0當引腳設(shè)置為GPIO輸出模式時,可使用該寄存器從引腳輸出高電平。向某位寫入1使對應(yīng)引腳輸出高電平。寫入0無效。從該寄存器讀回的數(shù)據(jù)為GPIO輸出寄存器的值。該值不反映外部環(huán)境對引腳的影響。PINSELxIOxDIRIOxCLRIOxPINIOxSE9PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相關(guān)寄存器描述——IOxCLRIOxCLR描述復位值31:0輸出清零。IOxCLR[0]對應(yīng)于Px.0…IOxCLR[31]對應(yīng)于Px.31引腳0當引腳設(shè)置為GPIO輸出模式時,可使用該寄存器從引腳輸出低電平。向某位寫入1使對應(yīng)引腳輸出低電平。寫入0無效。注意:讀取該寄存器無效,不能讀回輸出寄存器的值。PINSELxIOxDIRIOxCLRIOxPINIOxSE105GPIO使用GPIO注意要點引腳設(shè)置為輸出方式時,輸出狀態(tài)由IOxSET和IOxCLR中最后操作的寄存器決定;大部分GPIO輸出為推挽方式(個別引腳為開漏輸出),正常拉出/灌入電流均為4mA(短時間極限值40mA);復位后默認所有GPIO為輸入模式。5GPIO使用GPIO注意要點引腳設(shè)置為輸出方式時,輸出11...PINSEL0&=0xFFFFFFFC;IO0DIR|=0x00000001;IO0SET=0x00000001;...C代碼:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10GPIO應(yīng)用示例——設(shè)置P0.0輸出高電平P0.0(1)設(shè)置引腳連接模塊,P0.0為GPIO(2)設(shè)置P0.0口方向,設(shè)置為輸出(3)設(shè)置P0.0口狀態(tài),輸出高電平1...C代碼:PINSEL0IO0DIRIO0CLR12...uint32PinStat;PINSEL0&=0xFFFFFFFC;IO0DIR&=0xFFFFFFFE;PinStat=IO0PIN;...C代碼:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10GPIO應(yīng)用示例——讀取P0.0引腳狀態(tài)P0.0(1)設(shè)置引腳連接模塊,P0.0為GPIO(2)設(shè)置P0.0口方向,設(shè)置為輸入(3)從IO0PIN讀取引腳狀態(tài)IO0PIN...C代碼:PINSEL0IO0DIRIO0CLR13#defineDataBus0xFFPINSEL0&=0xFFFF0000;IO0DIR|=DataBus;IO0CLR=DataBus;IO0SET=Data;...使用IOxSET和IOxCLR實現(xiàn):GPIO應(yīng)用示例——輸出多位數(shù)據(jù)至IO口(1)設(shè)置引腳連接模塊,P0.0~7為GPIO(2)設(shè)置P0.0口方向,設(shè)置為輸出(3)清零8位IO口的輸出狀態(tài)在需要將多位數(shù)據(jù)同時輸出到某幾個IO口線時,通常使用IOxSET和IOxCLR來實現(xiàn),在某些情況下也可以使用IOxPIN寄存器實現(xiàn)。后者可以在多個IO口上直接輸出0和1電平。

本例將8位無符號整形變量Data的值輸出到P0.0~P0.7。(4)Data變量中為1的位將輸出高電平0x??0x00Data數(shù)據(jù)輸出線:#defineDataBus0xFF使用IOxSET14#defineDataBus0xFFPINSEL0&=0xFFFF0000;IO0DIR|=DataBus;IO0PIN=(IO0SET&0xFFFFFF00)|Data;...GPIO應(yīng)用示例——輸出多位數(shù)據(jù)至IO口(1)設(shè)置引腳連接模塊,P0.0為GPIO(2)設(shè)置P0.0口方向,設(shè)置為輸出(3)寫IO0PIN,輸出數(shù)據(jù)

在需要將多位數(shù)據(jù)同時輸出到某幾個IO口線時,通常使用IOxSET和IOxCLR來實現(xiàn),在某些情況下也可以使用IOxPIN寄存器實現(xiàn)。后者可以在多個IO口上直接輸出0和1電平。

本例將8位無符號整數(shù)變量Data的值輸出到P0.0~P0.7。使用IOxPIN實現(xiàn):0x??Data數(shù)據(jù)輸出線:0x??0x00Data與前者對比:#defineDataBus0xFFGPIO應(yīng)用示例15STM32GPIO操作主要功能:通用I/O(GPIO)用,輸入輸出;單獨的位設(shè)置或位清除;外部中斷/喚醒線:端口必須配置成輸入模式時,所有端口都有外部中斷能力;復用功能(AF),并且軟件能重新映射I/O復用功能;GPIO鎖定機制:主要針對復位設(shè)定的,當某端口位lock后,復位后將不改變的此端口的位配置。

STM32GPIO操作主要功能:16STM32GPIO操作強大的GPIO功能,可設(shè)置:

GPIOMode_TypeDefGPIOmode定義及偏移地址

GPIOmode:GPIO_Mode_AIN0x00模擬輸入

GPIO_Mode_IN_FLOATING0x04懸空輸入

GPIO_Mode_IPD0x28下拉輸入

GPIO_Mode_IPU0x48上拉輸入

GPIO_Mode_Out_OD0x14開漏輸出

GPIO_Mode_Out_PP0x10推挽輸出

GPIO_Mode_AF_OD0x1c開漏復用

GPIO_Mode_AF_PP0x18推挽復用

STM32GPIO操作強大的GPIO功能,可設(shè)置:

G17STM32GPIO操作輸出速度通過GPIOSpeed_TypeDef結(jié)構(gòu)體可選擇:

2MHz,10MHz,50MHz。

typedefenum

{

GPIO_Speed_10MHz,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz}GPIOSpeed_TypeDef;

STM32GPIO操作輸出速度通過GPIOSpeed_T18固件庫里面的GPIO庫文件已經(jīng)為我們準備好了很多的操作函數(shù),可以直接使用。

1.GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct):根據(jù)GPIO_InitTypeDef里面的值,初始化某排里面的某些引腳的模式跟速度

2.GPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct):給GPIO_InitTypeDef里面的項目賦默認值

3.GPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):某排引腳某個引腳輸出1

固件庫里面的GPIO庫文件已經(jīng)為我們準備好了很多的操作函數(shù),19固件庫里面的GPIO庫文件已經(jīng)為我們準備好了很多的操作函數(shù),可以直接使用。

4.GPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):某排引腳某個引腳輸出0

5.GPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal):設(shè)置某排引腳輸出值

6.GPIO_ReadInputData(GPIO_TypeDef*GPIOx):讀整排引腳的值

7.GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):讀某排引腳里面的輸出寄存器的某個引腳值……固件庫里面的GPIO庫文件已經(jīng)為我們準備好了很多的操作函數(shù),20操作實例做個跑馬燈程序,PA.11—PA.14口分別4個LED燈,當I/O為高電平時LED燈點亮。操作實例做個跑馬燈程序,PA.11—PA.14口分別4個LE21#include“stm32f10x.h”

#include“stm32f10x_conf.h”

GPIO_InitTypeDefPAInit;

voidLED_Init(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開GPIOC時鐘

PAInit.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;

PAInit.GPIO_Mode=GPIO_Mode_Out_PP;

PAInit.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_Init(GPIOA,&PAInit);

}

#include“stm32f10x.h”

#includ22main()

{

LED_Init();

while(1)

{GPIO_SetBits(GPIOA,GPIO_Pin_11);//GPIOA.11=1

Delay(0x8ffff);

GPIO_ResetBits(GPIOA,GPIO_Pin_11);//GPIOA.11=0

Delay(0x8ffff);

GPIO_SetBits(GPIOA,GPIO_Pin_12);Delay(0x8ffff);

GPIO_ResetBits(GPIOA,GPIO_Pin_12);

Delay(0x8ffff);

GPIO_SetBits(GPIOA,GPIO_Pin_13);Delay(0x8ffff);

GPIO_ResetBits(GPIOA,GPIO_Pin_13);

Delay(0x8ffff);

GPIO_SetBits(GPIOA,GPIO_Pin_14);

Delay(0x8ffff);

GPIO_ResetBits(GPIOA,GPIO_Pin_14);

Delay(0x8ffff);

}

}

main()

{

LED_Init();

236向量中斷控制器概述ARM7TDMI內(nèi)核具有兩個中斷輸入,分別為IRQ中斷和FIQ中斷。向量中斷控制器(VIC)負責管理芯片的中斷源,最多可以管理32個中斷輸入請求。CPU內(nèi)核ARM7TDMI-S6向量中斷控制器概述ARM7TDMI內(nèi)核246.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系A(chǔ)RM內(nèi)核通過CPSR來監(jiān)視和控制內(nèi)部的操作,CPSR中的“I”位和“F”位分別用來控制IRQ模式和FIQ模式的使能。CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)6.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系256.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系當I=1時,禁止IRQ中斷CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)當I=0時,使能IRQ中斷CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)6.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系266.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系當F=1時,禁止FIQ中斷CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)當F=0時,使能FIQ中斷CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)6.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系276.向量中斷控制器中斷分類中斷輸入請求可以在VIC中被設(shè)置為以下三類:

FIQ中斷:具有最高優(yōu)先級;

向量IRQ中斷:具有中等優(yōu)先級;

非向量IRQ中斷:具有最低優(yōu)先級;6.向量中斷控制器中斷分類中斷輸入請求可以在VIC中被設(shè)286.向量中斷控制器FIQ中斷硬件處理流程將當前的程序狀態(tài)寄存器的內(nèi)容備份即,SPSR_fiq=CPSR處理器切換到FIQ模式禁止IRQ和FIQ中斷,即,I=F=1保存返回地址LR_fiq=PC設(shè)置FIQ異常入口地址PC=0x1C發(fā)生FIQ異常事件說明:ARM7不支持FIQ中斷嵌套6.向量中斷控制器FIQ中斷硬件處理流程將當前的程序狀態(tài)296.向量中斷控制器IRQ中斷相應(yīng)流程將當前的程序狀態(tài)寄存器的內(nèi)容備份即,SPSR_irq=CPSR處理器切換到IRQ模式禁止IRQ中斷,即,I=1保存返回地址LR_irq=PC設(shè)置IRQ異常入口地址PC=0x18發(fā)生IRQ異常事件說明:ARM7不支持IRQ中斷嵌套6.向量中斷控制器IRQ中斷相應(yīng)流程將當前的程序狀態(tài)寄存30向量IRQ0使能中斷源向量IRQ0控制寄存器VICVectCntl0向量地址0寄存器VICVectAddr0默認向量地址寄存器VICDefVectAddr向量IRQ15使能中斷源向量IRQ15控制寄存器VICVectCntl15向量地址15寄存器VICVectAddr15DefIRQIRQ0IRQ15VectAddr0VectAddr15DefVectAddr硬件優(yōu)先級選擇向量地址選擇向量地址寄存器VICVectAddrIRQ0IRQ15DefIRQIRQ中斷信號向量IRQ0向量IRQ15非向量IRQ高低優(yōu)先級IRQ中斷狀態(tài)寄存器VICIRQStatusFIQ中斷信號中斷選擇寄存器VICIntSelect中斷使能寄存器VICIntEnable中斷使能清零寄存器VICIntEnClr中斷源[31:0]軟件中斷使能寄存器VICSoftInt軟件中斷清零寄存器VICSoftIntClearFIQ中斷狀態(tài)寄存器VICFIQStatus中斷狀態(tài)寄存器VICRawIntrIRQFIQ向量IRQ0使能中斷源向量IRQ0控制寄存器向量地址0寄存器31中斷選擇寄存器VICIntSelect中斷使能寄存器VICIntEnable中斷使能清零寄存器VICIntEnClr中斷源[31:0]軟件中斷使能寄存器VICSoftInt軟件中斷清零寄存器VICSoftIntClear中斷狀態(tài)寄存器VICRawIntrIRQFIQ名稱描述訪問復位值地址VICIntEnable中斷使能寄存器

控制32個中斷請求(包括軟件中斷)的使能R/W00xFFFFF010VICIntEnClr中斷使能清零寄存器將中斷使能寄存器中的一個或多個位清零W00xFFFFF014VICIntSelect中斷選擇寄存器將32個中斷請求的每個中斷分配為FIQ或IRQR/W00xFFFFF00CVICSoftInt軟件中斷寄存器

控制對應(yīng)通道產(chǎn)生軟件中斷R/W00xFFFFF018VICSoftIntClear軟件中斷清零寄存器

禁止對應(yīng)通道的軟件中斷W00xFFFFF01C寄存器描述-控制寄存器中斷選擇寄存器中斷使能寄存器中斷使能清零寄存器中斷源軟件中斷32控制寄存器功能描述6.向量中斷控制器控制寄存器功能描述VICIntEnable使能(禁止)中斷源產(chǎn)生中斷VICIntEnClrVICIntSelect中斷類型選擇:FIQ&IRQVICSoftInt軟件中斷設(shè)置寄存器VICSoftIntClearFIQ中斷向量IRQ中斷非向量IRQ中斷中斷源0中斷源1……中斷源31VIC將32個中斷輸入進行分配控制寄存器功能描述6.向量中斷控制器控制寄存器功能描述V33向量IRQ0使能中斷源向量IRQ0控制寄存器VICVectCntl0向量地址0寄存器VICVectAddr0默認向量地址寄存器VICDefVectAddr向量IRQ15使能中斷源向量IRQ15控制寄存器VICVectCntl15向量地址15寄存器VICVectAddr15向量地址寄存器VICVectAddr寄存器描述-參數(shù)設(shè)置寄存器名稱描述復位置地址VICVectCntl0~VICVectCntl15向量控制0寄存器~向量控制15寄存器00xFFFFF200~0xFFFFF23CVICVectAddr0~VICVectAddr15向量地址0寄存器~向量地址15寄存器00xFFFFF100~0xFFFFF13CVICDefVectAddr默認向量地址寄存器00xFFFFF034VICVectAddr向量地址寄存器00xFFFFF030向量IRQ0使能中斷源向量IRQ0控制寄存器向量地址0寄存器34IRQ中斷特點6.向量中斷控制器特點區(qū)別向量IRQ支持16個向量IRQ中斷;16個優(yōu)先級;每個優(yōu)先級指定一個服務(wù)程序入口地址。能為每個向量IRQ中斷源設(shè)置服務(wù)程序地址。非向量IRQ支持1個非向量IRQ中斷;所有非向量IRQ的入口地址都相同。所有的非向量IRQ中斷都共用一個相同的服務(wù)程序入口地址。IRQ中斷特點6.向量中斷控制器特點區(qū)別向量支持16個向35IRQ中斷相關(guān)寄存器6.向量中斷控制器寄存器名稱功能VICVectCntl0~15為中斷源分配向量IRQ中斷的優(yōu)先級。VICVectAddr0~15為該中斷優(yōu)先級設(shè)置服務(wù)程序入口地址。VICDefVectAddr設(shè)置非向量中斷服務(wù)程序的入口地址。注意:如果將同一個中斷源分配給多個使能的向量IRQ中斷,那么該中斷源發(fā)生中斷時,會使用最高優(yōu)先級(最低編號)的寄存器設(shè)置。IRQ中斷相關(guān)寄存器6.向量中斷控制器寄存器名稱功能VI36產(chǎn)生中斷后的服務(wù)程序地址6.向量中斷控制器向量IRQ中斷發(fā)生向量IRQ中斷后,VIC將對應(yīng)的向量地址寄存器中的數(shù)據(jù)存入VICVectAddr寄存器中。非向量IRQ中斷發(fā)生非向量IRQ中斷后,VIC將默認向量地址寄存器中的數(shù)據(jù)存入VICVectAddr寄存器中產(chǎn)生中斷后的服務(wù)程序地址6.向量中斷控制器向量IRQ中斷37IRQ中斷狀態(tài)寄存器VICIRQStatus中斷選擇寄存器VICIntSelect中斷使能寄存器VICIntEnable中斷使能清零寄存器VICIntEnClr中斷源[31:0]軟件中斷使能寄存器VICSoftInt軟件中斷清零寄存器VICSoftIntClearFIQ中斷狀態(tài)寄存器VICFIQStatus中斷狀態(tài)寄存器VICRawIntrIRQFIQ寄存器描述-狀態(tài)寄存器名稱描述訪問復位值地址VICIRQStatusIRQ狀態(tài)寄存器該寄存器讀出定義為IRQ并使能的中斷的狀態(tài)RO00xFFFFF000VICFIQStatusFIQ狀態(tài)請求該寄存器讀出定義為FIQ并使能的中斷的狀態(tài)RO00xFFFFF004VICRawIntr所有中斷的狀態(tài)寄存器該寄存器讀出32個中斷請求/軟件中斷的狀態(tài),不管中斷是否使能或分類RO00xFFFFF008注意:讀取VICRawIntr寄存器將得到所有32個中斷請求和軟件中斷的狀態(tài),它不管中斷是否使能或分類。IRQ中斷狀態(tài)寄存器中斷選擇寄存器中斷使能寄存器中斷使能清零38保護使能寄存器6.向量中斷控制器保護使能寄存器(VICProtection):位[31:1]0功能—當該位為1時,只能在特權(quán)模式下訪問VIC寄存器。

在某些場合可能需要禁止在用戶模式下訪問VIC寄存器,以提高軟件的安全等級。保護使能寄存器6.向量中斷控制器保護使能寄存器(VICP39FIQ中斷處理6.向量中斷控制器SPSR_fiq=CPSR12CPSR=nzcvqIFt_fiq3LR_fiq=PC4PC=0x1C硬件處理軟件處理中斷服務(wù)程序1設(shè)置返回地址2恢復程序狀態(tài)寄存器CPSR3SUBSPC,LR,#4FIQ中斷處理6.向量中斷控制器SPSR_fiq=C40IRQ中斷處理6.向量中斷控制器硬件處理SPSR_irq=CPSR12CPSR=nzcvqIft_irq3VICVectAddr=VICVectAddrn4LR_irq=PC5PC=0x18軟件處理執(zhí)行中斷服務(wù)程序2設(shè)置返回地址3恢復程序狀態(tài)寄存器CPSR4獲取中斷服務(wù)程序地址1IRQ中斷處理6.向量中斷控制器硬件處理SPSR_irq41IRQ中斷處理6.向量中斷控制器SPSR_irq=CPSR12CPSR=nzcvqIft_irq3VICVectAddr=VICVectAddrn4LR_irq=PC硬件處理5PC=0x18軟件處理執(zhí)行中斷服務(wù)程序2設(shè)置返回地址3恢復程序狀態(tài)寄存器CPSR4PC[VICVectAddr]1IRQ中斷處理6.向量中斷控制器SPSR_irq=C42IRQ中斷處理6.向量中斷控制器SUBSPC,LR,#4SPSR_irq=CPSR12CPSR=nzcvqIft_irq3VICVectAddr=VICVectAddrn4LR_irq=PC硬件處理5PC=0x18軟件處理執(zhí)行中斷服務(wù)程序2設(shè)置返回地址3恢復程序狀態(tài)寄存器CPSR4LDRPC,[PC,#-0xff0]1IRQ中斷處理6.向量中斷控制器SUBSPC,43IRQ中斷的設(shè)計實例將定時器0中斷分配為向量IRQ通道0,中斷服務(wù)程序地址設(shè)置為Timer0_ISR。C代碼:步驟:IRQ通道0控制寄存器VICVectCntl031:654:0010x04向量IRQ通道0控制寄存器位分配位數(shù)值IRQ通道0向量地址寄存器VICVectAddr0定時器0中斷服務(wù)程序地址Timer0_ISR中斷使能寄存器VICIntEnable中斷通道#4對應(yīng)位,置“1”中斷選擇寄存器VICIntSelect中斷通道4分配為IRQ中斷(定時器0位于中斷通道#4)VICIntSelect=0x00000000;VICVectAddr0=(int)Timer0_ISR;VICVectCntl0=(0x20|4);VICIntEnable=(1<<4);IRQ中斷的設(shè)計實例將定時器0中斷分配為向量44③IRQ_Eint0???VICVectAddr0VICVectAddrIRQ_Eint0圖示IRQ中斷的發(fā)生過程0x000000000xFFFFFFFF用戶程序中斷服務(wù)程序異常向量表1.正在執(zhí)行用戶程序;①2.外部中斷0發(fā)生中斷;②3.VIC硬件將中斷服務(wù)程序地址裝入VICVectAddr寄存器;④4.程序跳轉(zhuǎn)至異常向量表中IRQ入口0x0018處;5.執(zhí)行指令跳轉(zhuǎn)至VICVectAddr寄存器中的中斷服務(wù)地址;⑤⑥6.中斷服務(wù)程序執(zhí)行完畢,返回被中斷的用戶程序繼續(xù)執(zhí)行被中斷的代碼。⑤LDRPC,[PC,#-0xff0]③IRQ_Eint0???VICVectAddr0VICVe45圖示IRQ中斷的發(fā)生過程0x000000000xFFFFFFFF用戶程序中斷服務(wù)程序異常向量表①②④⑤⑥③IRQ_Eint0???VICVectAddr0VICVectAddrIRQ_Eint0⑤LDRPC,[PC,#-0xff0]注意:任何IRQ中斷產(chǎn)生之后,微控制器跳轉(zhuǎn)到地址0x18執(zhí)行代碼,該地址處的指令為:

LDRPC,[PC,#-0xff0]在執(zhí)行該指令時,PC指向當前指令后的第2條指令,即地址0x20。該指令將內(nèi)存地址:

0x20-0xFF0=0xFFFFF030處的內(nèi)容存入PC,該地址正是VICVectAddr寄存器的地址。所以一條ARM指令即可實現(xiàn)程序向中斷服務(wù)程序的跳轉(zhuǎn)。圖示IRQ中斷的發(fā)生過程0x000000000xFFFF46STM32目前支持的中斷共為:84個其中(16個內(nèi)核+68個外部),和16級可編程中斷優(yōu)先級的設(shè)置(僅使用中斷優(yōu)先級設(shè)置8bit中的高4位,見后面解釋)。6.STM32中斷控制STM32目前支持的中斷共為:84個6.ST47STM32可以支持的68個外部中斷通道,已經(jīng)固定的分配給相應(yīng)的外部設(shè)備。每個中斷通道都具備自己的中斷優(yōu)先級控制字節(jié)PRI_n(8位,但在STM32中只使用4位,高4位有效)對于這4bit的中斷優(yōu)先級控制位還必須分成2組看:從高位開始,前面是定義搶先式優(yōu)先級的位,后面用于定義子優(yōu)先級。6.STM32中斷控制STM32可以支持的68個外部中斷通道,已經(jīng)固定的分配484bit的分組組合可以有以下幾種形式:

第0組:所有4bit用于指定響應(yīng)優(yōu)先級;第1組:最高1位用于指定搶占式優(yōu)先級,后面3位用于指定響應(yīng)優(yōu)先級;第2組:最高2位用于指定搶占式優(yōu)先級,后面2位用于指定響應(yīng)優(yōu)先級;第3組:最高3位用于指定搶占式優(yōu)先級,后面1位用于指定響應(yīng)優(yōu)先級;第4組:所有4位用于指定搶占式優(yōu)先級。

具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應(yīng),即中斷嵌套。

6.STM32中斷控制4bit的分組組合可以有以下幾種形式:6.STM32496.STM32中斷控制6.STM32中斷控制50設(shè)置相應(yīng)的中斷實際上就是設(shè)置NVIC,在STM32的固件庫中有一個結(jié)構(gòu)體NVIC_InitTypeDef,里面有相應(yīng)的標志位設(shè)置,然后再用NVIC_Init()函數(shù)進行初始化。詳細代碼如下:

6.STM32中斷設(shè)置實例設(shè)置相應(yīng)的中斷實際上就是設(shè)置NVIC,在ST51voidNVIC_cfg(){ NVIC_InitTypeDefNVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //選擇中斷分組2NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQChannel; //選擇中斷通道2NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//搶占式中斷優(yōu)先級設(shè)置為0 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //響應(yīng)式中斷優(yōu)先級設(shè)置為0 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷 NVIC_Init(&NVIC_InitStructure);

} 第4章ARM硬件結(jié)構(gòu)應(yīng)用課件52第4章ARM硬件結(jié)構(gòu)應(yīng)用課件53

寫中斷響應(yīng)函數(shù)STM32不像C51單片機那樣,可以用過interrupt關(guān)鍵字來定義中斷響應(yīng)函數(shù),STM32的中斷響應(yīng)函數(shù)接口存在中斷向量表中,是由啟動代碼給出的。默認的中斷響應(yīng)函數(shù)在stm32f10x_it.c中。因此我們需要把這個文件加入到工程中來。

54voidEXTI2_IRQHandler(void){ //點亮LED燈 GPIO_SetBits(GPIOD,GPIO_Pin_6); //清空中斷標志位,防止持續(xù)進入中斷 EXTI_ClearITPendingBit(EXTI_Line2);}

voidEXTI3_IRQHandler(void){ GPIO_SetBits(GPIOD,GPIO_Pin_3); EXTI_ClearITPendingBit(EXTI_Line3);}voidEXTI2_IRQHandler(void)551.LPC和STM32簡介2.STM32固件庫3.系統(tǒng)控制模塊4.引腳連接模塊5.GPIO操作6.向量中斷控制器7.外中斷輸入LPC和STM32系列ARM硬件結(jié)構(gòu)與應(yīng)用8.定時器原理及應(yīng)用9.SPI接口及應(yīng)用10.UART接口及應(yīng)用11.A/D轉(zhuǎn)換器及應(yīng)用12.看門狗13.PWM原理與應(yīng)用14.實時時鐘1.LPC和STM32簡介LPC和STM32系列ARM硬件564引腳連接模塊概述LPC2000系列微控制器的大部分管腳都具有多種功能,即管腳復用,但是同一引腳在同一時刻只能使用其中一個功能,通過配置相關(guān)寄存器控制多路開關(guān)來連接引腳與片內(nèi)外設(shè)。引腳P0.0GPIOTXD0PWM1輸出保留PINSELx引腳連接寄存器PINSELx1:000011011P0.0默認為GPIO功能P0.0選擇TXD0功能,配置對應(yīng)位為01P0.0選擇PWM1功能,配置對應(yīng)位為10P0.0選擇保留功能,配置對應(yīng)位為114引腳連接模塊概述LPC2000系列微574引腳連接模塊LPC2000系列微控制器具有三個32位寬度PINSEL寄存器,其中PINSEL0和PINSEL1控制端口0,PINSEL2根據(jù)芯片的不同控制的端口數(shù)量也不同。寄存器描述寄存器LPC2100LPC2200PINSEL0P0[0:15]PINSEL1P0[16:31]PINSEL2P1[16:31]P1[0:1]、P1[16:31]、P2[0:31]、P3[0:31]4引腳連接模塊LPC2000系列微控制器584引腳連接模塊應(yīng)用示例PINSEL0=0x05<<16;要求將P0.8、P0.9設(shè)置為TxD1、RxD1通過查閱PINSE0寄存器設(shè)置表,得到P0.9和P0.8的控制位為PINSEL0[19:16],當該域設(shè)置為[0101](0x05)時選擇RxD1和TxD1。

為了不影響別的管腳連接設(shè)置,通常選擇下面的設(shè)置方法。PINSEL0=(PINSEL0&0xFFF0FFFF)|(0x05<<16);4引腳連接模塊應(yīng)用示例PINSEL0=0x05<<595GPIO引腳描述LPC2114/2124微控制器具有兩個端口——P0和P1,可以作為GPIO使用的引腳數(shù)為46個。LPC2210/2212/2214微控制器還包含另外兩個端口——P2和P3,這個兩個端口與外部存儲器總線復用,當它們?nèi)孔鳛镚PIO使用時,GPIO引腳數(shù)多達112個。GPIO與控制寄存器的關(guān)系PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10引腳5GPIO引腳描述LPC2114/21260PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10通用名稱描述訪問類型復位值IOPINGPIO引腳值寄存器,不管方向模式如何,引腳的當前狀態(tài)都可以從該寄存器中讀出只讀NAIOSETGPIO輸出置位寄存器。該寄存器控制引腳輸出高電平讀/置位0x00000000IOCLRGPIO輸出置位寄存器。該寄存器控制引腳輸出低電平只清零0x00000000IODIRGPIO方向控制寄存器。該寄存器單獨控制每個IO口的方向讀/寫0x00000000GPIO相關(guān)寄存器描述PINSELxIOxDIRIOxCLRIOxPINIOxSE61PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相關(guān)寄存器描述——IOxPINIOxPIN描述復位值31:0GPIO引腳值。IOxPIN[0]對應(yīng)于Px.0…IOxPIN[31]對應(yīng)于Px.31引腳未定義該寄存器反映了當前引腳的狀態(tài)。IOxPIN中的x對應(yīng)于某一個端口,如P1口對應(yīng)于IO1PIN。所以芯片存在多少個端口,就有多少個IOxPIN分別與之對應(yīng)。寫該寄存器會將值保存到輸出寄存器,具體使用稍后介紹。注意:無論引腳被設(shè)置為輸入還是輸出模式,都不影響引腳狀態(tài)的讀出。PINSELxIOxDIRIOxCLRIOxPINIOxSE62PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相關(guān)寄存器描述——IOxDIRIOxDIR描述復位值31:0方向控制位。IOxDIR[0]對應(yīng)于Px.0…IOxDIR[31]對應(yīng)于Px.31引腳0當引腳設(shè)置為GPIO輸出模式時,可使用該寄存器控制引腳的方向。向某位寫入1使對應(yīng)引腳作為輸出功能,寫入0時作為輸入功能。作為輸入功能時,引腳處于高阻態(tài)。PINSELxIOxDIRIOxCLRIOxPINIOxSE63PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相關(guān)寄存器描述——IOxSETIOxSET描述復位值31:0輸出置位。IOxSET[0]對應(yīng)于Px.0…IOxPIN[31]對應(yīng)于Px.31引腳0當引腳設(shè)置為GPIO輸出模式時,可使用該寄存器從引腳輸出高電平。向某位寫入1使對應(yīng)引腳輸出高電平。寫入0無效。從該寄存器讀回的數(shù)據(jù)為GPIO輸出寄存器的值。該值不反映外部環(huán)境對引腳的影響。PINSELxIOxDIRIOxCLRIOxPINIOxSE64PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相關(guān)寄存器描述——IOxCLRIOxCLR描述復位值31:0輸出清零。IOxCLR[0]對應(yīng)于Px.0…IOxCLR[31]對應(yīng)于Px.31引腳0當引腳設(shè)置為GPIO輸出模式時,可使用該寄存器從引腳輸出低電平。向某位寫入1使對應(yīng)引腳輸出低電平。寫入0無效。注意:讀取該寄存器無效,不能讀回輸出寄存器的值。PINSELxIOxDIRIOxCLRIOxPINIOxSE655GPIO使用GPIO注意要點引腳設(shè)置為輸出方式時,輸出狀態(tài)由IOxSET和IOxCLR中最后操作的寄存器決定;大部分GPIO輸出為推挽方式(個別引腳為開漏輸出),正常拉出/灌入電流均為4mA(短時間極限值40mA);復位后默認所有GPIO為輸入模式。5GPIO使用GPIO注意要點引腳設(shè)置為輸出方式時,輸出66...PINSEL0&=0xFFFFFFFC;IO0DIR|=0x00000001;IO0SET=0x00000001;...C代碼:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10GPIO應(yīng)用示例——設(shè)置P0.0輸出高電平P0.0(1)設(shè)置引腳連接模塊,P0.0為GPIO(2)設(shè)置P0.0口方向,設(shè)置為輸出(3)設(shè)置P0.0口狀態(tài),輸出高電平1...C代碼:PINSEL0IO0DIRIO0CLR67...uint32PinStat;PINSEL0&=0xFFFFFFFC;IO0DIR&=0xFFFFFFFE;PinStat=IO0PIN;...C代碼:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10GPIO應(yīng)用示例——讀取P0.0引腳狀態(tài)P0.0(1)設(shè)置引腳連接模塊,P0.0為GPIO(2)設(shè)置P0.0口方向,設(shè)置為輸入(3)從IO0PIN讀取引腳狀態(tài)IO0PIN...C代碼:PINSEL0IO0DIRIO0CLR68#defineDataBus0xFFPINSEL0&=0xFFFF0000;IO0DIR|=DataBus;IO0CLR=DataBus;IO0SET=Data;...使用IOxSET和IOxCLR實現(xiàn):GPIO應(yīng)用示例——輸出多位數(shù)據(jù)至IO口(1)設(shè)置引腳連接模塊,P0.0~7為GPIO(2)設(shè)置P0.0口方向,設(shè)置為輸出(3)清零8位IO口的輸出狀態(tài)在需要將多位數(shù)據(jù)同時輸出到某幾個IO口線時,通常使用IOxSET和IOxCLR來實現(xiàn),在某些情況下也可以使用IOxPIN寄存器實現(xiàn)。后者可以在多個IO口上直接輸出0和1電平。

本例將8位無符號整形變量Data的值輸出到P0.0~P0.7。(4)Data變量中為1的位將輸出高電平0x??0x00Data數(shù)據(jù)輸出線:#defineDataBus0xFF使用IOxSET69#defineDataBus0xFFPINSEL0&=0xFFFF0000;IO0DIR|=DataBus;IO0PIN=(IO0SET&0xFFFFFF00)|Data;...GPIO應(yīng)用示例——輸出多位數(shù)據(jù)至IO口(1)設(shè)置引腳連接模塊,P0.0為GPIO(2)設(shè)置P0.0口方向,設(shè)置為輸出(3)寫IO0PIN,輸出數(shù)據(jù)

在需要將多位數(shù)據(jù)同時輸出到某幾個IO口線時,通常使用IOxSET和IOxCLR來實現(xiàn),在某些情況下也可以使用IOxPIN寄存器實現(xiàn)。后者可以在多個IO口上直接輸出0和1電平。

本例將8位無符號整數(shù)變量Data的值輸出到P0.0~P0.7。使用IOxPIN實現(xiàn):0x??Data數(shù)據(jù)輸出線:0x??0x00Data與前者對比:#defineDataBus0xFFGPIO應(yīng)用示例70STM32GPIO操作主要功能:通用I/O(GPIO)用,輸入輸出;單獨的位設(shè)置或位清除;外部中斷/喚醒線:端口必須配置成輸入模式時,所有端口都有外部中斷能力;復用功能(AF),并且軟件能重新映射I/O復用功能;GPIO鎖定機制:主要針對復位設(shè)定的,當某端口位lock后,復位后將不改變的此端口的位配置。

STM32GPIO操作主要功能:71STM32GPIO操作強大的GPIO功能,可設(shè)置:

GPIOMode_TypeDefGPIOmode定義及偏移地址

GPIOmode:GPIO_Mode_AIN0x00模擬輸入

GPIO_Mode_IN_FLOATING0x04懸空輸入

GPIO_Mode_IPD0x28下拉輸入

GPIO_Mode_IPU0x48上拉輸入

GPIO_Mode_Out_OD0x14開漏輸出

GPIO_Mode_Out_PP0x10推挽輸出

GPIO_Mode_AF_OD0x1c開漏復用

GPIO_Mode_AF_PP0x18推挽復用

STM32GPIO操作強大的GPIO功能,可設(shè)置:

G72STM32GPIO操作輸出速度通過GPIOSpeed_TypeDef結(jié)構(gòu)體可選擇:

2MHz,10MHz,50MHz。

typedefenum

{

GPIO_Speed_10MHz,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz}GPIOSpeed_TypeDef;

STM32GPIO操作輸出速度通過GPIOSpeed_T73固件庫里面的GPIO庫文件已經(jīng)為我們準備好了很多的操作函數(shù),可以直接使用。

1.GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct):根據(jù)GPIO_InitTypeDef里面的值,初始化某排里面的某些引腳的模式跟速度

2.GPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct):給GPIO_InitTypeDef里面的項目賦默認值

3.GPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):某排引腳某個引腳輸出1

固件庫里面的GPIO庫文件已經(jīng)為我們準備好了很多的操作函數(shù),74固件庫里面的GPIO庫文件已經(jīng)為我們準備好了很多的操作函數(shù),可以直接使用。

4.GPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):某排引腳某個引腳輸出0

5.GPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal):設(shè)置某排引腳輸出值

6.GPIO_ReadInputData(GPIO_TypeDef*GPIOx):讀整排引腳的值

7.GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin):讀某排引腳里面的輸出寄存器的某個引腳值……固件庫里面的GPIO庫文件已經(jīng)為我們準備好了很多的操作函數(shù),75操作實例做個跑馬燈程序,PA.11—PA.14口分別4個LED燈,當I/O為高電平時LED燈點亮。操作實例做個跑馬燈程序,PA.11—PA.14口分別4個LE76#include“stm32f10x.h”

#include“stm32f10x_conf.h”

GPIO_InitTypeDefPAInit;

voidLED_Init(void)

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開GPIOC時鐘

PAInit.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;

PAInit.GPIO_Mode=GPIO_Mode_Out_PP;

PAInit.GPIO_Speed=GPIO_Speed_2MHz;

GPIO_Init(GPIOA,&PAInit);

}

#include“stm32f10x.h”

#includ77main()

{

LED_Init();

while(1)

{GPIO_SetBits(GPIOA,GPIO_Pin_11);//GPIOA.11=1

Delay(0x8ffff);

GPIO_ResetBits(GPIOA,GPIO_Pin_11);//GPIOA.11=0

Delay(0x8ffff);

GPIO_SetBits(GPIOA,GPIO_Pin_12);Delay(0x8ffff);

GPIO_ResetBits(GPIOA,GPIO_Pin_12);

Delay(0x8ffff);

GPIO_SetBits(GPIOA,GPIO_Pin_13);Delay(0x8ffff);

GPIO_ResetBits(GPIOA,GPIO_Pin_13);

Delay(0x8ffff);

GPIO_SetBits(GPIOA,GPIO_Pin_14);

Delay(0x8ffff);

GPIO_ResetBits(GPIOA,GPIO_Pin_14);

Delay(0x8ffff);

}

}

main()

{

LED_Init();

786向量中斷控制器概述ARM7TDMI內(nèi)核具有兩個中斷輸入,分別為IRQ中斷和FIQ中斷。向量中斷控制器(VIC)負責管理芯片的中斷源,最多可以管理32個中斷輸入請求。CPU內(nèi)核ARM7TDMI-S6向量中斷控制器概述ARM7TDMI內(nèi)核796.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系A(chǔ)RM內(nèi)核通過CPSR來監(jiān)視和控制內(nèi)部的操作,CPSR中的“I”位和“F”位分別用來控制IRQ模式和FIQ模式的使能。CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)6.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系806.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系當I=1時,禁止IRQ中斷CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)當I=0時,使能IRQ中斷CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)6.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系816.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系當F=1時,禁止FIQ中斷CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)當F=0時,使能FIQ中斷CPUARM7TDMI-SVICIRQFIQCPSR[7](I)CPSR[6](F)6.向量中斷控制器程序狀態(tài)寄存器CPSR與VIC的關(guān)系826.向量中斷控制器中斷分類中斷輸入請求可以在VIC中被設(shè)置為以下三類:

FIQ中斷:具有最高優(yōu)先級;

向量IRQ中斷:具有中等優(yōu)先級;

非向量IRQ中斷:具有最低優(yōu)先級;6.向量中斷控制器中斷分類中斷輸入請求可以在VIC中被設(shè)836.向量中斷控制器FIQ中斷硬件處理流程將當前的程序狀態(tài)寄存器的內(nèi)容備份即,SPSR_fiq=CPSR處理器切換到FIQ模式禁止IRQ和FIQ中斷,即,I=F=1保存返回地址LR_fiq=PC設(shè)置FIQ異常入口地址PC=0x1C發(fā)生FIQ異常事件說明:ARM7不支持FIQ中斷嵌套6.向量中斷控制器FIQ中斷硬件處理流程將當前的程序狀態(tài)846.向量中斷控制器IRQ中斷相應(yīng)流程將當前的程序狀態(tài)寄存器的內(nèi)容備份即,SPSR_irq=CPSR處理器切換到IRQ模式禁止IRQ中斷,即,I=1保存返回地址LR_irq=PC設(shè)置IRQ異常入口地址PC=0x18發(fā)生IRQ異常事件說明:ARM7不支持IRQ中斷嵌套6.向量中斷控制器IRQ中斷相應(yīng)流程將當前的程序狀態(tài)寄存85向量IRQ0使能中斷源向量IRQ0控制寄存器VICVectCntl0向量地址0寄存器VICVectAddr0默認向量地址寄存器VICDefVectAddr向量IRQ15使能中斷源向量IRQ15控制寄存器VICVectCntl15向量地址15寄存器VICVectAddr15DefIRQIRQ0IRQ15VectAddr0VectAddr15DefVectAddr硬件優(yōu)先級選擇向量地址選擇向量地址寄存器VICVectAddrIRQ0IRQ15DefIRQIRQ中斷信號向量IRQ0向量IRQ15非向量IRQ高低優(yōu)先級IRQ中斷狀態(tài)寄存器VICIRQStatusFIQ中斷信號中斷選擇寄存器VICIntSelect中斷使能寄存器VICIntEnable中斷使能清零寄存器VICIntEnClr中斷源[31:0]軟件中斷使能寄存器VICSoftInt軟件中斷清零寄存器VICSoftIntClearFIQ中斷狀態(tài)寄存器VICFIQStatus中斷狀態(tài)寄存器VICRawIntrIRQFIQ向量IRQ0使能中斷源向量IRQ0控制寄存器向量地址0寄存器86中斷選擇寄存器VICIntSelect中斷使能寄存器VICIntEnable中斷使能清零寄存器VICIntEnClr中斷源[31:0]軟件中斷使能寄存器VICSoftInt軟件中斷清零寄存器VICSoftIntClear中斷狀態(tài)寄存器VICRawIntrIRQFIQ名稱描述訪問復位值地址VICIntEnable中斷使能寄存器

控制32個中斷請求(包括軟件中斷)的使能R/W00xFFFFF010VICIntEnClr中斷使能清零寄存器將中斷使能寄存器中的一個或多個位清零W00xFFFFF014VICIntSelect中斷選擇寄存器將32個中斷請求的每個中斷分配為FIQ或IRQR/W00xFFFFF00CVICSoftInt軟件中斷寄存器

控制對應(yīng)通道產(chǎn)生軟件中斷R/W00xFFFFF018VICSoftIntClear軟件中斷清零寄存器

禁止對應(yīng)通道的軟件中斷W00xFFFFF01C寄存器描述-控制寄存器中斷選擇寄存器中斷使能寄存器中斷使能清零寄存器中斷源軟件中斷87控制寄存器功能描述6.向量中斷控制器控制寄存器功能描述VICIntEnable使能(禁止)中斷源產(chǎn)生中斷VICIntEnClrVICIntSelect中斷類型選擇:FIQ&IRQVICSoftInt軟件中斷設(shè)置寄存器VICSoftIntClearFIQ中斷向量IRQ中斷非向量IRQ中斷中斷源0中斷源1……中斷源31VIC將32個中斷輸入進行分配控制寄存器功能描述6.向量中斷控制器控制寄存器功能描述V88向量IRQ0使能中斷源向量IRQ0控制寄存器VICVectCntl0向量地址0寄存器VICVectAddr0默認向量地址寄存器VICDefVectAddr向量IRQ15使能中斷源向量IRQ15控制寄存器VICVectCntl15向量地址15寄存器VICVectAddr15向量地址寄存器VICVectAddr寄存器描述-參數(shù)設(shè)置寄存器名稱描述復位置地址VICVectCntl0~VICVectCntl15向量控制0寄存器~向量控制15寄存器00xFFFFF200~0xFFFFF23CVICVectAddr0~VICVectAddr15向量地址0寄存器~向量地址15寄存器00xFFFFF100~0xFFFFF13CVICDefVectAddr默認向量地址寄存器00xFFFFF034VICVectAddr向量地址寄存器00xFFFFF030向量IRQ0使能中斷源向量IRQ0控制寄存器向量地址0寄存器89IRQ中斷特點6.向量中斷控制器特點區(qū)別向量IRQ支持16個向量IRQ中斷;16個優(yōu)先級;每個優(yōu)先級指定一個服務(wù)程序入口地址。能為每個向量IRQ中斷源設(shè)置服務(wù)程序地址。非向量IRQ支持1個非向量IRQ中斷;所有非向量IRQ的入口地址都相同。所有的非向量IRQ中斷都共用一個相同的服務(wù)程序入口地址。IRQ中斷特點6.向量中斷控制器特點區(qū)別向量支持16個向90IRQ中斷相關(guān)寄存器6.向量中斷控制器寄存器名稱功能VICVectCntl0~15為中斷源分配向量IRQ中斷的優(yōu)先級。VICVectAddr0~15為該中斷優(yōu)先級設(shè)置服務(wù)程序入口地址。VICDefVectAddr設(shè)置非向量中斷服務(wù)程序的入口地址。注意:如果將同一個中斷源分配給多個使能的向量IRQ中斷,那么該中斷源發(fā)生中斷時,會使用最高優(yōu)先級(最低編號)的寄存器設(shè)置。IRQ中斷相關(guān)寄存器6.向量中斷控制器寄存器名稱功能VI91產(chǎn)生中斷后的服務(wù)程序地址6.向量中斷控制器向量IRQ中斷發(fā)生向量IRQ中斷后,VIC將對應(yīng)的向量地址寄存器中的數(shù)據(jù)存入VICVectAddr寄存器中。非向量IRQ中斷發(fā)生非向量IRQ中斷后,VIC將默認向量地址寄存器中的數(shù)據(jù)存入VICVectAddr寄存器中產(chǎn)生中斷后的服務(wù)程序地址6.向量中斷控制器向量IRQ中斷92IRQ中斷狀態(tài)寄存器VICIRQStatus中斷選擇寄存器VICIntSelect中斷使能寄存器VICIntEnable中斷使能清零寄存器VICIntEnClr中斷源[31:0]軟件中斷使能寄存器VICSoftInt軟件中斷清零寄存器VICSoftIntClearFIQ中斷狀態(tài)寄存器VICFIQStatus中斷狀態(tài)寄存器VICRawIntrIRQFIQ寄存器描述-狀態(tài)寄存器名稱描述訪問復位值地址VICIRQStatusIRQ狀態(tài)寄存器該寄存器讀出定義為IRQ并使能的中斷的狀態(tài)RO00xFFFFF000VICFIQStatusFIQ狀態(tài)請求該寄存器讀出定義為FIQ并使能的中斷的狀態(tài)RO00xFFFFF004VICRawIntr所有中斷的狀態(tài)寄存器該寄存器讀出32個中斷請求/軟件中斷的狀態(tài),不管中斷是否使能或分類RO00xFFFFF008注意:讀取VICRawIntr

溫馨提示

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

評論

0/150

提交評論