⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq.c

📁 altera epxa1的例子程序
💻 C
字号:
/**   Initializes the stripe interrupt controller for 5-bit priority mode.* 	Also handles IRQ and FIQ interrupts.**	Author: ORC**   Copyright (c) Altera Corporation 2000-2001.*   All rights reserved.*/#include <stdio.h>#include "stripe.h"#include "int_ctrl00.h"#include "uartcomm.h"#include "irq.h"#include "timer.h"// Initialize the stripe interrupt controller void irq_init(void){	// Set interrupt mode to 5-bit priority	*INT_MODE(EXC_INT_CTRL00_BASE) = INT_MODE_FIVE_PRI;		// Set priority for UART interrupt	*INT_PRIORITY_UA(EXC_INT_CTRL00_BASE) = UART_IRQ_PRI;		// Set priority for INT_PLD[0] interrupt			*INT_PRIORITY_P0(EXC_INT_CTRL00_BASE) = PLDINT0_FIQ_PRI;	// Enable UART and INT_PLD[0] interrupts	*INT_MS(EXC_INT_CTRL00_BASE) = INT_MS_UA_MSK | INT_MS_P0_MSK;}// Enable PLD interrupts by setting it MASK bitsvoid enable_pld_int(void){	// Enable PLD interrupts by writing to a PLD slave register to activate that signal	*INT_MASK(EXC_PLD_BLOCK0_BASE) = INT_MASK_P1_MSK | INT_MASK_P2_MSK | INT_MASK_P3_MSK |									 INT_MASK_P4_MSK | INT_MASK_P5_MSK | INT_MASK_P6_MSK |									 INT_MASK_P7_MSK | INT_MASK_P8_MSK | INT_MASK_P9_MSK;}// Disable PLD interrupts by clearing its MASK bitsvoid disable_pld_int(void){	// Disable PLD interrupts by writing to a PLD slave register to deactivate that signal	*INT_MASK(EXC_PLD_BLOCK0_BASE) = 0x0;}// Process pending IRQ interruptsvoid CIrqHandler(void){		volatile unsigned int irqID;		// Read the Interrupt Identity register for the highest priority interrupt that is active and enabled	irqID = *INT_ID(EXC_INT_CTRL00_BASE) & INT_ID_ID_MSK;	// Jump to interrupt handler that is currently pending	switch (irqID)	{				case UART_IRQ_PRI:			uart_irq_handler();			break;		case INT1_IRQ_PRI:			int1_irq_handler();			break;			case INT2_IRQ_PRI:			int2_irq_handler();			break;					case INT3_IRQ_PRI:			int3_irq_handler();			break;			case INT4_IRQ_PRI:			int4_irq_handler();			break;							case INT5_IRQ_PRI:			int5_irq_handler();				break;						case INT6_IRQ_PRI:			int6_irq_handler();				break;						case INT7_IRQ_PRI:			int7_irq_handler();				break;						case INT8_IRQ_PRI:			int8_irq_handler();			break;									case INT9_IRQ_PRI:			int9_irq_handler();							break;							}	return;}// Process pending FIQ interruptvoid CFiqHandler(void){		// Clear INT_PLD[0] interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P0_MSK;		// Store INT_PLD[0] occurrance to a buffer	if (count < LIMIT)		buffer[count++] = PLDINT0_FIQ_PRI;		return;}// Process pending INT1 interruptvoid int1_irq_handler(void){	// Clear INT1 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P1_MSK; 		// Store INT1 occurrance to a buffer	if (count < LIMIT)		buffer[count++] = INT1_IRQ_PRI;		return;}// Process pending INT2 interruptvoid int2_irq_handler(void){	// Clear INT2 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P2_MSK;		// Store INT2 occurrance to a buffer	if (count < LIMIT)		buffer[count++] = INT2_IRQ_PRI;		return;}// Process pending INT3 interruptvoid int3_irq_handler(void){	// Clear INT3 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P3_MSK;		// Store INT3 occurrance to a buffer 	if (count < LIMIT)		buffer[count++] = INT3_IRQ_PRI;		return;}// Process pending INT4 interruptvoid int4_irq_handler(void){	// Clear INT4 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P4_MSK;		// Store INT4 occurrance to a buffer 	if (count < LIMIT)		buffer[count++] = INT4_IRQ_PRI;		return;}// Process pending INT5 interruptvoid int5_irq_handler(void){	// Clear INT5 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P5_MSK; 	// Store INT5 occurrance to a buffer	if (count < LIMIT)		buffer[count++] = INT5_IRQ_PRI;		return;}// Process pending INT6 interruptvoid int6_irq_handler(void){	// Clear INT6 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P6_MSK; 	// Store INT6 occurrance to a buffer	if (count < LIMIT)		buffer[count++] = INT6_IRQ_PRI;	return;}// Process pending INT7 interruptvoid int7_irq_handler(void){	// Clear INT7 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P7_MSK; 		// Store INT7 occurrance to a buffer	if (count < LIMIT)		buffer[count++] = INT7_IRQ_PRI;		return;}// Process pending INT8 interruptvoid int8_irq_handler(void){	// Clear INT8 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P8_MSK; 		// Store INT8 occurrance to a buffer	if (count < LIMIT)		buffer[count++] = INT8_IRQ_PRI;		return;}// Process pending INT9 interruptvoid int9_irq_handler(void){	// Clear INT9 interrupt	*INT_CLR(EXC_PLD_BLOCK0_BASE) = INT_CLR_P9_MSK; 		// Store INT9 occurrance to a buffer	if (count < LIMIT)		buffer[count++] = INT9_IRQ_PRI;		return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -