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

📄 interrupt.h

📁 FS2410 开发板上启用 MMU 实现虚拟内存管理
💻 H
字号:
#ifndef __INTERRUPT_H__
#define __INTERRUPT_H__

/*
#define GPECON       (*(volatile unsigned long *)0x56000040)
#define GPEDAT       (*(volatile unsigned long *)0x56000044)
#define GPEUP        (*(volatile unsigned long *)0x56000048)
#define GPFCON       (*(volatile unsigned long *)0x56000050)
#define GPFDAT       (*(volatile unsigned long *)0x56000054)
#define GPFUP        (*(volatile unsigned long *)0x56000058)
#define GPGCON       (*(volatile unsigned long *)0x56000060)
#define GPGDAT       (*(volatile unsigned long *)0x56000064)
#define GPGUP        (*(volatile unsigned long *)0x56000068)

#define EINTMASK     (*(volatile unsigned long *)0x560000a4)
#define INTMSK       (*(volatile unsigned long *)0X4a000008)
#define PRIORITY     (*(volatile unsigned long *)0x4a00000c)
#define EINTPEND     (*(volatile unsigned long *)0x560000a8)
#define INTPND       (*(volatile unsigned long *)0X4a000010)
#define SRCPND       (*(volatile unsigned long *)0X4a000000)

#define TCFG0        (*(volatile unsigned long *)0x51000000)
#define TCFG1        (*(volatile unsigned long *)0x51000004)
#define TCON         (*(volatile unsigned long *)0x51000008)
#define TCNTB0       (*(volatile unsigned long *)0x5100000c)
*/

/* use addr.h instead of above definition list*/
#include "addr.h"

#define BIT_EINTMASK_11 (0x1 << 11)
#define BIT_EINTMASK_19 (0x1 << 19)

#define BIT_EINTPEND_11 (0x1 << 11)
#define BIT_EINTPEND_19 (0x1 << 19)

#define BIT_GPFCON8  (0x1 << 8)
#define BIT_GPFCON10 (0x1 << 10)
#define BIT_GPFCON12 (0x1 << 12)
#define BIT_GPFCON14 (0x1 << 14)

#define BIT_EINT0    (0x1 << 0)
#define BIT_EINT2    (0x1 << 2)
#define BIT_EINT8_23 (0x1 << 5)
#define BIT_TIMER0   (0x1 << 10)

/* Set keyboard related registers*/
#define INIT_KEYBOARD_REG() do {					\
    /* GPGCON6,2 set output*/						\
    GPGCON = (GPGCON & (~((3<<12)|(3<<4)))) | ((1<<12)|(1<<4)) ;	\
    /* GPGCON6:KSCAN; GPGCON2:KSCAN3; GPGDAT6,2 output*/		\
    GPGDAT = GPGDAT & (~((1<<6)|(1<<2)));				\
    /* GPECON13,11 set output*/						\
    GPECON = (GPECON & (~((3<<26)|(3<<22)))) | ((1<<26)|(1<<22));	\
    /* PEDAT13,11 output 0*/						\
    GPEDAT = GPEDAT & (~((1<<13)|(1<<11)));				\
    /* GPGCON11,3 set EINT*/						\
    GPGCON = (GPGCON & (~((3<<22)|(3<<6)))) | ((2<<22)|(2<<6)) ;	\
    /* GPFDAT2,0 set EINT*/						\
    GPFCON = (GPFCON & (~((3<<4)|(3<<0)))) | ((2<<4)|(2<<0)) ;		\
    /* Enable up resistance*/						\
    GPFUP |= (1<<0) | (1<<2);						\
    GPGUP |= (1<<3) | (1<<11);						\
  } while (0)

/* Set interrupt pending registers*/
#define CLEAR_PENDING_REG(bit) do {		\
    SRCPND = (bit);				\
    INTPND = (bit);				\
} while (0)

/* initialize Timer0*/
#define INIT_TIMER0(sec) do {					\
    /* Prescaler0 = 119*/					\
    TCFG0 = 119;						\
    /*Select MUX input for PWM Timer0:divider=16*/		\
    TCFG1 = 0x03;						\
    /* 0.5sec touch off a interrupt*/				\
    TCNTB0 = (int)6250*(sec);					\
    /* Timer 0 manual update*/					\
    TCON |= (1<<1);						\
    /* Timer 0 auto reload on Timer 0*/				\
    /* output inverter off clear "Timer 0 manual update"*/	\
    TCON = 0x09;						\
}while (0)

#define ENABLE_INTMSK_REG(bit) INTMSK &= ~(bit)
#define ENABLE_EINTMASK_REG(bit) EINTMASK &= ~(bit)
#define CLEAR_EINTPEND_REG(bit) EINTPEND |= (bit)
#define SET_LED_REG_MODE(bit) GPFCON = (bit)

void init_irq(void);
int key_scan(void);
void timer0_handler(void);
void key_handler(void);

#endif

⌨️ 快捷键说明

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