Microchip® Advanced Software Framework

usb_device.h File Reference

USB Driver header file for XMEGA products including USB interface.

Copyright (c) 2011-2018 Microchip Technology Inc. and its subsidiaries.

#include <nvm.h>

Macros

USB Device read/modify/write management
#define LACR16(addr, msk)
 
#define LASR16(addr, msk)
 
#define XCHR16(addr, msk)
 
#define LATR16(addr, msk)
 
USB Device endpoints table management
#define udd_endpoint_set_control(ep_ctrl, val)   (ep_ctrl->CTRL=val)
 
#define udd_endpoint_get_control(ep_ctrl)   (ep_ctrl->CTRL)
 
#define udd_endpoint_disable(ep_ctrl)   udd_endpoint_set_control(ep_ctrl,0)
 
#define udd_endpoint_is_enable(ep_ctrl)   (USB_EP_TYPE_DISABLE_gc!=udd_endpoint_get_type(ep_ctrl))
 
#define udd_endpoint_enable_stall(ep_ctrl)   (ep_ctrl->CTRL |= USB_EP_STALL_bm)
 
#define udd_endpoint_disable_stall(ep_ctrl)   (ep_ctrl->CTRL &= ~USB_EP_STALL_bm)
 
#define udd_endpoint_is_stall(ep_ctrl)   (ep_ctrl->CTRL &USB_EP_STALL_bm ? true : false)
 
#define udd_endpoint_set_multipacket(ep_ctrl)   (ep_ctrl->CTRL |= USB_EP_MULTIPKT_bm)
 
#define udd_endpoint_TC_int_disable(ep_ctrl)   (ep_ctrl->CTRL |= USB_EP_INTDSBL_bm)
 
#define udd_endpoint_set_pingpong(ep_ctrl)   (ep_ctrl->CTRL |= USB_EP_PINGPONG_bm)
 
#define udd_endpoint_get_size_field(ep_ctrl)   (ep_ctrl->CTRL & USB_EP_BUFSIZE_gm)
 
#define udd_endpoint_get_type(ep_ctrl)   (ep_ctrl->CTRL & USB_EP_TYPE_gm)
 
#define udd_endpoint_get_status(ep_ctrl)   (ep_ctrl->STATUS)
 
#define udd_endpoint_clear_status(ep_ctrl)   (ep_ctrl->STATUS=USB_EP_BUSNACK0_bm|USB_EP_BUSNACK1_bm)
 
#define udd_endpoint_setup_received(ep_ctrl)   (ep_ctrl->STATUS&USB_EP_SETUP_bm ? true : false)
 
#define udd_endpoint_ack_setup_received(ep_ctrl)   LACR16(&ep_ctrl->STATUS, USB_EP_SETUP_bm)
 
#define udd_endpoint_transfer_complete(ep_ctrl)   (ep_ctrl->STATUS&USB_EP_TRNCOMPL0_bm ? true : false)
 
#define udd_endpoint_ack_transfer_complete(ep_ctrl)   LACR16(&(ep_ctrl->STATUS), USB_EP_TRNCOMPL0_bm)
 
#define udd_endpoint_transfer_complete_bank0(ep_ctrl)   (ep_ctrl->STATUS&USB_EP_TRNCOMPL0_bm ? true : false)
 
#define udd_endpoint_ack_transfer_complete_bankO(ep_ctrl)   LACR16(&ep_ctrl->STATUS, USB_EP_TRNCOMPL0_bm)
 
#define udd_endpoint_transfer_complete_bank1(ep_ctrl)   (ep_ctrl->STATUS&USB_EP_SETUP_bm ? true : false)
 
#define udd_endpoint_ack_transfer_complete_bank1(ep_ctrl)   LACR16(&ep_ctrl->STATUS, USB_EP_SETUP_bm)
 
#define udd_endpoint_get_bank(ep_ctrl)   (ep_ctrl->STATUS & USB_EP_BANK_bm ? true : false)
 
#define udd_endpoint_set_bank(ep_ctrl)   LASR16(&ep_ctrl->STATUS, USB_EP_BANK_bm)
 
