📄 ch375_slaver.c.bak
字号:
//CH375的slaver的程序
/***************************************
** USB 1.1 Slaver for CH375 **
****************************************/
#ifndef __MAIN_C__
#define __MAIN_C__
#endif
#include "head.h"
#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include "ch375inc.h"
#include "usbDef.h"
#include "uart.h"
#include "descriptor.h"
#include "mcuFun.h"
#include "ch375.h"
#define DELAY_START_value 1 /* 根据单片机的时钟选择延时初值 */
#define DBG_MSK_0 (1<<0)
#define DBG_MSK_1 (1<<1)
#define DBG_MSK_2 (1<<2)
#define DBG_MSK_3 (1<<3)
uint8 eaCount, debug=0xff;
uint16 tCount;
unsigned char RECV_LEN; /* 刚接收到的数据的长度 */
unsigned char idata RECV_BUFFER[ CH375_MAX_DATA_LEN ]; /* 数据缓冲区,用于保存接收到的下传数据,长度为0到64字节 */
unsigned char idata *cmd_buf;
unsigned char idata *ret_buf;
typedef union _REQUEST_PACK
{
unsigned char buffer[8];
struct
{
unsigned char bmReuestType; //标准请求字
unsigned char bRequest; //请求代码
unsigned int wvalue; //特性选择高
unsigned int wIndx; //索引
unsigned int wLength; //数据长度
}r;
} mREQUEST_PACKET, *mpREQUEST_PACKET;
unsigned char mVarSetupRequest; // USB请求码
unsigned char mVarSetupLength; // 后续数据长度
unsigned char code * VarSetupDescr; // 描述符偏移地址
unsigned char VarUsbAddress ; //USB设备地址
bit CH375FLAGERR; //错误清0
bit CH375CONFLAG; //配置标志
mREQUEST_PACKET request;
//我的连接
//CH375 51
//D0-7 P0.0-7
//A0 P2.6
//RD RD
//WR WR
//CS P2.7
//INT INT0
//故
//0x7fff 命令端口, A0=1
//0x3fff 数据端口, A0=0
sbit led = P1^0;
sbit CH375_INT_WIRE = P3^2; // CH375中断请求输出,低电平有效
void delay50ms(void);
void delay1s(void);
void flash_led(void);
void delay50ms(void)
{
unsigned char i, j;
for( i=200; i!=0; i-- )
for( j=250; j!=0; j-- );
}
void delay1s(void)
{
unsigned char i,j,k;
for( i=10; i!=0; i-- )
for( j=200; j!=0; j-- )
for( k=250; k!=0; k-- );
}
//-----------------------------
//led以2s的频率闪烁10s
//-----------------------------
void flash_led(void)
{
unsigned char i;
for( i=10;i>0;i-- )
{
led=!led;
delay1s();
}
}
//串行数据接收程序
void receive(void)
{
unsigned int count;
unsigned char buf;
RECV_LEN=0;
cmd_buf = RECV_BUFFER; // 接收缓冲区
while( 1 )
{
RI=0;
*cmd_buf = SBUF;
cmd_buf++;
RECV_LEN++;
if( RECV_LEN == 64 )
{
while( 1 )
{
count=10000;
while( RI==0 )
{
count--;
if( count==0 )
return;
}
RI=0;
buf=SBUF;
}
}
count=10000;
while( RI==0 )
{
count--;
if( count==0 )
return;
}
}
}
void main(void)
{
unsigned char length, cc;
tOut t;
eaCount=0; //中断总是关闭的
led = 0;
ComInit();
uartPutStr(__DATE__);
uartPutStr("\n\r");
uartPutStr(__TIME__);
uartPutStr("\n\r");
// delay1s(); // 延时等待CH375初始化完成,如果单片机由CH375提供复位信号则不必延时
// delay1s();
CH375_Init( ); // 初始化CH375
uartPrint("ch375 inited!\n\r", NULL, 0);
uartPutStr(">>>>>>>>>>>>>>>>>\n\r");
uartPrint("usb rec: %\n\r", &cc, 1);
while ( 1 )
{
if(w(&t, 100))
{
reset(&t);
led=!led;
}
if( RI==1 ) // 从串口接收到的数据
{
//led=1;
receive();
//led=0;
uartPrint("uart rec!\n\r", NULL, 0);
// 将从串口接收到的数据发送到USB设备
ret_buf = RECV_BUFFER; // 接收缓冲区
length = RECV_LEN; // 刚接收到的数据长度
if( length!=0 )
{
CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); // 向USB端点2的发送缓冲区写入数据块
CH375_WR_DAT_PORT( length ); // 首先写入后续数据长度
while( length-- )
{
CH375_WR_DAT_PORT( *ret_buf ); // 数据
ret_buf++;
}
}
}
CH375_INT_WIRE=1;
if( CH375_INT_WIRE==0 ) // 从USB设备接收到数据
{
cc++;
uartPrint("usb rec: %\n\r", &cc, 1);
mCh375Interrupt();
// 将从USB设备接收到的数据发送到串口
ret_buf = RECV_BUFFER; // 接收缓冲区
length = RECV_LEN; // 刚接收到的数据长度
while( length-- )
{
SendChar( *ret_buf );
ret_buf++;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -