www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]這個(gè)程序?qū)懙暮苡幸馑迹⒁庠O(shè)定的優(yōu)先級(jí)是(0~7)

這個(gè)程序?qū)懙暮苡幸馑?,注意設(shè)定的優(yōu)先級(jí)是(0~7)<<5,數(shù)值越小優(yōu)先級(jí)越高。具體的主程序的意思是:

針對(duì)中斷優(yōu)先級(jí),我們?cè)O(shè)計(jì)了一個(gè)簡(jiǎn)單的例程:兩路按鍵KEY1、KEY2輸入采用不同的優(yōu)先級(jí)中斷,分別在各自的中斷服務(wù)函數(shù)里控制指示燈LED1、LED2。

  其中,KEY1控制LED1、KEY2控制LED2。連接按鍵、指示燈的I/O均為低電平有效。
  在程序里,把KEY1中斷設(shè)置為較高的優(yōu)先級(jí)1、KEY2中斷設(shè)置為較低的優(yōu)先級(jí)2。KEY1、KEY2各自對(duì)應(yīng)一個(gè)中斷服務(wù)函數(shù)。在中斷服務(wù)函數(shù)里做2件事情:清除中斷狀態(tài)、點(diǎn)亮對(duì)應(yīng)的指示燈,然后進(jìn)入一個(gè)死循環(huán)而不退出中斷。

  在程序運(yùn)行后,如果先按KEY1點(diǎn)亮LED1,再按KEY2時(shí)LED2不亮,原因是KEY1優(yōu)先級(jí)比KEY2優(yōu)先級(jí)高,KEY2中斷無法打斷KEY1中斷。相反,如果先按KEY2點(diǎn)亮LED2,再按KEY1時(shí)也能點(diǎn)亮LED1,這說明較高級(jí)的KEY1中斷能夠打斷較低級(jí)的KEY2中斷。按/RST可以復(fù)位重來。

程序:

// 包含必要的頭文件
#include "LED.H"
#include
#include
#include
#include
#include
#include
#include
#include


// 將較長(zhǎng)的標(biāo)識(shí)符定義成較短的形式
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput


// 定義KEY
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5


// 防止JTAG失效
void JTAG_Wait(void)
{
SysCtlPeriEnable(KEY_PERIPH); // 使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY_PORT , KEY_PIN); // 設(shè)置KEY所在管腳為輸入

if ( GPIOPinRead(KEY_PORT , KEY_PIN) == 0x00 ) // 如果復(fù)位時(shí)按下KEY,則進(jìn)入
{
for (;;); // 死循環(huán),以等待JTAG連接
}

SysCtlPeriDisable(KEY_PERIPH); // 禁止KEY所在的GPIO端口
}


// GPIOD中斷初始化
void GPIOD_IntInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD); // 使能GPIOD端口
GPIOPinTypeIn(GPIO_PORTD_BASE , GPIO_PIN_1); // 設(shè)置PD1管腳為輸入

GPIOIntTypeSet(GPIO_PORTD_BASE , // 設(shè)置PD1的中斷類型
GPIO_PIN_1 ,
GPIO_LOW_LEVEL);

IntPrioritySet(INT_GPIOD , 1 << 5); // 設(shè)置GPIOD中斷優(yōu)先級(jí)為1

GPIOPinIntEnable(GPIO_PORTD_BASE , GPIO_PIN_1); // 使能PD1管腳中斷
IntEnable(INT_GPIOD); // 使能GPIOD端口中斷
}


// GPIOG中斷初始化
void GPIOG_IntInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOG); // 使能GPIOG端口
GPIOPinTypeIn(GPIO_PORTG_BASE , GPIO_PIN_5); // 設(shè)置PG5管腳為輸入

GPIOIntTypeSet(GPIO_PORTG_BASE , // 設(shè)置PG5的中斷類型
GPIO_PIN_5 ,
GPIO_LOW_LEVEL);

