#ifndef __USBREG_H

#define __USBREG_H

/* usb设备中断定义 usb_devintst usb_devinten usb_devintclr usb_devintdet*/

#define FRAME_INT           0x00000001  //每隔1MS产生一次帧中断,该中断用在同步包的传输中

#define EP_FAST_INT         0x00000002  //端点的快速中断,在端点中断优先级中设置端点优先级别

#define EP_SLOW_INT         0x00000004  //端点的慢速中断,在端点中断优先级中设置端点优先级别

#define DEV_STAT_INT        0x00000008  //usb中断复位 挂起或者改变连接的时候触发

#define CCEMTY_INT          0x00000010  //命令代码寄存器为空的时候中断,标志着写入的命令已经执行

#define CDFULL_INT          0x00000020  //命令数据寄存器已满,现在可以读取数据

#define RxENDPKT_INT        0x00000040  //在端点缓冲区中的当前数据包已经传送给CPU

#define TxENDPKT_INT        0x00000080  //传递到端点缓冲区中的包长度和指定的最大长度相等,端点满

#define EP_RLZED_INT        0x00000100  //端点被使用,在设置选择端点或者设备最大长度的时候完成设置,置位

#define ERR_INT             0x00000200  //usb的任何总线错误中断

/* usb数据传送长度相关 */

#define PKT_LNGTH_MASK      0x000003FF  //接收包长度和发送包长度设置的掩码 usb_rxplen usb_txplen

#define PKT_DV              0x00000400  //usb接受包数据有效 在传输过程特别是同步端点中有效 usb_rxplen

#define PKT_RDY             0x00000800  //usb接收包指示的长度有效并随时可以读出(在使用PKT_DV的情况下)usb_rxplen

/* usb控制字节定义 usb_ctrl */

#define CTRL_RD_EN          0x00000001  //usb读模式控制 需要从usb中读取数据

#define CTRL_WR_EN          0x00000002  //usb写模式控制,需要向usb端点写入数据,读写完成时,自动清零

#define CTRL_LOG_ENDPOINT_MASK  (0X0F<<2)//2-5位

/* usb命令寄存器的命令 usb_cmd_code 8-15位 02为读 01为写 05为纯命令*/

#define CMD_SET_ADDR        0x00D00500  //设置设备地址 后面跟设备地址 0-6为地址 7为设备使能 1设备使能 0设备不响应自身地址的包

#define CMD_CFG_DEV         0x00D80500  //配置设备,将所有已经使能的非控制端点作出响应(很重要)

#define CMD_SET_MODE        0x00F30500  //设置模式包括时钟 输入端点 输出端点 批量端点的ack

#define CMD_RD_FRAME        0x00F50500  //帧编号

#define DAT_RD_FRAME        0x00F50200  //读取帧编号

#define CMD_RD_TEST         0x00FD0500  //测试寄存器

#define DAT_RD_TEST         0x00FD0200  //读取测试寄存器,如果usb_clk在运行,那么将返回0xa50f

#define CMD_SET_DEV_STAT    0x00FE0500  //设置设备状态 包括usb连接 uab挂起或者usb总线复位

#define CMD_GET_DEV_STAT    0x00FE0500  //获取设备状态

#define DAT_GET_DEV_STAT    0x00FE0200  //读取设备状态

#define CMD_GET_ERR_CODE    0x00FF0500  //获取错误代码

#define DAT_GET_ERR_CODE    0x00FF0200  //读取错误代码 数据低四位是错误代码 0x0000无错误

#define CMD_RD_ERR_STAT     0x00FB0500  //读取错误状态 包括crc错误 pid错误 填充错误等usb总线错误

#define DAT_RD_ERR_STAT     0x00FB0200  //读取错误状态

#define DAT_WR_BYTE(x)     (0x00000100 | ((x) << 16))   //向usb命令数据寄存器写入数据,因为只有16-23位是有效的

#define CMD_SEL_EP(x)      (0x00000500 | ((x) << 16))   //usb选择端点

#define DAT_SEL_EP(x)      (0x00000200 | ((x) << 16))   //选择端点 可以获得端点状态端点空 满或者其他

