首页 理论教育 ARMCortexM4固件应用:Driverlib库函数解析

ARMCortexM4固件应用:Driverlib库函数解析

时间:2023-11-17 理论教育 版权反馈
【摘要】:也就是说,采用Driverlib固件库函数即可搭建14.1节介绍的USB2.0的内容。该驱动程序包含在Driverlib/usb.c中,Driverlib/usb.h定义了USB API函数的定义。USB控制器API根据使用条件在driverlib库手册中的归类如图14-10所示。设备IN端点的配置将端点1配置为发送通道启动端点1的数据传输中断处理将端点1配置成接收通道配置端点1发送通道启动端点1的数据请求带短包的中断处理下面是Driverlib库例程片段:

ARMCortexM4固件应用:Driverlib库函数解析

USB固件库提供一组用于访问Tiva USB设备、主机和/或设备、或OTG控制器的API函数。根据USB控制器在微控制器中提供的功能,可将API函数分成几组:USBDev、USB-Host、USB OTG、USBEndpoint和USBFIFO。具有一个USB器件控制器的微控制器只可使用USBDev组的API;仅含一个USB主机控制器的微控制器只能使用USBHOST组中的API;仅含一个OTG接口的微控制器使用USB OTG组的API。对于USB OTG控制器,一旦配置了USB控制器的模式,将使用设备或主机的API。其余部分的APIs既可用于USB主机控制器,也可用于USB设备控制器。USBEndpoint API用于配置和访问端点,而USBFIFO API用于配置FIFOs的大小和位置。也就是说,采用Driverlib固件库函数即可搭建14.1节介绍的USB2.0的内容。该驱动程序包含在Driverlib/usb.c中,Driverlib/usb.h定义了USB API函数的定义。

USB控制器API根据使用条件在driverlib库手册中的归类如图14-10所示。

978-7-111-51624-8-Chapter14-18.jpg

图14-10 USB API在手册中的归类

下面仅就实现USB基本功能的API函数集“通用USB API函数”和“带有uDMA控制器的USB操作”的功能作一简单介绍,而对于USB锦上添花的API函数集“带有DMA控制器的USB操作”,“USB连接电源管理”与“ULPI”所包含的API功能简介,请参考Driverlib库的USB部分。有关USB驱动库的函数功能说明,请参考书后第14章附录。

(1)通用USB API函数

它包括70个用于底层/中层的API函数,提供了实现USB器件或USB主机堆栈所需的全部函数。基于使用中的USB控制器类型API可抽象出IN/OUT端点的特征。使用IN/OUT术语的任何API函数符合这些条款的标准USB描述。例如,对于一个只具有设备接口的微控制器上的OUT端点,实际上它会通过该端点来接收数据,而对于有一个主机接口的微控制器,实际上它也将在OUT端点上发送数据。

USB控制器具有一个可分配给端点的全局FIFO存储器空间。FIFO RAM总的空间大小为2048字节或4096字节,这取决于所使用的Tiva设备。要特别注意的是:存储器中的前64个字节专门用于控制传输的端点0。剩余的1984或4032个字节可根据应用程序的需要来配置。通常在应用的开始进行FIFO的配置,而一旦进入使用就不可对其配置进行修改。可通过USBFIFOConfig()API函数来配置每一个端点的FIFO起始地址和大小。

(2)带有uDMA控制器的USB操作

USB控制器可以和uDMA一起用于主机/设备控制器的数据接收与发送。uDMA控制器不可访问端点0,然而,所有其他端点都可使用UDMA控制器访问。USB的uDMA通道号由下列值定义:

●DMA_CHANNEL_USBEP1RX。

●DMA_CHANNEL_USBEP1TX。

●DMA_CHANNEL_USBEP2RX。

●DMA_CHANNEL_USBEP2TX。

●DMA_CHANNEL_USBEP3RX。

●DMA_CHANNEL_USBEP3TX。

对于超过8个端点设备,必须使用USBEndpointDMAChannel()函数把3个DMA发送通道和DMA接收通道中的一个分配给所需的端点。由于uDMA控制器把传输看作发送或接收,并且USB控制器对IN/OUT事务进行操作,则需小心使用正确的uDMA通道与正确的端点。USB主机IN端点和USB设备OUT端点都可以使用接收uDMA通道,而USB主机OUT端点和USB设备IN端点可使用UDMA发送通道。

当配置端点时,需另外的DMA设置。当调用USBDevEndpointConfig()函数来配置一个端点时需使用uDMA,额外的标志必须被添加到ulFlags参数。这些标志是USB_EP_DMA_MODE_0或USB_EP_DMA_MODE_1其中之一,以控制DMA事务的模式,一旦包准备就绪可使用USB_EP_AUTO_SET允许数据自动传输。在使用USB_EP_DMA_MODE_0,当全部传输完成时,USB控制器只产生一个中断。因此,应用程序在配置DMA传输之前必须知道完整传输的大小。在USB_EP_DMA_MODE_1,只有当数据包传输完成和短包中断时,USB控制器才会发出DMA请求。短包数据仍保留在USBFIFO,因此必须启动FIFO中数据的另一次传输。

下面是一个有关带uDMA的端点配置的例子。

(1)设备IN端点的配置(www.xing528.com)

978-7-111-51624-8-Chapter14-19.jpg

(2)将端点1配置为发送通道

978-7-111-51624-8-Chapter14-20.jpg

978-7-111-51624-8-Chapter14-21.jpg

(3)启动端点1的数据传输

978-7-111-51624-8-Chapter14-22.jpg

(4)中断处理

978-7-111-51624-8-Chapter14-23.jpg

(5)将端点1配置成接收通道

978-7-111-51624-8-Chapter14-24.jpg

(6)配置端点1发送通道

978-7-111-51624-8-Chapter14-25.jpg

(7)启动端点1的数据请求

978-7-111-51624-8-Chapter14-26.jpg

(8)带短包的中断处理

978-7-111-51624-8-Chapter14-27.jpg

下面是Driverlib库例程片段:

978-7-111-51624-8-Chapter14-28.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