周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 USB驱动程序简要说明及应用例子 USB总线主要用于USB设备与主机之间的数据通信,特别为USB设备与主机之间大 量数据的传输提供了高速、可靠的传输协议。例如:在嵌入式系统中,可以利用USB设备 与微控制器构成USB设备。USB设备与PC机USB主控器相连就可以实现嵌入式系统与 PC机之间的通信了,也就可以实现诸如U盘、移动硬盘、USB接口打印机等功能。 本驱动程序利用 Philips公司生产的USB芯片 PDIUSBD1与微控制器构成USB设备 在μCOS-Ⅱ操作系统上实现该USB设备与PC机通信的USB协议,为用户提供与PC机通 信的API函数。 下面先简单介绍USB芯片 PDIUSBD2。 1.1PD|USBD12简介 PDIUSBD12是一款性价比很高的USB器件,完全符合USB1.版的规范。具有以下特 性: 高性能USB接口器件,集成了SI、FIFO存储器、收发器以及电压调整器; 可与任何外部微控制器/微处理实现高速并行接口(2M字节/秒) ●完全自治的直接内存存取(DMA)操作 集成320字节多结构FIFO存储器 在批量模式和同步模式下均可实现1M字节/秒的数据传输速率 在挂起时可控制 Lazy Clock输出 采用 GoodLink技术的连接指示器,在通讯时使LED闪烁 可编程的时钟频率输出 符合ACPI、 OnNoW和USB电源管理的要求; 内部上电复位和低电压复位电路 有SO28和 TSSOP28封装 工业级操作温度:-40℃~+85℃ 高于&kV的在片静电防护电路,减少了额外元件的费用 ●具有高错误恢复率(>99%)的全扫描设计确保了高品质 双电源操作:3.3±0.3V或扩展的5V电源,范围为36-55V: PDIUSBDI2管脚排列及内部功能框图如图1所示,表1为 PDIUSBD12的管脚说明。 DATACOD AD ATA<4 742 内部RA 上游端口 位时钟恢复 21GLN PHILIPS 存储器 DATA<7>9 RESET N 串行接口引擎 CLKOUT国 电压调整器 并行和D INT_N 4 图1 PDIUSBD12管脚排列及内部功能框图
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 USB 驱动程序简要说明及应用例子 USB 总线主要用于 USB 设备与主机之间的数据通信,特别为 USB 设备与主机之间大 量数据的传输提供了高速、可靠的传输协议。例如:在嵌入式系统中,可以利用 USB 设备 与微控制器构成 USB 设备。USB 设备与 PC 机 USB 主控器相连就可以实现嵌入式系统与 PC 机之间的通信了,也就可以实现诸如 U 盘、移动硬盘、USB 接口打印机等功能。 本驱动程序利用 Philips 公司生产的 USB 芯片 PDIUSBD12 与微控制器构成 USB 设备, 在 µC/OS-II 操作系统上实现该 USB 设备与 PC 机通信的 USB 协议,为用户提供与 PC 机通 信的 API 函数。 下面先简单介绍 USB 芯片 PDIUSBD12。 1.1 PDIUSBD12 简介 PDIUSBD12 是一款性价比很高的 USB 器件,完全符合 USB1.1 版的规范。具有以下特 性: z 高性能 USB 接口器件,集成了 SIE、FIFO 存储器、收发器以及电压调整器; z 可与任何外部微控制器/微处理实现高速并行接口(2M 字节/秒); z 完全自治的直接内存存取(DMA)操作; z 集成 320 字节多结构 FIFO 存储器; z 在批量模式和同步模式下均可实现 1M 字节/秒的数据传输速率; z 在挂起时可控制 LazyClock 输出; z 采用 GoodLink 技术的连接指示器,在通讯时使 LED 闪烁; z 可编程的时钟频率输出; z 符合 ACPI、OnNOW 和 USB 电源管理的要求; z 内部上电复位和低电压复位电路; z 有 SO28 和 TSSOP28 封装; z 工业级操作温度:-40℃~+85℃; z 高于 8kV 的在片静电防护电路,减少了额外元件的费用; z 具有高错误恢复率(>99%)的全扫描设计确保了高品质; z 双电源操作:3.3±0.3V 或扩展的 5V 电源,范围为 3.6~5.5V; PDIUSBD12 管脚排列及内部功能框图如图 1 所示,表 1 为 PDIUSBD12 的管脚说明。 1 2 3 4 5 6 7 8 9 10 11 12 17 18 19 20 21 22 23 24 25 26 27 DATA<0> 28 DATA<1> DATA<2> DATA<3> GND DATA<4> DATA<5> DATA<6> DATA<7> ALE CS_N A0 VOUT3.3 D+ D– VDD XTAL2 XTAL1 RESET_N GL_N EOT_N DMACK_N SUSPEND DMREQ CLKOUT 13 16 WR_N INT_N 14 15 RD_N 控制 模拟 收发器 上游端口 PLL锁相环 位时钟恢复 PHILIPS 串行接口引擎 电压调整器 SoftConnect 内部RAM 存储器 管理单元 并行和DMA 接口 图 1 PDIUSBD12 管脚排列及内部功能框图 - 1 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 如图1所示, PDIUSBD12芯片内部集成了串行接口引擎SIE、存储器管理单元(MMU) 和集成RAM、模拟收发器以及电压调整器。可与任何外部微处理器实现高速数据传输的并 行接口(2MB/s)。 PDIUSBD12芯片提供3个端点,其中主端点(端点2)的双缓冲配置增 加了数据吞吐量并轻松实现实时数据传输。 PDIUSBD2采用 GoodLink技术的连接指示器,在通讯时使LED闪烁,为通信状态提供 了用户友好的指示,方便用户调试。 Softconnect技术允许系统微控制器可控制USB总线重 新连接和重新初始化而不需要拔出电缆 PDIUSBDI2的详细介绍请见北航出版的<< PDIUSBD2USB固件编程与驱动开发》或 到htp//vww.zlgmcu.com网站下载PDIUSBD12使用手册 表1 PDIUSBD12管脚描述 长型 I DATA<O> 双向数据位0 2DATA1>02双向数据位 3 DATA<2>102 双向数据位2 DATA<3> 双向数据位3 5 GND 6 DATA<4> 向数据位4 7 DATA<5> 102 双向数据位5 8DATA<6>1O2双向数据位6 9 DATA<7>102 双向数据位7 地址锁存使能。在多路地址数据总线中,下降沿关闭地址信息锁存 10 ALE 将其固定为低电平用于单地址/数据总线配置。 11 CS N 片选(低有效) 12 SUSPEND|LoD4器件挂起状态,高电平表示器件处于挂起状态 13 CLKOUT02 可编程时钟输出(可控分频) 14 INT_N OD4 中断(低有效) 15RD N 读选通(低有效) 16 WR N 写选通(低有效) 7 DMREQ 04 DMA请求 18 DMACK I DMA应答(低有效) DMA传输结束(低有效)。EOTN仅当 DMACK N和RDN或 19 EOT_N WRN一起激活时才有效。 20 RESET N 复位(低有效且不同步)。片内上电复位电路,该管脚可固定接vc 21 GL_NOD8 GoodLink LED指示器(低有效) 22 XTALI 晶振连接端1(6MHz) 接端2(6MHz)。如果采用外部时钟信号取代晶振,可连接 23 XTAL2 XTAL1,XTAL2应当悬空 电源电压(40V~55V),要使器件工作在3.3V,对V和Ⅴoum3脚 都提供3.3V A USBD数据线 26D+ A|UsBD+数据线
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 如图 1 所示,PDIUSBD12 芯片内部集成了串行接口引擎 SIE、存储器管理单元(MMU) 和集成 RAM、模拟收发器以及电压调整器。可与任何外部微处理器实现高速数据传输的并 行接口(2MB/s)。PDIUSBD12 芯片提供 3 个端点,其中主端点(端点 2)的双缓冲配置增 加了数据吞吐量并轻松实现实时数据传输。 PDIUSBD12 采用GoodLink技术的连接指示器,在通讯时使LED闪烁, 为通信状态提供 了用户友好的指示, 方便用户调试。SoftConnect TM技术允许系统微控制器可控制USB总线重 新连接和重新初始化而不需要拔出电缆。 PDIUSBD12 的详细介绍请见北航出版的<<PDIUSBD12 USB 固件编程与驱动开发>>或 到 http://www.zlgmcu.com 网站下载 PDIUSBD12 使用手册。 表 1 PDIUSBD12 管脚描述 管脚 符 号 类型 描 述 1 DATA<0> IO2 双向数据位 0 2 DATA<1> IO2 双向数据位 1 3 DATA<2> IO2 双向数据位 2 4 DATA<3> IO2 双向数据位 3 5 GND P 地 6 DATA<4> IO2 双向数据位 4 7 DATA<5> IO2 双向数据位 5 8 DATA<6> IO2 双向数据位 6 9 DATA<7> IO2 双向数据位 7 10 ALE I 地址锁存使能。在多路地址/数据总线中,下降沿关闭地址信息锁存。 将其固定为低电平用于单地址/数据总线配置。 11 CS_N I 片选(低有效) 12 SUSPEND I,OD4 器件挂起状态,高电平表示器件处于挂起状态 13 CLKOUT O2 可编程时钟输出(可控分频) 14 INT_N OD4 中断(低有效) 15 RD_N I 读选通(低有效) 16 WR_N I 写选通(低有效) 17 DMREQ O4 DMA 请求 18 DMACK_N I DMA 应答(低有效) 19 EOT_N I DMA 传输结束(低有效)。EOT_N 仅当 DMACK_N 和 RD_N 或 WR_N 一起激活时才有效。 20 RESET_N I 复位(低有效且不同步)。片内上电复位电路,该管脚可固定接VCC。 21 GL_N OD8 GoodLink LED 指示器(低有效) 22 XTAL1 I 晶振连接端 1(6MHz) 23 XTAL2 O 晶振连接端 2(6MHz)。如果采用外部时钟信号取代晶振,可连接 XTAL1,XTAL2 应当悬空。 24 VCC P 电源电压(4.0V~5.5V),要使器件工作在 3.3V,对VCC和VOUT3.3脚 都提供 3.3V。 25 D- A USB D-数据线 26 D+ A USB D+数据线 - 2 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 (接上表) 3.3V调整输出。要使器件工作在3.3V,对Vcc和Vou、脚都提供 27v 地址位。A0=1选择命令指令,A0=0选择数据。该位在多路地址/ 28A0 I 数据总线配置时可忽略,应将其接高电平 2mA驱动输出 OD4:4mA驱动开漏输出 OD8:8mA驱动开漏输出0O2:4mA输出 在没有使用到DMA方式的时候, DMACK N和EOTN要求接上拉电阻。 明白了 PDIUSBD12所提供的资源与硬件接口,便可以设计 PDIUSBD2与LPC2200的 硬件电路了。 12 PDIUSBD12与LPc2200的硬件电路设计 这里以LPC2200微控制器与 PDIUSBD12构成USB设备, PDIUSBD2连接到LPC2200 的硬件原理图如图2所示,由该图可见 PDIUSBD2各引脚(图2中的网络标号)与LPC2200 的连接关系,如表2所示。 表2 PDIUSBD12与LPC2200连接关系 PDIUSBD12 LPC2200 D0~D7 PDIUSBD12数据总线 D0~D7 PDIUSBD2地址总线 CS USB PDIUSBDI2片选线 nCS2 PDIUSBD2读使能(低电平有效) PDIUSBD2写使能(低电平有效) nEW INT USB PDIUSBD12中断输出信号 PO.16 EINTO RST USB PDIUSBD2复位输入信号 SUSP PDIUSBD2挂起输入信号 PO. 13 DTR 由以上关系,可知 PDIUSBD12使用LPC2200外部存储控制的Bank2部分,其地址如 数据地址0x82000000(偶数地址) 命令地址0x8200000(奇数地址) RST USB、SUSP为LPC2200输出引脚, PDIUSBD12中断信号为中断输入信号,且为 外部中断0。 如图2所示C1、C2和X1为 PDIUSBD12提供工作所需的时钟输入;发光二极管 GoodLink在正常通信时闪烁; PDIUSBD2的AD0连接到LPC2200的A0,当LPC220在 A0引脚输出1时,表示输出到 PDIUSBD12数据总线D0~D7上的数据为命令字,当A0 引脚输出0时,表示输出到 PDIUSBDI2数据总线D0~D7的数据为数据字
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 (接上表) 27 VOUT3.3 P 3.3V调整输出。要使器件工作在 3.3V,对VCC和VOUT3.3脚都提供 3.3V。 28 A0 I 地址位。A0=1 选择命令指令,A0=0 选择数据。该位在多路地址/ 数据总线配置时可忽略,应将其接高电平。 注: O2 : 2mA 驱动输出 OD4 : 4mA 驱动开漏输出 OD8 : 8mA 驱动开漏输出 IO2 : 4mA 输出 在没有使用到 DMA 方式的时候,DMACK_N 和 EOT_N 要求接上拉电阻。 明白了 PDIUSBD12 所提供的资源与硬件接口,便可以设计 PDIUSBD12 与 LPC2200 的 硬件电路了。 1.2 PDIUSBD12 与 LPC2200 的硬件电路设计 这里以 LPC2200 微控制器与 PDIUSBD12 构成 USB 设备,PDIUSBD12 连接到 LPC2200 的硬件原理图如图 2 所示, 由该图可见 PDIUSBD12 各引脚(图 2 中的网络标号)与 LPC2200 的连接关系, 如表 2 所示。 表 2 PDIUSBD12 与 LPC2200 连接关系 PDIUSBD12 功 能 LPC2200 D0 ~ D7 PDIUSBD12 数据总线 D0 ~ D7 AD0 PDIUSBD12 地址总线 A0 CS_USB PDIUSBD12 片选线 nCS2 RD PDIUSBD12 读使能(低电平有效) nOE WR PDIUSBD12 写使能(低电平有效) nEW INT_USB PDIUSBD12 中断输出信号 P0.16_EINT0 RST_USB PDIUSBD12 复位输入信号 P0.10_RTS1 SUSP PDIUSBD12 挂起输入信号 P0.13_DTR1 由以上关系,可知 PDIUSBD12 使用 LPC2200 外部存储控制的 Bank2 部分,其地址如 下: 数据地址 0x82000000(偶数地址) 命令地址 0x82000001(奇数地址) RST_USB、SUSP 为 LPC2200 输出引脚,PDIUSBD12 中断信号为中断输入信号,且为 外部中断 0。 如图 2 所示 C1、C2 和 X1 为 PDIUSBD12 提供工作所需的时钟输入;发光二极管 GoodLink 在正常通信时闪烁;PDIUSBD12 的 AD0 连接到 LPC2200 的 A0,当 LPC2200 在 A0 引脚输出 1 时,表示输出到 PDIUSBD12 数据总线 D0 ~ D7 上的数据为命令字,当 A0 引脚输出 0 时,表示输出到 PDIUSBD12 数据总线 D0 ~ D7 的数据为数据字。 - 3 -
周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 oVCs 图2 PDIUSBD12与LPC2200硬件连接原理图 13 PDIUSBD12驱动软件构架 为了使驱动软件可移植性强、易维护,采用分层的方法编写 PDIUSBD2的驱动程序。 综合考虑USB协议、 PDIUSBD12硬件接线、μC/OS的结构来组织驱动软件的构架,如表 3所示为USB驱动程序软件分层结构表 表3UsB驱动程序软件包分层结构表 文件名 简要说明 相关性 DIZHAL.C PDIUSBD12与MCU之间的硬件接口 与硬件相关 DI2Cl.c PDIUSBDI2命令接口 与硬件无关 Chap 9.c USB协议层 与μCOS相关 Descriptor.c USB协议层 与CO-相关 DI2Driver.c USB应用层 与pC/OS-相关 其中Chap_9c、 Descriptor.c与D12 Driver.c与COS相关,以上各层关系可用图3用 来表示。 UsB应用层D12 Driver.c USB协议层Chap_9c, Descriptor. c USB接口控制驱动D12C.c UsB设备控制驱动D12HAL.C 图3UsB驱动分层结构图 14UsB驱动程序软件包的使用 本驱动软件包包括的文件见表4。表中的所有文件保存于本文档目录下的D12For uCos- II\USBDriverD12目录中,目前本USB驱动程序软件包的版本号为1.0
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 D12XTAL2 D12XTAL1 CS_USB USBDP /GOODLNK USBDM RST_USB D12DM D12DP AD0 INT_USB X1 6MHz VBUS 1 D- 2 D+ 3 GND 4 SHIELD 5 CZ1 USB R7 1K R3 18R+/-1% R2 18R+/-1% C5 C1 68pF C2 22pF R5 1M R4 1M C3 470pF C6 0.1uF + C4 105 + C7 4.7u16V R1 10K FB1 FB2 VCC33 VCC33 VCC33 RD WR DATA0 1 DATA1 2 DATA2 3 DATA3 4 GND 5 DATA4 6 DATA5 7 DATA6 8 DATA7 9 ALE 10 CS_N 11 SUSPEND 12 CLKOUT 13 INT_N 14 RD_N 15 WR_N 16 DMREQ 17 DMACK_N 18 EOT_N 19 RESET_N 20 GL_N 21 XTAL1 22 XTAL2 23 VCC 24 D- 25 D+ 26 VOUT3.3V 27 A0 28 U1 PDIUSBD12(TSSOP-28) L1 GOODLINK VBUS USBUSB+ SUSP R6 1M VCC33 C8 104 R8 1M D0 D1 D2 D3 D4 D5 D6 D7 GND R9 10K CBG201209U151B CBG201209U151B 104 R10 10K VCC33 INT_USB SUSP R11 10K 图 2 PDIUSBD12 与 LPC2200 硬件连接原理图 1.3 PDIUSBD12 驱动软件构架 为了使驱动软件可移植性强、易维护,采用分层的方法编写 PDIUSBD12 的驱动程序。 综合考虑 USB 协议、PDIUSBD12 硬件接线、µC/OS-II 的结构来组织驱动软件的构架,如表 3 所示为 USB 驱动程序软件分层结构表。 表 3 USB 驱动程序软件包分层结构表 文件名 简要说明 相关性 D12HAL.c PDIUSBD12 与 MCU 之间的硬件接口 与硬件相关 D12CI.c PDIUSBD12 命令接口 与硬件无关 Chap_9.c USB 协议层 与 µC/OS-II 相关 Descriptor.c USB 协议层 与 µC/OS-II 相关 D12Driver.c USB 应用层 与 µC/OS-II 相关 其中 Chap_9.c、Descriptor.c 与 D12Driver.c 与 µC/OS-II 相关,以上各层关系可用图 3 用 来表示。 实 时 操 作 系 统 USB应用层D12Driver.c USB协议层Chap_9.c,Descriptor.c USB接口控制驱动 D12CI.c USB设备控制驱动 D12HAL.c 图 3 USB 驱动分层结构图 1.4 USB 驱动程序软件包的使用 本驱动软件包包括的文件见表 4。表中的所有文件保存于本文档目录下的 D12 For uCos-II\USBDriver\D12 目录中,目前本 USB 驱动程序软件包的版本号为 1.0。 - 4 -
广州周立功单片机发展有限公司Tel:(020)38730916387309173873097638730977Fax:38730925 表4UsB驱动程序主要文件列表 文件名 描述及作用 D2 Config. h|D2驱动程序的配置,包括所有与硬件相关的配置 DI2HAL. c|UsB设备控制驱动,与具体使用的MCU及硬件相关 DI2HALhUSB设备控制驱动D2HALc的头文件 DI2CL.c USB接口控制驱动,与具体使用的USB芯片相关 DI2CIh USB接口控制驱动D12CIc的头文件 USB协议层,P 所有描述符取值 Descriptor. h|USB描述符结构体的定义,以及 PDIUSBD12用到的一些宏定义取值 Chap 9.c USB协议层,完成所有与控制传输相关的工作 Chap 9.h USB协议层Chap9c的头文件,包含控制传输用到的结构体的定义 D2 Driver.cUSB应用层,包含提供给用户使用的AP函数 D2 Driver h|UsB应用层D2 Driver.c的头文件 DI2 For uCos- IUSBDriver目录的 USBDriver.mcp工程提供了使用该驱动程序的一个例 子。该例子建立时使用的工程模板为: ARM Executable Image for UCOSI( (for lpc220 如果你的硬件配置与软件包的默认配置不同。那么只须修改软件包中的D2 Config. h文 件,该文件主要是配置 PDIUSBD2与LPC220的引脚。D12 Config. h文件相关配置的修改 的方法请见《嵌入式系统软件开发实例》中的《USB驱动程序开发》,这一章详细地说明了 该软件包的开发方法及该文件的配置方法。 除此以外,还有几点需要注意 (1)每个C文件的开始都包括了头文件(# include" config. h"),该头文件是工程模板 ARM Executable Image for UCOSll( for lpc2200)的配置文件,软件包中默认已加上。 (2)在工程模板的IRQs文件的END语句之前加上下面的语句(例子中默认已加上): Usb Handler HANDLER USb Exception (3)由于 PDIUSBD12收发大量数据时中断比较频繁,因此必须修改工程模板中允许 中断嵌套的层数,因此 Startup.s文件的第二行应改为(例子中已进行修改) IRQ STACK LEGTH EQU9*25;每层嵌套需要9个字堆栈,允许25层嵌套 (4)本例子使用了3个事件,控制传输处理使用了1个信号量,例子应用程序中使用 了2个信号量。因此 os cfg. h文件中操作系统最大事件数的定义应至少为3。 #define OS MAX events (5)本例子不使用统计任务,因此把统计任务关闭( os cfg. h文件中) #define OS TASK STAT EN (6) PDIUSBD12使用了外部存储空间的Bank2部分,所以必须配置LPC2200的BCFG2 寄存器,在模板的 target. c文件的 TargetInito函数添加以下代码 BCFG2=0 BCFG2F(0x04<<5米0x01<<10)(0x04<11) 配置BCFG2控制寄存器 (7)工程模板配置外部RAM和外部 FLASH ROM总线的访问速度是适应于大部分型 号的RAM与 FLASH ROM的。对于 EasyARM2200开发板上的RAM与 FLASH ROM的型 号,必须重新配置控制总线有关参数的BCFG0和BCFG1寄存器,这样程序的运行速度才 能跟上 PDIUSBD12的运行速度。这些值的配置的具体方法见LPC2200数据手册以及你所 使用的RAM与 FLASH ROM的数据手册。程序的运行速度主要与CPU主频与外部RAM FLASH速度相关。这方面在模板的 target.c的 TargetResetlnito函数中修改。如程序清单1所
广州周立功单片机发展有限公司 Tel: (020) 38730916 38730917 38730976 38730977 Fax: 38730925 表 4 USB 驱动程序主要文件列表 文件名 描述及作用 D12Config.h D12 驱动程序的配置,包括所有与硬件相关的配置 D12HAL.c USB 设备控制驱动,与具体使用的 MCU 及硬件相关 D12HAL.h USB 设备控制驱动 D12HAL.c 的头文件 D12CI.c USB 接口控制驱动,与具体使用的 USB 芯片相关 D12CI.h USB 接口控制驱动 D12CI.c 的头文件 Descriptor.c USB 协议层,PDIUSBD12 所有描述符取值 Descriptor.h USB 描述符结构体的定义,以及 PDIUSBD12 用到的一些宏定义取值 Chap_9.c USB 协议层,完成所有与控制传输相关的工作 Chap_9.h USB 协议层 Chap_9.c 的头文件,包含控制传输用到的结构体的定义 D12Driver.c USB 应用层,包含提供给用户使用的 API 函数 D12Driver.h USB 应用层 D12Driver.c 的头文件 D12 For uCos-II\USBDriver\目录的USBDriver.mcp工程提供了使用该驱动程序的一个例 子。该例子建立时使用的工程模板为:ARM Executable Image for UCOSII(for lpc2200)。 如果你的硬件配置与软件包的默认配置不同。那么只须修改软件包中的 D12Config.h 文 件,该文件主要是配置 PDIUSBD12 与 LPC2200 的引脚。D12Config.h 文件相关配置的修改 的方法请见《嵌入式系统软件开发实例》中的《USB 驱动程序开发》,这一章详细地说明了 该软件包的开发方法及该文件的配置方法。 除此以外,还有几点需要注意: (1)每个 C 文件的开始都包括了头文件(#include "config.h"),该头文件是工程模板 ARM Executable Image for UCOSII(for lpc2200)的配置文件,软件包中默认已加上。 (2)在工程模板的 IRQ.s 文件的 END 语句之前加上下面的语句(例子中默认已加上): Usb_Handler HANDLER Usb_Exception (3)由于 PDIUSBD12 收发大量数据时中断比较频繁,因此必须修改工程模板中允许 中断嵌套的层数,因此 Startup.s 文件的第二行应改为(例子中已进行修改): IRQ_STACK_LEGTH EQU 9*25 ;每层嵌套需要 9 个字堆栈,允许 25 层嵌套 (4)本例子使用了 3 个事件,控制传输处理使用了 1 个信号量,例子应用程序中使用 了 2 个信号量。因此 os_cfg.h 文件中操作系统最大事件数的定义应至少为 3。 #define OS_MAX_EVENTS 3 (5)本例子不使用统计任务,因此把统计任务关闭(os_cfg.h 文件中): #define OS_TASK_STAT_EN 0 (6) PDIUSBD12使用了外部存储空间的Bank2部分,所以必须配置LPC2200的BCFG2 寄存器,在模板的 target.c 文件的 TargetInit()函数添加以下代码: BCFG2 = 0; BCFG2 |= (0x04 << 5)|(0x01 << 10)|(0x04 << 11); //配置 BCFG2 控制寄存器 (7)工程模板配置外部 RAM 和外部 FLASH ROM 总线的访问速度是适应于大部分型 号的 RAM 与 FLASH ROM 的。对于 EasyARM2200 开发板上的 RAM 与 FLASH ROM 的型 号,必须重新配置控制总线有关参数的 BCFG0 和 BCFG1 寄存器,这样程序的运行速度才 能跟上 PDIUSBD12 的运行速度。这些值的配置的具体方法见 LPC2200 数据手册以及你所 使用的 RAM 与 FLASH ROM 的数据手册。程序的运行速度主要与 CPU 主频与外部 RAM、 FLASH 速度相关。这方面在模板的 target.c 的 TargetResetInit()函数中修改。如程序清单 1 所 - 5 -