#define CMD_SEL_EP_CLRI(x) (0x00400500 | ((x) << 16))   //usb选择端点/清除中断

#define DAT_SEL_EP_CLRI(x) (0x00400200 | ((x) << 16))   //usb设置端点状态(端点使能,端点暂停 速率反馈等)

#define CMD_SET_EP_STAT(x) (0x00400500 | ((x) << 16))   //

#define CMD_CLR_BUF         0x00F20500

#define DAT_CLR_BUF         0x00F20200  //usb清除端点缓冲区

#define CMD_VALID_BUF       0x00FA0500  //确认缓冲区,当该命令发送时,告诉端点下一个in包来的时候将端点缓冲区数据发送到主机

/* 设备地址设置 0-6为地址 7为设备使能 1设备使能 0设备不响应自身地址的包*/

#define DEV_ADDR_MASK       0x7F

#define DEV_EN              0x80

/* 设备配置  所有已经使能的非控制端点作出响应*/

#define CONF_DVICE          0x01

/* 设置模式 命令的数据定义 */

#define AP_CLK              0x01    //在挂起状态是否能够关闭48M时钟

#define INAK_CI             0x02    //控制IN端点的nak中断  0数据处理成功完成之后才返回nak中断   1

#define INAK_CO             0x04    //控制out端点的nak中断

#define INAK_II             0x08    //中断in端点的nak中断

#define INAK_IO             0x10    //中断out端点的nak 中断

#define INAK_BI             0x20    //批量in nak端点的nak中断

#define INAK_BO             0x40    //批量out端点的nak中断

/* 设置设备状态的命令数据定义 */

#define DEV_CON             0x01    // 0 connect关键低电平 1 connect管脚高电平

#define DEV_CON_CH          0x02    //连接发生了改变

#define DEV_SUS             0x04    //设备被挂起

#define DEV_SUS_CH          0x08    //设备挂起位发生变化

#define DEV_RST             0x10    //设备接收到总线复位

/* 错误代码数据定义 */

#define ERR_EC_MASK         0x0F    //错误代码掩码

#define ERR_EA              0x10    //当前存在错误代码

/* 错误状态的具体定义 */

#define ERR_PID             0x01    //PID编码错误

#define ERR_UEPKT           0x02    //意外的数据包

#define ERR_DCRC            0x04    //数据crc错误

#define ERR_TIMOUT          0x08    //超时错误

#define ERR_EOP             0x10    //数据包结尾错误

#define ERR_B_OVRN          0x20    //缓冲区溢出

#define ERR_BTSTF           0x40    //位填充错误

#define ERR_TGL             0x80    //数据PID中的错误翻转位

/* 端点选择寄存器返回的端点信息 */

#define EP_SEL_F            0x01    //in端点空或者out端点满

#define EP_SEL_ST           0x02    //暂停的端点指示器

#define EP_SEL_STP          0x04    //所选端点上一次接受到setup包

#define EP_SEL_PO           0x08    //之前接受到包被setup包覆盖

#define EP_SEL_EPN          0x10    //设备发送nack

#define EP_SEL_B_1_FULL     0x20    //缓冲区1状态 1满 0空

#define EP_SEL_B_2_FULL     0x40    //缓冲区2状态

/* 端点状态位设置 */

#define EP_STAT_ST          0x01    //设置端点暂停(收到setup包,端点自动暂停)

#define EP_STAT_DA          0x20    //设置端点使能

#define EP_STAT_RF_MO       0x40    //中断端点是否处于速率反馈模式

#define EP_STAT_CND_ST      0x80    //端点条件暂停位

/* 清空端点时可以读到的状态 */

#define CLR_BUF_PO          0x01    //之前收到的数据包被setup包覆盖

/* DMA中断位定义 */

#define EOT_INT             0x01    //dma传输结束中断位

#define NDD_REQ_INT         0x02    //dma DD请求中断位

#define SYS_ERR_INT         0x04    //dma 系统错误中断位

#endif

