嵌入式TM4C123GXL——GPIO、時鐘分頻、中斷

嵌入式導(dǎo)論實驗報告Guo-Lab4

TM4C123GXL Performance

實驗題目

熟悉實驗環(huán)境和實驗工具

熟練使用C語言和GPOI的定義和改變

掌握時鐘分頻和中斷

實驗?zāi)康?/strong>

搭建實驗環(huán)境—Code Compose Studio,熟悉開發(fā)板EK-TM4C123GXL

掌握時鐘分頻和中斷

實驗要求

使系統(tǒng)中斷高于自定義中斷函數(shù)

使系統(tǒng)中斷低于自定義中斷函數(shù)

板級運行程序,實現(xiàn)時鐘分頻

實驗過程

  1. 使系統(tǒng)中斷高于自定義中斷函數(shù)&使系統(tǒng)中斷低于自定義中斷函數(shù)

系統(tǒng)優(yōu)先級

NVIC_SYS_PRI3_R = (NVIC_SYS_PRI3_R&0x00FFFFFF)|0x60000000; //priority 2      

函數(shù)優(yōu)先級

NVIC_PRI4_R = (NVIC_PRI4_R&0x00FFFFFF)|0x40000000; // 8) priority 3

使用波形觀察當(dāng)中斷同時發(fā)生時,優(yōu)先級不同會發(fā)生什么。

系統(tǒng)中斷的優(yōu)先級比較高時:
由于兩者的頻率有所差別,所以經(jīng)過一定時間后會發(fā)生嵌套中斷,此時由于系統(tǒng)中斷的優(yōu)先級比較高,所以函數(shù)的中斷被掛起,直到系統(tǒng)中斷執(zhí)行完之后才繼續(xù)執(zhí)行。

函數(shù)中斷的優(yōu)先級比較高時:
由于優(yōu)先級的調(diào)整,系統(tǒng)中斷的優(yōu)先級變低,發(fā)生嵌套中斷時,系統(tǒng)中斷被掛起。

// **************SysTick_Init*********************
// Initialize SysTick periodic interrupts
// Input: interrupt period
//        Units of period are 20ns (assuming 50 MHz clock)
//        Maximum is 2^24-1
//        Minimum is determined by length of ISR
// Output: none
volatile uint32_t Counts;
void SysTick_Init(uint32_t period){
  Counts = 0;
  NVIC_ST_CTRL_R = 0;            // disable SysTick during setup
  NVIC_ST_RELOAD_R = period - 1; // reload value
  NVIC_ST_CURRENT_R = 0;         // any write to current clears it
  NVIC_SYS_PRI3_R = (NVIC_SYS_PRI3_R&0x00FFFFFF)|0x60000000; //priority 2                
  NVIC_ST_CTRL_R = 0x00000007;   // enable with core clock and interrupts
} 

// ***************** Timer0A_Init ****************
// Activate Timer0A interrupts to run user task periodically
// Inputs:  task is a pointer to a user function
//          period in usec
// Outputs: none
void Timer0A_Init(unsigned short period){ volatile uint32_t delay;
  SYSCTL_RCGCTIMER_R |= 0x01;      // 0) activate timer0
  delay = SYSCTL_RCGCTIMER_R;      // allow time to finish activating
  TIMER0_CTL_R &= ~0x00000001;     // 1) disable timer0A during setup
  TIMER0_CFG_R = 0x00000004;       // 2) configure for 16-bit timer mode
  TIMER0_TAMR_R = 0x00000002;      // 3) configure for periodic mode
  TIMER0_TAILR_R = period - 1;     // 4) reload value
  TIMER0_TAPR_R = 199;              // 5) 1us timer0A
  TIMER0_ICR_R = 0x00000001;       // 6) clear timer0A timeout flag
  TIMER0_IMR_R |= 0x00000001;      // 7) arm timeout interrupt
  NVIC_PRI4_R = (NVIC_PRI4_R&0x00FFFFFF)|0x40000000; // 8) priority 3
  NVIC_EN0_R = NVIC_EN0_INT19;     // 9) enable interrupt 19 in NVIC
  TIMER0_CTL_R |= 0x00000001;      // 10) enable timer0A
}
  1. 板級運行程序,實現(xiàn)時鐘分頻
中斷調(diào)用效果.png
void Timer0A_Handler(void){
  PF2 ^= 0x04;//藍(lán)燈閃爍
  TIMER0_ICR_R = TIMER_ICR_TATOCINT;// acknowledge timer0A timeout

}
void SysTick_Handler(void){
  PF3 = 0x08; //綠燈閃爍
  Counts = Counts + 1; 
    if(Counts==10){ //延時
        PF3 ^= 0x08; 
        Counts=0;
    }
  
}
int main(void){ 
  DisableInterrupts();
  PLL_Init();                // configure for 50 MHz clock

    SYSCTL_RCGCGPIO_R |= 0x20;       // activate port F
  while((SYSCTL_PRGPIO_R&0x20)==0){};
  GPIO_PORTF_DIR_R |= 0x0E;        // make PF3-1 output (PF3-1 built-in LEDs)
  GPIO_PORTF_AFSEL_R &= ~0x0E;     // disable alt funct on PF3-1
  GPIO_PORTF_DEN_R |= 0x0E;        // enable digital I/O on PF3-1
                                   // configure PF3-1 as GPIO
  GPIO_PORTF_PCTL_R = (GPIO_PORTF_PCTL_R&0xFFFF000F)+0x00000000;
  GPIO_PORTF_AMSEL_R = 0;          // disable analog functionality on PF    
  Timer0A_Init(50000);           // 200 kHz 5Hz
  SysTick_Init(500000);         // 164 kHz    100Hz
  EnableInterrupts();
    
  while(1){
      
  }
}

