- 积分
- 3553
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2014-11-13
- 精华
|
马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
/**
******************************************************************************
* ÎļtÃû£o
* ×÷Õߣo huang_4115@126.com
* °æ±¾£o V1.0.0
* èÕÆú£o 2013-
* Õaòa£o èÎÎñoˉêy
******************************************************************************
* ËμÃ÷£o
*
******************************************************************************
**/
#include "includes.h"
OS_STK task_demo_stk[TASK_DEMO_STK_SIZE]; //¶¨òåÕ»
OS_STK task_cmd_stk[TASK_CMD_STK_SIZE];
OS_EVENT *Mbox_Can1;
u8 UM = 2;
/**
* ËμÃ÷£o
* êäèë£o
* êä3ö£o
**/
void Task_Start(void *p_arg)
{
OSTaskCreate(Task_Demo, (void *)0, &task_demo_stk[TASK_DEMO_STK_SIZE-1], TASK_DEMO_PRIO);
OSTaskCreate(Task_CMD, (void *)0, &task_cmd_stk[TASK_CMD_STK_SIZE-1], TASK_CMD_PRIO);
Mbox_Can1 = OSMboxCreate((void *)0);
LED3_ON; //Ïèμãááled3
OSTimeDly(300); //μè′yelmoíêè«1¤×÷
printf("MO=0;");
printf("UM=%d;",UM); //ĬèÏê1óÃËù¶èÄ£ê½ á¢¿ì¼óÔØËù¶è
printf(" M=1;");
printf("AC=2000000;");
printf("DC=2000000;");
printf("MO=1;");
printf("EC;"); //èç1ûᬽóÎTÎó£¬′Ë걻Ὣled3ϨÃe
while (1)
{
IWDG_Init(IWDG_Prescaler_4,1000); //3¬ê±100ms¸′λ
OSTaskSuspend(STARTUP_TASK_PRIO);
}
}
/**
* ËμÃ÷£o
* êäèë£o
* êä3ö£o
**/
void Task_Demo(void *p_arg)
{
u16 temp;
u32 err_code=0,*perr_code;
s32 speed;
s32 position;
while(1)
{
if(CAN_ReadCnt!=CAN_WriteCnt)
{
temp = CAN_ReadCnt%CAN1_BUF_SIZE;
switch(RxMessage[temp].Data[0])
{
case 'v': //Ëù¶èÄ£ê½
case 'V':
speed = (s16)((RxMessage[temp].Data[1]<<8)|RxMessage[temp].Data[2])*RPM2CPS;
if(UM != 2)
{
UM = 2; //ê1óÃËù¶èÄ£ê½ á¢¿ì¼óÔØËù¶è
printf("MO=0;");
printf("UM=%d;",UM);
printf("MO=1;");
}
printf("JV=%d;BG;",speed);
break;
case 'p': //λÖÃÄ£ê½
case 'P':
if((RxMessage[temp].Data[1] == 'R')||(RxMessage[temp].Data[1] == 'r'))
{
speed = (s16)((RxMessage[temp].Data[2]<<8)|RxMessage[temp].Data[3])*RPM2CPS;
position = (RxMessage[temp].Data[4]<<24)|(RxMessage[temp].Data[5]<<16)| \
(RxMessage[temp].Data[6]<<8)|(RxMessage[temp].Data[7]);
if(UM != 5)
{
UM = 5; //ê1óÃλÖÃģ꽣¬Ïè¼óÔØλÖã¬Ôù¼óÔØËù¶è
printf("MO=0;");
printf("UM=%d;",UM);
printf("MO=1;");
}
printf("SP=%d R=%d;BG;",speed,position);
}
else
if((RxMessage[temp].Data[1] == 'A')||(RxMessage[temp].Data[1] == 'a'))
{
speed = (s16)((RxMessage[temp].Data[2]<<8)|RxMessage[temp].Data[3])*RPM2CPS;
position = (RxMessage[temp].Data[4]<<24)|(RxMessage[temp].Data[5]<<16)| \
(RxMessage[temp].Data[6]<<8)|(RxMessage[temp].Data[7]);
if(UM != 5)
{
UM = 5; //ê1óÃλÖÃģ꽣¬Ïè¼óÔØλÖã¬Ôù¼óÔØËù¶è
printf("MO=0;");
printf("UM=%d;",UM);
printf("MO=1;");
}
printf("SP=%d A=%d;BG;",speed,position);
}
break;
case 'm': //ê1Äü¡¢ê§Äüμç»ú
case 'M':
if((RxMessage[temp].Data[1] == 'O')||(RxMessage[temp].Data[1] == 'o'))
{
if(RxMessage[temp].Data[3] == '0')
printf("MO=0;");
else
printf("MO=1;");
}
if((RxMessage[temp].Data[1] == 'F')||(RxMessage[temp].Data[1] == 'f')) //μç»úê§ÄüDÅÏ¢
{
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
printf("MF;"); //»ñè¡μç»úê§Äü′íÎóÂë
}
break;
case 'e': //2éÑˉ′íÎó
case 'E':
if((RxMessage[temp].Data[1] == 'C')||(RxMessage[temp].Data[1] == 'c'))
{
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
printf("MO=1;"); //Ïè·¢ò»¸öÃüáî2úéú×îDÂ′íÎóÂë
printf("EC;"); //»ñè¡′íÎóÂë
}
break;
case 'r': //èí¼t¸′λ
case 'R':
if((RxMessage[temp].Data[1] == 'B')||(RxMessage[temp].Data[1] == 'b'))
SoftReset();
break;
/*ÆäËû1|Äü¿é×ÔDDà©Õ1*/
default:
break;
}
CAN_ReadCnt++;
}
perr_code = OSMboxAccept(Mbox_Can1);
if(perr_code!=0) //¸øÖ÷¿Ø·¢Ëí′íÎóÂë
{
err_code = *perr_code;
TxMessage.DLC=4; //Ö¡3¤¶è 0~8
TxMessage.Data[0]=(err_code) >>24;
TxMessage.Data[1]=(err_code) >>16;
TxMessage.Data[2]=(err_code) >>8;
TxMessage.Data[3]=(err_code) ;
CAN1_SendMsg();
}
IWDG_Feed();
}
}
/**
* ËμÃ÷£o
* êäèë£o
* êä3ö£o
**/
void Task_CMD(void *p_arg)
{
while (1)
{
CPL_LED1;
OSTimeDly(500);
}
}
|
|
|