LPC1768的USB使用--宏定义
#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使用--宏定义的更多相关文章
- 宏定义中的##操作符和... and _ _VA_ARGS_ _
1.Preprocessor Glue: The ## Operator 预处理连接符:##操作符 Like the # operator, the ## operator can be used i ...
- c++宏定义命令
在程序开始以#开头的命令,他们是预编译命令.有三类预编译命令:宏定义命令.文件包含命令.条件编译命令:今天聊聊宏定义: 宏定义命令将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替 ...
- dll导入导出宏定义,出现“不允许 dllimport 函数 的定义”的问题分析
建立dll项目后,在头文件中,定义API宏 #ifndef API_S_H #define API_S_H ...... #ifndef DLL_S_20160424 #define API _dec ...
- iOS之常用宏定义
下面我为大家提供一些常用的宏定义! 将这些宏定义 加入到.pch使用 再也不用 用一次写一次这么长的程序了 //-------------------获取设备大小------------------- ...
- linux中offsetof与container_of宏定义
linux内核中offsetof与container_of的宏定义 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->M ...
- Linux Kernel代码艺术——系统调用宏定义
我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...
- 面试问题5:const 与 define 宏定义之间的区别
问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同 define宏是在预处理阶段展开: const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...
- 关于Xcode8.1 / iOS10+ 真机测试系统打印或者宏定义打印不显示问题
前言: 最近做项目时遇到了很多莫名其妙的问题,其中就有这个打印(NSLog).也不多废话了,我们先来回顾一下Xcode8发布以来,我们遇到的一些关于打印的问题,当然也有解决方法: 1.Xcode8打印 ...
- JDStatusBarNotification和一些宏定义
// // AddTopicViewController.m // vMeet2 // // Created by 张源海 on 16/6/30. // Copyright © 2016年 h ...
随机推荐
- Tinyxml封装类COperatorXml
OperatorXml.h头文件 #ifndef _OPERATOR_XML_H_ #define _OPERATOR_XML_H_ #include <string> class TiX ...
- AppCompatActivity工具栏的设置(返回操作)
<android.support.v7.widget.Toolbar android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionB ...
- 初探JavaScript魅力(二)
行为,样式,结构三者分离(javascript, css, html),不要在行间加行为,样式 样式优先级:*<标签<class<ID<行间 style与className,如 ...
- 上传Android或Java库到Maven central repository(转载)
主要介绍利用Sonatype将jar或aar提交到Maven的中央仓库. 是不是希望将自己的jar或是aar传到maven官方库中,在The Central Repository中可以被其他人搜索使用 ...
- Illegal resource reference: @*android resources are private and not always present
0:前言 在android开发中,当使用别人的代码的时候,在style.xml中有此种错误 1:解决方案 删除*星号
- MFC 窗体背景图片设置
很多人在做MFC 界面的时候想要给对话框加入背景图片,很多人都会想到在OnPaint()里面来加一段代码来实现,其实这样做并不怎么科学,因为它会导致窗口不断重绘,在很多项目中窗口会闪烁(比如带播放视频 ...
- 使用print2flash开发在线文档
www.print2flash.com 命令行调用: A:\Program Files (x86)\Print2Flash3>p2fServer.exe a.pdf a.swf
- 用TcpClient如何获取远程网页的内容
用TcpClient如何获取远程网页的内容 private string GetHTMLTCP(string URL) { string strHTML = "";//用来保存获得 ...
- javascript 按位或(|),无符号右移(>>>)运算,组合技巧来实现————密码强度提示,四种情况??
直接上代码,原来的代码中,switch中的第一个case,判断之后,少加了个break 跳出判断语句,害得我查了半天,“怎么样式老是不对,不科学啊,呵呵,原来是没跳出case的判断了,还会执行后面的判 ...
- OpenGL学习--------颜色的选择
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式.无论哪种颜色模式,计算机都必须为每一个像素保存一些数据.不同的是,RGBA模式中,数据直接就代表了颜色:而颜色索引模式中,数据代表的是 ...