在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32 NVIC嵌套向量中斷控制器函數(shù)分析

            STM32 NVIC嵌套向量中斷控制器函數(shù)分析

            作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
            中斷管理函數(shù)
            CM3內(nèi)核支持256個中斷,其中包含了16個內(nèi)核中斷和240個外部中斷,并且具有256級的可編程中斷設(shè)置。但STM32并沒有使用CM3內(nèi)核的全部東西,而是只用了它的一部分。STM32有76個中斷,包括16個內(nèi)核中斷和60個可屏蔽中斷,具有16級可編程的中斷優(yōu)先級。而我們常用的就是這60個可屏蔽中斷,所以我們就只針對這60個可屏蔽中斷進行介紹。
            在MDK內(nèi),與NVIC相關(guān)的寄存器,MDK為其定義了如下的結(jié)構(gòu)體:
            typedef struct
            {
            vu32 ISER[2];
            u32 RESERVED0[30];
            vu32 ICER[2];
            u32 RSERVED1[30];
            vu32 ISPR[2];
            u32 RESERVED2[30];
            vu32 ICPR[2];
            u32 RESERVED3[30];
            vu32 IABR[2];
            u32 RESERVED4[62];
            vu32 IPR[15];
            } NVIC_TypeDef;

            ISER[2]:Interrupt set enable registers中斷使能寄存器組
            ICER[2]:interrupt clear enable registers 中斷除能寄存器組
            ISPR[2]:interrupt set pending registers 中斷掛起寄存器組
            ICPR[2]: interrupt clear pending registers 中斷解掛寄存器組
            IABR[2]:interrupt active bit registers 中斷激活標志寄存器組

            主要分析
            IPR[15]:interrupt priority registers 中斷優(yōu)先級控制寄存器組




            使用函數(shù)實現(xiàn)中斷分組: 可選分組0--4

            MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)
            {
            u32 temp,temp1; //設(shè)置中轉(zhuǎn)變量
            temp1=(~NVIC_Group)&0x07; //取后3位
            temp1<<=8; //左移8位
            temp=SCB->AIRCR; //讀取先前設(shè)置
            temp&=0x0000F8FF; //清空先前設(shè)置
            temp|=0x05FA0000; //插入密鑰
            temp|=temp1; //分組設(shè)置賦值進
            SCB->AIRCB=temp; //設(shè)置完的值賦值給中斷分組寄存器
            }
            語句解讀:

            temp1=(~NVIC_Group)&0x07; 由于
            所以組號取反與111 即得到分組所需寄存器值
            temp|=0x05FA0000;
            密鑰


            使用函數(shù)實現(xiàn)中斷優(yōu)先級設(shè)置:
            void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
            {
            u32 temp;
            u8 IPRADDR=NVIC_Channel/4; //每組只能存4個得到組地址
            u8 IPROFFSET=NVIC_Channel%4; //得到組內(nèi)偏移地址
            IPROFFSET=IPROFFSET*8+4; //得到確切地址
            MY_NVIC_PriorityGroupConfig(NVIC_Group); //設(shè)置分組
            temp=NVIC_Preemptionpriority<<(4-NVIC_Group); // 設(shè)置搶占優(yōu)先級
            temp|=NVIC_SubPriority&(0x0f>>NVIC_Group); //設(shè)置響應(yīng)優(yōu)先級
            temp&=0xf; //取低4位
            if(NVIC_Channel<32) NVIC->ISER[0]|=1<else
            NVIC->ISER[1]|=1<<(NVIC_Channel-32);
            NVIC->IPR[IPRADDR]|=temp<}

            語句解讀:

            u8 IPRADDR=NVIC_Channel/4; //ISER[2]組可以設(shè)置60個中斷優(yōu)先級,每組15個寄存器,每個寄存器32位 每個可中斷8位,每個寄存器可以設(shè)置4個中斷, 組地址=channel/4; //選擇中斷號組(0--3)(4--7),,,(56---59)
            u8 IPROFFSET=NVIC_Channel%4; 組內(nèi)偏移地址 //選擇第幾個中斷號
            IPROFFSET=IPROFFSET*8+4; //由于每個中斷8位,只用了前4位,所以偏移4






            temp=NVIC_Preemptionpriority<<(4-NVIC_Group); //搶占優(yōu)先級在左邊,根據(jù)搶占位多少進行左移
            temp|=NVIC_SubPriority&(0x0f>>NVIC_Group); //響應(yīng)優(yōu)先級在右邊,根據(jù)響應(yīng)位多少進行右移
            temp&=0xf; //得到分組值

            外部中斷配置函數(shù):

            STM32的EXTI控制器支持19個外部中斷/事件請求。每個中斷設(shè)有狀態(tài)位,每個中斷/事件都有獨立的觸發(fā)和屏蔽設(shè)置。STM32的19個外部中斷為:
            線0~15:對應(yīng)外部IO口的輸入中斷。
            線16:連接到PVD輸出。
            PVD(Programmable Voltage Detector),即可編程電壓監(jiān)測器。應(yīng)用于STM32ARM芯片中,作用是監(jiān)視供電電壓,在供電電壓下降到給定的閥值以下時,產(chǎn)生一個中斷,通知軟件做緊急處理。當供電電壓又恢復(fù)到給定的閥值以上時,也會產(chǎn)生一個中斷,通知軟件供電恢復(fù)。
            線17:連接到RTC鬧鐘事件。 RTC是多種名詞的縮寫,如:實時時鐘(Real-Time Clock)
            線18:連接到USB喚醒事件。
            對于外部中斷EXTI控制MDK定義了如下結(jié)構(gòu)體:
            typedef struct
            {
            vu32 IMR;
            vu32 EMR;
            vu32 RTSR;
            vu32 FTSR;
            vu32 SWIER;
            vu32 PR;
            } EXTI_TypeDef;


            上一頁 1 2 下一頁

            評論


            技術(shù)專區(qū)

            關(guān)閉