int WINAPI _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) { LPTSTR lpszType, lpszMode, lpszFile; HANDLE hHeap; HWND hwnd; UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); g_hModuleInstance = hInstance; hHeap = GetProcessHeap(); if (!hHeap) return ERROR_NOT_ENOUGH_MEMORY; if (__argc > 3) { lpszType = __targv[1]; lpszMode = __targv[2]; lpszFile = __targv[3]; if (__argc > 4) hwnd = (HWND) _tstoi(__targv[4]); else hwnd = NULL; if (!lpszType || !lpszMode || !lpszFile) return ERROR_INVALID_COMMAND_LINE; if (_tcsicmp(lpszType, TEXT("driver")) == 0) { if (_tcsicmp(lpszMode, TEXT("install")) == 0) return DriverInstall(hHeap, lpszFile, nCmdShow); else if (_tcsicmp(lpszMode, TEXT("uninstall")) == 0) return DriverUninstall(hHeap, lpszFile, nCmdShow); else return ERROR_INVALID_PARAMETER; } else if (_tcsicmp(lpszType, TEXT("device")) == 0) { if (_tcsicmp(lpszMode, TEXT("install")) == 0) return DeviceInstall(hHeap, lpszFile, hwnd, nCmdShow); else if (_tcsicmp(lpszMode, TEXT("uninstall")) == 0) return DeviceUninstall(hHeap, lpszFile, hwnd, nCmdShow); else return ERROR_INVALID_PARAMETER; } else return ERROR_INVALID_PARAMETER; } else return ERROR_INVALID_COMMAND_LINE; }
s8 usart1_init(void) { if(DeviceInstall(&usart1_cfg) != HVL_NO_ERR) //设备注册 return -1; return 0; } //启用定时器计算包接收超时
/**************************************************************************** * 名 称:u8 TIM7_Config(TIM7_fun Cfun,u16 TimeUS,u8 mode) * 功 能:定时器配置 * 入口参数:TIM7_fun Cfun 回调函数 u16 TimeUS 需要定时的单位级别 微秒单位 u8 mode 模式 0微秒 1毫秒 2秒 * 出口参数:u8 设置是否成功 1成功 0失败 * 说 明:无 ****************************************************************************/ u8 TIM7_Config(TIM7_fun Cfun,u16 TimeUS,u8 mode) //默认为毫秒中断 { //注册用变量 DEV_REG tim7 = //设备注册信息表 不必static { CHAR_TIM7, //设备ID号 0, //是否共享 0:不可共享使用, 1:可共享使用 0, //对于共享设备最大打开次数 1, //最大读次数 1, //最大写次数 TIM7_pDisc, //驱动描述 自定义 20120001, //驱动版本 自定义 (u32*)TIM7_Open, //设备打开函数指针 (u32*)TIM7_Close, //设备关闭函数指针 (u32*)TIM7_Read, //字符读函数 (u32*)TIM7_Write, //字符写函数 (u32*)TIM7_Ioctl //控制函数 }; TIM_TimeBaseInitTypeDef T; //创建定时器变量 NVIC_InitTypeDef N; //创建中断管理变量 u32 Period_t = 0; //计算用定时值 u16 Prescaler_t = 0; //计算用分频系数 if(TimeUS < 1) TimeUS = 2; //防止Period_t计数器为0 switch(mode) //定时模式区分 { case Mode_1US: { Period_t = TimeUS - 1; //计算用定时值 Prescaler_t = SYS_CPU_SysTickClkFreq() / 2 / 1000000 - 1; //计算用分频系数 break; } case Mode_10US: { Period_t = TimeUS - 1; //计算用定时值 Prescaler_t = SYS_CPU_SysTickClkFreq() / 2 / 100000 - 1; //计算用分频系数 break; } case Mode_100US: { Period_t = TimeUS - 1; //计算用定时值 Prescaler_t = SYS_CPU_SysTickClkFreq() / 2 / 10000 - 1; //计算用分频系数 break; } case Mode_500US: { Period_t = TimeUS - 1; //计算用定时值 Prescaler_t = SYS_CPU_SysTickClkFreq() / 2 / 2000 - 1; //计算用分频系数 break; } default: return 0; //模式错误 } //定时器配置 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); //给定时器分配时钟APB1 //APB1预分频为非1时,定时器时钟频率为2倍频即36*2=72MHZ TIM_DeInit(TIM7); //复位TIM2定时器到默认值 //定时时间:72000000个频率为1秒,当前设置(TIM_Period+1) * (TIM_Prescaler+1)个频率后产生溢出中断 T.TIM_Period = Period_t; //定时值,减10000次发生一次溢出中断 (100微秒*10000=1秒) 定时器为16位的最大值65535 T.TIM_Prescaler = Prescaler_t; //预分频系数 7200个频率后定时值减1 (7200个频率100微秒) T.TIM_ClockDivision = 0; //时钟分割 在定时器预分频之前作一段延时,很少用到,设为0即可 T.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 UP:10000到0的计数 DOWN:10000到FFFF TIM_TimeBaseInit(TIM7, &T); //根据上面设置初始化定时器TIM2 TIM_ClearFlag(TIM7, TIM_FLAG_Update); //清空溢出中断 //嵌套向量中断控制器设置 N.NVIC_IRQChannel = TIM7_IRQn; //配置对TIMx_IRQn的中断监听 N.NVIC_IRQChannelPreemptionPriority = 0; //抢先级 N.NVIC_IRQChannelSubPriority = 0; //响应级 N.NVIC_IRQChannelCmd = ENABLE; //开启中断监听 NVIC_Init(&N); //根据上面设置初始化中断控制器 if(Cfun != 0) //回调函数不为空 TIM7_Caller(Cfun); //设置回调函数 if(DeviceInstall(&tim7) != HVL_NO_ERR) //设备注册 return 0; return 1; }