📄 usbdevdma.h
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name: usbDevDMA.h
** Latest modified Date: 2008-05-10
** Latest Version: 1.1
** Descriptions: usbDevLPC2400 固件程序 DMA 层头文件
**
**--------------------------------------------------------------------------------------------------------
** Created by: ZhengMingyuan
** Created date: 2005-08-08
** Version: 1.0
** Descriptions: The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by: LingGuilin
** Modified date: 2008-05-10
** Version: 1.1
** Descriptions: 处理传输短包数据的bug
** 修改部分代码以符合代码规范v1.2
**
*********************************************************************************************************/
#ifndef __USBDEVDMA_H
#define __USBDEVDMA_H
/*********************************************************************************************************
LPC2400 DMA 引擎 DD 描述符结构体
*********************************************************************************************************/
typedef struct non_iso_dd_tag
{
INT32U next_dd_addr; /* 下一个DD地址 */
INT32U control; /* DD控制字 */
INT32U start_addr; /* DMA 缓冲区起始地址 */
INT32U status; /* DMA 引擎状态 */
}DD_DESCRIPTOR;
typedef struct __tagUsbStruct __CTRL_USB; /* USB数据收发控制结构体类型 */
/*********************************************************************************************************
各端点 DMA 缓冲区大小, 用户可自行修改, 请注意总和不要大于 8K - 640B
*********************************************************************************************************/
#define EP02_DMA_BUFFER_LENGTH 512 /* 物理端点2 DMA缓冲区大小 */
#define EP03_DMA_BUFFER_LENGTH 512 /* 物理端点3 DMA缓冲区大小 */
#define EP04_DMA_BUFFER_LENGTH 3072 /* 物理端点4 DMA缓冲区大小 */
#define EP05_DMA_BUFFER_LENGTH 3072 /* 物理端点5 DMA缓冲区大小 */
#define USB_RAM_ADDRESS 0x7FD00000 /* USB RAM 起始地址 */
#define DD_SIZE sizeof(DD_DESCRIPTOR) /* DD 结构体大小 */
#define DD_BASE_ADDRESS (USB_RAM_ADDRESS + (4 * 32)) /* 32: LPC2400 端点个数 */
#define DD_ADDRESS_EP02 DD_BASE_ADDRESS /* 物理端点2 DD地址 */
#define DD_ADDRESS_EP03 (DD_BASE_ADDRESS + (DD_SIZE * 1)) /* 物理端点3 DD地址 */
#define DD_ADDRESS_EP04 (DD_BASE_ADDRESS + (DD_SIZE * 2)) /* 物理端点4 DD地址 */
#define DD_ADDRESS_EP05 (DD_BASE_ADDRESS + (DD_SIZE * 3)) /* 物理端点5 DD地址 */
/*********************************************************************************************************
DMA 接收和发送缓冲区地址
*********************************************************************************************************/
#define DMA_BUFFER_ADDR_EP02 DD_BASE_ADDRESS + (DD_SIZE * 32) /* 物理端点2 DMA缓冲区首址 */
#define DMA_BUFFER_ADDR_EP03 DMA_BUFFER_ADDR_EP02 + EP02_DMA_BUFFER_LENGTH
/* 物理端点3 DMA缓冲区首址 */
#define DMA_BUFFER_ADDR_EP04 DMA_BUFFER_ADDR_EP03 + EP03_DMA_BUFFER_LENGTH
/* 物理端点4 DMA缓冲区首址 */
#define DMA_BUFFER_ADDR_EP05 DMA_BUFFER_ADDR_EP04 + EP04_DMA_BUFFER_LENGTH
/* 物理端点5 DMA缓冲区首址 */
/*********************************************************************************************************
DMA 状态宏定义
*********************************************************************************************************/
#define DDS_NOT_SERV 0x00 /* 指示没有包没传输 */
#define DDS_BEING_SERV 0x01 /* 指示至少有一个包被传输 */
#define DDS_UNDER_RUN 0x03 /* 指示收到短包而中止 */
#define DDS_SYS_ERR 0x09 /* 指示系统总线错误 */
#define DDS_OVER_RUN 0x11 /* 指示缓冲区到达末尾错误 */
#define DDS_NORMAL_COMP 0x05 /* 指示DMA传输正常结束 */
/*********************************************************************************************************
下面为 DMA 层的导出函数
*********************************************************************************************************/
/*********************************************************************************************************
** Function name: usbDevDMAInit
** Descriptions: 初始化LPC2400 USB设备控制器的DMA引擎
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
extern void usbDevDMAInit (void);
/*********************************************************************************************************
** Function name: usbDevDMAService
** Descriptions: DMA 中断服务程序
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
extern void usbDevDMAService (void);
/*********************************************************************************************************
** Function name: usbDevDMAGetBuffer
** Descriptions: 获取DMA缓冲区首地址
** input parameters: ucEpIndex 物理端点索引
** output parameters: 无
** Returned value: 物理端点的缓冲区指针
*********************************************************************************************************/
extern INT8U* usbDevDMAGetBuffer (INT8U ucEpIndex);
/*********************************************************************************************************
** Function name: usbDevDMASetTransLength
** Descriptions: 设置DMA传输长度
** input parameters: ucEpIndex 物理端点索引
** ulSetlen 设置传输字节长度
** output parameters: 无
** Returned value: 设置成功的传输字节长度
*********************************************************************************************************/
extern INT32U usbDevDMASetTransLength (INT8U ucEpIndex, INT32U ulSetlen);
/*********************************************************************************************************
** Function name: usbDevDMAStartIN
** Descriptions: 启动 IN 端点的 DMA 传输
** input parameters: ucEpIndex 物理端点索引
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
extern void usbDevDMAStartIN (INT8U ucEpIndex);
#endif /* __USBDEVDMA_H */
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -