📄 acan.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 + -