#define udd_endpoint_clear_bank(ep_ctrl)   LACR16(&ep_ctrl->STATUS, USB_EP_BANK_bm)
 
#define udd_endpoint_set_dtgl(ep_ctrl)   LASR16(&ep_ctrl->STATUS,USB_EP_TOGGLE_bm)
 
#define udd_endpoint_clear_dtgl(ep_ctrl)   LACR16(&ep_ctrl->STATUS, USB_EP_TOGGLE_bm )
 
#define udd_endpoint_get_dtgl(ep_ctrl)   ((ep_ctrl->STATUS)&USB_EP_TOGGLE_bm ? true : false)
 
#define udd_endpoint_toggle_dtgl(ep_ctrl)   LATR16(&ep_ctrl->STATUS, USB_EP_TOGGLE_bm)
 
#define udd_endpoint_set_NACK0(ep_ctrl)   LASR16(&ep_ctrl->STATUS,USB_EP_BUSNACK0_bm)
 
#define udd_endpoint_set_NACK1(ep_ctrl)   LASR16(&ep_ctrl->STATUS,USB_EP_BUSNACK1_bm)
 
#define udd_endpoint_clear_NACK0(ep_ctrl)   LACR16(&ep_ctrl->STATUS, USB_EP_BUSNACK0_bm)
 
#define udd_endpoint_clear_NACK1(ep_ctrl)   LACR16(&ep_ctrl->STATUS, USB_EP_BUSNACK1_bm)
 
#define udd_endpoint_get_NACK1(ep_ctrl)   ((ep_ctrl->STATUS&USB_EP_BUSNACK1_bm) ? true : false)
 
#define udd_endpoint_get_NACK0(ep_ctrl)   ((ep_ctrl->STATUS&USB_EP_BUSNACK0_bm) ? true : false)
 
#define udd_endpoint_overflow(ep_ctrl)   (ep_ctrl->STATUS&USB_EP_OVF_bm ? true : false)
 
#define udd_endpoint_underflow(ep_ctrl)   (ep_ctrl->STATUS&USB_EP_UNF_bm ? true : false)
 
#define UDD_ENDPOINT_MAX_TRANS   (0x3FF)
 
#define udd_endpoint_out_nb_receiv(ep_ctrl)   (ep_ctrl->CNT)
 
#define udd_endpoint_out_reset_nb_received(ep_ctrl)   (ep_ctrl->CNT = 0)
 
#define udd_endpoint_in_set_bytecnt(ep_ctrl, n)   (ep_ctrl->CNT = n)
 
#define udd_endpoint_set_azlp(ep_ctrl)   (ep_ctrl->CNT |= 0x8000)
 
#define udd_endpoint_clear_azlp(ep_ctrl)   (ep_ctrl->CNT &= ~0x8000)
 
#define udd_endpoint_set_buf(ep_ctrl, buf)   (ep_ctrl->DATAPTR = (uint16_t) buf)
 
#define udd_endpoint_in_nb_sent(ep_ctrl)   (ep_ctrl->AUXDATA)
 
#define udd_endpoint_in_reset_nb_sent(ep_ctrl)   (ep_ctrl->AUXDATA = 0)
 
#define udd_endpoint_out_set_nbbyte(ep_ctrl, nb)   (ep_ctrl->AUXDATA = nb)
 
#define udd_endpoint_out_get_nbbyte_requested(ep_ctrl)   (ep_ctrl->AUXDATA)
 
#define udd_endpoint_set_aux(ep_ctrl, buf)   (ep_ctrl->AUXDATA = (uint16_t) buf)
 
USB Device endpoint control setup field management
#define udd_control_setup()   (udd_sram.ep_ctrl[0].STATUS&USB_EP_SETUP_bm ? true : false)
 
#define udd_control_ack_setup()   LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_SETUP_bm)
 
USB Device endpoint control OUT field management
#define udd_control_out_is_enable_stall()   (udd_sram.ep_ctrl[0].CTRL&USB_EP_STALL_bm ? true : false)
 
#define udd_control_out_enable_stall()   LASR16(&udd_sram.ep_ctrl[0].CTRL,USB_EP_STALL_bm)
 
