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

📄 usb.c

📁 smp860运动控制器USB驱动,对从事数控技术开发人员非常有用
💻 C
字号:
/************************************************************************
 *File	: Usb.c															*
 *By 	: 								                                *
 ************************************************************************/ 
#include "USB.h"

void UsbStallEp0(void)
{
	UsbSetEndpointStatus(0, 1);
	UsbSetEndpointStatus(1, 1);
}

void UsbDisconnect(void)
{
	USB_DISABLE_INTERRUPT;
	// Initialize D12 configuration
	UsbSetMode(USB_D12_NOLAZYCLOCK | USB_D12_CLOCKRUNNING,
        USB_D12_SETTOONE | USB_D12_CLOCK_12M);
}

void UsbConnect(void)
{
	// reset event flags
	USB_DISABLE_INTERRUPT;
	bUSBFlags.nValue = 0;

	UsbSetEndpointStatus(2, 0);
	UsbSetEndpointStatus(3, 0);
	UsbSetEndpointStatus(4, 0);
	UsbSetEndpointStatus(5, 0);
	// V2.1 enable normal+sof interrupt
	UsbSetDMA(USB_D12_ENDP4INTENABLE | USB_D12_ENDP5INTENABLE);

	// Initialize D12 configuration
	UsbSetMode(USB_D12_NOLAZYCLOCK | 
	           USB_D12_CLOCKRUNNING | 
			   USB_D12_SOFTCONNECT, 
			   USB_D12_SETTOONE |USB_D12_CLOCK_12M);
				   
	USB_ENABLE_INTERRUPT;
}


void UsbReconnect(void)
{

	bUSBFlags.bits.bIn_ISR = 1;

	UsbClearAllInts();
	UsbDisconnect();
	Delay(256);
	USB_ENABLE_INTERRUPT;
	Delay(1800);
	USB_DISABLE_INTERRUPT;
	UsbConnect();
	bUSBFlags.bits.bIn_ISR = 0;
}

void UsbSingleTransmit(unsigned char* pBuf, unsigned char nLen)
{
	if(nLen <= EP0_PACKET_SIZE)
    {
		UsbWriteEndpoint(1, pBuf, nLen);
	}
}

void UsbClearAllInts(void)
{
	UsbReadInterruptRegister();
	UsbReadLastTransactionStatus(0);
	UsbReadLastTransactionStatus(1);
	UsbReadLastTransactionStatus(2);
	UsbReadLastTransactionStatus(3);
	UsbReadLastTransactionStatus(4);
	UsbReadLastTransactionStatus(5);
}

//***************************************************************************
void __irq Eint0Isr(void)
{

   	rI_ISPC = BIT_EINT0;  //CLEAR USB interrupt
	bUSBFlags.bits.bIn_ISR = 1; 
	USB_DISABLE_INTERRUPT;
    
    Usb_irq();
    
   	USB_ENABLE_INTERRUPT;
	bUSBFlags.bits.bIn_ISR = 0; 
}

//***************************************************************************

void Isr_USB_Init(void)
{
    #if 0
        pISR_EINT0 = (int)Eint0Isr;
	    rPCONG = rPCONG | 0x0003;   
	    rPUPG = rPUPG & 0xfe;          
	    rINTMSK=~(BIT_GLOBAL|BIT_EINT0);
	#else
	    rPCONG = rPCONG & 0xfffc;      
	    rPUPG = rPUPG & 0xfe;        
	#endif
}

U8 CheckUsbLink(void)
{
		return TRUE;
}

void USBInit(void)
{
	rPCONC = rPCONC & (~(3<<30)) | (1<<30) ;		//GPC15 OUTPUT
	rPDATC = rPDATC & (~(1<<15)) ;		//GPC15 output 0

	Isr_USB_Init();     
	UsbReconnect();
}


unsigned short D12_ReadChipID(void)
{
    unsigned short b1,j;
    
    outportb_D12(D12_COMMAND, 0xfd);								
	b1 = inportb_D12(D12_DATA);									
	j = (unsigned short)inportb_D12(D12_DATA);									
	j <<= 8;
	j += (unsigned short)b1;
	return j;                           //0x1012
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -