当前位置:首页 > 单片机 > 单片机
[导读]   该系统的程序设计主要包括两大部分,分别是USB接口部分固件程序和计算机端的CH372驱动程序。前者主要包括了单片机和CH372的初始化、读写接口程序和中断服务程序;后者包括了USB设备的驱动程序和相关

  该系统的程序设计主要包括两大部分,分别是USB接口部分固件程序和计算机端的CH372驱动程序。前者主要包括了单片机和CH372的初始化、读写接口程序和中断服务程序;后者包括了USB设备的驱动程序和相关应用程序的编写。这里主要介绍USB接口部分固件程序。
  
  在本例中CH372工作在内部固件模式,通过8位并行数据总线挂接到单片机AT89C51上,并通过端点2上的上传端点和下传端点完成USB数据的读写。在本地端,CH372芯片以内置的固件程序自动处理了USB通信中的基本事务,在计算机端,提供了驱动程序的应用层调用接口,用以完成USB设备与计算机间的通信。
  
  由于CH372支持内部固件模式,以内置的固件程序自动处理USB通信中的基本事务,所以程序设计不需要考虑USB枚举配置过程,大大简化了程序。
  
  1.变量定义和基本操作函数
  
  该部分主要包括了CH372命令、数据端口地址的定义,对操作命令码的定义,延时函数以及CH372的数据读写和写命令基本操作函数等几部分内容。
  
  (1)变量的定义。
  
  该部分主要包括了对CH372命令、数据端口地址、USB数据缓冲区以及操作命令代码的定义,其程序代码如下:

  (2)基本操作函数。
  
  该部分是进行CH372读写的基本操作程序,主要包括以下几个函数。
  
  函数DelayMs:延时毫秒。
  
  函数Delayus:延时微秒。
  
  函数WR_CH372_CMD_PORT:向CH372命令端口写命令数据。
  
  函数WR_CH372_DAT_PORT:向CH372数据端口写数据。
  
  函数RD_CH372_DAT_PORT:从CH372命令端口读数据。
  
  ①函数DelayMs:在CH372读写过程中需要用到毫秒延时,该函数可以满足要求,程序代码如下。

  ②函数Delayus:在读写命令的过程中经常要用到微秒的延时,该函数可以用来调用,其程序代码如下。

  ③函数WR_CH372_CMD_PORT:用以向CH372命令端口写命令数据,周期不小于4μs,如果太快则延时,其程序代码如下。

  ④WR_CH372_DAT_PORT:用以向CH372数据端口写数据,周期不小于1.5μs,如果太快则延时,其程序代码如下。

  ⑤RD_CH372_DAT_PORT:用以从CH372命令端口读数据,周期不小于1.5μs,如果太快则延时,其程序代码如下。

  2.系统初始化
  
  系统初始化包括单片机的初始化和CH372的初始化。单片机的初始化主要是完成外部中断INTO、I/O口等的初始化,程序较为简单,在这里不做详细介绍。CH372初始化主要用以其上电复位后,将默认的工作模式(未启用模式)初始化为外部固件模式或内部固件模式,并检查CH372的工作状态是否正常,以便对错误进行及时处理。其流程图如下图所示。


  CH372初始化的程序代码如下。

  3.读写接口函数及中断服务函数
  
  本例中CH372工作在内部固件模式,使用端点2的上传端点和下传端点。CH372芯片专门用于处理USB通信,在检测到USB总线的状态变化时或者命令执行完成后,CH372以中断方式通知单片机进行处理。
  
  该部分主要包括以下3个函数。
  
  函数CH372_RD_EP2:CH372的读取数据程序。
  
  函数CH372_WR_EP2:CH372的写数据程序。
  
  函数CH372_lnt0:CH372中断服务程序。
  
  (1)CH372的读取数据函数CH372_RD_EP2。
  
  该函数主要用以实现从CH372端点2的上传端点读出上位机发来的数据,单次的最大长度为64字节,当收到上位机数据后产生USB_INT_EP2_OUT(02)中断。其程序代码如下。

  (2)CH372的写数据函数CH372_WR_EP2。
  
  该函数主要实现向CH372端点2的上传端点写入Length长度的数据,单次最大长度为64字节,当上位机接收数据后产生USB_INT_EP2_IN(OA)中断。其程序代码如下。

  (3)CH372的中断服务函数CH372_1nt0。
  
  该函数为外部中断服务函数,主要用以响应USB接口芯片的中断。中断服务函数的工作步骤如下。
  
  ①单片机进入中断服务程序时,首先执行GET_STATUS命令获取中断状态。CH372在GET_STATUS命令完成后,将INT#引脚恢复为高电平,取消中断请求。如果通过上述GET_STATUS命令获取的中断状态是下传成功,则单片机执行RD_USB_DATA命令从CH372读取接收到的数据,CH372在RD_USB_DATA命令完成后释放当前缓冲区,从而可以继续USB通信。单片机退出中断服务程序;如果通过上述GET_STATUS命令获取的中断状态是上传成功,则单片机执行WR._USB_DATA命令向CH372写入另一组要发送的数据。如果没有后续数据需要发送,单片机就不必执行WR_USBDATA命令。
  
  ②单片机执行UNLOCK_USB命令。
  
  CH372在UNLOCK_USB命令完成后释放当前缓冲区,从而可以继续USB通信。
  
  ③单片机退出中断服务程序。
  
  如果单片机已经写入了另一组要发送的数据,则CH372被动地等待USB主机在需要时取走数据,然后继续等待CH372向单片机请求中断,否则结束。
  
  CH372的中断服务函数的程序代码如下:

  注意事项
  
  1.硬件方面
  
  (1)在设计PCB板时应注意:退耦电容C3和C4尽量靠近CH372的相连引脚;UD+和  UD-信号线贴近平行布线,尽量在两侧提供地线或者覆铜,减少来自外界的信号干扰;尽量缩短XI和XO引脚相关信号线的长度,在相关元器件周边环绕地线或者覆铜。
  
  (2)为进一步地保护CH372的UD+和UD-信号线,对于需要频繁带电插拔USB设备的应用场所或静电较强的环境,建议在电路中增加USB信号瞬变电压抑制器件。
  
  (3)对于支持睡眠功能的CH372芯片,在其睡眠期间,应该使CH372的各个I/O引脚(除RSTI引脚)处于悬空或者高电平状态,避免产生不必要的上拉电流。
  
  2.软件方面
  
  在单片机程序设计中,应注意命令的延时及读取数据的时间间隔。主程序在检测到USB设备连接后,等待数百毫秒再对其进行操作。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

