📄 main.c
字号:
#include "usb1cfg.h"
#include "CH375INC.h"
#include "function.h"
#include<stdlib.h>
extern void Mem_transmit();
unsigned int LOG_INT_R=0xFF;
unsigned int LOG_transmit=0;
unsigned int buffer[4096];
void init_usb()
{
unsigned int i;
WR_CMD_PORT(CMD_SET_USB_MODE);
WR_DAT_PORT(2);
for (i=200;i!=0;i--) //等待20微秒
{
if (RD_DAT_PORT()==CMD_RET_SUCCESS ) break;
}
if(i==0)
{
LOG_printf(&trace,"open_wrong!!");
WR_CMD_PORT(CMD_RESET_ALL);
Delay50ms();
init_usb();
}
else
{
LOG_printf(&trace,"open_right!!");
}
WR_CMD_PORT( CMD_UNLOCK_USB );
C54_enableIMR(0x01);
}
void main()
{
WR_CMD_PORT(CMD_RESET_ALL);
Delay50ms();
init_usb();
}
void usb_int0()
{
WR_CMD_PORT(CMD_GET_STATUS);
LOG_INT_R=RD_DAT_PORT();
SWI_post(&SWI0);
}
void usb_transmit()
{
unsigned int length=0;
unsigned int i=0;
unsigned int R_buffer[3];
LOG_INT_R=(0xFF&LOG_INT_R);
switch (LOG_INT_R)
{
case USB_INT_EP2_OUT: // 批量端点下传成功
{
WR_CMD_PORT( CMD_RD_USB_DATA );
length = RD_DAT_PORT( );
if(length==3)
{
for ( i = 0; i < length; i ++ )
R_buffer[i]=RD_DAT_PORT( );
if((R_buffer[0]==0x21)&&(R_buffer[1]==0x22)&&(R_buffer[2]==0x23))
{
Mem_transmit();
LOG_printf(&trace,"Transmit Begin!!");
WR_CMD_PORT(CMD_WR_USB_DATA7); //向USB端点2的发送缓冲区写入数据块
WR_DAT_PORT(64);// 首先写入后续数据长度,回传刚接收到的数据长度
WR_DAT_PORT(1);
WR_DAT_PORT(133);
for (i=0; i<31; i++)
{
WR_DAT_PORT(buffer[i]&0xFF);
WR_DAT_PORT((buffer[i]/256)&0x0F);
}
LOG_transmit=1;
}
else
{
LOG_printf(&trace,"Wrong_buffer!!,%d");
LOG_INT_R=0xFF;
break;
}
}
else
{
LOG_printf(&trace,"Recievve Wrong!!");
LOG_INT_R=0xFF;
break;
}
LOG_INT_R=0xFF;
break;
}
case USB_INT_EP2_IN: //批量数据发送成功
{
WR_CMD_PORT(CMD_UNLOCK_USB);// 释放当前USB缓冲区
if((LOG_transmit<=132)&&(LOG_transmit>0))
{
WR_CMD_PORT(CMD_WR_USB_DATA7); //向USB端点2的发送缓冲区写入数据块
if(LOG_transmit==132)
{
WR_DAT_PORT(10);
length=10;
}
else
{
WR_DAT_PORT(64);
length=64;
}
WR_DAT_PORT(LOG_transmit+1);
WR_DAT_PORT(133-LOG_transmit);
for (i=0; i<31; i++)
{
WR_DAT_PORT(buffer[LOG_transmit*31+i]&0xFF);
WR_DAT_PORT((buffer[LOG_transmit*31+i]/256)&0x0F);
}
LOG_transmit++;
LOG_INT_R=0xFF;
break;
}
else
{
LOG_printf(&trace,"Transmit Over!!,%d",LOG_transmit);
LOG_transmit=0;
LOG_INT_R=0xFF;
break;
}
}
default: // 其它中断,未用到,解锁后退出即可
{
WR_CMD_PORT( CMD_UNLOCK_USB ); // 释放当前USB缓冲区
LOG_printf(&trace,"Other!!,%d",LOG_INT_R);
LOG_INT_R=0xFF;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -