lpc1768usb使用-配置

发布者:小熊掌心最新更新时间:2017-01-12 来源: eefocus关键字:lpc1768  usb使用  配置 手机看文章 扫描二维码
随时随地手机看文章

#ifndef __USBCFG_H__

#define __USBCFG_H__

 

 

//#define USB_IF_NUM          1

#define USB_MAX_PACKET0     64

#define USB_DMA_EP          0x00000000

 

 

//尽量不要是能太多时间

//这里每一个事件都代表着一个回调函数,使能了该事件就需要实现相应的回调函数

 

#define USB_EP_EVENT        0x0003  //哪些端点需要实现中断处理函数,一位代表一个端点

 

#define USB_CONFIGURE_EVENT 1   //usb配置事件

 

#define USB_HID_IF_NUM      0   //usb hid使用端点 第几个接口

 

#define USB_DEBUG   0

 

#if USB_DEBUG

#define usb_debug_printf(format,args...)    printf(format,##args)       //变参宏定义

#else

#define  usb_debug_printf(x,...)  while(0);

#endif

 

#endif 

 

 

 

#ifndef __USBUSER_H__

#define __USBUSER_H__

#include "usbhw.h"

 

//hid报告长度

#define HID_REPORT_NUM      1

 

//hid中断端点地址

#define HID_EP_IN           0x81

#define HID_EP_OUT          0X01

 

 

/* USB回调方法 */

extern void USB_Power_Event(BOOL power);

extern void USB_Reset_Event(void);

extern void USB_Suspend_Event(void);

extern void USB_Resume_Event(void);

extern void USB_WakeUp_Event(void);

extern void USB_SOF_Event(void);

extern void USB_Error_Event(U32 error);

 

 

 

/* usb端点终端回调函数类型定义 */

#define USB_EVT_SETUP       1   /*  setup包 */

#define USB_EVT_OUT         2   /*  OUT 包 */

#define USB_EVT_IN          3   /*  IN 包 */

#define USB_EVT_OUT_NAK     4   /*  NACK OUT 包 */

#define USB_EVT_IN_NAK      5   /*  NACK IN 包 */

#define USB_EVT_OUT_STALL   6   /*  忽略 out包 */

#define USB_EVT_IN_STALL    7   /*  忽略 in包 */

 

 

 

 

/* USB端点事件回调期(方法数组) */

extern void (* const USB_P_EP[16])(U32 event);

 

 

 

/* USB端点回调方法 */

extern void USB_EndPoint0(U32 event);//最重要的函数,处理USB枚举相关事件

extern void USB_EndPoint1(U32 event);

extern void USB_EndPoint2(U32 event);

extern void USB_EndPoint3(U32 event);

extern void USB_EndPoint4(U32 event);

extern void USB_EndPoint5(U32 event);

extern void USB_EndPoint6(U32 event);

extern void USB_EndPoint7(U32 event);

extern void USB_EndPoint8(U32 event);

extern void USB_EndPoint9(U32 event);

extern void USB_EndPoint10(U32 event);

extern void USB_EndPoint11(U32 event);

extern void USB_EndPoint12(U32 event);

extern void USB_EndPoint13(U32 event);

extern void USB_EndPoint14(U32 event);

extern void USB_EndPoint15(U32 event);

 

/* USB枚举过程内核调用事件 */

extern void USB_Configure_Event(void);

extern void USB_Interface_Event(void);

extern void USB_Feature_Event(void);

 

 

 

 

 

#endif 

 

 

 

 

#include "usbuser.h"

 

 

#include "usbep1.h"

/*

 *  USB Set Configuration Event Callback

 *   Called automatically on USB Set Configuration Request

 */

 

#if USB_CONFIGURE_EVENT

void USB_Configure_Event (void)

{

    u8 Buf[4]={0,0,0,0};

    if (USB_Configuration)

    { /* Check if USB is configured */

        USB_WriteEP(HID_EP_IN, Buf, sizeof(Buf));

    }

}

#endif

 

//宏展开为USB_EndPointx()类型的函数

#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)

 

/* USB端点中断处理的回调函数 */

void (* const USB_P_EP[16])(U32 event) =

{   P_EP(0), //使用宏

    P_EP(1),

    P_EP(2),

    P_EP(3),

    P_EP(4),

    P_EP(5),

    P_EP(6),

    P_EP(7),

    P_EP(8),

    P_EP(9),

    P_EP(10),

    P_EP(11),

    P_EP(12),

    P_EP(13),

    P_EP(14),

    P_EP(15),

};

 

//端点1中断的回调函数

void USB_EndPoint1(U32 event)