LPC1768的USB使用--宏定义的更多相关文章

  1. 宏定义中的##操作符和... and _ _VA_ARGS_ _

    1.Preprocessor Glue: The ## Operator 预处理连接符:##操作符 Like the # operator, the ## operator can be used i ...

  2. c++宏定义命令

    在程序开始以#开头的命令,他们是预编译命令.有三类预编译命令:宏定义命令.文件包含命令.条件编译命令:今天聊聊宏定义: 宏定义命令将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替 ...

  3. dll导入导出宏定义,出现“不允许 dllimport 函数 的定义”的问题分析

    建立dll项目后,在头文件中,定义API宏 #ifndef API_S_H #define API_S_H ...... #ifndef DLL_S_20160424 #define API _dec ...

  4. iOS之常用宏定义

    下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...

  5. linux中offsetof与container_of宏定义

    linux内核中offsetof与container_of的宏定义 #define offsetof(TYPE, MEMBER)    ((size_t) &((TYPE *)0)->M ...

  6. Linux Kernel代码艺术——系统调用宏定义

    我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...

  7. 面试问题5:const 与 define 宏定义之间的区别

    问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同     define宏是在预处理阶段展开:     const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...

  8. 关于Xcode8.1 / iOS10+ 真机测试系统打印或者宏定义打印不显示问题

    前言: 最近做项目时遇到了很多莫名其妙的问题,其中就有这个打印(NSLog).也不多废话了,我们先来回顾一下Xcode8发布以来,我们遇到的一些关于打印的问题,当然也有解决方法: 1.Xcode8打印 ...

  9. JDStatusBarNotification和一些宏定义

    // //  AddTopicViewController.m //  vMeet2 // //  Created by 张源海 on 16/6/30. //  Copyright © 2016年 h ...

随机推荐

  1. Linux标准目录

    本文参考鸟哥的linux私房菜 /bin 获得最小的系统可操作性所需要的命令 /boot 内核和加载内核所需要的文件 /dev 终端.磁盘.调制解调器等的设备项 /etc 关键的启动文件和配置文件 / ...

  2. CDockablePane使用总结

    基于 http://blog.csdn.net/kikaylee/article/details/8936953 CDockablePane的基本布局和用法 新建一个SDI工程,在CMainFrame ...

  3. Python中元素定位探讨

    以下以阿里云(10.10.1.11)系统中考试答题为例进行了python脚本的编写研究.模糊定位(定位一些动态值): ————————————————————————————————————————— ...

  4. [转]java static final 初始化

    http://tanbing1986411.blog.163.com/blog/static/7259798220103610224434/ java static final 初始化 1.stati ...

  5. 关于html5的几个新标签在IE9之前不支持的解决办法

    IE8及之前的浏览器不支持用CSS的方法来使用这些尚未支持的结构元素,为了在Internet Explorer浏览器中也能正常使用这些结构元素,需要使用JavaScript脚本,如下:<scri ...

  6. JAVA动态代理详解

    1.什么是代理 代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 2.什么是动态代理 在程 ...

  7. 转:Loadrunner——Block(块)技术

    在使用LoadRunner时经常遇到这样一个问题,如果对不同的事务进行不同次数的循环该怎么处理?默认情况下LR对所有的事务都是统一执行的,即虽然有多个事务,但它们被执行的循环次数都是一样的,那么LR如 ...

  8. C++:string类的使用

    类 <string> std::string String类的定义 , 其也是个模板类 typedef basic_string<char> string; String cl ...

  9. realypay

    1.判断新老接口的方法: 去网站后台接口配置的地方,如果有merchantno参数就是新接口,否则为老接口,新接口则不需要更新了. 2.老接口需要去网站后台卸载老的接口,然后再用新的(下载的文件)覆盖 ...

  10. stock 仓位

    别胆大求多,不轻信盲从.抓住几只自己长期关注并看好的股票.将这几只股票选为自选股,而其他股,不管是机构推荐还是股评荐股,都要谨慎,不轻易听从. 巧用“三三制”,根据趋势控制仓位.当不知道是在涨还是在跌 ...