#define udd_control_out_disable_stall()   LACR16(&udd_sram.ep_ctrl[0].CTRL,USB_EP_STALL_bm)
 
#define udd_control_out_is_stalled()   (udd_sram.ep_ctrl[0].STATUS&USB_EP_STALLF_bm ? true : false)
 
#define udd_control_out_ack_stall()   LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_STALLF_bm)
 
#define udd_control_out_set_NACK0()   LASR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_BUSNACK0_bm)
 
#define udd_control_out_clear_NACK0()   LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_BUSNACK0_bm)
 
#define udd_control_out_overflow()   (udd_sram.ep_ctrl[0].STATUS&USB_EP_OVF_bm ? true : false)
 
#define udd_control_ack_out_overflow()   LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_OVF_bm)
 
#define udd_control_out_tc()   (udd_sram.ep_ctrl[0].STATUS&USB_EP_TRNCOMPL0_bm ? true : false)
 
#define udd_control_out_ack_tc()   LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TRNCOMPL0_bm)
 
#define udd_control_out_set_tc()   LASR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TRNCOMPL0_bm)
 
#define udd_control_out_dt_get()   (udd_sram.ep_ctrl[0].STATUS&USB_EP_TOGGLE_bm ? true : false)
 
#define udd_control_out_dt_set()   LASR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TOGGLE_bm )
 
#define udd_control_out_dt_clear()   LACR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TOGGLE_bm )
 
#define udd_control_out_dt_toggle()   LATR16(&udd_sram.ep_ctrl[0].STATUS,USB_EP_TOGGLE_bm)
 
#define udd_control_out_set_buf(buf)   (udd_sram.ep_ctrl[0].DATAPTR = (uint16_t) buf)
 
#define udd_control_out_get_bytecnt()   (udd_sram.ep_ctrl[0].CNT)
 
USB Device endpoint control IN field management
#define udd_control_in_is_enable_stall()   (udd_sram.ep_ctrl[1].CTRL&USB_EP_STALL_bm ? true : false)
 
#define udd_control_in_enable_stall()   LASR16(&udd_sram.ep_ctrl[1].CTRL,USB_EP_STALL_bm)
 
#define udd_control_in_disable_stall()   LACR16(&udd_sram.ep_ctrl[1].CTRL,USB_EP_STALL_bm)
 
#define udd_control_in_is_stalled()   (udd_sram.ep_ctrl[1].STATUS&USB_EP_STALLF_bm ? true : false)
 
#define udd_control_in_ack_stall()   LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_STALLF_bm)
 
#define udd_control_in_set_NACK0()   LASR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_BUSNACK0_bm)
 
#define udd_control_in_clear_NACK0()   LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_BUSNACK0_bm)
 
#define udd_control_in_underflow()   (udd_sram.ep_ctrl[1].STATUS&USB_EP_UNF_bm ? true : false)
 
#define udd_control_ack_in_underflow()   LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_UNF_bm)
 
#define udd_control_in_tc()   (udd_sram.ep_ctrl[1].STATUS&USB_EP_TRNCOMPL0_bm ? true : false)
 
#define udd_control_in_ack_tc()   LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TRNCOMPL0_bm)
 
#define udd_control_in_set_tc()   LASR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TRNCOMPL0_bm)
 
#define udd_control_in_dt_get()   (udd_sram.ep_ctrl[1].STATUS&USB_EP_TOGGLE_bm ? true : false)
 
#define udd_control_in_dt_set()   LASR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TOGGLE_bm )
 
#define udd_control_in_dt_clear()   LACR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TOGGLE_bm )
 
#define udd_control_in_dt_toggle()   LATR16(&udd_sram.ep_ctrl[1].STATUS,USB_EP_TOGGLE_bm)
 
#define udd_control_in_set_buf(buf)   (udd_sram.ep_ctrl[1].DATAPTR = (uint16_t) buf)
 
#define udd_control_in_set_bytecnt(n)   (udd_sram.ep_ctrl[1].CNT = n)
 

USB Device main management

#define udd_enable_interface()   (USB_CTRLA |= USB_ENABLE_bm)
 
