www.pudn.com > USBDriver.rar > Main.C


/****************************************Copyright (c)************************************************** 
**                               ¹ãÖÝÖÜÁ¢¹¦µ¥Æ¬»ú·¢Õ¹ÓÐÏÞ¹«Ë¾ 
**                                     ÑÐ    ¾¿    Ëù 
**                                        ²úÆ·Ò»²¿  
** 
**                                 http://www.zlgmcu.com 
** 
** ÎÄ   ¼þ   Ãû: Main.c 
** ×îºóÐÞ¸ÄÈÕÆÚ: 2004Äê7ÔÂ2ÈÕ 
** Ãè        Êö: PDIUSBD12 É豸¶ËÇý¶¯³ÌÐò ÑÝʾ³ÌÐò 
** °æ	     ±¾: V1.0 
**********************************************************************************************************/ 
 
#include "config.h"							//°üº¬LPC22xxÄ£°åµÄÅäÖÃÍ·Îļþ 
#include "D12Driver.h"						//°üº¬PDIUSBD12Çý¶¯³ÌÐòµÄÍ·Îļþ 
 
OS_STK  TaskStartStk[128];					//²Ù×÷ϵͳÆð¶¯ÈÎÎñ¶ÑÕ» 
OS_STK  TaskRec1Stk[400];					//ÈÎÎñ1¶ÑÕ»(400¸ö×Ö)© 
OS_STK  TaskRec2Stk[400];					//ÈÎÎñ2¶ÑÕ»(400¸ö×Ö) 
 
OS_EVENT *TaskRec1_Sem;						//ÈÎÎñ1¾ÍÐ÷ÐźÅÁ¿ 
OS_EVENT *TaskRec2_Sem;						//ÈÎÎñ2¾ÍÐ÷ÐźÅÁ¿ 
 
void TaskStart(void *pdata); 
void TaskRec1(void *pdata); 
void TaskRec2(void *pdata); 
 
extern void Usb_Handler(void); 
/************************************************************ 
** º¯ÊýÃû³Æ: void Init_D12Int(void) 
** ¹¦ÄÜÃèÊö: ³õʼ»¯D12µÄÖжÏ,ÉèÖÃD12µÄÖзþÎñ³ÌÐòµØÖ· 
** Êä¡¡  Èë: ÎÞ 
** Êä ¡¡ ³ö: ÎÞ 
************************************************************/ 
void Init_D12Int(void) 
{ 
	VICVectCntl1 = (0x20 | 0x0E);			//EINT0ͨµÀ·ÖÅäµ½IRQ slot 1 
   	VICVectAddr1 = (INT32U)Usb_Handler;		//ÉèÖÃEINT0ÏòÁ¿µØÖ· 
   	VICIntEnable = 1 << 14;					//ÔÊÐíEINT0 
} 
 
/********************************** 
			Ö÷º¯Êý 
***********************************/ 
int main (void) 
{ 
    OSInit();                   			//³õʼ»¯ uC/OS-II 
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[127], 1); 
    									    //´´½¨Æð¶¯ÈÎÎñ 
    OSStart();                   			//¿ªÊ¼¶àÈÎÎñ 
} 
 
/********************************** 
*       Æð¶¯ÈÎÎñ,ÓÅÏȼ¶ 3 
***********************************/ 
void  TaskStart (void *pdata) 
{ 
#if OS_CRITICAL_METHOD == 3      			 /* Allocate storage for CPU status register */ 
    OS_CPU_SR  cpu_sr; 
#endif 
	INT8U Cmd,err; 
				 	  
	pdata = pdata;               	 		/* Prevent compiler warning */ 
    TargetInit();          		 			//LPC2200¿ª·¢°å³õʼ»¯ 
	err = Init_D12();			  			//PDIUSBD12³õʼ»¯ 
	Init_D12Int();					 		//ÅäÖÃPDIUSBD12µÄÖÐ¶Ï 
             
    TaskRec1_Sem = OSSemCreate(0);	 		//´´½¨Á½¸öÐźÅÁ¿,ÐźÅÁ¿³õֵΪ0 
	TaskRec2_Sem = OSSemCreate(0);    
	 
	if (err == 0)				  			//Èç¹û³õʼ»¯PDIUSBD12³É¹¦,²Å´´½¨¿ØÖÆ´«Êä´¦ÀíÈÎÎñ 
  		OSTaskCreate(TaskSetup,(void *)0, &TaskSetupStk[127], 0); 
  		 
	OSTaskCreate(TaskRec1,(void *)0, &TaskRec1Stk[399], 3);				//´´½¨ÈÎÎñ1ºÍÈÎÎñ2 
	OSTaskCreate(TaskRec2,(void *)0, &TaskRec2Stk[399], 4); 
    	  
    for (;;){ 
		err = ReadPort1(1,&Cmd,200);		//µÈ´ýÀ´×ÔPC»úµÄÃüÁî 
		if (err == OS_NO_ERR){				//½ÓÊÕÕýÈ· 
			if (Cmd == 0x01)				 
				OSSemPost(TaskRec1_Sem);	//ʹÈÎÎñ1¾ÍÐ÷ 
			else 
				OSSemPost(TaskRec2_Sem);	//ʹÈÎÎñ2¾ÍÐ÷ 
		} 		  
    } 
} 
 
