Xmega Application Note | |||||
00001 /* This file has been prepared for Doxygen automatic documentation generation.*/ 00050 #include "config.h" 00051 #include "conf_usb.h" 00052 #include "usb_task.h" 00053 #include "usb_drv.h" 00054 #include "usb_descriptors.h" 00055 #include "usb_device_task.h" 00056 00057 00058 00059 volatile uint16_t g_usb_event=0; 00060 extern uint8_t usb_connected; 00061 extern uint8_t usb_configuration_nb; 00062 00063 00064 00070 void usb_task_init(void) 00071 { 00072 Usb_force_device_mode(); 00073 usb_device_task_init(); 00074 } 00075 00076 00082 void usb_task(void) 00083 { 00084 usb_device_task(); 00085 00086 } 00087 00088 00107 ISR(USB_GEN_vect) 00108 { 00109 /* VBUS state detection */ 00110 if (Is_usb_vbus_transition() && Is_usb_vbus_interrupt_enabled()){ 00111 Usb_ack_vbus_transition(); 00112 if (Is_usb_vbus_high()){ 00113 usb_connected = true; 00114 Usb_vbus_on_action(); 00115 Usb_send_event(EVT_USB_POWERED); 00116 Usb_enable_reset_interrupt(); 00117 usb_start_device(); 00118 Usb_attach(); 00119 }else{ 00120 Usb_vbus_off_action(); 00121 usb_connected = false; 00122 Usb_send_event(EVT_USB_UNPOWERED); 00123 } 00124 } 00125 /* Device start of frame received */ 00126 if (Is_usb_sof() && Is_sof_interrupt_enabled()){ 00127 Usb_ack_sof(); 00128 Usb_sof_action(); 00129 } 00130 /* Device Suspend event (no more USB activity detected) */ 00131 if (Is_usb_suspend() && Is_suspend_interrupt_enabled()){ 00132 Usb_ack_suspend(); 00133 Usb_enable_wake_up_interrupt(); 00134 Usb_ack_wake_up(); 00135 Usb_freeze_clock(); 00136 Usb_send_event(EVT_USB_SUSPEND); 00137 Usb_suspend_action(); 00138 } 00139 /* Wake up event (USB activity detected): Used to resume */ 00140 if (Is_usb_wake_up() && Is_swake_up_interrupt_enabled()){ 00141 Usb_unfreeze_clock(); 00142 Usb_ack_wake_up(); 00143 Usb_disable_wake_up_interrupt(); 00144 Usb_wake_up_action(); 00145 Usb_send_event(EVT_USB_WAKE_UP); 00146 } 00147 00148 /* Resume state bus detection */ 00149 if (Is_usb_resume() && Is_resume_interrupt_enabled()){ 00150 Usb_disable_wake_up_interrupt(); 00151 Usb_ack_resume(); 00152 Usb_disable_resume_interrupt(); 00153 Usb_resume_action(); 00154 Usb_send_event(EVT_USB_RESUME); 00155 } 00156 00157 /* USB bus reset detection */ 00158 if (Is_usb_reset()&& Is_reset_interrupt_enabled()){ 00159 Usb_ack_reset(); 00160 usb_init_device(); 00161 Usb_reset_action(); 00162 Usb_send_event(EVT_USB_RESET); 00163 } 00164 00165 } 00166 00171 extern void suspend_action(void) 00172 { 00173 sei(); 00174 //Enter_sleep(POWER_DOWN_MODE); 00175 }
Generated on Mon Jan 18 09:26:08 2010 for AVR1907 Xplain USB Gateway by ![]() |