词条 | Timer_ISR_Init() |
释义 | Timer_ISR_Init() altera公司nios II 处理器的HAL系统里 初始化中断 看下面的例子: #include <stdio.h> #include <sys/unistd.h> #include <io.h> #include <string.h> #include "system.h" #include "altera_avalon_pio_regs.h" #include "altera_avalon_timer_regs.h" #include "alt_types.h" #include "sys/alt_irq.h" #define TRUE 1 #define FALSE 0 /***********************************************/ static void Timer_ISR_Init(void); //初始化中断 /***********************************************/ int main(void) { printf("\ Exp4 - Keyboard & 7Seg LED!\"); //设置Timer中断 Timer_ISR_Init(); while(1) { usleep(10000); } return 0; } /***********************************************/ //Timer alt_u8 DispSegTab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40}; //0~F alt_u8 PrintDispTab[]={ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; //0~F alt_u8 KeyTab[]={ 0x4e,0x67,0x47,0x27, 0x6b,0x4b,0x2b,0x6d, 0x4d,0x2d,0x07,0x0b, 0x0d,0x0e,0x6e,0x2e }; alt_u8 KB_Scan_Tab[8] = {0x0e, 0xff, 0x0d, 0xff, 0x0b, 0xff, 0x07, 0xff}; alt_u8 DispBuff[8] = {16,16,16,16,16,16,16,16}; alt_u8 KeyValue; alt_u8 DisplayNum, PressedKeyNum = 0, KeyPressedFlag; static void Timer_Irq_Handler(void *context, alt_u32 id) { alt_u8 i,j; DisplayNum = (DisplayNum + 1) % 8; //输出显示扫描信号 IOWR_ALTERA_AVALON_PIO_DATA(SEG_SEL_BASE, DisplayNum); IOWR_ALTERA_AVALON_PIO_DATA(SEG_A_DP_BASE, DispSegTab[DispBuff[DisplayNum]]); //判断有无按键按下 IOWR_ALTERA_AVALON_PIO_DATA(KB_COL_BASE, KB_Scan_Tab[DisplayNum]); KeyValue = IORD_ALTERA_AVALON_PIO_DATA(KB_ROW_BASE) & 0x0f; if(KeyValue != 0x0f && !KeyPressedFlag) { KeyPressedFlag = TRUE; PressedKeyNum = DisplayNum; //转换键值 KeyValue |= DisplayNum << 4; for(i=0; i<16; i++) { if(KeyValue == KeyTab[i]) break; } if(i < 16) { for(j=0; j<7; j++) DispBuff[j] = DispBuff[j+1]; DispBuff[j] = i; printf("You pressed '%c' key!\", PrintDispTab[i]); } } else if(PressedKeyNum == DisplayNum && KeyValue == 0x0f && KeyPressedFlag) KeyPressedFlag = FALSE; //清除Timer中断标志寄存器 IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0); } /************************************************/ static void Timer_ISR_Init(void) //初始化中断 { //清除Timer中断标志寄存器 IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0); //注册Timer中断 alt_irq_register(TIMER_IRQ, NULL, Timer_Irq_Handler); //允许Timer中断 IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE, 0x01); } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。