#define RW_NUMS	1024			 					//ÈÎÎñ1ºÍÈÎÎñ2ÊÕ·¢Êý¾Ý×Ö½ÚÊý 
 
/********* ÈÎÎñ 1 ***********/ 
void  TaskRec1(void *pdata) 
{ 
#if OS_CRITICAL_METHOD == 3       					/* Allocate storage for CPU status register */ 
    OS_CPU_SR  cpu_sr; 
#endif 
	INT8U Buff[RW_NUMS];		 					//½ÓÊÕ¼°·¢ËÍ»º³åÇø 
	INT8U ack = 0x01; 			 					//Ó¦´ðÖ÷»úÊýÖµ 
	INT8U err;					 					//º¯Êý·µ»ØÖµ 
	 
	pdata = pdata;               					/* Prevent compiler warning */ 
	 
   	for (;;){  
    	OSSemPend(TaskRec1_Sem,0,&err);				//µÈ´ýTaskStartµÄÃüÁî 
    	err = WritePort1(1,&ack,200);				//Ó¦´ðUSBÖ÷»ú 
    	if (err == USB_NO_ERR){						//Ó¦´ðÕýÈ· 
    		err = ReadPort2(RW_NUMS,Buff,200);		//½ÓÊÕÊý¾Ý 
    		OSTimeDly(1);							//ÑÓʱһ¸öʱÖÓÖÜÆÚ 
    		if (err == USB_NO_ERR){					//½ÓÊÕÕýÈ· 
    			Buff[0] = OSPrioCur;				//±êʶ¸ÃÈÎÎñ 
   	  	 		err = WritePort2(RW_NUMS,Buff,200);	//·¢ËÍÊý¾Ý 
   	  		} 
   	  	} 
    } 
} 
 
 
/********* ÈÎÎñ 2 ***********/ 
void  TaskRec2(void *pdata) 
{ 
#if OS_CRITICAL_METHOD == 3       					/* Allocate storage for CPU status register */ 
    OS_CPU_SR  cpu_sr; 
#endif 
	INT8U Buff[RW_NUMS];		  					//½ÓÊÕ¼°·¢ËÍ»º³åÇø 
	INT8U ack = 0x02;			 					//Ó¦´ðÖ÷»úÊýÖµ 
	INT8U err;					  					//º¯Êý·µ»ØÖµ	  
	 
	pdata = pdata;               					/* Prevent compiler warning                 */ 
	 
   	for (;;){ 
    	OSSemPend(TaskRec2_Sem,0,&err);				//µÈ´ýTaskStartµÄÃüÁî 
    	err = WritePort1(1,&ack,200);				//Ó¦´ðUSBÖ÷»ú 
    	if (err == USB_NO_ERR){						//Ó¦´ðÕýÈ·	 
    		err = ReadPort2(RW_NUMS,Buff,200);		//½ÓÊÕÊý¾Ý 
    		if (err == OS_NO_ERR){					//½ÓÊÕÕýÈ· 
    			Buff[0] = 0x02;						//±êʶ¸ÃÈÎÎñ	 
   	  	 		err = WritePort2(RW_NUMS,Buff,200);	//·¢ËÍÊý¾Ý 
   	  		} 
   	  	} 
    } 
}