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

📄 ambakbd.c

📁 个人调试通过的vxworks 开发bsp
💻 C
📖 第 1 页 / 共 2 页
字号:
            kbdLedSet ();            break;        default:            status = tyIoctl (&pKbdDv->tyDev, request, arg);            break;        }    return (status);    }/********************************************************************************* kbdWriteData - write data to device** This routine the write function from the I/O subsystem.** RETURNS: */LOCAL int kbdWriteData     (    KBD_DEVICE *    pKbdDv    /* device to control */    )    {        return (0);    }/********************************************************************************* kbdHwInit - initialize the Keyboard* * This routine is called to do the keyboard initialization from an external* routine** RETURNS: N/A** NOMANUAL*/LOCAL void kbdHwInit (void)    {    UCHAR   stat;	    pKbdDevice->kbdFlags = NUM; /* Numeric mode on */    stat = (UCHAR) (pKbdDevice->kbdFlags & 0x07);	*AT91C_PIOB_PER = KBD_CLK | KBD_DATA;	*AT91C_PIOB_PPUDR = KBD_CLK | KBD_DATA;/*	100K Pullup reg disable */	intDisable(AT91C_INT_LVL_PIOB);	*AT91C_PIOB_IDR = 0xffffffff;	/*intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC (AT91C_INT_LVL_PIOB),clkFall ,0); 	*AT91C_AIC_SMR3 =  AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED + 2;*/	#if 1	at91cKBWrite(0xED);/*Set/Reset Status Indicators	*/	taskDelay(10);	at91cKBWrite(0x00);/*Turn off all LEDs */	taskDelay(10);	at91cKBWrite(0xF2);/*Read ID	*/	taskDelay(10);	at91cKBWrite(0xED);/*Set/Reset Status Indicators	*/	taskDelay(10);	at91cKBWrite(0x2);/*Turn on Num Lock LED	0x02*/	taskDelay(10);		at91cKBWrite(0x2);/*Turn on Num Lock LED	0x02*/	taskDelay(20);	at91cKBWrite(0xf4);/*Enable	*/	taskDelay(30);	printf("finish \n ");#endif#if 0	at91cKBWrite(0xED);/*Set/Reset Status Indicators	*/	taskDelay(30);	at91cKBWrite(0x00);/*Turn off all LEDs */	taskDelay(30);	at91cKBWrite(0xF2);/*Read ID	*/	taskDelay(30);	at91cKBWrite(0xED);/*Set/Reset Status Indicators	*/	printf("turn on \n");	taskDelay(30);	at91cKBWrite(stat);/*Turn on Num Lock LED	0x02*/	taskDelay(30);	at91cKBWrite(0xf4);/*Enable	*/	taskDelay(60);	printf("finish \n ");#endif	    if (oldLedStat == stat)        return;    oldLedStat = stat;    } /********************************************************************************* kbdIntr - interrupt level processing** This routine handles the keyboard interrupts** RETURNS: N/A** NOMANUAL*/void at91ckbdIntr (void)    {	UINT16 data;  	int oldMask;#if 0logMsg("kbd int\n",1,2,3,4,5,6);#endif	oldMask = intLock();		#if 1		if((KBD_CLK_READ == 0)&&(kbdLab != 0))	/*fall-readbyte */		{			data = KBD_DATA_READ;			switch(kbdLab)			{				case 1:			/*ack*/				if(data==0)				{					kbdLab = 2;				}				break;				case 2:			/*after ack*/				switch(kbdBitCnt)				{					case 0:					kbdParity = 0;		/*for odd parity*/					scanCode = 0;					if(data == 0)		/*start bit*/						kbdBitCnt++;					else					{						intUnlock(oldMask);						return;					}					break;					case 1:					case 2:					case 3:					case 4:					case 5:					case 6:					case 7:					case 8:/*in_char*/							kbdBitCnt++;					scanCode |= data<< (kbdBitCnt -2);					kbdParity += data;					break;					case 9:					kbdBitCnt++;					kbdParity += data;					if((kbdParity & 1) == 0)	/*parity bit wrong*/					{						kbdBitCnt=0; 					}					break;					case 10:		/*stop bit*/					kbdBitCnt =0;					if(data!= 0)					{						logMsg("K-%02x\n",scanCode,2,3,4,5,6);								/* keyboard acknowledge to any valid input, so just return */					        if (scanCode != 0xfa) 				              {						        tyIRd (&(pKbdDevice->tyDev), scanCode);					        }					}					break;					default:					kbdBitCnt=0;					break;				}				break;				default:				break;			}		}#if 0		else if(kbdLab==0)		{			kbdBitCnt2++;			if(kbdBitCnt2<=8)	/*scanCode 1-8*/			{					KBD_DATA_WRITE(kbdByte2&1);					kbdParity2 += kbdByte2;					kbdByte2 = kbdByte2 >>1;			}						else if(kbdBitCnt2 == 9)/*parity	*/			{					KBD_DATA_WRITE(kbdParity2 & 1);			}			else if(kbdBitCnt2 == 10)/*stop */			{					KBD_DATA_WRITE(1);									kbdLab = 1;					kbdBitCnt2 = 0;					KBD_DATA_INPUT;/*data release ,data as input*/			}		}#endif		#endif	intUnlock(oldMask);    }/******************************************************************************** kbdLedSet - Keybord LED Set** This routine Keyboad LED control on kbdConDv.kbdFlags numeric, caps and* stps** RETURNS: N/A*/LOCAL void kbdLedSet (void)    {    UCHAR   stat = 0;    /* bits 0 1 2 for scroll numlock & capslock */    stat = (UCHAR) (pKbdDevice->kbdFlags & 0x07);    if (oldLedStat == stat)        return;    oldLedStat = stat;    	at91cKBWrite(0xED);/*Set/Reset Status Indicators	*/	taskDelay(10);	at91cKBWrite(stat);		    }LOCAL void kbdWaitForCLK(int value)/*0,1		wait about 40us	*/{  int i=0;  while ((KBD_CLK_READ != value) && (i++<2000));/* Wait for clk */}LOCAL void kbdWriteBit(UCHAR b)	/*rise edge*/{	kbdWaitForCLK(0);	KBD_DATA_WRITE(b);	kbdWaitForCLK(1);}/******************************************************************************** ambaKBWrite - write data to the keyboard.** Write data to the keyboard.** RETURNS: OK or ERROR if timed out*/STATUS at91cKBWrite    (    UCHAR value    )    {  int i=0;  UCHAR p=1;  KBD_INT_DISABLE;/*此处最好添加相应是否有数据收程序*/	KBD_CLK_OUTPUT;		/*clk,data as output*/	KBD_DATA_OUTPUT; 	KBD_CLK_WRITE(0);/*clk=0*/	KBD_DATA_WRITE(0);/*start bit=0*/	taskDelay(1);/*wait > 100us*/	 KBD_CLK_INPUT;	  for(i=0;i<8;i++)	  {	  	kbdWriteBit(value & 1);	/*bit write*/		p = p + value;				value = value >> 1;	  }	  kbdWriteBit(p & 1);/*check*/	  kbdWriteBit(1);		/*stop bit =1*/	  KBD_DATA_INPUT;/*data release ,data as input*/	   kbdLab = 2;		/*表示直接接收数据*/	   kbdBitCnt = 0;    return OK;    }/******************************************************************************** kbdWdog - KBD driver watchdog handler.** KBD driver watchdog handler.** RETURNS: N/A*/LOCAL void kbdWdog    (    void    )    {    }/********************************************************************************* kbdDelay - pause* * This routine is called to introduce some delay** RETURNS: N/A** NOMANUAL*/LOCAL void kbdDelay(void)    {        taskDelay (sysClkRateGet () >> 3);    }

⌨️ 快捷键说明

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