📄 main.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name: main.c
** Latest modified Date: 2008-05-10
** Latest Version: 1.0
** Descriptions: SmartARM2400 系列开发板 USB Device Much示例程序
**
**--------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by: LingGuilin
** Modified date: 2008-05-10
** Version: 1.0
** Descriptions: SmartARM2400 系列开发板 USB Device Much示例程序
** 1.通过物理端点2接收PC发送的10字节数据
** 2.通过物理端点3将接收到的10字节数据发送回PC
**
*********************************************************************************************************/
#include "main.h"
#define USB_INT 22 /* USB Device VIC通道号 */
USB_TxRx Usb; /* USB 数据传输结构体变量 */
uint8 GucRcvBuf[4096];
/*********************************************************************************************************
** Function name: ep02_set_rxlen
** Descriptions: 设置逻辑端点2接收长度及接收缓冲区地址
** input parameters: ulSetLen 待设置接收数据字节数
** pucRcvBuf 接收数据缓冲区
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void ep02_set_rxlen(uint32 ulSetLen, uint8 *pucRcvBuf)
{
Usb.Len = ulSetLen; /* 逻辑端点2将接收len个字节 */
Usb.Cnt = 0; /* 当前收到的字节数为0 */
Usb.pbuff = pucRcvBuf; /* 保存接收缓冲区指针 */
Usb.bRecFinish = 0; /* 标志接收未完成 */
}
/*********************************************************************************************************
** Function name: ep02_start_tx
** Descriptions: 启动逻辑端点 2 发送
** input parameters: ulSetLen 待设置发送数据字节数
** pucRcvBuf 发送数据缓冲区
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void ep02_start_tx(uint32 ulSetLen, uint8 *pucSendBuf)
{
uint8 i = 0;
uint32 ulTmp = 0;
uint32 ulLeftLen = 0;
Usb.Len = ulSetLen; /* 初始化全局变量 */
Usb.Cnt = 0;
Usb.pbuff = pucSendBuf;
Usb.bRecFinish = 0;
for (i = 0; i < 2; i++) {
ulLeftLen = Usb.Len - Usb.Cnt;
if (ulLeftLen > 0) {
if (ulLeftLen >= 64) {
ulTmp = usbDevWriteEndpoint(5,
Usb.pbuff + Usb.Cnt,
64); /* 发送64字节 */
} else {
ulTmp = usbDevWriteEndpoint(5,
Usb.pbuff + Usb.Cnt,
(uint8)ulLeftLen); /* 发送少于64字节 */
}
Usb.Cnt = Usb.Cnt + ulTmp; /* 累加已发送字节数 */
}
}
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 主函数
** Input parameters: None
** output parameters: None
** Created Date:
*********************************************************************************************************/
int main (void)
{
uint8 ucErr = 0;
uint32 ulTransLen = 0;
TargetInit();
ucErr = usbDevInit(); /* 初始化USB设备控制器 */
if (ucErr != 0) {
while(1); /* 初始化失败,程序停止执行 */
}
vicIrqFuncSet(USB_INT,3,(uint32)usbDevException); /* 设置USB Device中断服务程序 */
IRQ_ENABLE(); /* 允许CPU的IRQ中断 */
while(1) {
usbDevServe(); /* 处理USB事件 */
if (bEPPflags.bits.configuration == 1) {
if (bEPPflags.bits.ep1_rxdone == 1) {
IRQ_DISABLE();
bEPPflags.bits.ep1_rxdone = 0;
ulTransLen = (GenEpBuf[0] << 8) + GenEpBuf[1]; /* 取得需要接收数据的字节长度 */
ep02_set_rxlen(ulTransLen,GucRcvBuf); /* 设置逻辑端点2接收字节长度 */
GenEpBuf[0] = 0x01;
usbDevWriteEndpoint(3, GenEpBuf, 1); /* 发送应答给PC */
IRQ_ENABLE();
}
if (Usb.bRecFinish == 1) { /* 接收完成,开始发送数据 */
IRQ_DISABLE();
ep02_start_tx(ulTransLen,GucRcvBuf); /* 启动发送数据 */
IRQ_ENABLE();
}
}
}
return 0;
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -