搜索
bottom↓
回复: 26

菜农NUC100学习笔记2(USB红杏是怎样出墙的?)

[复制链接]

出0入0汤圆

发表于 2010-12-6 03:17:28 | 显示全部楼层 |阅读模式
/*-------------------------------------------------------------------------------
文 件 名 : NUC1xxcfg.h
创 建 人 : Cortex-M0菜鸟HotPower@163.com,HotPower@126.com,QQ:1270688699
个 人 网 站 : www.hotpower.org,www.hotpower.net,www.hotpage.net.cn(合作及导航)
创 建 日 期 : 2010.10.18 18:18
最近修改日期 : 2010.12.6 3:18
创 建 地 点 : 西安大雁塔村队部
版 本 号 : V1.05 (红杏版)
修 改 原 因 : 规范并使寄存器模式也能控制到所有位
说 明 : 菜农掌握本版本的解释权利。
由于本头文件为开源,出现问题恕不承担一切责任。
备 注 : 本头文件风格归属于菜农的《红杏出墙》系列,堪称“红杏级别”
将本文件拷贝到...\CMSIS\CM0\DeviceSupport\Nuvoton\NUC1xx内。
-------------------------------------------------------------------------------*/

//----------------------------------------------------//
typedef enum
{
USBD_INTEN_BUS = 0,//1/0使能/禁止BUS事件中断
USBD_INTEN_USB = 1,//1/0 使能/禁止USB事件中断
USBD_INTEN_FLD = 2,//1/0使能/禁止 浮动检测中断
USBD_INTEN_WAKEUP = 3,//1/0 使能/禁止 唤醒功能
USBD_INTEN_WAKEUP_EN = 8,//1/0 使能/禁止USB 唤醒功能
USBD_INTEN_INNAK_EN = 15,//1/0 在接到IN标志后,设备响应NAK,使能/禁止中断
}NU_USBD_INTEN_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_INTEN_T Bits;
}NU_USBD_INTEN_T;
//----------------------------------------------------//
typedef enum
{
USBD_INTSTS_BUS = 0,//Bus 事件发生,通过ATTR[3:0]可知是哪类Bus事件发生,向EVF[0]写1清标志
USBD_INTSTS_USB = 1,//USB 事件发生,通过STS[6:4]可知是哪类USB事件发生
USBD_INTSTS_FLD = 2,//浮动检测事件发生,向EVF[2]写1 清标志
USBD_INTSTS_WAKEUP = 3,//唤醒事件发生,向EVF[3]写1 清标志
USBD_INTSTS_EPTF = 16,//1 = USB事件发生,通过STS[xxxx]可知是哪类USB事件发生
USBD_INTSTS_SETUP = 31,//1 = Setup事件发生,向EVF[31]写1清标志
}NU_USBD_INTSTS_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_INTSTS_T Bits;
}NU_USBD_INTSTS_T;
//----------------------------------------------------//
typedef enum
{
USBD_FADDR_FADDR = 0//USB设备的功能地址
}NU_USBD_FADDR_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_FADDR_T Bits;
}NU_USBD_FADDR_T;
//----------------------------------------------------//
typedef enum
{
USBD_EPSTS_OVERRUN = 7,//输出数据超过最大有效载荷或安装数据超过8字节
USBD_EPSTS_EPSTS0 = 8,//端点0的系统状态(000=In ACK~111=同步传输结束)
USBD_EPSTS_EPSTS1 = 11,//端点1的系统状态(000=In ACK~111=同步传输结束)
USBD_EPSTS_EPSTS2 = 14,//端点2的系统状态(000=In ACK~111=同步传输结束)
USBD_EPSTS_EPSTS3 = 17,//端点3的系统状态(000=In ACK~111=同步传输结束)
USBD_EPSTS_EPSTS4 = 20,//端点4的系统状态(000=In ACK~111=同步传输结束)
USBD_EPSTS_EPSTS5 = 23,//端点5的系统状态(000=In ACK~111=同步传输结束)
}NU_USBD_EPSTS_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_EPSTS_T Bits;
}NU_USBD_EPSTS_T;
//----------------------------------------------------//
typedef enum
{
USBD_ATTR_USBRST = 0,//SE0(single-ended 0) 超过2.5uS,总线复位.
USBD_ATTR_SUSPEND = 1,//Bus空闲超过3mS,表示 要么电缆没连接,要么主机正在休眠.
USBD_ATTR_RESUME = 2,//从暂停中恢复
USBD_ATTR_TIMEOUT = 3,//无响应超过18位时间
USBD_ATTR_PHY_EN = 4,//使能 PHY
USBD_ATTR_RWAKEUP = 5,//使USB总线处于K状态,以便远程唤醒.
USBD_ATTR_USB_EN = 7,//使能 USB
USBD_ATTR_DPPU_EN = 8,//使能 DP上拉电阻
USBD_ATTR_PDB = 9,//掉电 PHY, 低电平有效
}NU_USBD_ATTR_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_ATTR_T Bits;
}NU_USBD_ATTR_T;
//----------------------------------------------------//
typedef enum
{
USBD_FLDET_FLDET = 0//1/0: 连接/悬空
}NU_USBD_FLDET_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_FLDET_T Bits;
}NU_USBD_FLDET_T;
//----------------------------------------------------//
typedef enum
{
USBD_BUFSEG_BUFSEG = 3//仅用于标记设置(总线缓冲有效的开始地址= {BUFSEG[8:3], 3’b000})
}NU_USBD_BUFSEG_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_BUFSEG_T Bits;
}NU_USBD_BUFSEG_T;
//----------------------------------------------------//
typedef enum
{
USBD_EP_BUFSEG_BUFSEG = 0//USB缓冲有效的开始地址
}NU_USBD_EP_BUFSEG_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_BUFSEG_T Bits;
}NU_USBD_EP_BUFSEG_T;
//----------------------------------------------------//
typedef enum
{
USBD_EP_MXPLD_MXPLD = 0//ReadIN : 发送到主机的数据长度,OUT : 从主机接收到数据的实际长度.)
//WriteIN : 发送到主机的数据长度,OUT : 从主机接收到数据的最大长度
//注:一旦MXPLD被写,数据包将在IN/OUT标志到达之后立即发送/接收.
}NU_USBD_EP_MXPLD_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_MXPLD_T Bits;
}NU_USBD_EP_MXPLD_T;
//----------------------------------------------------//
typedef enum
{
USBD_EP_CFG_EPT = 0,//端点号
USBD_EP_CFG_ISOCH = 4,//同步,无握手
USBD_EP_CFG_STATE = 5,//状态(00 = 禁止端点01 = Out 端点10 = IN 端点11 = 无定义)
USBD_EP_CFG_DSQ = 7,//主机应答之后,IN标记自动指定为数据0或1.
USBD_EP_CFG_STALL_CTL = 9,//1 = 在setup阶段允许自动清stall
}NU_USBD_EP_CFG_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_CFG_T Bits;
}NU_USBD_EP_CFG_T;
//----------------------------------------------------//
typedef enum
{
USBD_EP_CFGP_CFGP = 0,//IN: 写 ‘1’ 清in ready (由MXPLD置1).OUT: 写 ‘1’清out ready(由MXPLD置1)
USBD_EP_CFGP_STALL = 1,//置1, 使设备响应STALL
}NU_USBD_EP_CFGP_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_CFGP_T Bits;
}NU_USBD_EP_CFGP_T;
//----------------------------------------------------//
typedef struct
{
__IO NU_USBD_EP_BUFSEG_T BUFSEG;//端点0~5的缓冲分割寄存器
__IO NU_USBD_EP_MXPLD_T MXPLD;//端点0~5的最大有效载荷寄存器
__IO NU_USBD_EP_CFG_T CFG;//端点0~5的配置寄存器
__IO NU_USBD_EP_CFGP_T CFGP;//端点0~5的额外配置寄存器
}NU_USBD_EP_T;
//----------------------------------------------------//
typedef enum
{
USBD_DRVSE0_DRVSE0 = 0//1/0: 驱动 se0/无
}NU_USBD_DRVSE0_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_DRVSE0_T Bits;
}NU_USBD_DRVSE0_T;
//----------------------------------------------------//
typedef enum
{
USBD_PDMA_PDMA_RW = 0,//0 = 从内存读数据到USB缓存,1 = 从USB缓存读数据到内存
USBD_PDMA_PDMA_EN = 0//0 = 禁止PDMA,1 = 使能PDMA,该位在PDMA传输完毕后自动清零.
}NU_USBD_PDMA_ENUM;

typedef volatile union
{
NU_REG Regs;
USBD_PDMA_T Bits;
}NU_USBD_PDMA_T;
//----------------------------------------------------//
typedef struct
{
__IO NU_USBD_INTEN_T INTEN;//中断使能寄存器
__IO NU_USBD_INTSTS_T INTSTS;//中断事件标志寄存器
__IO NU_USBD_FADDR_T FADDR;//功能地址寄存器
__IO NU_USBD_EPSTS_T EPSTS;//系统状态寄存器
__IO NU_USBD_ATTR_T ATTR;//总线状态&归属寄存器
__I NU_USBD_FLDET_T FLDET;//悬空检测寄存器
__IO NU_USBD_BUFSEG_T BUFSEG;//缓冲分割寄存器
__I NU_REG RESERVE0;
union{
__IO NU_USBD_EP_T EP[6];//端点数组0~5
struct{
__IO NU_USBD_EP_T EP0;//端点0
__IO NU_USBD_EP_T EP1;//端点1
__IO NU_USBD_EP_T EP2;//端点2
__IO NU_USBD_EP_T EP3;//端点3
__IO NU_USBD_EP_T EP4;//端点4
__IO NU_USBD_EP_T EP5;//端点5
};
};
__I NU_REG RESERVE1[4];
__IO NU_USBD_DRVSE0_T DRVSE0;//驱动SE0寄存器(1/0: 驱动 se0/无)
__I NU_REG RESERVE2[4];
__IO NU_USBD_PDMA_T PDMA;//PDMA 控制寄存器
}NU_USBD_T;

