📄 usb.c
字号:
#include <iom128v.h>
#include "CH372V_Init_AVR.h"
#include "USART.h"
unsigned char length, c1, len, len2, i;
unsigned int adct;
unsigned char *pBuf;
unsigned char mBuf[64];
unsigned char iBuf[8];
unsigned char t[2];
#define ADC_VREF_TYPE 0xC0
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADC;
}
void F_USB_INT_EP1_IN(void)
{
CH372V_SendCMD1 (CMD_UNLOCK_USB); //释放缓冲区
}
void F_USB_INT_EP1_OUT(void)
{
pBuf=iBuf; //数据未处理
CH372V_SendCMD1(CMD_RD_USB_DATA); //发出读数据命令
length=CH372V_ReadDAT1();
//长度为0跳出
for(len=0;len!=length;len++,pBuf++)
{
*pBuf=CH372V_ReadDAT1(); //取出下传数据
}
if(iBuf[0]==0x01)
{
adct=read_adc(iBuf[1]);
CH372V_SendCMD1(CMD_WR_USB_DATA5); //发出写上传端点命令
CH372V_SendDAT1(2);
CH372V_SendDAT1(adct & 0xff);
CH372V_SendDAT1(adct>>8);
}
//CH372V_SendCMD1 (CMD_UNLOCK_USB); //释放缓冲区,如果前面没有CMD_RD_USB_DATA命令则使用本命令
}
void F_USB_INT_EP2_OUT(void)
{
pBuf=mBuf; //数据未处理
CH372V_SendCMD1(CMD_RD_USB_DATA); //发出读数据命令
length=CH372V_ReadDAT1(); //首先读出的是长度
for(len=0;len!=length;len++,pBuf++)
{
*pBuf=CH372V_ReadDAT1(); //将数据读入到缓冲区
}
print(mBuf);
if(mBuf[0]==0x01)
{
adct=read_adc(mBuf[1]);
CH372V_SendCMD1(CMD_WR_USB_DATA7); //发出写上传端点命令
CH372V_SendDAT1(2);
CH372V_SendDAT1(adct & 0xff);
CH372V_SendDAT1(adct>>8);
}
}
void F_USB_INT_EP2_IN(void)
{
CH372V_SendCMD1 (CMD_UNLOCK_USB); //释放缓冲区
}
void CH372int(void)
{
unsigned char InterruptStatus=0;
CH372V_SendCMD1(CMD_GET_STATUS);
InterruptStatus=CH372V_ReadDAT1();
//InterruptStatus=0x02;
PrintHex(InterruptStatus);
print(interrupt_come);
switch(InterruptStatus)
{
case USB_INT_EP1_IN:
F_USB_INT_EP1_IN();
print(USB_INTER_EP1_IN);
break;
case USB_INT_EP1_OUT:
F_USB_INT_EP1_OUT();
print(USB_INTER_EP1_OUT);
break;
case USB_INT_EP2_IN:
F_USB_INT_EP2_IN();
print(USB_INTER_EP2_IN);
break;
case USB_INT_EP2_OUT:
F_USB_INT_EP2_OUT();
print(USB_INTER_EP2_OUT);
break;
default:
break;
}
}
//#pragma vector=INT0_vect
interrupt [02] void int0(void)
{
CH372int();
}
void main(void)
{
//USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 38400
uart1_init();
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
EIMSK=0x01;
MCUCR=0x02;
MCUCSR=0x00;
EICRA=0x02;
PORTD=PORTD|0x01;
// ADC initialization
// ADC Clock frequency: 115.200 kHz
// ADC Voltage Reference: Int., cap. on AREF
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
#asm("sei");
CH372V_Init();
print(init_ok);
USART_Transmit(WatchPoint);
//USART_Transmit(temp_check);
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -