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

📄 interrupt.c

📁 基于HMS7202的波形发生器源程序
💻 C
字号:
#include "reg7202.h"
#include "interrupt.h"
#include "hms7202lib.h"
#include "usb.h"



static int ExtInt1Happen=0;
void GPIOE(void);

void init_int(void)
{
   *(volatile unsigned int *)INTC_STAT=0x0;//clear interupt pending bit
   *(volatile unsigned int *)IntEnR = UNMASK_EXT1 | UNMASK_GPIOE;//ExtInt1,GPIOE enable
   pISR_EXT1 = (unsigned int)EXT1;
   pISR_GPIOE = (unsigned int)GPIOE;
}

void EXT1(void)
{   
    *(volatile unsigned int *)IntEnR &= ~UNMASK_EXT1;
    *(volatile unsigned int *)INTC_STAT=0x0;
    ExtInt1Happen=1;
    ser_printf("\n外部中断1已发生");
    ser_printf("\n按空格键从中断返回");
    while(ser0_getchar()-0x20);
    *(volatile unsigned int *)IntEnR |= UNMASK_EXT1;
}
void GPIOE(void)//旋钮服务程序
{
    *(volatile unsigned int *)IntEnR &= ~UNMASK_GPIOE;
    *(volatile unsigned int *)INTC_STAT=0x0;
    int direction;
    direction = *(volatile unsigned int *)PioEIS;
    direction &= 0x0c00000;
    if(direction == 0x0800000)
      {  /*do someting*/}
    else if(direction == 0x0400000)
      {/* do someting*/}
    else direction =0x0; 
    *(volatile unsigned int *)IntEnR |= UNMASK_GPIOE;
}
void interrupt_test(void)
{
    init_int();
    //设置PB11(外部中断1)为低电平有效触发模式
    *(volatile unsigned short *)PioBmuxctl =0x000;
    *(volatile unsigned short *)PioBDDR    |=0x800;//置位则设置为输入口
    *(volatile unsigned short *)PioBDR     |=0xfff;//数据寄存器
	*(volatile unsigned short *)PioBIM     |=0x800;//置位则设置相应引脚为中断源
	*(volatile unsigned short *)PioBIE     &=0x7ff;//设置为电平触发模式
	*(volatile unsigned short *)PioBIC     =0xfff;//清除中断挂起位
	*(volatile unsigned short *)PioBIP     |=0x800;//低电平有效
	
	//设置中断控制寄存器
	//#define INTC_BASE 0x80024000  //IER
	//#define INTC_ENAR (INTC_BASE) //IER
	//#define IntEnR    (INTC_BASE) //IER
	//#define INTC_STAT (INTC_BASE+0x4)  //ISR
	//#define IntStatusR	(INTC_BASE+0x4)//ISR
	//#define INTC_VEC  (INTC_BASE+0x8)  //IVR
	//#define INTC_VTAB (INTC_BASE+0x10) //SVR0
	//#define INTC_IDR  (INTC_BASE+0x90) //IDR

	
	ser_printf("\n\n\n请按INPUT键");
	while(!ExtInt1Happen);
	ser_printf("\n外部中断1测试完成\n");
	ser_printf("***********************");
}

int unmaskInterrupt(int level)
{
	if(level < 0 && level >= N_INTR)
		return FAIL;

	*(volatile int *)(IntEnR) =*(volatile int *)(IntEnR) | ( 1 << level) ;
	return OK;
}

int maskInterrupt(int level)
{
	if(level < 0 && level >= N_INTR)
		return FAIL;

	*(volatile int *)IntEnR = *(volatile int *)IntEnR & ( ~(1 << level) );

	return OK;
}

⌨️ 快捷键说明

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