IntPrioritySet(INT_GPIOG , 2 << 5); // 設(shè)置GPIOG中斷優(yōu)先級(jí)為2

GPIOPinIntEnable(GPIO_PORTG_BASE , GPIO_PIN_5); // 使能PG5管腳中斷
IntEnable(INT_GPIOG); // 使能GPIOG端口中斷
}


// 系統(tǒng)初始化
void SystemInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_50V); // 設(shè)置LDO輸出電壓

SysCtlClockSet(SYSCTL_USE_OSC | // 系統(tǒng)時(shí)鐘設(shè)置,采用主振蕩器
SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ |
SYSCTL_SYSDIV_1);

/*
SysCtlLDOSet(SYSCTL_LDO_2_75V); // 配置PLL前須將LDO電壓設(shè)置為2.75V

SysCtlClockSet(SYSCTL_USE_PLL | // 系統(tǒng)時(shí)鐘設(shè)置,采用PLL
SYSCTL_OSC_MAIN | // 主振蕩器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_10); // 分頻結(jié)果為20MHz
*/

LED_Init(LED1 | LED2); // 初始化LED1和LED2

GPIOD_IntInit(); // GPIOD中斷初始化
GPIOG_IntInit(); // GPIOG中斷初始化

IntMasterEnable(); // 使能處理器中斷
}


int main(void)
{
JTAG_Wait(); // 防止JTAG失效,重要!
SystemInit(); // 系統(tǒng)初始化

for (;;) // 死循環(huán),等待按鍵中斷的產(chǎn)生
{
}
}


// GPIOD的中斷服務(wù)函數(shù)
void GPIO_Port_D_ISR(void)
{
unsigned long ulStatus;

ulStatus = GPIOPinIntStatus(GPIO_PORTD_BASE , true); // 讀取中斷狀態(tài)
GPIOPinIntClear(GPIO_PORTD_BASE , ulStatus); // 清除中斷狀態(tài),重要

if ( ulStatus & GPIO_PIN_1 ) // 如果PD1的中斷狀態(tài)有效
{
LED_On(LED1); // 點(diǎn)亮LED1

for (;;) // 死循環(huán),不退出中斷服務(wù)函數(shù)
{
}
}
}


