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

📄 main.c

📁 在LPC2132芯片上利用IO脚中断实现SPI检测功能
💻 C
字号:
/*  ************************************************************
//  Owner:
//      Snowdrinker
//  Data:
//      2007-06-28
//  Project:
//      KJ1000
************************************************************  */
#include "config.h"

/*  ************************************************************
//  函数名称 :main()
************************************************************  */
int main (void)
{
	PINSEL1 = 0x00000001;			/* 设置管脚连接,P0.16为EINT0			*/

	EXTMODE = 0x01;					/* 设置EINT0为电平触发。				*/
	EXTPOLAR = 0x00;
									/* 极性寄存器使用默认值,0。			*/

    irq_init_set();                 //设置中断有关初始值
    gpio_init();                    //设置GPIO

	PINSEL1 = 0x00000001;			/* 设置管脚连接,P0.16为EINT0			*/
	EXTMODE = 0x01;					/* 设置EINT0为电平触发。				*/
	EXTPOLAR = 0x00;
									/* 极性寄存器使用默认值,0。			*/
	IRQEnable();					// 使能IRQ中断

	                                /* 打开EINT0中断(使用向量中断) */
	VICIntSelect   = 0x00000000;	/* 设置所有中断分配为IRQ中断			*/
	VICVectCntl0   = 0x20 | 0x0e;	/* 分配外部中断0到向量中断0				*/
	VICVectAddr0   = (uint32)IRQ_Eint0;		/* 设置中断服务程序地址			*/
	EXTINT         = 0x01;					/* 清除EINT0中断标志			*/
	VICIntEnable   |= 1 << 0x0e;			/* 使能EINT0中断				*/


	gSPI_Bit_Count = 0;
	gSpi_Rcv_Time = 0;
	gSpi_Point = 0;

    while (1)
    {
    if ((gSpi_Rcv_Time > 20) && (gSpi_Point>0))
    	{
	    gSend_Reader_Cmd_Step = 0;

    	for (i=0;i<gSpi_Point;i++)
    		UART1_SendByte(L_H_Bit_Chger(gSpi_Rcvdata[i]));
    	gSpi_Point = 0;

	    gSend_Reader_Cmd_Step = 0;

		gSPI_Send_Time = 0;
		gSPI_Wait_Flag = 1;
    	}
    if (gSPI_Wait_Flag == 1)
    	{
    	if (gSPI_Send_Time > 100)
    		{
	    	gSPI_Wait_Flag = 0;
			gSPI_Send_Time = 0;
			SPI_Data_Flag = 0;
    		}
    	}
	else
		{
	    if (gSend_Reader_Cmd_Step == 1)
	    	{

			for (i=0;i<sizeof(REQ_READER_CMD);i++)
				UART0_SendByte(REQ_READER_CMD[i]);

			gSend_Reader_Cmd_Step = 2;
			gRcv_Time = 0;gReader_No_Back_Time = 0;
			gReader_Point = 0;
	    	}
		else if (gSend_Reader_Cmd_Step == 2)
			{
			if ((gReader_Point>5) && (gRcv_Time>2))
				{
				if (gReader_Rcvdata[0] == 0xAA)
					{
					if (gReader_Rcvdata[1] == 0x00)
					    gSend_Reader_Cmd_Step = 3;
					else
						{
						gSend_Reader_Cmd_Step = 0;
						gReader_Point = 0;
						}
					}
				else
					{
					gSend_Reader_Cmd_Step = 0;
					gCard_ID_Len = 0;
					gReader_Point = 0;
					}

				if (gRcv_Time > 2)
					gReader_Point = 0;
				}
			else if (gReader_No_Back_Time > 20)
				{
				gRcv_Time = 0;gReader_No_Back_Time = 0;
				gSend_Reader_Cmd_Step = 0;
	            gReader_Point = 0;
				gCard_ID_Len = 0;
				}
	 		}
		else if (gSend_Reader_Cmd_Step == 3)
	    	{
	    	gSend_Reader_Cmd_Step = 4;
			gRcv_Time = 0;
			gReader_No_Back_Time = 0;
			gReader_Point = 0;

	        for (i=0;i<sizeof(GET_ID_CMD);i++)
				UART0_SendByte(GET_ID_CMD[i]);
	    	}
		else if (gSend_Reader_Cmd_Step == 4)
			{
//			if ((gReader_Point>5) && (gRcv_Time>2))
			if ((gReader_Point>0) && (gRcv_Time>1))
				{
				if ((gReader_Rcvdata[0]==0xAA) && (gReader_Rcvdata[1]==0x00))
					{
					//暂存ID号等待对比
	                Car_ID_Len_Temp = gCard_ID_Len;
					for (i=0;i<Car_ID_Len_Temp;i++)
						Car_ID_Buf_Temp[i] = gCard_ID_Buf[i];

					//解析ID号码
					gCard_ID_Len = gReader_Rcvdata[2];
					xor_Car_ID = 0;
					for (i=0;i<gCard_ID_Len;i++)
						{
						gCard_ID_Buf[i] = gReader_Rcvdata[3+i];
						xor_Car_ID ^= gReader_Rcvdata[3+i];
						}

					//比对ID号码
					ID_Change_Flag = 0;

					if (Car_ID_Len_Temp == gCard_ID_Len)
						{
						for (i=0;i<gCard_ID_Len;i++)
							{
							if (gCard_ID_Buf[i] != Car_ID_Buf_Temp[i])
								{
								ID_Change_Flag = 1;
								break;
								}
							}
						}
					else
						ID_Change_Flag = 1;

					if (ID_Change_Flag == 1)
						{
						//  UART发送数据打包
						gSend_Data[0] = 0x3C;
						gSend_Data[1] = 0x73;
						gSend_Data[2] = 0x01;
						gSend_Data[3] = 0x05;

						for (i=0;i<gCard_ID_Len;i++)
							gSend_Data[i+4] = gCard_ID_Buf[i];

		                gSend_Data[gCard_ID_Len+4] = xor_Car_ID;

						gSend_Data[gCard_ID_Len+5] = 0;
						for (i=0;i<(gCard_ID_Len+5);i++)
		   				    gSend_Data[gCard_ID_Len+5] ^= gSend_Data[i];

		                //  发送数据
						for (i=0;i<(gCard_ID_Len+6);i++)
							UART1_SendByte(gSend_Data[i]);

						for (i=0;i<sizeof(BEEPER_SPK);i++)
				            UART0_SendByte(BEEPER_SPK[i]);

						}
					gSend_Reader_Cmd_Step = 0;
					gReader_Point = 0;
					}
				else
					{
					gSend_Reader_Cmd_Step = 0;
					gReader_Point = 0;
					gCard_ID_Len = 0;
					}

				if (gRcv_Time > 2)
					gReader_Point = 0;
				}
			else if (gReader_No_Back_Time > 20)
				{
				gRcv_Time = 0;gReader_No_Back_Time = 0;
				gSend_Reader_Cmd_Step = 0;
				gReader_Point = 0;
				}
	 		}
	    }
    }
    return 0;
}

⌨️ 快捷键说明

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