?? ch372v_init_avr.h~
字號(hào):
//#ifndef __CH372V_INIT_AVR_H__
//#define __CH372V_INIT_AVR_H__
#include <iom128v.h>
#include "CH372INC.H"
#include "delay.h"
#define CH372V_DIR DDRA
#define CH372V_IN PINA
#define CH372V_OUT PORTA
#define CH372V_WR (1<<0)
#define CH372V_WR_DIR DDRG
#define CH372V_WR_OUT PORTG
#define CH372V_WR_LO CH372V_WR_OUT &= ~CH372V_WR
#define CH372V_WR_HI CH372V_WR_OUT |= CH372V_WR
#define CH372V_RD (1<<1)
#define CH372V_RD_DIR DDRG
#define CH372V_RD_OUT PORTG
#define CH372V_RD_LO CH372V_RD_OUT &= ~CH372V_RD
#define CH372V_RD_HI CH372V_RD_OUT |= CH372V_RD
#define CH372V_A0 (1<<7)
#define CH372V_A0_DIR DDRC
#define CH372V_A0_OUT PORTC
#define CH372V_A0_LO CH372V_A0_OUT &= ~CH372V_A0
#define CH372V_A0_HI CH372V_A0_OUT |= CH372V_A0
#define CH372V_CS (1<<5)
#define CH372V_CS_DIR DDRC
#define CH372V_CS_OUT PORTC
#define CH372V_CS_LO CH372V_CS_OUT &= ~CH372V_CS
#define CH372V_CS_HI CH372V_CS_OUT |= CH372V_CS
//#define CH372V_INT (1<<5)
void CH372V_INT_DIR(void)
{
DDRD&=~(1<<0);
}
#define CH372V_INT_IN PIND0
//// CH372V 命令定義
//#define CH372V_RESET_ALL 0x05 //執(zhí)行硬件復(fù)位
//#define CH372V_CHECK_EXIST 0x06 //測(cè)試工作狀態(tài)
//#define CH372V_SET_SUB_ID 0x12 //設(shè)置VID和PID
//#define CH372V_SET_USB_MODE 0x15 //設(shè)置USB工作模式
//#define CH372V_GET_STATUS 0x22 //獲取中斷狀態(tài)
//#define CH372V_UNLOCK_USB 0x23 //釋放USB緩沖區(qū)
//#define CH372V_RD_USB_DATA 0x28 //從USB端點(diǎn)中斷讀取數(shù)據(jù)并釋放緩沖區(qū)
//#define CH372V_WR_USB_DATA5 0x2A //向USB端點(diǎn)1緩沖區(qū)寫數(shù)據(jù)
//#define CH372V_WR_USB_DATA7 0x2B //向USB端點(diǎn)2緩沖區(qū)寫數(shù)據(jù)
//#define CH372V_GET_IC_VER 0x01 //獲取芯片和固件版本
//#define CH372V_ENTER_SLEEP 0x03 //進(jìn)入低功耗睡眠掛起狀態(tài)
//#define CH372V_CHK_SUSPEND 0x0B //檢查USB總線掛起方式狀態(tài)
//#define CH372V_RD_USB_DATA0 0x27 //USB端點(diǎn)中斷讀取數(shù)據(jù)
//
//// CH372V 狀態(tài)定義
//#define CH372V_CMD_RET_SUCCESS 0x51 //操作成功
//#define CH372V_CMD_RET_ABORT 0x5F //操作失敗
//
//// CH372V 中斷狀態(tài)
//#define CH372V_USB_INT_BUS_RESET1 0x03 //檢測(cè)到USB總線復(fù)位
//#define CH372V_USB_INT_BUS_RESET2 0x07 //檢測(cè)到USB總線復(fù)位
//#define CH372V_USB_INT_BUS_RESET3 0x0B //檢測(cè)到USB總線復(fù)位
//#define CH372V_USB_INT_BUS_RESET4 0x0F //檢測(cè)到USB總線復(fù)位
//#define CH372V_USB_INT_EP0_SETUP 0x0C //端點(diǎn)0的接收器接收到數(shù)據(jù),SETUP 成功
//#define CH372V_USB_INT_EP0_OUT 0x00 //檢端點(diǎn)0的接收器接收到數(shù)據(jù),OUT功
//#define CH372V_USB_INT_EP0_IN 0x08 //端點(diǎn)0的發(fā)送器發(fā)送完數(shù)據(jù),IN成功
//#define CH372V_USB_INT_EP1_OUT 0x01 //輔助端點(diǎn)/端點(diǎn)1接收到數(shù)據(jù),OUT成功
//#define CH372V_USB_INT_EP1_IN 0x09 //中斷端點(diǎn)/端點(diǎn)1發(fā)送完數(shù)據(jù),IN成功
//#define CH372V_USB_INT_EP2_OUT 0x02 //批量端點(diǎn)/端點(diǎn)2接收到數(shù)據(jù),OUT成功
//#define CH372V_USB_INT_EP2_IN 0x0A //批量端點(diǎn)/端點(diǎn)2發(fā)送完數(shù)據(jù),IN成功
//#define CH372V_USB_INT_USB_SUSPEND 0x05 //USB總線掛起事件(如果已CHK_SUSPEND)
//#define CH372V_USB_INT_WAKE_UP 0x06 //從睡眠中被喚醒事件(如果已ENTER_SLEEP)
#define CH372V_VID 0x4348 //VID廠商標(biāo)識(shí)碼
#define CH372V_PID 0x5537 //PID產(chǎn)品識(shí)別碼
//void CH372V_Init(void);
//void CH372V_SendCMD1(unsigned char Command);
//void CH372V_SetVIDPID(void);
//unsigned char CH372V_ReadDAT1(void);
//void CH372V_SendDAT1(unsigned char DAT);
//#endif /*__CH372V_INIT_AVR_H__*/
unsigned char WatchPoint,temp,m,temp_check,n;
//發(fā)送單字節(jié)命令
void CH372V_SendCMD1(unsigned char Command) {
CH372V_DIR = 0xFF;
CH372V_OUT = Command; //發(fā)送數(shù)據(jù)
CH372V_A0_HI; //A0=1命令
CH372V_CS_LO; //CS有效
CH372V_WR_LO; //WR有效
CH372V_RD_HI; //RD無效
#asm("NOP");
#asm("NOP");
#asm("NOP");
CH372V_WR_HI; //WR無效
CH372V_CS_HI; //CS無效
}
void CH372V_SendDAT1(unsigned char DAT)
{
CH372V_DIR = 0xFF;
CH372V_OUT = DAT; //發(fā)送數(shù)據(jù)
CH372V_CS_LO; //CS有效
CH372V_A0_LO; //A0=0數(shù)據(jù)
CH372V_WR_LO; //WR有效
CH372V_RD_HI; //RD無效
#asm("NOP");
#asm("NOP");
#asm("NOP");
CH372V_WR_HI; //WR無效
CH372V_CS_HI; //CS無效
}
unsigned char CH372V_ReadDAT1(void)
{
unsigned char DAT=0;
CH372V_DIR = 0x00;
CH372V_CS_LO; //CS有效
CH372V_A0_LO; //A0=0數(shù)據(jù)
CH372V_RD_LO; //RD有效
CH372V_WR_HI; //WR無效
#asm("NOP");
#asm("NOP");
#asm("NOP");
DAT = CH372V_IN; //讀取數(shù)據(jù)
CH372V_RD_HI; //RD無效
CH372V_CS_HI; //CS無效
CH372V_DIR = 0xFF;
return DAT;
}
//設(shè)置VID和PID
void CH372V_SetVIDPID(void)
{
CH372V_SendCMD1(CMD_SET_USB_ID);
temp=(unsigned char)(CH372V_VID&0xff);
CH372V_SendDAT1(temp);
temp=(unsigned char)((CH372V_VID>>8)&0xff);
CH372V_SendDAT1(temp);
temp=(unsigned char)(CH372V_PID&0xff);
CH372V_SendDAT1(temp);
temp=(unsigned char)((CH372V_PID>>8)&0xff);
CH372V_SendDAT1(temp);
}
void CH372V_Init(void) {
//首先初始化端口
CH372V_DIR |= 0xFF;
CH372V_WR_HI; //WR無效
CH372V_WR_DIR |= CH372V_WR;
CH372V_RD_HI; //RD無效
CH372V_RD_DIR |= CH372V_RD;
CH372V_CS_HI; //CS無效
CH372V_CS_DIR |= CH372V_CS;
CH372V_A0_HI; //A0=1命令
CH372V_A0_DIR |= CH372V_A0;
//第一部分硬件復(fù)位
CH372V_SendCMD1(CMD_RESET_ALL);
Delay1ms(100); //延時(shí)40ms
//第二部分設(shè)置VID和PID
CH372V_SendCMD1(CMD_CHECK_EXIST);
CH372V_SendDAT1(0x57);
temp_check =CH372V_ReadDAT1();
/*while(temp_check!=0xa8) // CH375不正常
{
CH372V_SendCMD1(CMD_RESET_ALL);
Delay1ms(100); //延時(shí)40ms
CH372V_SendCMD1(CMD_CHECK_EXIST);
CH372V_SendDAT1(0x57);
temp_check =CH372V_ReadDAT1();
}*/
for(n=100; n!=0; n-- )
{ /* 等待操作成功,通常需要等待10uS-20uS */
if ( temp_check==CMD_RET_SUCCESS )
break;
}
CH372V_SetVIDPID();
//第三部分設(shè)置USB工作模式
//Delay_us(2);
CH372V_SendCMD1(CMD_SET_USB_MODE);
//Delay_us(40);
CH372V_SendDAT1(0x02); //內(nèi)部固件模式
//Delay_us(40);
WatchPoint =CH372V_ReadDAT1();
for(m=100; m!=0; m-- )
{ /* 等待操作成功,通常需要等待10uS-20uS */
if ( WatchPoint==CMD_RET_SUCCESS )
break;
}
//asm("NOP"); //在這里加入斷點(diǎn)觀察WatchPoint
CH372V_INT_DIR();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -