📄 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 + -