#define udd_disable_interface()   (USB_CTRLA &= ~USB_ENABLE_bm)
 
#define udd_attach_device()   (USB_CTRLB |= USB_ATTACH_bm)
 
#define udd_detach_device()   (USB_CTRLB &= ~USB_ATTACH_bm)
 
#define udd_gnak_disable()   (USB_CTRLB &= ~USB_GNACK_bm)
 
#define udd_gnak_enable()   (USB_CTRLB |= USB_GNACK_bm)
 
#define udd_gnak_is_enable()   (USB_CTRLB & USB_GNACK_bm)
 
#define udd_set_nb_max_ep(n)   (USB_CTRLA |= n)
 
#define udd_enable_store_frame_number()   (USB_CTRLA |= USB_STFRNUM_bm)
 
#define udd_disable_store_frame_number()   (USB_CTRLA &= ~USB_STFRNUM_bm)
 
#define udd_set_full_speed()   (USB_CTRLA |= USB_SPEED_bm)
 
#define udd_set_low_speed()   (USB_CTRLA &= ~USB_SPEED_bm)
 
#define udd_set_ep_table_addr(n)   (USB.EPPTR = (uint16_t)n)
 
#define udd_get_ep_table_addr()   (USB.EPPTR)
 
#define udd_get_fifo_rp()   (USB_FIFORP)
 
#define udd_reset_fifo()   (USB_FIFORP=0xFF)
 
#define udd_enable_interrupt(level)   (USB_INTCTRLA |= level&(USB_INTLVL1_bm|USB_INTLVL0_bm))
 
#define udd_set_device_address(n)   (USB_ADDR=n)
 
#define udd_get_device_address()   (USB_ADDR)
 
#define udd_enable_fifo()   (USB_CTRLA |= USB_FIFOEN_bm)
 
#define udd_disable_fifo()   (USB_CTRLA &= ~USB_FIFOEN_bm)
 
#define udd_send_remote_wake_up()   (USB_CTRLB &= ~USB_RWAKEUP_bm, USB_CTRLB |= USB_RWAKEUP_bm)
 
#define udd_set_global_nack()   (USB_CTRLB |= USB_GNACK_bm)
 
#define udd_is_crc_event()   (USB_INTFLAGSASET & USB_CRCIF_bm ? true : false)
 
#define udd_ack_crc_event()   (USB_INTFLAGSACLR = USB_CRCIF_bm)
 
#define udd_set_crc_event()   (USB_INTFLAGSASET = USB_CRCIF_bm)
 
#define udd_enable_crc_interrupt()   (USB_INTCTRLA |= USB_CRCIE_bm)
 
#define udd_disable_crc_interrupt()   (USB_INTCTRLA &= ~USB_CRCIE_bm)
 
#define udd_is_start_of_frame_event()   (USB_INTFLAGSASET & USB_SOFIF_bm ? true : false)
 
#define udd_ack_start_of_frame_event()   (USB_INTFLAGSACLR = USB_SOFIF_bm)
 
#define udd_set_start_of_frame_event()   (USB_INTFLAGSASET = USB_SOFIF_bm)
 
#define udd_enable_start_of_frame_interrupt()   (USB_INTCTRLA |= USB_SOFIE_bm)
 
#define udd_disable_start_of_frame_interrupt()   (USB_INTCTRLA &= ~USB_SOFIE_bm)
 
#define udd_is_enable_start_of_frame_interrupt()   (0!=(USB_INTCTRLA|USB_SOFIE_bm))
 
#define udd_is_reset_event()   (USB_INTFLAGSASET & USB_RSTIF_bm ? true : false)
 
#define udd_ack_reset_event()   (USB_INTFLAGSACLR = USB_RSTIF_bm)
 
#define udd_set_reset_event()   (USB_INTFLAGSASET = USB_RSTIF_bm)
 
#define udd_is_suspend_event()   (USB_INTFLAGSASET & USB_SUSPENDIF_bm ? true : false)
 
#define udd_ack_suspend_event()   (USB_INTFLAGSACLR = USB_SUSPENDIF_bm)
 
