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

📄 acan.c

📁 在ARM平台上开发的LCD驱动程序,具有很强的通用性.
💻 C
字号:
#include "garfield.h"

U32 end_flg = 0;			//end of "0D0A"


/* global point */
char txt[100];
char *pp = NULL;
              
              
int printflag = 0;              
int time = 0;
int printneeded = 0;

int main()
{

   	U32 sysclk      = 70000000;  // 20MHz, 30MHz, 40MHz, 50MHz, 60MHz
  	U32 baudrate    = 9600;     // 57600, 56000, 38400, 19200, 9600
   	U32 databit     = 8;         // 6, 7, 8 
   	U32 trigerlevel = 8;         // 4, 8, 14
   
 
   	int recie = 1;               //0 disable, 1 enble
   	int thrie = 0;	            //0 disable, 1 enble
  
   	/* system initialized */
   	system_init();
   
  	/* open uart0 interrrupt mask */
   	unmask_irq(INT_UART0);		//根据参数中断号判断出uart0屏蔽打开
      
   	init_uart0(sysclk, baudrate, databit, trigerlevel);//初始化uart0
      
   	uart0_int_en(recie, thrie);
   
   	init_scan();
  	pp = txt;



	while(1)
	{
		for(time = 0x10000;time>0;time--);
		
		if(printneeded == 1)
		{
			printf("This laser tap code is: ");
			pp = txt;
			while((*pp++) != '\0')
				printf("%c",*pp);
			printf("\n");
			
			printneeded = 0;
		}		

	}

	return TRUE;
}            
              
              
/******************************************************************************
扫描枪初始化处函数
******************************************************************************/                          
int init_scan(void)					
{	
	int a;

	*(RP)UART_FCR(UART0_BASE) |= 0x02;	//clear BRB fifo
	a = *(RP)UART_RBR(UART0_BASE);		//clear timeout interrupt
	
	*(RP)UART_IER(UART0_BASE) = 0x01;	//enable receive interrupt	
															//disable transmiter interrupt
/*	
	memset(uartdev[devid].RecBuf, '\0', BUF_SIZE);
	
	uartdev[devid].wrcount = 0;
	 
	uartdev[devid].pReadRecBuf = uartdev[devid].RecBuf;
	uartdev[devid].pWriteRecBuf = uartdev[devid].RecBuf;

	uartdev[devid].irq_uart_flag = 0;
*/    
    
    printf("scan now !\n");
      
	unmask_irq(INT_UART0);
	     
	return TRUE;
}


/******************************************************************************
扫描枪中断处理函数
******************************************************************************/
int serv_scan(void)
{
	int flag; 
		
	flag = (*(RP)UART_IIR(UART0_BASE) & 0x0E) >> 1;
	
	switch(flag)
	{         
		case REC_FUL:					//receive fifo full interrupt
			scan_rec_ful_handler();
			break;
		   
		case REC_TMO:					//receive fifo time out interrrupt
			scan_rec_tmo_handler();
			break;
		
		default:
			break;
	}	
	
	return TRUE;
	
}

/******************************************************************************
扫描枪triglevel中断处理函数
******************************************************************************/
int scan_rec_ful_handler(void)			//trigerlever interrupt
{

	int i;
	char cc;
		  	
	for(i = 0; i < 8; i++)
	{
		//*(uartdev[devid].pWriteRecBuf) = *(RP8)UART_RBR(uartdev[devid].usetbl.UART_BASE);	
		cc =  *(RP8)UART_RBR(UART0_BASE);	
		if(cc != NULL)
		{
			printf("cc is %c\n",cc);
			*pp++ = cc;
		}
		/* scanner express the end of data as the suffix "0D 0A" */ 
		//if(((*(uartdev[devid].pWriteRecBuf)) == 0x0A) && (end_flg == 1))
		//if((cc == 0x0A) && (end_flg == 1))
		if((cc == NULL) && (end_flg == 1))
		{
			//uartdev[devid].pWriteRecBuf = uartdev[devid].RecBuf;
			//set_flg(uartdev[devid].usetbl.RBUF_EVENT, uartdev[devid].usetbl.UART_REC);
			//uartdev[devid].irq_uart_flag = 1;			//mask uart_irq
			end_flg = 0;
			printneeded = 1;
			return TRUE;
		}
		//if((*(uartdev[devid].pWriteRecBuf)) == 0x0D)
		//if(cc == 0x0D)
		if(cc == NULL)
			end_flg = 1;
		else end_flg = 0;
		
		//uartdev[devid].wrcount++;
		//uartdev[devid].pWriteRecBuf++;	
		
		
		
	}
	
	printf("end of scan_rec_ful_handler\n ");	
	return TRUE;     
}

/******************************************************************************
扫描枪timeout中断处理函数
******************************************************************************/
int scan_rec_tmo_handler(void)
{
	char cc;
	//*(uartdev[devid].pWriteRecBuf) = *(RP8)UART_RBR(uartdev[devid].usetbl.UART_BASE);	
	*pp++ =  *(RP8)UART_RBR(UART0_BASE);
	
	/* scanner express the end of data as the suffix "0D 0A" */
	//if(((*(uartdev[devid].pWriteRecBuf)) == 0x0A) && (end_flg == 1))
	//if((*pp == 0x0A) && (end_flg == 1))
	if((*pp == NULL) && (end_flg == 1))
	{
		//uartdev[devid].pWriteRecBuf = uartdev[devid].RecBuf;
		//set_flg(uartdev[devid].usetbl.RBUF_EVENT, uartdev[devid].usetbl.UART_REC);
		//uartdev[devid].irq_uart_flag = 1;			//mask uart_irq
		end_flg = 0;
		*(++pp) = '\0';
		printneeded = 1;
		return TRUE;
	}
	//if((*(uartdev[devid].pWriteRecBuf)) == 0x0D)
	//if(*pp == 0x0D)
	if(*pp == NULL)
		end_flg = 1;
	else end_flg = 0;

	//uartdev[devid].wrcount++;
	//uartdev[devid].pWriteRecBuf++;
	
	return TRUE;
}
	
	
/******************************************************************************
扫描枪中断函数
******************************************************************************/	
void ENT_INT_SCAN( void )
{
	//ent_int();
	
 	//mask_irq(uartdev[0].usetbl.INT_UART);			//中断号需改
 	mask_irq(INT_UART0);
  	
	serv_scan();
	
	//if(uartdev[0].irq_uart_flag == 0)	
		//unmask_irq(uartdev[0].usetbl.INT_UART);
	unmask_irq(INT_UART0);
	
	
		

	//ret_int();
}





⌨️ 快捷键说明

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