S3C6410中断控制器
来源:互联网 发布:还有什么推广软件 编辑:程序博客网 时间:2024/05/21 17:19
S3C6410中断控制器由2个VIC、2个TZIC组成,支持64个中断。
中断初始化调用:
(1)每个VIC 支持 32位的矢量 IRP 中断
(2)支持固定硬件中断优先级和可编程中断优先级
(3)支持硬件中断优先级屏蔽和可编程中断优先级屏蔽
(4)产生 IRQ 和 FIQ 中断
(5)产生软件中断
(6)raw中断状态
(7)中断请求状态
(8)支持限制访问的特权模式
// VIC0#definerVIC0IRQSTATUS(VIC0_BASE + 0x00)#definerVIC0FIQSTATUS(VIC0_BASE + 0x04)#definerVIC0RAWINTR(VIC0_BASE + 0x08)#definerVIC0INTSELECT(VIC0_BASE + 0x0c)#definerVIC0INTENABLE(VIC0_BASE + 0x10)#definerVIC0INTENCLEAR(VIC0_BASE + 0x14)#definerVIC0SOFTINT(VIC0_BASE + 0x18)#definerVIC0SOFTINTCLEAR(VIC0_BASE + 0x1c)#definerVIC0PROTECTION(VIC0_BASE + 0x20)#definerVIC0SWPRIORITYMASK(VIC0_BASE + 0x24)#definerVIC0PRIORITYDAISY(VIC0_BASE + 0x28)#define rVIC0VECTADDR(VIC0_BASE + 0x100)#define rVIC0VECPRIORITY(VIC0_BASE + 0x200)#define rVIC0ADDR(VIC0_BASE + 0xf00)#define rVIC0PERID0(VIC0_BASE + 0xfe0)#define rVIC0PERID1(VIC0_BASE + 0xfe4)#define rVIC0PERID2(VIC0_BASE + 0xfe8)#define rVIC0PERID3(VIC0_BASE + 0xfec)#define rVIC0PCELLID0(VIC0_BASE + 0xff0)#define rVIC0PCELLID1(VIC0_BASE + 0xff4)#define rVIC0PCELLID2(VIC0_BASE + 0xff8)#define rVIC0PCELLID3(VIC0_BASE + 0xffc)// VIC1#definerVIC1IRQSTATUS(VIC1_BASE + 0x00)#definerVIC1FIQSTATUS(VIC1_BASE + 0x04)#definerVIC1RAWINTR(VIC1_BASE + 0x08)#definerVIC1INTSELECT(VIC1_BASE + 0x0c)#definerVIC1INTENABLE(VIC1_BASE + 0x10)#definerVIC1INTENCLEAR(VIC1_BASE + 0x14)#definerVIC1SOFTINT(VIC1_BASE + 0x18)#definerVIC1SOFTINTCLEAR(VIC1_BASE + 0x1c)#definerVIC1PROTECTION(VIC1_BASE + 0x20)#definerVIC1SWPRIORITYMASK(VIC1_BASE + 0x24)#definerVIC1PRIORITYDAISY(VIC1_BASE + 0x28)#define rVIC1VECTADDR(VIC1_BASE + 0x100)#define rVIC1VECPRIORITY(VIC1_BASE + 0x200)#define rVIC1ADDR(VIC1_BASE + 0xf00)#define rVIC1PERID0(VIC1_BASE + 0xfe0)#define rVIC1PERID1(VIC1_BASE + 0xfe4)#define rVIC1PERID2(VIC1_BASE + 0xfe8)#define rVIC1PERID3(VIC1_BASE + 0xfec)#define rVIC1PCELLID0(VIC1_BASE + 0xff0)#define rVIC1PCELLID1(VIC1_BASE + 0xff4)#define rVIC1PCELLID2(VIC1_BASE + 0xff8)#define rVIC1PCELLID3(VIC1_BASE + 0xffc)//////////// Function Name : INTC_Init// Function Description : This function initializes interrupt controller// Input : NONE // Output : NONE// Version : void INTC_Init(void){#if (VIC_MODE==0)u32 i;for(i=0;i<32;i++)Outp32(rVIC0VECTADDR+4*i, i);for(i=0;i<32;i++)Outp32(rVIC1VECTADDR+4*i, i+32);#endifOutp32(rVIC0INTENCLEAR, 0xffffffff); //清中断Outp32(rVIC1INTENCLEAR, 0xffffffff);Outp32(rVIC0INTSELECT, 0x0); //设置为IRQ中断Outp32(rVIC1INTSELECT, 0x0);INTC_ClearVectAddr(); //清除当前中断服务程序地址寄存器的内容return;}//////////// Function Name : INTC_Enable// Function Description : This function sets the corresponding bit of interrupt enable register// Input : intNum, interrupt number to be enabled// Output : NONE// Version : 打开中断访问的是rVIC0INTENABLE寄存器void INTC_Enable(u32 intNum){u32 temp;if(intNum<32){temp = Inp32(rVIC0INTENABLE);temp |= (1<<intNum);Outp32(rVIC0INTENABLE, temp);}else{temp = Inp32(rVIC1INTENABLE);temp |= (1<<(intNum-32));Outp32(rVIC1INTENABLE, temp);}return;}//////////// Function Name : INTC_Disable// Function Description : This function sets the corresponding bit of interrupt enable clear register// Input : intNum, interrupt number to be disabled// Output : NONE// Version : 关闭中断访问rVIC0INTENCLEAR寄存器void INTC_Disable(u32 intNum){u32 temp;if(intNum<32){temp = Inp32(rVIC0INTENCLEAR);temp |= (1<<intNum);Outp32(rVIC0INTENCLEAR, temp);}else{temp = Inp32(rVIC1INTENCLEAR);temp |= (1<<(intNum-32));Outp32(rVIC1INTENCLEAR, temp);}return;}//////////// Function Name : INTC_ReadIntSrc// Function Description : This function reads the interrupt source number// Input : NONE// Output : interrupt source number// Version : u32 INTC_ReadIntSrc(void) //读取当前中断的中断服务程序的址{u32 temp;temp = Inp32(rVIC0ADDR);return temp;}//////////// Function Name : INTC_SetHandler// Function Description : This function registers ISR to the corresponding number// Input :intNum, interrupt number to register//handler, interrupt handler// Output : NONE// Version : extern void (*IntHandlerTable[INT_LIMIT])(void) /*__irq*/;void INTC_SetHandler(u32 intNum, void (*handler)() /*__irq*/) 设置一个中断的中断服务程序地址{IntHandlerTable[intNum] = handler;return;}//////////// Function Name : INTC_SetVectAddr// Function Description : This function writes ISR to the corresponding vector address register// Input :intNum, interrupt number to register//handler, interrupt handler// Output : NONE// Version : void INTC_SetVectAddr(u32 intNum, void (*handler)(void) /*__irq*/) 设置一个中断的中断服务程序地址{#if (VIC_MODE == 1)if(intNum<32)//VIC0{Outp32(rVIC0VECTADDR+4*intNum, (unsigned)handler);}else//VIC1{Outp32(rVIC1VECTADDR+4*(intNum-32), (unsigned)handler);}#elseINTC_SetHandler(intNum, handler);#endifreturn;}//////////// Function Name : INTC_ClearVectAddr// Function Description : This function clears the vector address register// Input : NONE// Output : NONE// Version : void INTC_ClearVectAddr(void) //清除当前中断服务程序地址寄存器的内容{Outp32(rVIC0ADDR, 0);Outp32(rVIC1ADDR, 0);return;}//////////// Function Name : INTC_SetSoftInt// Function Description : This function sets the Software interrupt register// Input : intNum, interrupt number to be enabled// Output : NONE// Version : void INTC_SetSoftInt(u32 intNum) //软件设置一个中断{u32 temp;if(intNum<32){temp = Inp32(rVIC0SOFTINT);temp |= (1<<intNum);Outp32(rVIC0SOFTINT, temp);}else{temp = Inp32(rVIC1SOFTINT);temp |= (1<<(intNum-32));Outp32(rVIC1SOFTINT, temp);}return;}//////////// Function Name : INTC_ClearSoftInt// Function Description : This function sets the Software interrupt register// Input : intNum, interrupt number to be enabled// Output : NONE// Version : void INTC_ClearSoftInt(u32 intNum){u32 temp;if(intNum<32){temp = (1<<intNum);Outp32(rVIC0SOFTINTCLEAR, temp);}else{temp = (1<<(intNum-32));Outp32(rVIC1SOFTINTCLEAR, temp);}return;}//////////// File Name : INTC_GetVicIrqStatus// File Description : This function gets the IRQ Status register value// Input : uController - VIC controller number// Output : VICIRQSTATUS register value// Version : u32 INTC_GetVicIrqStatus(u32 uController) //获取IRQ中断的状态{if(uController == 0)returnInp32(rVIC0IRQSTATUS);else if(uController == 1)return Inp32(rVIC1IRQSTATUS);return 0;}
中断初始化调用:
#if(VIC_MODE == 0)extern void IsrIRQ(void);#endifvoid SYSTEM_InitException( void){pExceptionUNDEF=(u32)ExceptionUNDEF;pExceptionSWI =(u32)ExceptionSWI;pExceptionPABORT=(u32)ExceptionPABORT;pExceptionDABORT=(u32)ExceptionDABORT;#if (VIC_MODE == 0)pExceptionIRQ=(u32)IsrIRQ;#elsepExceptionIRQ=(u32)ExceptionIRQ;#endifpExceptionFIQ=(u32)ExceptionFIQ;INTC_Init();#if (VIC_MODE == 0)SYSTEM_DisableVIC();#elseSYSTEM_EnableVIC();#endifSYSTEM_EnableIRQ();SYSTEM_EnableFIQ();}
- S3C6410中断控制器
- ARM11---中断---向量中断控制器(VIC)---结合s3c6410
- ARM11---中断---向量中断控制器(VIC)---结合s3c6410
- ARM11---中断---向量中断控制器(VIC)---结合s3c6410
- S3C6410 中断
- s3c6410 中断
- S3C6410的DRAM控制器
- S3C6410的DRAM控制器
- 转:S3C6410系统控制器
- S3C6410的SPI控制器
- S3C6410的SPI控制器
- S3C6410的DRAM控制器
- S3C6410的DRAM控制器
- S3C6410的SPI控制器
- S3C6410的SPI控制器
- S3C6410的DRAM控制器
- S3C6410的DRAM控制器
- S3C6410中断以及外部中断
- 数据挖掘微博的商业机会
- Android之插入通话记录,短信箱插入短信,号码薄插入联系人
- windows“运行”中的快捷命令
- 点击增加class属性
- Struts2 <s:radio>的使用及其设置默认值
- S3C6410中断控制器
- android 大图片拖拽缩放
- Windows系统“无法打开”故障解决方法
- android-ProgressBar加文字
- android 9PNG图片制作
- ARCGIS10 官方中文版迅雷下载
- excel库的使用问题
- poj 3468
- Oracle 备份恢复