📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: LPC214x 收发大量数据 main.c 文件
**
**------------------------------------------------------------------------------------------------------
** Created by: 郑明远
** Created date: 2005-08-6
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#include "USBConfig.h" /* 加入USB相关头文件 */
#include "USBCI.h"
#include "USBDriver.h"
/***************************************************************************************
** 函数名称 : Init_USBInterrupt()
** 功能描述 : 配置USB设备控制器的中断向量号和中断优先级
***************************************************************************************/
void Init_USBInterrupt(void)
{
VICVectCntl0 = (0x20 | 22); /* USB中断分配到中断向量0 */
VICVectAddr0 = (INT32U)Usb_Exception; /* USB中断服务程序地址 */
VICIntEnable = 1 << 22; /* 使能USB中断 */
}
/* global variable */
USB_TxRx Usb;
INT8U USB_Buf[4096];
/***************************************************************************************
** 函数名称 : ep02_set_rxlen()
** 功能描述 : 设置逻辑端点2接收长度及接收缓冲区地址
****************************************************************************************/
void ep02_set_rxlen(INT32U len, INT8U *pbuf)
{
Usb.Len = len; /* 逻辑端点2将接收len个字节 */
Usb.Cnt = 0; /* 当前收到的字节数为0 */
Usb.pbuff = pbuf; /* 保存接收缓冲区指针 */
Usb.bRecFinish = 0; /* 标志接收未完成 */
}
/**************************************************************************************
** 函数名称 : ep02_start_tx()
** 功能描述 : 启动逻辑端点 2 发送
***************************************************************************************/
void ep02_start_tx(INT32U txlen, INT8U *pbuf)
{
INT32U len,i;
Usb.Len = txlen; /* 初始化全局变量 */
Usb.Cnt = 0;
Usb.pbuff = pbuf;
Usb.bRecFinish = 0;
for (i = 0; i < 2; i++)
{
len = Usb.Len - Usb.Cnt;
if (len > 0)
{
if (len >= 64) /* 写 64 个字节 */
len = USB_WriteEndpoint(5, 64, Usb.pbuff + Usb.Cnt);
else
len = USB_WriteEndpoint(5, len, Usb.pbuff + Usb.Cnt);
/* 写少于 64 个字节 */
Usb.Cnt = Usb.Cnt + len; /* 计数器计数 */
}
}
}
/***************************************************************************************
主 函 数 main()
****************************************************************************************/
int main (void)
{
INT8U err;
INT32U len;
err = USB_Initialize(); /* 初始化 USB 控制器 */
if (err != 0)
while(1);
Init_USBInterrupt(); /* 初始化 USB 中断向量 */
IRQEnable();
/****************** 下面开始为一个无限循环 *******************/
while(1)
{
usbserve(); /* USB 事件处理函数 */
if (bEPPflags.bits.configuration == 1)
{
if (bEPPflags.bits.ep1_rxdone == 1)
{
DISABLE();
bEPPflags.bits.ep1_rxdone = 0;
len = (GenEpBuf[0] << 8) + GenEpBuf[1]; /* 取得需要接收的数据的字节长度 */
ep02_set_rxlen(len, USB_Buf); /* 设置逻辑端点2接收字节长度 */
GenEpBuf[0] = 0x01;
USB_WriteEndpoint(3, 1, GenEpBuf); /* 发送应答给PC */
ENABLE();
}
if (Usb.bRecFinish == 1)
{ /* 接收完成,开始发送数据 */
DISABLE();
ep02_start_tx(len, USB_Buf); /* 启动发送数据 */
ENABLE();
}
}
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -