📄 usb_reset.c
字号:
/*
Copyright 2003 Cygnal Integrated Products, Inc. File: reset.c
Author: JS
Created: JAN 03
Target Device: C8051F320
Source file for USB firmware. Includes the USBReset and
supporting routines. The USBReset routine should be called
after a RESET condition is detected on the bus. The following
are included:
- USBReset(): Resets the device status structure, all
endpoints (including Endpoint0), and all endpoint
status structures.
- EndpointReset(): Resets the status structure
for the selected endpoint. The endpoint is left
in the halted state
******************************************/
#include "c8051F320.h"
#include "usb_main.h"
#include "usb_desc.h"
#include "usb_config.h"
#include "usb_structs.h"
#include "usb_regs.h"extern DEVICE_STATUS gDeviceStatus;
extern EP_STATUS gEp0Status;
extern EP_STATUS gEp1InStatus;
extern EP_STATUS gEp2OutStatus;//---------------------------
// USBReset
//---------------------------
// - Initialize the global Device Status structure (all zeros)
// - Resets all endpoints
//void USBReset (){
BYTE i, bPower = 0;
BYTE * pDevStatus; // Reset device status structure to all zeros (undefined)
pDevStatus = (BYTE *)&gDeviceStatus;
for (i=0;i<sizeof(DEVICE_STATUS);i++)
{
*pDevStatus++ = 0x00;
}
// Set device state to default
gDeviceStatus.bDevState = DEV_DEFAULT;
// REMOTE_WAKEUP_SUPPORT and SELF_POWERED_SUPPORT
// defined in file "usb_desc.h"
gDeviceStatus.bRemoteWakeupSupport = REMOTE_WAKEUP_SUPPORT;
gDeviceStatus.bSelfPoweredStatus = SELF_POWERED_SUPPORT; // Reset all endpoints
// Reset Endpoint0
gEp0Status.bEpState = EP_IDLE; // Reset Endpoint0 state
gEp0Status.bEp = 0; // Set endpoint number
gEp0Status.uMaxP = EP0_MAXP; // Set maximum packet size
// Reset Endpoint1 IN
gEp1InStatus.bEpState = EP_HALTED; // Reset state
gEp1InStatus.uNumBytes = 0; // Reset byte counter
// Reset Endpoint2 OUT
gEp2OutStatus.bEpState = EP_HALTED; // Reset state
gEp2OutStatus.uNumBytes = 0; // Reset byte counter
// Get Suspend enable/disable status. If enabled, prepare temporary
// variable bPower.
if (SUSPEND_ENABLE)
{
bPower = 0x01; // Set bit0 (Suspend Enable)
}
// Get ISO Update enable/disable status. If enabled, prepare temporary
// variable bPower.
if (ISO_UPDATE_ENABLE)
{
bPower |= 0x80; // Set bit7 (ISO Update Enable)
}
UWRITE_BYTE(POWER, bPower);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -