混合信號(hào)嵌入式設(shè)計(jì)實(shí)驗(yàn)指南-數(shù)字實(shí)驗(yàn)之:實(shí)驗(yàn)2—中斷
目標(biāo):本實(shí)驗(yàn)專門用于介紹PSoC CPU 的中斷句柄。注意這個(gè)實(shí)驗(yàn)分成7 個(gè)部分:LAB2A 到LAB 2G 。在繼續(xù)下一個(gè)實(shí)驗(yàn)前,要成功地完成每一個(gè)部分。
完成這個(gè)實(shí)驗(yàn)后,讀者應(yīng)能做到:
用C 語言寫控制程序;
理解如何處理一個(gè)發(fā)布的中斷;
理解如何處理一個(gè)未處理的中斷;
將CPU 設(shè)置在休眠模式,然后用休眠定時(shí)器未處理的中斷喚醒它;
使用匯編語言編寫的中斷句柄,來操作在C 程序里聲明的一個(gè)全局變量;
使用C 語言編寫的中斷句柄,來操作在C 程序里聲明的一個(gè)全局變量;
在中斷向量表空間中,放置一個(gè)小的中斷服務(wù)程序ISR。
假設(shè):
所有先前實(shí)驗(yàn)的假設(shè);
使能編譯器用于開發(fā)系統(tǒng)。
要求的材料:
CY3210 PSoCEval1 板子;
面包板線。
要求的設(shè)備:
無。
相關(guān)的參考資料
所有前面實(shí)驗(yàn)的參考資料;
Cypress C 語言編譯器用戶指南。
中斷控制器為PSoC 混合信號(hào)陣列內(nèi)的不同硬件資源提供了一種機(jī)制,可以將程序的執(zhí)行改變到新的地址,而不需要考慮當(dāng)前正在執(zhí)行的任務(wù)。圖1.13 給出了中斷處理的方塊圖。
對(duì)于CPU,要識(shí)別一個(gè)特殊資源的中斷,下面必須是真(有效)的:
必須設(shè)置它的中斷使能屏蔽;
圖1.13 中斷處理
它必須是所有未處理中斷中,級(jí)別最高的;必須設(shè)置全局中斷使能。CPU 通過下面響應(yīng)這個(gè)請(qǐng)求:將當(dāng)前程序計(jì)數(shù)器的值保存起來;將當(dāng)前標(biāo)志寄存器的值保存起來。跳轉(zhuǎn)到指定的中斷向量地址。對(duì)于27x 系列的器件,有18 個(gè)不同的中斷源。
表1.2 從最高優(yōu)先級(jí)到最低優(yōu)先級(jí),給出了每個(gè)中斷源和它的向量地址。
表1.2 中斷向量表
中斷源 | 向量位置 |
硬件復(fù)位 | 0x0000 |
供電監(jiān)視器 | 0x0004 |
模擬列0 | 0x0008 |
模擬列1 | 0x000c |
模擬列2 | 0x0010 |
模擬列3 | 0x0014 |
VC3 | 時(shí)鐘 |
GPIO | 0x001c |
數(shù)字塊00 | 0x0020 |
數(shù)字塊01 | 0x0024 |
數(shù)字塊02 | 0x0028 |
數(shù)字塊03 | 0x002c |
數(shù)字塊10 | 0x0030 |
數(shù)字塊11 | 0x0034 |
數(shù)字塊12 | 0x0038 |
數(shù)字塊13 | 0x003c |
I2C | 0x0060 |
休眠定時(shí)器 | 0x0064 |
在中斷服務(wù)程序的末尾,先前程序計(jì)數(shù)器和標(biāo)志寄存器的值被恢復(fù)到它們?cè)瓉淼闹?,原先的程序從離開它的地方繼續(xù)。
練習(xí)2A-1 :假設(shè)正確的使能全局中斷和中斷屏蔽,可能永遠(yuǎn)不能服務(wù)較低優(yōu)先級(jí)的中斷。這是為什么?
評(píng)論