?? interruptcontroller.h
字號:
///////////////////////////////////////////////////////////////////////
// 圓夢51!圓夢51!圓夢51!圓夢51!圓夢51!圓夢51!圓夢51!圓夢51!圓夢51!圓夢51!
// 1998.x.x 多少遺憾,多少淚水,路在何方?? 為什么失敗的總是我??夢想為什么這么遙遠(yuǎn)
// ........學(xué)x86很久了,書本都翻了n遍了......
// 雖然x86很強(qiáng)大,但要做臺(tái)x86計(jì)算機(jī)真是太難了,8051單片機(jī)真的簡單了很多,我想做個(gè)8051的計(jì)算機(jī).
// 沒有編程器的日子,真是不好受,自己又沒條件能做電路板,要是能有臺(tái)計(jì)算機(jī)模擬8051,那將是多莫令人興奮的事情啊
// 但是我什么都沒有............什么都沒有
// 1999.x.x草稿紙上完成基本的框架圖和基本算法,并完成部分核心代碼,將項(xiàng)目名稱定為圓夢51
// .......飄啊搖啊,淡漠了生活,忘記了夢想,就這樣渾渾噩噩的活著........夢已死
// 2002.8.24 塵世間多少煩惱,從此不必再牽掛。為了夢想我終于可以從現(xiàn)實(shí)中解脫出來一段時(shí)間,不上學(xué)的日子真好,真令人懷念。
// 建立指令模擬instruction和memory 代碼檔。
// 不懂windows C編程是我最大的障礙,......1年時(shí)間......我想應(yīng)該是我這一生中最有價(jià)值的時(shí)間,以前沒有,以后可能更沒有了
// 2003.12.x
// 因?yàn)橐蠈W(xué),所以能夠靜下心來學(xué)習(xí)的時(shí)間基本上再也找不到了
// 2004.9.2 基本初步完成,尚未完成中斷返回,尚未debug
// 2004.11.17 調(diào)試浮點(diǎn)程序通過,^_^ :) ^o^ ^0^ :( >_< 他的缺點(diǎn)就是他的優(yōu)點(diǎn),我無法權(quán)衡,指令類暫時(shí)先穩(wěn)定下來吧
// 當(dāng)學(xué)生真是無奈,我在倒退..............我在放棄夢想...............
// 2005.3.28 不管怎樣我要圓夢,我不能做個(gè)永遠(yuǎn)失敗的人,建立KernelMsg interruptcontroller代碼檔
// 2005.4.3 建立TIMER檔,這可把我難倒了,效能,錯(cuò)誤...............
// 2005.4.14 KernelMsg TIMER初步完成,莫名其妙的錯(cuò)誤太多,KernelMsg真的很失敗,增加了編寫難度,更不易調(diào)試.....
// 2005.4.18 不管三七二十一,湊出來再說,我好想運(yùn)行以下ucos ii,建立Serial類
// 2005.4.21 為了提供對多處理器系統(tǒng)的支持,并能夠模擬多了處理器,對全局變量 函數(shù)作了修改,使之不但打破了C++的封裝,
// 又使得全局函數(shù)類似類中的函數(shù),所以在不增加代碼的情況下,可直接模擬多處理器
// 2005.4.24 垃圾誕生,不得不對KernelMsg重新編寫,以提高時(shí)間事件函數(shù)HOOK的安全性,降低時(shí)間HOOK的編寫難度,
// 不用自己處理下層的HOOK問題,效率更高,隨后TIMER Serial也作了大面積修改
// 2005.4.25 uCOS-II終于正確無誤的運(yùn)行成功了。0.10版核心到此為止告一段落。
// 盡管0.10沒有經(jīng)過完全的測試,我敢肯定定時(shí)器這部分還是有問題,而且串口,定時(shí)器還沒有完善,
// 但是我已經(jīng)對他沒有很大主動(dòng)測試方面的興趣了,留著讓用戶來發(fā)現(xiàn)吧
// 著手開始0.11的開發(fā),這更能吸引我的眼球,新的目標(biāo)是利用KernelMsg思想大面積優(yōu)化指令集的加速,以其其他速度方面的優(yōu)化,
// 希望速度能追上Keil C
//////////////////////////////////////////////////////////////////////
// interruptcontroller.h: interface for the InterruptController class.
// 2004.9.11 建立代碼檔
// 2005.4.3 00:08 初始版本的編碼工作基本完成,尚待測試
// 沒有對~INTX做模擬,IT0 IT1沒有作完全模擬
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_INTERRUPTCONTROLLER_H__2634D4EA_14D6_4C9A_A26C_5F31C1BF82FD__INCLUDED_)
#define AFX_INTERRUPTCONTROLLER_H__2634D4EA_14D6_4C9A_A26C_5F31C1BF82FD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "GlobalVar.h"
//#include "memory.h"
//#include "kernelmsg.h"
//之所以不將以下中斷定義為靠近0或255,是因?yàn)橐院罂赡軙?huì)增加最高優(yōu)先級或者最低優(yōu)先級
#define IE0 125 //外部中斷0
#define TF0 126 //定時(shí)器/計(jì)數(shù)器中斷0
#define IE1 127 //外部中斷1
#define TF1 128 //定時(shí)器/計(jì)數(shù)器1中斷
#define RITI 129 //串口中斷
#define RI 21 //串口中斷,數(shù)值沒有任何意義,自定義的,只是為了區(qū)別而已
#define TI 22
#define IRQNUM 5 //定義中斷源數(shù)目
#define Triggeredge 1
#define TriggerLow 0
void IPC_IEIP_HOOK(BYTE VarNum,int mode,BYTE data);
void IPC_IEIP_CLOCK_HOOK(BYTE VarNum,unsigned short Clocknum);
class InterruptController
{
public:
int init();
int CheakIRQ();//檢查中斷源寄存器TCON SCON看是否要執(zhí)行中斷,如果關(guān)中斷,但有中斷源責(zé)繼續(xù)檢查,直到中斷源標(biāo)志為0為止
int Setinterrupt(BYTE num);
int Setinterrupt(BYTE num, BYTE mode);//置中斷 num中斷號碼(應(yīng)該引用中斷類中的定義),mode中斷模式
int SetSRIRQflag(BYTE num,BYTE flag);
InterruptController();
int SetMem(instruction * pinstc);
virtual ~InterruptController();
memory * mem;
EVENT_POS CLOCKEVENTPOS;
kernelMsg * pKMsg;
//ClockHook IPC_IEIP_BackFun;
//unsigned short IPC_IEIP_BackFunNum;
private:
int SetIRQflag(BYTE num,BYTE flag);//設(shè)置中斷狀態(tài)標(biāo)志,對串口中斷無效
int CheakIRQTriggerMode(BYTE num,BYTE mode);//判斷中斷觸發(fā)模式是否正確,返回1表示觸發(fā)模式與軟件設(shè)置方式相同,否則無法發(fā)生中斷
int CheakSwitch(BYTE num);//返回1表示開中斷
//instruction * pinst;//指令類指針
//BYTE * CurrentIRQLevel;
//BYTE * CurrentCPULevel;
//BYTE *pIRQP;
int Cheaklevel(BYTE num);//檢查是否可以中斷,返回1表示判斷優(yōu)先級允許中斷
};
#endif // !defined(AFX_INTERRUPTCONTROLLER_H__2634D4EA_14D6_4C9A_A26C_5F31C1BF82FD__INCLUDED_)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -