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); //·¢ËÍÊý¾Ý
}
}
}
}