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

📄 fft-eint.c

📁 ads下2410的测试程序
💻 C
字号:
/****************************************************************************
【文  件  名  称】Touch_Screen.c
【功  能  描  述】FFT-2410教学平台实验程序
【程  序  版  本】3.0
【创建及创建日期】傅立业公司/2005-XX-XX
【修改及修改日期】2005-5-23
****************************************************************************/
//头文件定义
#include "def.h"
#include "2410addr.h"
#include "mmu.h"
#include "2410slib.h" 
#include "config.h"
#include "board.h"
#include "Touch_Screen.h"
#include "LCD_LTS350Q1_PE1.h"
//#include "option.h"

#define ADCPRS 39
#define	NULL1	(void *)0

#define GET_XY_TIMES 5	
volatile U16 TP_BUF[GET_XY_TIMES][2];

static volatile U32 PenDown = 0;

//*************************************************************
#define UD_SEN			(1 << 8)
#define DOWN_INT		(UD_SEN*0)
#define UP_INT			(UD_SEN*1)
#define YM_SEN			(1 << 7)
#define YM_HIZ			(YM_SEN*0)
#define YM_GND			(YM_SEN*1)
#define YP_SEN			(1 << 6)
#define YP_EXTVLT		(YP_SEN*0)
#define YP_AIN			(YP_SEN*1)
#define XM_SEN			(1 << 5)
#define XM_HIZ			(XM_SEN*0)
#define XM_GND			(XM_SEN*1)
#define XP_SEN			(1 << 4)
#define XP_EXTVLT		(XP_SEN*0)
#define XP_AIN			(XP_SEN*1)
#define XP_PULL_UP		(1 << 3)
#define XP_PULL_UP_EN	(XP_PULL_UP*0)
#define XP_PULL_UP_DIS	(XP_PULL_UP*1)
#define AUTO_PST		(1 << 2)
#define CONVERT_MAN		(AUTO_PST*0)
#define CONVERT_AUTO	(AUTO_PST*1)
#define XP_PST(x)		(x << 0)
#define	WAIT_INT_MODE	3

#define wait_down_int()	do { rADCTSC = DOWN_INT | XP_PULL_UP_EN | \
				XP_AIN | XM_HIZ | YP_AIN | YM_GND | \
				XP_PST(WAIT_INT_MODE); } while(0)
#define wait_up_int()	do { rADCTSC = UP_INT | XP_PULL_UP_EN | XP_AIN | XM_HIZ | \
				YP_AIN | YM_GND | XP_PST(WAIT_INT_MODE); } while(0)

//extern void Uart_Printf(char *fmt,...);

static void __irq Eint0Int(void)
{
    printf("EINT0 interrupt is occurred.\n");
    ClearPending(BIT_EINT0);

}

static void __irq Eint2Int(void)
{
    printf("EINT2 interrupt is occurred.\n");

    ClearPending(BIT_EINT2);
}

static void __irq Eint11_19(void)
{
//	printf("EINT19 interrupt is occurred.\n");

    if(rEINTPEND==(1<<11))
    {
	printf("EINT11 interrupt is occurred.\n");
	rEINTPEND=(1<<11);
    }
    if((rEINTPEND==(1<<19)))
    {
	printf("EINT19 interrupt is occurred.\n");
	rEINTPEND=(1<<19);
    }
    else
    {
	printf("EINT19 interrupt is occurred.\n");
	printf("rEINTPEND=0x%x\n",rEINTPEND);
	rEINTPEND=(1<<19)|(1<<11);
    }

    ClearPending(BIT_EINT8_23);
}
/*****************************************************************************/
void fft_touchtest(void)
{
// SMDK2410 EINT S/W
// EINT0/2/11/19
{
    int i;
    int extintMode;
    int c;
 
    printf("\n\n FFT-S3C2410 EINT0 AND EINT19 TEST\n\n");

    printf("[External Interrupt Test through key INT0/INT19]\n");

    printf("1.F-EDGE  2.R-EDGE  3.B-EDGE\n");
    printf("Select the external interrupt type.\n");

    while(1)    
        	if(SerialRxReady())
    	{
    		U8 c = getkey();
    			break;
//    		if(c==ENTER_KEY)
//    			Glib_ClearScr(0xf81f);
    	}

    extintMode=c;

    //extintMode='3';
    //设置为中断模式
    rGPFCON = (rGPFCON & 0xffcc)|(1<<5)|(1<<1);		    //PF0/2  = EINT0/EINT2
    rGPGCON = (rGPGCON & 0xff3fff3f)|(1<<23)|(1<<7);	//PG3/11 = EINT11/EINT19
     
   switch(extintMode)
    {
//    case '1':
//    	rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x0<<8 | 0x0<<0; //EINT0/2=low level triggered
//	rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x0<<12; //EINT11=low level triggered
//	rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x0<<12; //EINT19=low level triggered
//    	break;
//    case '2':
//    	rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x1<<8 | 0x1<<0; //EINT0/2=high level triggered
//	rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x1<<12; //EINT11=high level triggered
//	rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x1<<12; //EINT19=high level triggered
//    	break;
    case '1':
    	rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x2<<8 | 0x2<<0; //EINT0/2=falling edge triggered
	rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x2<<12; //EINT11=falling edge triggered
	rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x2<<12; //EINT19=falling edge triggered
    	break;
    case '2':
    	rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x4<<8 | 0x4<<0; //EINT0/2=rising edge triggered
	rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x4<<12; //EINT11=rising edge triggered
	rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x4<<12; //EINT19=rising edge triggered
     	break;
    case '3':
    	rEXTINT0 = (rEXTINT0 & ~((7<<8)  | (0x7<<0))) | 0x6<<8 | 0x6<<0; //EINT0/2=both edge triggered
	rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x6<<12; //EINT11=both edge triggered
	rEXTINT2 = (rEXTINT2 & ~(7<<12)) | 0x6<<12; //EINT19=both edge triggered
    	break;
    default:
    	break;
    }

    printf("Press the EINT0/EINT019 buttons ,ESC to exit, other key to continue test INTR.\n");

    pISR_EINT0=(U32)Eint0Int;                 //中断服务程序
    pISR_EINT2=(U32)Eint2Int;
    pISR_EINT8_23=(U32)Eint11_19;

    rEINTPEND = 0xffffff;
    rSRCPND = BIT_EINT0|BIT_EINT2|BIT_EINT8_23; //to clear the previous pending states
    rINTPND = BIT_EINT0|BIT_EINT2|BIT_EINT8_23;
    
    rEINTMASK=~( (1<<11)|(1<<19) );
    rINTMSK=~(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);
    
    while(1)    
        	if(SerialRxReady())
    	{
    		U8 c = getkey();
    		if(c==ESC_KEY)
    			break;
//    		if(c==ENTER_KEY)
//    			Glib_ClearScr(0xf81f);
    	}
    


}
	

}

⌨️ 快捷键说明

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