// GPIOG的中斷服務(wù)函數(shù)
void GPIO_Port_G_ISR(void)
{
unsigned long ulStatus;

ulStatus = GPIOPinIntStatus(GPIO_PORTG_BASE , true); // 讀取中斷狀態(tài)
GPIOPinIntClear(GPIO_PORTG_BASE , ulStatus); // 清除中斷狀態(tài),重要

if ( ulStatus & GPIO_PIN_5 ) // 如果PG5的中斷狀態(tài)有效
{
LED_On(LED2); // 點(diǎn)亮LED2

for (;;) // 死循環(huán),不退出中斷服務(wù)函數(shù)
{
}
}
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

當(dāng)多個(gè)同級(jí)別中斷同時(shí)發(fā)出中斷請(qǐng)求時(shí),單片機(jī)中斷系統(tǒng)將按照自然優(yōu)先級(jí)別進(jìn)行中斷排序,并首先響應(yīng)其中自然優(yōu)先級(jí)別最高的中斷。

關(guān)鍵字: 中斷優(yōu)先級(jí) 單片機(jī) 中斷系統(tǒng)

引言   隨著汽車的普及和行駛速度的加快,交通事故及傷亡人數(shù)也在逐年上升。在發(fā)生汽車碰撞事故時(shí),如何有效地保護(hù)司機(jī)和乘員生命的安全是迫切需要解決的問題。安全氣囊作為與安全帶配合使用的被動(dòng)

關(guān)鍵字: ARM lm3s1138 安全氣囊 cortexm3

實(shí)現(xiàn)中斷允許控制和中斷優(yōu)先級(jí)控制分別由特殊功能寄存器區(qū)中的中斷允許寄存器IE和中斷優(yōu)先級(jí)寄存器IP來實(shí)現(xiàn)的。下面介紹這兩個(gè)特殊功能寄存器。

關(guān)鍵字: at89s51 中斷優(yōu)先級(jí) 中斷允許

中斷優(yōu)先級(jí)是CPU響應(yīng)中斷的先后順序。中斷優(yōu)先處理的原則是:(1)先響應(yīng)優(yōu)先級(jí)高的中斷請(qǐng)求,再響應(yīng)優(yōu)先級(jí)低的中斷請(qǐng)求。(2)如果一個(gè)中斷請(qǐng)求己被響應(yīng),同級(jí)的其他中斷請(qǐng)求將被禁止。(3)如果同級(jí)的多個(gè)中斷請(qǐng)求同時(shí)出現(xiàn)

關(guān)鍵字: 中斷優(yōu)先級(jí) 先級(jí)處理

我自己依據(jù)此圖理解,應(yīng)用思維導(dǎo)圖畫了一張方便理解:(如果看不清可通過ctrl+鼠標(biāo)滑輪放大看;)前提條件1:組別優(yōu)先順序(第0組優(yōu)先級(jí)最強(qiáng),第4組優(yōu)先級(jí)最弱):NVIC_PriorityGroup_0>NVIC_P...

關(guān)鍵字: STM32 中斷優(yōu)先級(jí)

一、FreeRTOS中斷設(shè)置介紹FreeRTOSConfig.h中定義了兩個(gè)宏,分別是:configKERNEL_INTERRUPT_PRIORITYconfigMAX_SYSCALL_INTERRUPT_PRIORIT...

關(guān)鍵字: freertos STM32 中斷優(yōu)先級(jí)

在MCS-中斷優(yōu)先級(jí)中由中斷優(yōu)先級(jí)寄存器IP來高置的,IP中某位設(shè)為1,相應(yīng)的中斷就是高優(yōu)先級(jí),否則就是低優(yōu)先級(jí)。---PSPT1PX1PT0PX0IP優(yōu)先級(jí)別寄存器各位介紹如下:PS:串行口中斷優(yōu)先級(jí)控制位。PS=1設(shè)...

關(guān)鍵字: 51單片機(jī) 中斷優(yōu)先級(jí)

一、背景USB在持續(xù)通信幾十萬次后,會(huì)出現(xiàn)USBIN中斷丟失幾次的情況,分析是中斷優(yōu)先級(jí)不夠高,導(dǎo)致USB中斷在排隊(duì),然而排隊(duì)還未完成,又有新的USB中斷發(fā)生,致使其中斷丟失。LPC1769的所有中斷默認(rèn)為最高優(yōu)先級(jí)&q...

關(guān)鍵字: 1769 lpc1768 中斷優(yōu)先級(jí)

8051 系列 MCU 的基本結(jié)構(gòu)包括:32 個(gè) I/O 口(4 組8 bit 端口);兩個(gè)16 位定時(shí)計(jì)數(shù)器;全雙工串行通信;6 個(gè)中斷源(2 個(gè)外部中斷、2 個(gè)定時(shí)/計(jì)數(shù)器中斷、1 個(gè)串口輸入/輸出中斷),兩級(jí)中斷優(yōu)...

關(guān)鍵字: interrupt using 中斷優(yōu)先級(jí) c51中斷

試分析以下幾個(gè)中斷優(yōu)先級(jí)的排列順序(級(jí)別由高到低)是否有可能實(shí)現(xiàn)?若能,應(yīng)如何設(shè)置中斷源的中斷優(yōu)先級(jí)別?若不能,試述理由。內(nèi)容來自單片機(jī)之家www.dpj100.com1)T0、T1、/INT0、/INT1、串行口;2)...

關(guān)鍵字: 中斷優(yōu)先級(jí) 單片機(jī) 排列順序
關(guān)閉