/****************************************************************************** FILE: IED_TASK.H POPURSE: WRITER: xukaiming DATE: ******************************************************************************/ #ifndef _TASK_H_ #define _TASK_H_ #define _DEBUG #undef _DEBUG #include "stm32f10x_conf.h" #include "stdint.h" #include "stdio.h" #include "string.h" #include "Encode.h" /****************************************************************************** about task *******************************************************************************/ /*----------------------------------------------------------------------------- 定义任务表,增加任务时需在此增加表项。 -------------------------------------------------------------------------------*/ enum TASK_TYPE {TASK_TIMER=1,TASK_COMM_TIMER, TASK_CMD,TASK_BLINK,TASK_BEEP,TASK_INTGAL_FREQ, TASK_FUZZY,TASK_STOPMOTOR,TASK_TEST,TASK_DJ, TASK_STOP_SAMPLEPOS,TASK_MANUAL_CTRL,TASK_RESET, TASK_STOP_SAMPLEPOS2, TASK_STOP_ENCODE_POS }; #define TICKCOUNT (1000L) //系统时间脉冲为1000次 #define __NOP __nop #define _nop_ __nop enum TASK_MODE {TASK_MODE_ONCE,TASK_MODE_PERIOD}; typedef unsigned char UCHAR; typedef unsigned long ULONG; typedef unsigned int UINT; typedef unsigned short USHORT; typedef void * PVOID; typedef signed char SCHAR; typedef signed long SLONG ; typedef signed int SINT; typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; typedef struct task { UCHAR cActive; // >0:活动,1:初始化后立即启动 UCHAR cTaskMode; // 任务工作方式 SLONG lLastTime; ULONG lPeriod; // 活动周期,uint=1mS UCHAR cType; // 任务类型 void (*TaskProc)(void); // 任务处理子程序 }TASK_DATA; /*************************************************************************** about timer ****************************************************************************/ #define MAX_TIMER 5 // the number of timer can be used #define TIMER_MODE_TIMER 0 // mode constant: timer only #define TIMER_MODE_ONCEROUTINE 1 // timerly routine ( once ) #define TIMER_MODE_CYCROUTINE 2 // cyclely routine // define timer data struct typedef struct mytimer { UCHAR cUse; UCHAR cMode; // timer work mode long lPeriod; // timer period, unit=10ms. long lLastTime; // timer count for reload void (*routine)(void * Param1); // user's timer routine void * Param1; }TIMER_DATA; extern TIMER_DATA TimerData[MAX_TIMER]; #define UNUSED(x) typedef struct { UINT iYear; // year since 2000 UCHAR cMon; // months since January - [1, 12] UCHAR cDay; // day of the month - [1, 31] UCHAR cHour; // hours since midnight - [0, 23] UCHAR cMin; // minutes after the hour - [0, 59 ] UCHAR cSec; // seconds after the minute - [0, 59] }TIME; typedef unsigned long time_t; // function prototype void Init_task_timer(void); void TaskTimer(void); void TaskProc(void); //Task Function void ActiveTask(UCHAR cTaskType, ULONG lPeriod); void SuspendTask(UCHAR cTaskType); //Timer Function SCHAR StartTimer(UCHAR cMode,ULONG lPeriod,void (* routine)(void * Param1),void * Param1); SCHAR StopTimer (SCHAR * pcTimerNumber ); void StopAllTimer(void); // void InitPLL(void); void TaskBlinLed(void); void Delay(UINT delayCnt); //day time time_t MakeTime(TIME *ptm); void LocalTime(TIME *t,time_t *tSec); extern TASK_DATA TaskDb[] ; #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000 + ((addr &0xFFFFF)<<5) + (bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *) addr) //INPUT extern volatile unsigned long PD2_I; extern volatile unsigned long PD3_I; extern volatile unsigned long PD4_I; extern volatile unsigned long PD5_I; extern volatile unsigned long PD6_I; extern volatile unsigned long PD7_I; extern volatile unsigned long PF0_I; extern volatile unsigned long PF1_I; extern volatile unsigned long PF2_I; extern volatile unsigned long PF3_I; extern volatile unsigned long PF4_I; extern volatile unsigned long PF5_I; extern unsigned long PA0_O; extern unsigned long PA1_O; extern unsigned long PA4_O; extern unsigned long PA5_O; extern unsigned long PA7_O; extern unsigned long PA12_O; extern unsigned long PB1_O ; extern unsigned long PC0_O; extern unsigned long PC1_O; extern unsigned long PC2_O; extern unsigned long PC3_O; extern unsigned long PC4_O; extern unsigned long PC5_O; extern unsigned long PC13_O; extern unsigned long PC8_I; //OUTPUT extern unsigned long PD0_O; extern unsigned long PD1_O; extern unsigned long PD2_O; extern unsigned long PD3_O; extern unsigned long PD4_O; extern unsigned long PD5_O; extern unsigned long PD6_O ; extern unsigned long PD7_O ; extern unsigned long PE0_O ; extern unsigned long PE15_O ; /**********************GPIO别名储存器映射表*************************/ //GPIOC_ODR[15..0]映射到别名区 //GPIOC_ODR ADDRESS=0x4001 100C //别名区 ADDRESS=0x4200 0000 + (0x0001 100C*0x20) + (bitx*4) ;bitx:第x位 //#define PC7_I MEM_ADDR(BITBAND((int)&(GPIOD->IDR),7)) //下面的例子说明如何映射别名区中SRAM地址为0x20000300的字节中的位2: //0x22006008 = 0x22000000 + (0x300×32) + (2×4). // volatile unsigned long bbVarAry[7]__attribute__(( at(0x20003014) )); ////////////////////////////////////////////////////////////////////////////// #define setbit(var,bit) (var|=(1L<0) #define enable() __enable_irq() //开中断 #define disable() __disable_irq() //关中断 #endif