6月14日消息,近日,中国移动在广州深圳-东莞开通首个800G空芯光纤传输技术试验网。

关键字: 中国移动 APP 通信

随着汽车电子技术的不断发展,CAN(Controller Area Network)总线已成为现代汽车内部通信的核心技术。CAN总线通过连接各个控制单元(ECU),实现了车辆内部信息的实时、高效传输。然而,在实际应用中,...

关键字: 汽车电子 CAN 通信

今天,小编将在这篇文章中为大家带来一种适老化跌倒检测预警系统硬件设计的有关报道,通过阅读这篇文章,大家可以对该类系统设计具备清晰的认识,主要内容如下。

关键字: STM32 单片机 微控制器

新产品加入了同类产品中唯一的蓝牙低功耗产品系列模块、片上系统(SoC)产品和即插即用选项

关键字: 蓝牙 片上系统 单片机

数字可编程变频电源是一种能够根据用户需求调整输出电压和频率的电源设备。它在工业生产和实验室研究等领域中被广泛使用。

关键字: 单片机 可编程电源 系统设计

可编程电源的基本原理是通过控制电源输出的电压和电流来满足用户的需求。一般情况下,可编程电源由电源模块、电压测量模块、电流测量模块和控制模块组成。

关键字: 单片机 可编程 电源

业内消息,上周夏普官网称,夏普与小米签署无线通信技术专利交叉许可协议。

关键字: 夏普 小米 通信 专利交叉许可

本设计的控制系统主要包括:倾斜模块、超声波模块、语音模块、光敏电阻模块及电源等。

关键字: 单片机 STC51

本文针对电动两轮车自燃防控装置的开发与分析进行了研究。通过电动两轮车自燃原因分析,提出了电动两轮车的自燃防控智能装置设计思路,介绍了电动两轮车的自燃防控智能

关键字: STC89C52RC 单片机 微控制器
关闭
关闭