{

 

    switch (event)

    {

    case USB_EVT_IN:

        usb_ep1_in_process();

        //GetInReport();

        //USB_WriteEP(HID_EP_IN, &InReport, sizeof(InReport));

        break;

    case USB_EVT_OUT:

        usb_ep1_out_process();

        break;

    }

}

 

void USB_EndPoint2(U32 event)

{

   

}

 

void USB_EndPoint3(U32 event)

{

}

 

void USB_EndPoint4(U32 event)

{

}

 

void USB_EndPoint5(U32 event)

{

}

 

void USB_EndPoint6(U32 event)

{

}

 

void USB_EndPoint7(U32 event)

{

}

 

void USB_EndPoint8(U32 event)

{

}

 

void USB_EndPoint9(U32 event)

{

}

 

void USB_EndPoint10(U32 event)

{

}

 

void USB_EndPoint11(U32 event)

{

}

 

void USB_EndPoint12(U32 event)

{

}

 

void USB_EndPoint13(U32 event)

{

}

 

void USB_EndPoint14(U32 event)

{

}

 

void USB_EndPoint15(U32 event)

{

}

 

 

 

 

 

 

 

 

 

 

 

#ifndef __USBCFG_H__

#define __USBCFG_H__

 

 

//#define USB_IF_NUM          1

#define USB_MAX_PACKET0     64

#define USB_DMA_EP          0x00000000

 

 

//尽量不要是能太多时间

//这里每一个事件都代表着一个回调函数,使能了该事件就需要实现相应的回调函数

 

#define USB_EP_EVENT        0x0003  //哪些端点需要实现中断处理函数,一位代表一个端点

 

#define USB_CONFIGURE_EVENT 1   //usb配置事件

 

#define USB_HID_IF_NUM      0   //usb hid使用端点 第几个接口

 

#define USB_DEBUG   0

 

#if USB_DEBUG

#define usb_debug_printf(format,args...)    printf(format,##args)       //变参宏定义

#else

#define  usb_debug_printf(x,...)  while(0);

#endif

 

#endif 

 

 

 

#ifndef __USBUSER_H__

#define __USBUSER_H__

#include "usbhw.h"

 

//hid报告长度

#define HID_REPORT_NUM      1

 

//hid中断端点地址

#define HID_EP_IN           0x81

#define HID_EP_OUT          0X01

 

 

/* USB回调方法 */

extern void USB_Power_Event(BOOL power);

extern void USB_Reset_Event(void);

extern void USB_Suspend_Event(void);

extern void USB_Resume_Event(void);

extern void USB_WakeUp_Event(void);

extern void USB_SOF_Event(void);

extern void USB_Error_Event(U32 error);

 

 

 

/* usb端点终端回调函数类型定义 */

#define USB_EVT_SETUP       1   /*  setup包 */

#define USB_EVT_OUT         2   /*  OUT 包 */

#define USB_EVT_IN          3   /*  IN 包 */

#define USB_EVT_OUT_NAK     4   /*  NACK OUT 包 */

#define USB_EVT_IN_NAK      5   /*  NACK IN 包 */

#define USB_EVT_OUT_STALL   6   /*  忽略 out包 */

#define USB_EVT_IN_STALL    7   /*  忽略 in包 */

 

 

 

 

/* USB端点事件回调期(方法数组) */

extern void (* const USB_P_EP[16])(U32 event);

 

 

 

/* USB端点回调方法 */

extern void USB_EndPoint0(U32 event);//最重要的函数,处理USB枚举相关事件

extern void USB_EndPoint1(U32 event);

extern void USB_EndPoint2(U32 event);

extern void USB_EndPoint3(U32 event);

extern void USB_EndPoint4(U32 event);

extern void USB_EndPoint5(U32 event);

extern void USB_EndPoint6(U32 event);

extern void USB_EndPoint7(U32 event);

extern void USB_EndPoint8(U32 event);

extern void USB_EndPoint9(U32 event);

extern void USB_EndPoint10(U32 event);

extern void USB_EndPoint11(U32 event);

extern void USB_EndPoint12(U32 event);

extern void USB_EndPoint13(U32 event);

extern void USB_EndPoint14(U32 event);

extern void USB_EndPoint15(U32 event);

 

/* USB枚举过程内核调用事件 */

extern void USB_Configure_Event(void);

extern void USB_Interface_Event(void);

extern void USB_Feature_Event(void);

 

 

 

 

 

#endif 

 

 

 

 

#include "usbuser.h"

 

 

#include "usbep1.h"

/*

 *  USB Set Configuration Event Callback

 *   Called automatically on USB Set Configuration Request

 */

 

#if USB_CONFIGURE_EVENT

void USB_Configure_Event (void)