#define udd_set_suspend_event()   (USB_INTFLAGSASET = USB_SUSPENDIF_bm)
 
#define udd_is_resume_event()   (USB_INTFLAGSASET & USB_RESUMEIF_bm ? true : false)
 
#define udd_ack_resume_event()   (USB_INTFLAGSACLR = USB_RESUMEIF_bm)
 
#define udd_set_resume_event()   (USB_INTFLAGSASET = USB_RESUMEIF_bm)
 
#define udd_enable_busevt_interrupt()   (USB_INTCTRLA |= USB_BUSEVIE_bm)
 
#define udd_disable_busevt_interrupt()   (USB_INTCTRLA &= ~USB_BUSEVIE_bm)
 
#define udd_is_setup_event()   (USB_INTFLAGSBCLR & USB_SETUPIF_bm ? true : false)
 
#define udd_ack_setup_event()   (USB_INTFLAGSBCLR = USB_SETUPIF_bm)
 
#define udd_set_setup_event()   (USB_INTFLAGSBSET = USB_SETUPIF_bm)
 
#define udd_enable_setup_interrupt()   (USB_INTCTRLB |= USB_SETUPIE_bm)
 
#define udd_disable_setup_interrupt()   (USB_INTCTRLB &= ~USB_SETUPIE_bm)
 
#define udd_is_tc_event()   (USB_INTFLAGSBCLR & USB_TRNIF_bm ? true : false)
 
#define udd_ack_tc_event()   (USB_INTFLAGSBCLR = USB_TRNIF_bm)
 
#define udd_set_tc_event()   (USB_INTFLAGSBSET = USB_TRNIF_bm)
 
#define udd_enable_tc_interrupt()   (USB_INTCTRLB |= USB_TRNIE_bm)
 
#define udd_disable_tc_interrupt()   (USB_INTCTRLB &= ~USB_TRNIE_bm)
 
#define udd_is_overflow_event()   (USB_INTFLAGSASET & USB_OVFIF_bm ? true : false)
 
#define udd_ack_overflow_event()   (USB_INTFLAGSACLR = USB_OVFIF_bm)
 
#define udd_set_overflow_event()   (USB_INTFLAGSASET = USB_OVFIF_bm)
 
#define udd_enable_overflow_interrupt()   (USB_INTCTRLA |= USB_BUSERRIE_bm)
 
#define udd_disable_overflow_interrupt()   (USB_INTCTRLA &= ~USB_BUSERRIE_bm)
 
#define udd_is_enable_overflow_interrupt()   (USB_INTCTRLA&USB_BUSERRIE_bm ? true : false)
 
#define udd_is_underflow_event()   (USB_INTFLAGSASET & USB_UNFIF_bm ? true : false)
 
#define udd_ack_underflow_event()   (USB_INTFLAGSACLR = USB_UNFIF_bm)
 
#define udd_set_underflow_event()   (USB_INTFLAGSASET = USB_UNFIF_bm)
 
#define udd_enable_underflow_interrupt()   (USB_INTCTRLA |= USB_BUSERRIE_bm)
 
#define udd_disable_underflow_interrupt()   (USB_INTCTRLA &= ~USB_BUSERRIE_bm)
 
#define udd_is_enable_underflow_interrupt()   (USB_INTCTRLA&USB_BUSERRIE_bm ? true : false)
 
#define udd_is_stall_event()   (USB_INTFLAGSASET & USB_STALLIF_bm ? true : false)
 
#define udd_ack_stall_event()   (USB_INTFLAGSACLR = USB_STALLIF_bm)
 
#define udd_set_stall_event()   (USB_INTFLAGSASET = USB_STALLIF_bm)
 
#define udd_enable_stall_interrupt()   (USB_INTCTRLA |= USB_STALLIE_bm)
 
#define udd_disable_stall_interrupt()   (USB_INTCTRLA &= ~USB_STALLIE_bm)
 
#define udd_is_enable_stall_interrupt()   (USB_INTCTRLA&USB_STALLIE_bm ? true : false)
 
static void usb_pad_init (void)
 Initializes the USB DP/DM buffers. More...