//----------------------------------------------------//
#define USBDs (*((NU_USBD_T *) USBD_BASE))//定位全局结构变量USBDs
//----------------------------------------------------//
#define USBDx ((NU_USBD_T *) USBD_BASE)
//----------------------------------------------------//

出0入0汤圆

 楼主| 发表于 2010-12-6 03:29:48 | 显示全部楼层
沙发自己坐,这是俺的革_命传统~~~
头像被屏蔽

出0入0汤圆

发表于 2010-12-6 04:15:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2010-12-6 05:19:46 | 显示全部楼层
《钢“贴”是怎样炼成的?》--菜农红杏系列节选

出0入0汤圆

 楼主| 发表于 2010-12-6 06:08:09 | 显示全部楼层
两个不眠夜,共计3626行,113KByte.

准备宣布正式做华邦的CM0菜鸟~~~

迷糊一会,后天乒乓球比赛,明天要练球了~~~

俺为什么如此玩命???

因为太多的人不明白M0的真谛!!!

出0入0汤圆

 楼主| 发表于 2010-12-6 06:10:15 | 显示全部楼层
晕,鸡叫了,菜农一会就要下地了,可恨的周扒皮!!!

出0入0汤圆

 楼主| 发表于 2010-12-6 07:36:21 | 显示全部楼层
起床了…
上班后移植到m051上。

速度和空间及编程效率都会有大的提高…

本想用c++编程,但由于反对俺的人太多,为了安全,准备用com接口封装底层驱动…

为了效率,可能俺全部替换库函数…

累,可惜现在连菜鸟的级别都不到,继续努力…

出0入0汤圆

发表于 2010-12-6 07:46:48 | 显示全部楼层
两个不眠夜,钢“贴”是这样炼成的

出0入0汤圆

发表于 2010-12-6 08:46:48 | 显示全部楼层
ding....
呵呵。好事情啊。

出0入0汤圆

发表于 2010-12-6 09:13:22 | 显示全部楼层
"两个不眠夜,共计3626行,113KByte."高手就是这样炼成的,向菜农学习。

出0入0汤圆

发表于 2010-12-6 09:26:46 | 显示全部楼层
菜农一出现就是酷贴,厉害

出0入0汤圆

发表于 2010-12-6 09:30:02 | 显示全部楼层
哈哈,支持!见到菜农真高兴。

出0入0汤圆

发表于 2010-12-6 09:52:21 | 显示全部楼层
多谢。受教了

出0入0汤圆

发表于 2010-12-6 09:57:54 | 显示全部楼层
前排围观,哈哈

出0入0汤圆

发表于 2010-12-6 09:58:49 | 显示全部楼层
回复【楼主位】hotpower 菜农
---------------------------------------------------------------------

欢迎菜农

出0入0汤圆

发表于 2010-12-6 10:00:05 | 显示全部楼层
m核arm不知道从何学起 闷 学习一下

出0入0汤圆

 楼主| 发表于 2010-12-6 10:09:57 | 显示全部楼层
顶风作案,在红杏系列强大的支持下,nuc120硬件裸奔成功。
这样菜农就已具备了当华邦cortex-m0的资格了。
晚上贴图发帖正式宣布做菜鸟…

出0入0汤圆

发表于 2010-12-6 10:18:04 | 显示全部楼层
菜农兄不错啊,你那M051的文章我昨天借用了

出350入8汤圆

发表于 2010-12-6 11:20:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-6 22:37:38 | 显示全部楼层
围观

出0入0汤圆

发表于 2010-12-7 14:44:38 | 显示全部楼层
好贴!标记.

出0入0汤圆

发表于 2010-12-7 15:24:17 | 显示全部楼层
弄了20片M054,我也开始玩M054了,多谢菜农辛勤劳动!

出0入0汤圆

发表于 2010-12-7 17:34:11 | 显示全部楼层
菜农叔叔也玩CM0了,顶你!

出0入0汤圆

 楼主| 发表于 2010-12-8 01:25:46 | 显示全部楼层

(原文件名:华邦CM0之C++裸奔艳照.gif)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 06:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表