實驗總結(jié)

許多功能都是通過中斷實現(xiàn)的。中斷系統(tǒng)是計算機的重要組成部分。實時控制、故障自動處理、計算機與外圍設(shè)備間的數(shù)據(jù)傳送往往采用中斷系統(tǒng)。中斷系統(tǒng)的應(yīng)用大大提高了計算機效率。
不同的計算機其硬件結(jié)構(gòu)和軟件指令是不完全相同的,因此,中斷系統(tǒng)也是不相同的。計算機的中斷系統(tǒng)能夠加強CPU對多任務(wù)事件的處理能力。中斷機制是現(xiàn)代計算機系統(tǒng)中的基礎(chǔ)設(shè)施之一,它在系統(tǒng)中起著通信網(wǎng)絡(luò)作用,以協(xié)調(diào)系統(tǒng)對各種外部事件的響應(yīng)和處理。中斷是實現(xiàn)多道程序設(shè)計的必要條件。 中斷是CPU對系統(tǒng)發(fā)生的某個事件作出的一種反應(yīng)。 引起中斷的事件稱為中斷源。中斷源向CPU提出處理的請求稱為中斷請求。發(fā)生中斷時被打斷程序的暫停點成為斷點。CPU暫停現(xiàn)行程序而轉(zhuǎn)為響應(yīng)中斷請求的過程稱為中斷響應(yīng)。處理中斷源的程序稱為中斷處理程序。CPU執(zhí)行有關(guān)的中斷處理程序稱為中斷處理。而返回斷點的過程稱為中斷返回。中斷的實現(xiàn)實行軟件和硬件綜合完成,硬件部分叫做硬件裝置,軟件部分成為軟件處理程序。

中斷系統(tǒng)的功能

1)實現(xiàn)中斷響應(yīng)和中斷返回
當(dāng)CPU收到中斷請求后,能根據(jù)具體情況決定是否響應(yīng)中斷,如果CPU沒有更急、更重要的工作,則在執(zhí)行完當(dāng)前指令后響應(yīng)這一中斷請求。CPU中斷響應(yīng)過程如下:首先,將斷點處的PC值(即下一條應(yīng)執(zhí)行指令的地址)推入堆棧保留下來,這稱為保護斷點,由硬件自動執(zhí)行。然后,將有關(guān)的寄存器內(nèi)容和標(biāo)志位狀態(tài)推入堆棧保留下來,這稱為保護現(xiàn)場,由用戶自己編程完成。保護斷點和現(xiàn)場后即可執(zhí)行中斷服務(wù)程序,執(zhí)行完畢,CPU由中斷服務(wù)程序返回主程序,中斷返回過程如下:首先恢復(fù)原保留寄存器的內(nèi)容和標(biāo)志位的狀態(tài),這稱為恢復(fù)現(xiàn)場,由用戶編程完成。然后,再加返回指令RETI,RETI指令的功能是恢復(fù)PC值,使CPU返回斷點,這稱為恢復(fù)斷點。恢復(fù)現(xiàn)場和斷點后,CPU將繼續(xù)執(zhí)行原主程序,中斷響應(yīng)過程到此為止。

2)實現(xiàn)優(yōu)先權(quán)排隊
通常,系統(tǒng)中有多個中斷源,當(dāng)有多個中斷源同時發(fā)出中斷請求時,要求計算機能確定哪個中斷更緊迫,以便首先響應(yīng)。為此,計算機給每個中斷源規(guī)定了優(yōu)先級別,稱為優(yōu)先權(quán)。這樣,當(dāng)多個中斷源同時發(fā)出中斷請求時,優(yōu)先權(quán)高的中斷能先被響應(yīng),只有優(yōu)先權(quán)高的中斷處理結(jié)束后才能響應(yīng)優(yōu)先權(quán)低的中斷。計算機按中斷源優(yōu)先權(quán)高低逐次響應(yīng)的過程稱優(yōu)先權(quán)排隊,這個過程可通過硬件電路來實現(xiàn),亦可通過軟件查詢來實現(xiàn)。

3)實現(xiàn)中斷嵌套
當(dāng)CPU響應(yīng)某一中斷時,若有優(yōu)先權(quán)高的中斷源發(fā)出中斷請求,則CPU能中斷正在進行的中斷服務(wù)程序,并保留這個程序的斷點(類似于子程序嵌套),響應(yīng)高級中斷,高級中斷處理結(jié)束以后,再繼續(xù)進行被中斷的中斷服務(wù)程序,這個過程稱為中斷嵌套。如果發(fā)出新的中斷請求的中斷源的優(yōu)先權(quán)級別與正在處理的中斷源同級或更低時,CPU不會響應(yīng)這個中斷請求,直至正在處理的中斷服務(wù)程序執(zhí)行完以后才能去處理新的中斷請求。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學(xué)習(xí)匯編語言》系列視頻的筆記,在此感謝他和像他一樣...
    Gibbs基閱讀 37,372評論 8 114
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,145評論 6 13
  • 一,什么是中斷? 1.中斷的基本概念 中斷是指計算機在執(zhí)行期間,系統(tǒng)內(nèi)發(fā)生任何非尋常的或非預(yù)期的急需處理事件,使得...
    小東門兒閱讀 994評論 1 2
  • 看著那個弱小的小姑娘。撲閃著靈動的雙眼,說跟平時爺爺奶奶一起住。感覺周圍空氣似乎漸漸凝固,頃刻間傷感彌漫。小姑娘的...
    素樸之行閱讀 198評論 0 0