{

    u8 Buf[4]={0,0,0,0};

    if (USB_Configuration)

    { /* Check if USB is configured */

        USB_WriteEP(HID_EP_IN, Buf, sizeof(Buf));

    }

}

#endif

 

//宏展开为USB_EndPointx()类型的函数

#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)

 

/* USB端点中断处理的回调函数 */

void (* const USB_P_EP[16])(U32 event) =

{   P_EP(0), //使用宏

    P_EP(1),

    P_EP(2),

    P_EP(3),

    P_EP(4),

    P_EP(5),

    P_EP(6),

    P_EP(7),

    P_EP(8),

    P_EP(9),

    P_EP(10),

    P_EP(11),

    P_EP(12),

    P_EP(13),

    P_EP(14),

    P_EP(15),

};

 

//端点1中断的回调函数

void USB_EndPoint1(U32 event)

{

 

    switch (event)

    {

    case USB_EVT_IN:

        usb_ep1_in_process();

        //GetInReport();

        //USB_WriteEP(HID_EP_IN, &InReport, sizeof(InReport));

        break;

    case USB_EVT_OUT:

        usb_ep1_out_process();

        break;

    }

}

 

void USB_EndPoint2(U32 event)

{

   

}

 

void USB_EndPoint3(U32 event)

{

}

 

void USB_EndPoint4(U32 event)

{

}

 

void USB_EndPoint5(U32 event)

{

}

 

void USB_EndPoint6(U32 event)

{

}

 

void USB_EndPoint7(U32 event)

{

}

 

void USB_EndPoint8(U32 event)

{

}

 

void USB_EndPoint9(U32 event)

{

}

 

void USB_EndPoint10(U32 event)

{

}

 

void USB_EndPoint11(U32 event)

{

}

 

void USB_EndPoint12(U32 event)

{

}

 

void USB_EndPoint13(U32 event)

{

}

 

void USB_EndPoint14(U32 event)

{

}

 

void USB_EndPoint15(U32 event)

{

}


关键字:lpc1768  usb使用  配置 引用地址:lpc1768usb使用-配置

上一篇:USB自定义HID设备实现-LPC1768
下一篇:lpc1768usb端点响应以及描述符定义

推荐阅读最新更新时间:2024-03-16 15:30

STM32F207调试记录之串口配置
这几天在配置串口时出现了一些令人不解的问题,鬼魅般的不行啊!真是令人头疼!因为再一次遇到了这个问题,故想有必要做一个记录。 先说一下配置USART1的过程吧。 ①配置串口1时钟,在APB2上 ②复用功能连上IO引脚 ③ 配置GPIO为复用模式、推挽、50MHz、上拉 ④配置串口波特率为指定波特率、 8位数据长度、1位停止位、无校验、无流控制、串口模式为接收和发送 ⑤使能串口 ⑥配置串口中断包括 中断通道、抢占优先级、响应优先级、通道使能 ⑦配置串口接收中断使能、发送中断使能 至此串口配置完毕。 在主函数中放上串口发送函数(一秒发一次),开始调试,现象如下: 首先将断点放在发送中断和接收中断处理的地方,每隔一秒会进入发送中断
[单片机]
STM32 HAL 库学习笔记之-------(系统时钟配置)
使用CubeMX工具,让开发者不用理会底层的实现,是整个配置变简单 一、准备工具STM32_CubeMX ST官网可下载 http://www.st.com/content/st_com/en/search.html#q=cubemx-t=tools-page=1 二、打开STM32_CubeMX开始配置,使用内部RC,最大倍频至64MHZ,芯片大于64MHZ,应该选择HSE 已STM32F103为例子 HSI配置 HSE配置 三、以下是STM32F103 HES 72MHZ配置例子: 工具生成基本直接可以使用,需要注意是,外部晶振源,有8khz(默认),12khz,可以在System_stm32f1xx.h修改
[单片机]
汽车喇叭需要几个分频器比较好
汽车喇叭需要几个分频器比较好 按一般的配置来说,需要两个二分频器即可,在一些高端车型中,因为配备了5.1高保真系统,前后声场都配备了高音头,比如宝马的7系,就需要四个二分频或是三分频的分频器; 如果是使用两个分频器,前声场采用套装喇叭,就是两个中低音,分别装在两个前门;两个高音,装在大约与人耳想平的合适位置。而分频器的作用就是把CD机或是功放送到前声场的声音一分为二,一路是中低频信号送往中低音喇叭;一路高频信号送往高音喇叭。因为前声场一左一右有两套中低音+高音,所以需要两个分频器,一左一右; 一般的车载音响后排位置就安装同轴喇叭,就是中音跟高音都已经集成在一个喇叭上,其中也接有了一个电容进行粗略的分频,所以后声场不需要另外的分
[嵌入式]
汽车喇叭需要几个分频器比较好
苹果用iphone配置车辆个性化参数
    据国外媒体报道,美国专利商标局(USPTO)周四公布的一则苹果专利申请内容显示,苹果正试图使其移动设备进入汽车驾驶个性化设置数据存储市场,此类设置资料存储也可用于家居等环境当中。     苹果在提交的专利申请中表示,利用苹果开发的系统,驾车者可将适合自己驾驶习惯的设置数据存储到苹果移动设备当中,如汽车座椅、方向盘及后视镜的相应位置,甚至驾车者进入车内后汽车应该给予的车内温度等数据。     该系统也可用于家居环境,比如主人回到家之后,利用该系统,房间灯光亮度、电视具体频道以及其他家用电器都能按照主人事先的设置而打开。     目前一些高端汽车已经提供了驾驶者资料存储功能,即汽车能够根据驾驶者的不同,而自动设置好
