⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb.c

📁 CH372下位机
💻 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 + -