00001 #ifndef _USB_DRV_H_
00002 #define _USB_DRV_H_
00003
00004
00005
00006
00007 typedef enum endpoint_parameter{ep_num, ep_type, ep_direction, ep_size, ep_bank, nyet_status} t_endpoint_parameter;
00008
00012
00013
00014
00015 #define MAX_EP_NB 7
00016
00017 #define EP_CONTROL 0
00018
00019
00020
00021 #define MSK_EP_DIR 0x7F
00022 #define MSK_UADD 0x7F
00023 #define MSK_EPTYPE 0xC0
00024 #define MSK_EPSIZE 0x70
00025 #define MSK_EPBK 0x0C
00026 #define MSK_DTSEQ 0x0C
00027 #define MSK_NBUSYBK 0x03
00028 #define MSK_CURRBK 0x03
00029 #define MSK_DAT 0xFF // UEDATX
00030 #define MSK_BYCTH 0x07 // UEBCHX
00031 #define MSK_BYCTL 0xFF // UEBCLX
00032 #define MSK_EPINT 0x7F // UEINT
00033 #define MSK_HADDR 0xFF // UHADDR
00034
00035
00036
00037
00038 #define TYPE_CONTROL 0
00039 #define TYPE_ISOCHRONOUS 1
00040 #define TYPE_BULK 2
00041 #define TYPE_INTERRUPT 3
00042
00043
00044 #define DIRECTION_OUT 0
00045 #define DIRECTION_IN 1
00046
00047
00048 #define SIZE_8 0
00049 #define SIZE_16 1
00050 #define SIZE_32 2
00051 #define SIZE_64 3
00052 #define SIZE_128 4
00053 #define SIZE_256 5
00054 #define SIZE_512 6
00055 #define SIZE_1024 7
00056
00057
00058
00059 #define ONE_BANK 0
00060 #define TWO_BANKS 1
00061
00062
00063 #define NYET_ENABLED 0
00064 #define NYET_DISABLED 1
00065
00066
00067
00071 #define Usb_build_ep_config0(type, dir, nyet) ((type<<6) | (nyet<<1) | (dir))
00072 #define Usb_build_ep_config1(size, bank ) ((size<<4) | (bank<<2) )
00073 #define usb_configure_endpoint(num, type, dir, size, bank, nyet) \
00074 ( Usb_select_endpoint(num), \
00075 usb_config_ep(Usb_build_ep_config0(type, dir, nyet),\
00076 Usb_build_ep_config1(size, bank) ))
00077
00079 #define Usb_enable_regulator() (UHWCON |= (1<<UVREGE))
00080
00082 #define Usb_disable_uid_pin() (UHWCON &= ~(1<<UIDE))
00084 #define Usb_force_device_mode() (Usb_disable_uid_pin(), UHWCON |= (1<<UIMOD))
00085
00087 #define Usb_enable() (USBCON |= ((1<<USBE) | (1<<OTGPADE)))
00089 #define Usb_disable() (USBCON &= ~((1<<USBE) | (1<<OTGPADE)))
00090
00091 #define Usb_select_device() (USBCON &= ~(1<<HOST))
00092
00094 #define Usb_freeze_clock() (USBCON |= (1<<FRZCLK))
00095 #define Usb_unfreeze_clock() (USBCON &= ~(1<<FRZCLK))
00096
00097 #define Is_usb_id_device() ((USBSTA & (1<<ID)) ? TRUE : FALSE)
00098
00099 #define Is_usb_vbus_high() ((USBSTA & (1<<VBUS)) ? TRUE : FALSE)
00100 #define Is_usb_vbus_low() ((USBSTA & (1<<VBUS)) ? FALSE : TRUE)
00101
00102
00103
00108 #define Usb_initiate_remote_wake_up() (UDCON |= (1<<RMWKUP))
00110 #define Usb_detach() (UDCON |= (1<<DETACH))
00112 #define Usb_attach() (UDCON &= ~(1<<DETACH))
00114 #define Is_usb_pending_remote_wake_up() ((UDCON & (1<<RMWKUP)) ? TRUE : FALSE)
00116 #define Is_usb_detached() ((UDCON & (1<<DETACH)) ? TRUE : FALSE)
00117
00119 #define Usb_get_device_interrupt() (UDINT & (1<<UDIEN))
00121 #define Usb_ack_all_device_interrupt() (UDINT = ~(1<<UDIEN))
00122
00124 #define Usb_enable_remote_wake_up_interrupt() (UDIEN |= (1<<UPRSME))
00126 #define Usb_disable_remote_wake_up_interrupt() (UDIEN &= ~(1<<UPRSME))
00127 #define Is_remote_wake_up_interrupt_enabled() ((UDIEN & (1<<UPRSME)) ? TRUE : FALSE)
00129 #define Usb_ack_remote_wake_up_start() (UDINT = ~(1<<UPRSMI))
00131 #define Is_usb_remote_wake_up_start() ((UDINT & (1<<UPRSMI)) ? TRUE : FALSE)
00132
00134 #define Usb_enable_resume_interrupt() (UDIEN |= (1<<EORSME))
00136 #define Usb_disable_resume_interrupt() (UDIEN &= ~(1<<EORSME))
00137 #define Is_resume_interrupt_enabled() ((UDIEN & (1<<EORSME)) ? TRUE : FALSE)
00139 #define Usb_ack_resume() (UDINT = ~(1<<EORSMI))
00141 #define Is_usb_resume() ((UDINT & (1<<EORSMI)) ? TRUE : FALSE)
00142
00144 #define Usb_enable_wake_up_interrupt() (UDIEN |= (1<<WAKEUPE))
00146 #define Usb_disable_wake_up_interrupt() (UDIEN &= ~(1<<WAKEUPE))
00147 #define Is_wake_up_interrupt_enabled() ((UDIEN & (1<<WAKEUPE)) ? TRUE : FALSE)
00149 #define Usb_ack_wake_up() (UDINT = ~(1<<WAKEUPI))
00151 #define Is_usb_wake_up() ((UDINT & (1<<WAKEUPI)) ? TRUE : FALSE)
00152
00154 #define Usb_enable_reset_interrupt() (UDIEN |= (1<<EORSTE))
00156 #define Usb_disable_reset_interrupt() (UDIEN &= ~(1<<EORSTE))
00157 #define Is_reset_interrupt_enabled() ((UDIEN & (1<<EORSTE)) ? TRUE : FALSE)
00159 #define Usb_ack_reset() (UDINT = ~(1<<EORSTI))
00161 #define Is_usb_reset() ((UDINT & (1<<EORSTI)) ? TRUE : FALSE)
00162
00164 #define Usb_enable_sof_interrupt() (UDIEN |= (1<<SOFE))
00166 #define Usb_disable_sof_interrupt() (UDIEN &= ~(1<<SOFE))
00167 #define Is_sof_interrupt_enabled() ((UDIEN & (1<<SOFE)) ? TRUE : FALSE)
00169 #define Usb_ack_sof() (UDINT = ~(1<<SOFI))
00171 #define Is_usb_sof() ((UDINT & (1<<SOFI)) ? TRUE : FALSE)
00172
00174 #define Usb_enable_suspend_interrupt() (UDIEN |= (1<<SUSPE))
00176 #define Usb_disable_suspend_interrupt() (UDIEN &= ~(1<<SUSPE))
00177 #define Is_suspend_interrupt_enabled() ((UDIEN & (1<<SUSPE)) ? TRUE : FALSE)
00179 #define Usb_ack_suspend() (UDINT = ~(1<<SUSPI))
00181 #define Is_usb_suspend() ((UDINT & (1<<SUSPI)) ? TRUE : FALSE)
00182
00184 #define Usb_enable_address() (UDADDR |= (1<<ADDEN))
00186 #define Usb_disable_address() (UDADDR &= ~(1<<ADDEN))
00188 #define Usb_configure_address(addr) (UDADDR = (UDADDR & (1<<ADDEN)) | ((U8)addr & MSK_UADD))
00189
00191 #define Usb_frame_number() ((U16)((((U16)UDFNUMH) << 8) | ((U16)UDFNUML)))
00193 #define Is_usb_frame_number_crc_error() ((UDMFN & (1<<FNCERR)) ? TRUE : FALSE)
00195
00196
00197
00198
00203 #define Usb_select_endpoint(ep) (UENUM = (U8)ep )
00204
00206 #define Usb_get_selected_endpoint() (UENUM )
00207
00209 #define Usb_reset_endpoint(ep) (UERST = 1 << (U8)ep, UERST = 0)
00210
00212 #define Usb_enable_endpoint() (UECONX |= (1<<EPEN))
00214 #define Usb_enable_stall_handshake() (UECONX |= (1<<STALLRQ))
00216 #define Usb_reset_data_toggle() (UECONX |= (1<<RSTDT))
00218 #define Usb_disable_endpoint() (UECONX &= ~(1<<EPEN))
00220 #define Usb_disable_stall_handshake() (UECONX |= (1<<STALLRQC))
00222 #define Usb_select_epnum_for_cpu() (UECONX &= ~(1<<EPNUMS))
00224 #define Is_usb_endpoint_enabled() ((UECONX & (1<<EPEN)) ? TRUE : FALSE)
00226 #define Is_usb_endpoint_stall_requested() ((UECONX & (1<<STALLRQ)) ? TRUE : FALSE)
00227
00229 #define Usb_configure_endpoint_type(type) (UECFG0X = (UECFG0X & ~(MSK_EPTYPE)) | ((U8)type << 6))
00231 #define Usb_configure_endpoint_direction(dir) (UECFG0X = (UECFG0X & ~(1<<EPDIR)) | ((U8)dir))
00232
00234 #define Usb_configure_endpoint_size(size) (UECFG1X = (UECFG1X & ~MSK_EPSIZE) | ((U8)size << 4))
00236 #define Usb_configure_endpoint_bank(bank) (UECFG1X = (UECFG1X & ~MSK_EPBK) | ((U8)bank << 2))
00238 #define Usb_allocate_memory() (UECFG1X |= (1<<ALLOC))
00240 #define Usb_unallocate_memory() (UECFG1X &= ~(1<<ALLOC))
00241
00243 #define Usb_ack_overflow_interrupt() (UESTA0X &= ~(1<<OVERFI))
00245 #define Usb_ack_underflow_interrupt() (UESTA0X &= ~(1<<UNDERFI))
00247 #define Usb_ack_zlp() (UESTA0X &= ~(1<<ZLPSEEN))
00249 #define Usb_data_toggle() ((UESTA0X&MSK_DTSEQ) >> 2)
00251 #define Usb_nb_busy_bank() (UESTA0X & MSK_NBUSYBK)
00253 #define Is_usb_one_bank_busy() ((UESTA0X & MSK_NBUSYBK) == 0 ? FALSE : TRUE)
00255 #define Is_endpoint_configured() ((UESTA0X & (1<<CFGOK)) ? TRUE : FALSE)
00257 #define Is_usb_overflow() ((UESTA0X & (1<<OVERFI)) ? TRUE : FALSE)
00259 #define Is_usb_underflow() ((UESTA0X & (1<<UNDERFI)) ? TRUE : FALSE)
00261 #define Is_usb_zlp() ((UESTA0X & (1<<ZLPSEEN)) ? TRUE : FALSE)
00262
00264 #define Usb_control_direction() ((UESTA1X & (1<<CTRLDIR)) >> 2)
00266 #define Usb_current_bank() ( UESTA1X & MSK_CURRBK)
00267
00269 #define Usb_ack_fifocon() (UEINTX &= ~(1<<FIFOCON))
00271 #define Usb_ack_nak_in() (UEINTX &= ~(1<<NAKINI))
00273 #define Usb_ack_nak_out() (UEINTX &= ~(1<<NAKOUTI))
00275 #define Usb_ack_receive_setup() (UEINTX &= ~(1<<RXSTPI))
00277 #define Usb_ack_receive_out() (UEINTX &= ~(1<<RXOUTI), Usb_ack_fifocon())
00279 #define Usb_ack_stalled() (MSK_STALLEDI= 0)
00281 #define Usb_ack_in_ready() (UEINTX &= ~(1<<TXINI), Usb_ack_fifocon())
00283 #define Usb_kill_last_in_bank() (UENTTX |= (1<<RXOUTI))
00285 #define Is_usb_read_enabled() (UEINTX&(1<<RWAL))
00287 #define Is_usb_write_enabled() (UEINTX&(1<<RWAL))
00289 #define Is_usb_read_control_enabled() (UEINTX&(1<<TXINI))
00291 #define Is_usb_nak_in_sent() (UEINTX&(1<<NAKINI))
00293 #define Is_usb_nak_out_sent() (UEINTX&(1<<NAKOUTI))
00295 #define Is_usb_receive_setup() (UEINTX&(1<<RXSTPI))
00297 #define Is_usb_receive_out() (UEINTX&(1<<RXOUTI))
00299 #define Is_usb_in_ready() (UEINTX&(1<<TXINI))
00301 #define Usb_send_in() (UEINTX &= ~(1<<FIFOCON))
00303 #define Usb_send_control_in() (UEINTX &= ~(1<<TXINI))
00305 #define Usb_free_out_bank() (UEINTX &= ~(1<<FIFOCON))
00307 #define Usb_ack_control_out() (UEINTX &= ~(1<<RXOUTI))
00308
00310 #define Usb_enable_flow_error_interrupt() (UEIENX |= (1<<FLERRE))
00312 #define Usb_enable_nak_in_interrupt() (UEIENX |= (1<<NAKINE))
00314 #define Usb_enable_nak_out_interrupt() (UEIENX |= (1<<NAKOUTE))
00316 #define Usb_enable_receive_setup_interrupt() (UEIENX |= (1<<RXSTPE))
00318 #define Usb_enable_receive_out_interrupt() (UEIENX |= (1<<RXOUTE))
00320 #define Usb_enable_stalled_interrupt() (UEIENX |= (1<<STALLEDE))
00322 #define Usb_enable_in_ready_interrupt() (UEIENX |= (1<<TXIN))
00324 #define Usb_disable_flow_error_interrupt() (UEIENX &= ~(1<<FLERRE))
00326 #define Usb_disable_nak_in_interrupt() (UEIENX &= ~(1<<NAKINE))
00328 #define Usb_disable_nak_out_interrupt() (UEIENX &= ~(1<<NAKOUTE))
00330 #define Usb_disable_receive_setup_interrupt() (UEIENX &= ~(1<<RXSTPE))
00332 #define Usb_disable_receive_out_interrupt() (UEIENX &= ~(1<<RXOUTE))
00334 #define Usb_disable_stalled_interrupt() (UEIENX &= ~(1<<STALLEDE))
00336 #define Usb_disable_in_ready_interrupt() (UEIENX &= ~(1<<TXIN))
00337
00339 #define Usb_read_byte() (UEDATX)
00341 #define Usb_write_byte(byte) (UEDATX = (U8)byte)
00342
00344 #define Usb_byte_counter() ((((U16)UEBCHX) << 8) | (UEBCLX))
00346 #define Usb_byte_counter_8() ((U8)UEBCLX)
00347
00349 #define Usb_interrupt_flags() (UEINT)
00351 #define Is_usb_endpoint_event() (Usb_interrupt_flags() != 0x00)
00353
00354
00355
00356
00364 #if !defined(BIG_ENDIAN) && !defined(LITTLE_ENDIAN)
00365 #error YOU MUST Define the Endian Type of target: LITTLE_ENDIAN or BIG_ENDIAN
00366 #endif
00367 #ifdef LITTLE_ENDIAN
00368 #define Usb_write_word_enum_struc(x) (x)
00369 #else //BIG_ENDIAN
00370 #define Usb_write_word_enum_struc(x) (wSWAP(x))
00371 #endif
00372
00373
00375
00376
00377
00378 U8 usb_config_ep (U8, U8);
00379
00380 U8 usb_init_device (void);
00381
00382
00383 #endif // _USB_DRV_H_