[汽车电子]
配置曝光:诺基亚9 (2018)或将支持屏内指纹识别
    去年年底的时候,有外媒曝光了诺基亚9 (2018)的渲染图,而在本月早些时候,外媒又曝光了这款手机的配置细节,若曝光消息属实,那么这款手机将是诺基亚的年度旗舰。该机将采用一块5.7吋大小的无边框显示屏,而屏幕比例则是18:9,并搭载骁龙845处理器。   此前还有消息称诺基亚9 (2018)还将支持屏内指纹识别功能,现在又有“可信赖”资源透露该机的确将采用屏下指纹识别功能。目前,vivo为唯一一家发售屏下指纹识别的手机制造商。 屏下指纹识别功能   除此之外,诺基亚9(2018)在设计、相机等方面都将迎来突破性创新,或还将引用iPhone X的“刘海”屏。   那么,事实的真相是否如呢?我们还将拭目以待。
[手机便携]
STM32F0xx_RTC实时时钟配置详细过程
Ⅰ、概述 今天总结RTC(Real Time Clock)实时时钟相关的知识,顺带将BKP简单总结一下。 STM32的RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后, RTC的设置和时间维持不变。 STM32F0的RTC模块和F1的RTC模块最大区别在于F0模块中有“DATE”和“TIME”寄存器,也就是可以直接读取寄存器里面的值,而F1是秒计数寄存器的值,需要通过相关算法下才能得到时间的值。 本文提供的软件工程里面还包含一个BKP模块,主要是用于掉电保持RTC数值(第一次上电初始化RTC,后面就不用初始化)。例程是在第一次初始化RTC值为:2016年6月5日 周七 12:00:00
[单片机]
STM32F0xx_RTC实时时钟<font color='red'>配置</font>详细过程
可重配置光分插复用器(ROADM)的嵌入式控制
  对于城域网络和长途网络来说,如果光传送层具有远程重新配置的能力,则可以极大地降低运营成本。运营商也已经意识到这种潜力,并在最近业务网络的招标中加入了对于可重配置光分插复用器(ROADM)以及多维光开关的要求。   对于ROADM这项新技术的关注开始于电信业大滑坡之际,当时,设备商纷纷在新产品开发上减少投资。几乎没有几家公司顾得上认真地研究ROADM带来的机会,而有些公司则争先恐后地以最快的速度、最低廉的成本补全它们的产品线。不过值得庆幸的是:我们还可以通过其它方式来满足ROADM这个新的市场需求。 ROADM是什么?   “ROADM”是指一种网络元素(或称节点),通过远程的重新配置,可以动态上下业务波长,并且,业务波
[嵌入式]
5.5KW电机应该配置多大的交流接触器?
交流接触器在电机控制电路当中应用非常的广泛,可以毫不夸张的说:大部分的电机电力拖动都离不开交流接触器的控制,提起交流接触器,相信很多的电工师傅们都很熟悉,并且经常使用和维修,但是提起如何给电机或者其他设备选择合适的相匹配的交流接触器,相信很多的电工师傅都不清楚,今天我们就重点来看看如何给电机选择合适的交流接触器: 首先来对交流接触器做一个基本认识: 解释:图片上方为电动机的额定功率~工作电流~交流接触器的型号规格,三者是一一对应的!例如:15KW的电机,工作电流大概为30A,我们可以选用CJX2–4010的交流接触器。 每一个交流接触器都有一个型号规格 下面我们来看一下具体的计算方法: 一,首先我们需要根据电动机的功率来计
[嵌入式]
5.5KW电机应该<font color='red'>配置</font>多大的交流接触器?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved