//ICC-AVR application builder : 2009-4-30 15:29:42
// Target : M8
// Crystal: 11.059Mhz
#include <iom16v.h>
#include <macros.h>
#include <string.h>
#include "CH375.h"
#include "CH375INC.h"
//#include "CH375HFJ.H"
unsigned char Rec_Buff[64];
unsigned char Rec_Flag=0,Rec_Len=0;
/*===========================================================
Description:向CH375的命令端口写入命令,周期不小于4uS,
如果单片机较快则延时
Argument:
Notes :
============================================================*/
void CH375_WR_CMD( unsigned char cmd )
{
CH375_D0_D7_DIR = 0XFF;
CH375_D0_D7 = cmd;
CH375_A0_1;
NOP();
NOP();
CH375_WR_0;
NOP();
CH375_WR_1;
CH375_D0_D7_DIR = 0;
}
/*============================================================
Description:向CH375的数据端口写入数据,周期不小于1.5uS,
如果单片机较快则延时
Argument:
Notes :
=============================================================*/
void CH375_WR_DAT( unsigned char dat )
{
CH375_D0_D7_DIR = 0XFF;
CH375_D0_D7 = dat;
CH375_A0_0;
NOP();
NOP();
CH375_WR_0;
NOP();
CH375_WR_1;
CH375_D0_D7_DIR = 0;
}
/*==========================================
Description:从CH375的数据端口读出数据,周期不小于1.5uS,
如果单片机较快则延时
Argument:
Notes :
============================================*/
unsigned char CH375_RD_DAT( void )
{
unsigned char data;
CH375_D0_D7_DIR = 0; //对于标准双向I/O,请在此设置为输入方向
CH375_A0_0;
NOP();
NOP();
CH375_RD_0;
NOP();
data = PINA;
CH375_RD_1;
CH375_A0_1;
return( data );
}
/*==========================================
Description:从CH375的数据端口读出数据,周期不小于1.5uS,
如果单片机较快则延时
Argument:
Notes :
============================================*/
unsigned char Test_CH375(void)
{
unsigned char temp1,temp2,i;
temp1=0xf0;
CH375_WR_CMD(CMD_CHECK_EXIST);
CH375_WR_DAT(temp1);
NOP();
for(i=80;i>0;i--){
temp2=CH375_RD_DAT();
temp2=~temp2;
uart_code(temp2);
if(temp1==temp2){
break;
}
}
if(i){
return 1;
}
else{
return 0;
}
}
/*==========================================
Description:
Argument:
Notes :
============================================*/
unsigned char SetCH375_Mode(unsigned char mode)
{
unsigned char i,temp;
CH375_WR_CMD(CMD_SET_USB_MODE);
CH375_WR_DAT(mode);
NOP();
for(i=200;i>0;i--){
temp=CH375_RD_DAT();
uart_code(temp);
if(temp==CMD_RET_SUCCESS){
break;
}
}
if(i){
return 1;
}
else{
return 0;
}
}
/*==========================================
Description: USB硬件复位,40MS之内完成
Argument:
Notes :
============================================*/
void CH375_Reset(void)
{
unsigned char i;
CH375_WR_CMD(CMD_RESET_ALL);
Delay_MS(50);
}
/*==========================================
Description:设置USB厂商标识码和产品标识码,必须在
在设置工作模式之前设置
Argument: VID 厂商标识码
Notes : PID 产品标识码
============================================*/
void SetUSB_ID(unsigned int VID,unsigned int PID)
{
unsigned char byte[4];
byte[0]=(VID>>8)& 0XFF;
byte[1]=VID & 0XFF;
byte[2]=PID>>8;
byte[3]=PID & 0XFF;
CH375_WR_CMD(CMD_SET_USB_ID);
CH375_WR_DAT(byte[0]);
CH375_WR_DAT(byte[1]);
CH375_WR_DAT(byte[2]);
CH375_WR_DAT(byte[3]);
}
/*==========================================
Description:向USB端点1的上传缓冲区写入数据块,
有效值是0~8;如果长度不为0,则
单片机必须将后续数据写入CH372
Argument:
Notes :
============================================*/
void WritePoint1(unsigned char *byte,unsigned char len)
{
unsigned char i;
CH375_WR_CMD(CMD_WR_USB_DATA5);
CH375_WR_DAT(len);
for(i=0;i<len;i++){
CH375_WR_DAT(*byte);
byte++;
}
}
/*==========================================
Description:向USB端点2的上传缓冲区写入数据块,
有效值是0~64;如果长度不为0,则
单片机必须将后续数据写入CH372
Argument:
Notes :
============================================*/
void WritePoint2(unsigned char *byte,unsigned char len)
{
unsigned char i;
CH375_WR_CMD(CMD_WR_USB_DATA7);
CH375_WR_DAT(len);
for(i=0;i<len;i++){
CH375_WR_DAT(*byte);
byte++;
}
}
/*==========================================
Description:
Argument:
Notes :
============================================*/
void CH375_Init(void)
{
Test_CH375(); //测试CH375是否正常工作
SetCH375_Mode( 2 ); //设置为使用内置固件的USB设备方式
}
/*==========================================
Description:
Argument:
Notes :
============================================*/
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
unsigned char InterruptStatus;
unsigned char i,length;
CLI();
CH375_WR_CMD( CMD_GET_STATUS ); //获取中断状态并取消中断请求
InterruptStatus = CH375_RD_DAT( ); // 获取中断状态
switch ( InterruptStatus ) { // 分析中断状态处理
case USB_INT_EP2_OUT: { // 批量端点下传成功
CH375_WR_CMD( CMD_RD_USB_DATA ); //从当前USB中断的端点缓冲区读取数据块,并释放缓冲区
length = CH375_RD_DAT( ); // 首先读取后续数据长度
Rec_Len=length;
Rec_Flag=1;
//uart_code(length);
for ( i = 0; i < length; i ++ ){
Rec_Buff[ i ] = CH375_RD_DAT( ); // 接收数据包
}
break;
}
case USB_INT_EP2_IN: { //批量数据发送成功
CH375_WR_CMD( CMD_UNLOCK_USB ); //释放当前USB缓冲区
break;
}
case USB_INT_EP1_IN:{ //中断端点数据发送成功
CH375_WR_CMD( CMD_UNLOCK_USB ); //释放当前USB缓冲区
break;
}
default: { // 其它中断,未用到,解锁后退出即可
CH375_WR_CMD( CMD_UNLOCK_USB ); // 释放当前USB缓冲区
break;
}
}
SEI();
}
没有合适的资源?快使用搜索试试~ 我知道了~
CH375_DEVICE.rar_ch375b_ch375b usb
共35个文件
o:4个
lis:4个
s:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 60 浏览量
2022-09-19
16:28:33
上传
评论
收藏 43KB RAR 举报
温馨提示
此工程为CH375B USB桥接芯片设备驱动程序,包括完整的底层驱动程序和配置文件。
资源推荐
资源详情
资源评论
收起资源包目录
CH375_DEVICE.rar (35个子文件)
CH375_DEVICE
CH375.H 811B
CH375_DEVICE.cof 7KB
Common.dp2 143B
CH375_DEVICE.hex 2KB
Common.c 531B
UartConfig.s 2KB
MAIN.lis 7KB
UartConfig.lis 4KB
CH375_DEVICE.mak 2KB
MAIN.o 2KB
CH375DEVICE._C 6KB
CH375DEVICE.o 7KB
CH375DEVICE.s 14KB
CH375_DEVICE.prj 933B
CH375DEVICE.dp2 199B
MAIN.dp2 192B
UartConfig.c 739B
CH375_DEVICE.dbg 4KB
Common.lis 4KB
CH375_DEVICE.lk 45B
UartConfig.o 875B
UartConfig.i 0B
CH375_DEVICE.SRC 101B
CH375DEVICE.C 6KB
CH375DEVICE.lis 31KB
Common.i 0B
Common.o 846B
MAIN._C 1KB
MAIN.C 1KB
CH375INC.H 12KB
CH375_DEVICE.lst 25KB
Common.s 2KB
UartConfig.dp2 245B
MAIN.s 3KB
CH375_DEVICE.mp 3KB
共 35 条
- 1
资源评论
我虽横行却不霸道
- 粉丝: 72
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功