火龙果软件ARM中断实现矩阵键盘.docx
- 文档编号:15698203
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:50
- 大小:24.45KB
火龙果软件ARM中断实现矩阵键盘.docx
《火龙果软件ARM中断实现矩阵键盘.docx》由会员分享,可在线阅读,更多相关《火龙果软件ARM中断实现矩阵键盘.docx(50页珍藏版)》请在冰点文库上搜索。
火龙果软件ARM中断实现矩阵键盘
#include
//终端服务函数入口地址
#define_ISR_STARTADDRESS0x33ffff00
#definepISR_EINT0(*(unsigned*)(_ISR_STARTADDRESS+0x20))//存放ISR函数的入口地址
#definepISR_EINT2(*(unsigned*)(_ISR_STARTADDRESS+0x28))
#definepISR_EINT8_23(*(unsigned*)(_ISR_STARTADDRESS+0x34))
//_PNDregistermustbeclrbywrite1
#defineClear1Pending(bit){SRCPND=bit;INTPND=INTPND;}//precentwritewrongdata
#defineFCLK202800000
#defineHCLK(202800000/2)
#definePCLK(202800000/4)
#defineUART00x0//UARTsymbol
#defineUART10x1
#defineUART20xBB
/////////////////////////////////////////////////////////////////////////////////////////////
voiduart_init(intnMainClk,intnBaud,intnChannel)
{
if(nMainClk==0)
nMainClk=PCLK;
switch(nChannel)
{
caseUART0:
UFCON0=0x0;//UARTchannel0FIFOcontrolregister,FIFOdisable
UMCON0=0x0;//UARTchaneel0MODEMcontrolregister,AFCdisable
ULCON0=0x3;//Linecontrolregister:
Normal,Noparity,1stop,8bits
UCON0=0x245;//Controlregister
UBRDIV0=((int)(nMainClk/16./nBaud+0.5)-1);//Baudratedivisiorregister0
break;
caseUART1:
UFCON1=0x0;//UARTchannel1FIFOcontrolregister,FIFOdisable
UMCON1=0x0;//UARTchaneel1MODEMcontrolregister,AFCdisable
ULCON1=0x3;
UCON1=0x245;
UBRDIV1=((int)(nMainClk/16./nBaud)-1);
break;
default:
break;
}
}
voiduart_sendbyte(intnData)
{
UTXH0=nData;
while(!
(UTRSTAT0&0x2));
}
voiduart_sendstring(char*pString)
{
while(*pString!
='\0')
uart_sendbyte(*pString++);
}
voiduart_printf(char*fmt)
{
uart_sendstring(fmt);
}
//////////////////////////////////////////////////////////////////////////////////////
/*进入中断处理函数,中断模式的寄存器先进入输入模式,所有列线输出置为1;
依次把列线拉低,检测输入端口,EINT的值,如果为低点平,说明该列被拉低;
这样行列坐标就确定了。
处理完成,返回中断模式,IO口重新设定为输出低电平,使能下降沿触发中断;*/
void__irqint0_int(void)
{
//10111216
//enterinput_mod,kscan0-kscan3output1
GPGDAT&=~(1<<11);//0
GPEDAT|=(1<<13);//1
GPGDAT|=((1<<2)|(1<<6));//output1
GPFCON&=~(0x3<<0);//EINT_modtoinput_mod
if(((GPFDAT>>0)&1)==0)uart_printf("key10\n");
GPEDAT|=(1<<11);//setpre_bit
GPGDAT&=~(1<<6);//clrexam_bit
if(((GPFDAT>>0)&1)==0)uart_printf("key11\n");
GPGDAT|=(1<<6);//setpre_bit
GPEDAT&=~(1<<13);//clrexam_bit
if(((GPFDAT>>0)&1)==0)uart_printf("key12\n");
GPEDAT|=(1<<13);//setpre_bit
GPGDAT&=~(1<<2);//clrexam_bit
if(((GPFDAT>>0)&1)==0)uart_printf("key16\n");
//entereint_mod,ouput_mod0
GPFCON|=(0x2<<0);//EINT0mod
GPEDAT&=~((1<<11)|(1<<13));//output0
GPGDAT&=~((1<<2)|(1<<6));//output0
//clr_pendbitisessentialafterE_int
Clear1Pending(0x1);
}
void__irqint2_int(void)
{
//78915
GPGDAT&=~(1<<11);//0
GPEDAT|=(1<<13);//1
GPGDAT|=((1<<2)|(1<<6));//output1
GPFCON&=~(0x3<<4);//input_mod
if(((GPFDAT>>2)&1)==0)uart_printf("key7");
GPEDAT|=(1<<11);
GPGDAT&=~(1<<6);
if(((GPFDAT>>2)&1)==0)uart_printf("key8\n");
GPGDAT|=(1<<6);
GPEDAT&=~(1<<13);
if(((GPFDAT>>2)&1)==0)uart_printf("key9\n");
GPEDAT|=(1<<13);
GPGDAT&=~(1<<2);
if(((GPFDAT>>2)&1)==0)uart_printf("key15\n");
GPFCON|=(0x2<<4);//EINT2mod
GPEDAT&=~((1<<11)|(1<<13));
GPGDAT&=~((1<<2)|(1<<6));
//uart_printf("EINT2interruptoccurred.\n");
Clear1Pending(0x1<<2);
}
void__irqint11_int(void)
{
//45614
if(((EINTPEND>>11)&1)==1)
{
GPGDAT&=~(1<<11);//0
GPEDAT|=(1<<13);//1
GPGDAT|=((1<<2)|(1<<6));//output1
GPGCON&=~(0x3<<6);//inputmod
if(((GPGDAT>>3)&1)==0)uart_printf("key4\n");
GPEDAT|=(1<<11);
GPGDAT&=~(1<<6);
if(((GPGDAT>>3)&1)==0)uart_printf("key5\n");
GPGDAT|=(1<<6);
GPEDAT&=~(1<<13);
if(((GPGDAT>>3)&1)==0)uart_printf("key6\n");
GPEDAT|=(1<<13);
GPGDAT&=~(1<<2);
if(((GPGDAT>>3)&1)==0)uart_printf("key14\n");
GPGCON|=(0x2<<6);//EINT11mod
GPEDAT&=~((1<<11)|(1<<13));
GPGDAT&=~((1<<2)|(1<<6));
EINTPEND=(1<<11);
//uart_printf("EINT11interruptoccurred.\n");
}
else
{//12313
GPGDAT&=~(1<<11);//0
GPEDAT|=(1<<13);//1
GPGDAT|=((1<<2)|(1<<6));//output1
GPGCON&=~(0x3<<22);//inputmod
if(((GPGDAT>>11)&1)==0)uart_printf("key1\n");
GPEDAT|=(1<<11);
GPGDAT&=~(1<<6);
if(((GPGDAT>>11)&1)==0)uart_printf("key2\n");
GPGDAT|=(1<<6);
GPEDAT&=~(1<<13);
if(((GPGDAT>>11)&1)==0)uart_printf("key3\n");
GPEDAT|=(1<<13);
GPGDAT&=~(1<<2);
if(((GPGDAT>>11)&1)==0)uart_printf("key13\n");
GPGCON|=(0x2<<22);//EINT19mod
GPEDAT&=~((1<<11)|(1<<13));
GPGDAT&=~((1<<2)|(1<<6));
EINTPEND=(1<<19);//sub_pend_clr
}
Clear1Pending(0x1<<5);//pnd_clr
}
/////////////////////////////////////////////////////////////////////////////
voidint_init(void)
{
SRCPND=SRCPND;//clearallinterrupt
INTPND=INTPND;//clearallinterrupt
EINTPEND=0xffffff;
GPFCON=(GPFCON&0)|(0x2<<0)|(0x2<<4);//EINT0EINT2
GPGCON=(GPGCON&0)|(0x2<<6)|(0x2<<22)|(0x1<<12)|(0x1<<4);//EINT11EINT19
GPGDAT=(GPGDAT&~((0x1<<2)|(0x1<<6)));//GPG6,GPG2output0
//中断处理函数的绑定
pISR_EINT0=(unsignedint)int0_int;//isrEINT0;
pISR_EINT2=(unsignedint)int2_int;
pISR_EINT8_23=(unsignedint)int11_int;//isrEINT11_19;
GPECON=(GPECON&0)|(0x1<<22)|(0x1<<26);//GPE11GPE13output0
GPEDAT=(GPEDAT&~((0x1<<11)|(0x1<<13)));
//write1tobitstoclr
EINTPEND=0xffffff;
EXTINT0=(EXTINT0&0)|(0x2<<0)|(0x2<<8);//EINT0=fallingedgetriggered
EXTINT1=(EXTINT1&0)|(0x2<<12);//EINT11=fallingedgetriggered
EXTINT2=(EXTINT2&0)|(0x2<<12);//EINT19=fallingedgetriggered
EINTMASK&=~((1<<11)|(1<<19));//enableeint0,eint2
INTMSK&=~((0x1)|(0x1<<5)|(0x1<<2));//enableeint11,eint19
}
voidint_test(void)
{
int_init();
uart_printf("\nExternalInterruptTestExample\n");
}
/**********************************************************************************************/
intmain()
{
WTCON=0;//closewatchdog
CLKDIVN=(1<<1)|1;//设置1:
2:
4
MPLLCON=(0xa1<<12)|(0x3<<4)|0x1;//Fin=12MHzFCLK=202.8MHz
//concerningsettingforuart
GPHCON=0x2afaaa;
GPHUP=0x7ff;
uart_init(PCLK,115200,UART0);
uart_printf("bootsuccess...");
//callinit_
int_test();
while
(1);
}
;/*****************************************************************************/
;/*S3C2410A.S:
StartupfileforSamsungS3C410A*/
;/*****************************************************************************/
;/*<<
;/*****************************************************************************/
;/*ThisfileispartoftheuVision/ARMdevelopmenttools.*/
;/*Copyright(c)2005-2006KeilSoftware.Allrightsreserved.*/
;/*Thissoftwaremayonlybeusedunderthetermsofavalid,current,*/
;/*enduserlicencefromKEILforacompatibleversionofKEILsoftware*/
;/*developmenttools.Nothingelsegivesyoutherighttousethissoftware.*/
;/*****************************************************************************/
;***StartupCode(executedafterReset)***
;StandarddefinitionsofModebitsandInterrupt(I&F)flagsinPSRs
Mode_USREQU0x10
Mode_FIQEQU0x11
Mode_IRQEQU0x12
Mode_SVCEQU0x13
Mode_ABTEQU0x17
Mode_UNDEQU0x1B
Mode_SYSEQU0x1F
I_BitEQU0x80;whenIbitisset,IRQisdisabled
F_BitEQU0x40;whenFbitisset,FIQisdisabled
;//
;//
8>
;//
8>
;//
8>
;//
8>
;//
8>
;//
8>
;//
UND_Stack_SizeEQU0x00000000
SVC_Stack_SizeEQU0x00000008
ABT_Stack_SizeEQU0x00000000
FIQ_Stack_SizeEQU0x00000000
IRQ_Stack_SizeEQU0x00000080
USR_Stack_SizeEQU0x00000400
Stack_SizeEQU(UND_Stack_Size+SVC_Stack_Size+ABT_Stack_Size+\
FIQ_Stack_Size+IRQ_Stack_Size+USR_Stack_Size)
AREASTACK,NOINIT,READWRITE,ALIGN=3
Stack_MemSPACEStack_Size
Stack_TopEQUStack_Mem+Stack_Size
;//
;//
;//
Heap_SizeEQU0x00000000
AREAHEAP,NOINIT,READWRITE,ALIGN=3
Heap_MemSPACEHeap_Size
;ClockManagementdefinitions
CLK_BASEEQU0x4C000000;ClockBaseAddress
LOCKTIME_OFSEQU0x00;LOCKTIMEOffset
MPLLCON_OFSEQU0x04;MPLLCONOffset
UPLLCON_OFSEQU0X08;UPLLCONOffset
CLKCON_OFSEQU0x0C;CLKCONOffset
CLKSLOW_OFSEQU0x10;CLKSLOWOffset
CLKDIVN_OFSEQU0X14;CLDKIVNOffset
CAMDIVN_OFSEQU0X18;CAMDIVNOffset
;//
;//
;//Mpll=(m*Fin)/(p*2^s)
;//
Maindivider<0x0-0xFF>
;//m=MDIV+8
;//
Pre-divider<0x0-0x3F>
;//p=PDIV+2
;//
PostDivider<0x0-0x03>
;//s=SDIV
;//
;//
;//Upll=(m*Fin)/(p*2^s),Uclkmustbe48MHZtoUSBdevice
;//
Maindivider<0x1-0xF8>
;//m=MDIV+8,ifFin=12MHZMDIVcouldbe0x38
;//
Pre-divider<0x1-0x3E>
;//p=PDIV+2,ifFin=12MHZPDIVcouldbe0x2
;//
PostDivider<0x0-0x03>
;//s=SDIV,ifFin=12MHZSDIVcouldbe0x2
;//
;//
;//
MPLLLockTimeCount<0x0-0xFFF>
;//
UPLLLockTimeCount<0x0-0xFFF>
;//
;//
;//PLLClock:
FCLK=FMPLL
;//SlowClock:
FCLK=Fin/(2*SLOW_VAL),SLOW_VAL>0
;//SlowClock:
FCLK=Fin,SLOW_VAL=0
;//
UCLKON
;//0:
UCLKON(UPLLisalsoturnedon)1:
UCLKOFF(UPLL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 火龙果 软件 ARM 中断 实现 矩阵 键盘