usb_drv.c File Reference

This file contains the USB driver routines. More...

#include "config.h"
#include "conf_usb.h"
#include "usb_drv.h"

Include dependency graph for usb_drv.c:

Go to the source code of this file.

Functions

U8 usb_config_ep (U8 config0, U8 config1)
 usb_configure_endpoint.
U8 usb_select_enpoint_interrupt (void)
 usb_select_endpoint_interrupt.
U8 usb_send_packet (U8 ep_num, U8 *tbuf, U8 data_length)
 usb_send_packet.
U8 usb_read_packet (U8 ep_num, U8 *rbuf, U8 data_length)
 usb_read_packet.
void usb_halt_endpoint (U8 ep_num)
 usb_halt_endpoint.
U8 usb_init_device (void)
 usb_init_device.


Detailed Description

This file contains the USB driver routines.

This file contains the USB driver routines.

Author:
Atmel Corporation: http://www.atmel.com
Support and FAQ: http://support.atmel.no/

Definition in file usb_drv.c.


Function Documentation

U8 usb_config_ep ( U8  config0,
U8  config1 
)

usb_configure_endpoint.

This function configures an endpoint with the selected type.

Parameters:
config0 
config1 
Returns:
Is_endpoint_configured.

Definition at line 65 of file usb_drv.c.

References Is_endpoint_configured, Usb_allocate_memory, and Usb_enable_endpoint.

00066 {
00067     Usb_enable_endpoint();
00068     UECFG0X = config0;
00069     UECFG1X = (UECFG1X & (1<<ALLOC)) | config1;
00070     Usb_allocate_memory();
00071     return (Is_endpoint_configured());
00072 }

U8 usb_select_enpoint_interrupt ( void   ) 

usb_select_endpoint_interrupt.

This function select the endpoint where an event occurs and returns the number of this endpoint. If no event occurs on the endpoints, this function returns 0.

Parameters:
none 
Returns:
endpoint number.

Definition at line 85 of file usb_drv.c.

References ep_num, MAX_EP_NB, and Usb_interrupt_flags.

00086 {
00087 U8 interrupt_flags;
00088 U8 ep_num;
00089 
00090    ep_num = 0;
00091    interrupt_flags = Usb_interrupt_flags();
00092 
00093    while(ep_num < MAX_EP_NB)
00094    {
00095       if (interrupt_flags & 1)
00096       {
00097          return (ep_num);
00098       }
00099       else
00100       {
00101          ep_num++;
00102          interrupt_flags = interrupt_flags >> 1;
00103       }
00104    }
00105    return 0;
00106 }

U8 usb_send_packet ( U8  ep_num,
U8 tbuf,
U8  data_length 
)

usb_send_packet.

This function moves the data pointed by tbuf to the selected endpoint fifo and sends it through the USB.

Parameters:
ep_num number of the addressed endpoint
*tbuf address of the first data to send
data_length number of bytes to send
Returns:
address of the next U8 to send.
Example: usb_send_packet(3,&first_data,0x20); // send packet on the endpoint #3 while(!(Usb_tx_complete)); // wait packet ACK'ed by the Host Usb_clear_tx_complete(); // acknowledge the transmit

Note: tbuf is incremented of 'data_length'.

Definition at line 128 of file usb_drv.c.

References Is_usb_write_enabled, Usb_select_endpoint, and Usb_write_byte.

00129 {
00130 U8 remaining_length;
00131 
00132    remaining_length = data_length;
00133    Usb_select_endpoint(ep_num);
00134    while(Is_usb_write_enabled() && (0 != remaining_length))
00135    {
00136       Usb_write_byte(*tbuf);
00137       remaining_length--;
00138       tbuf++;
00139    }
00140    return remaining_length;
00141 }

U8 usb_read_packet ( U8  ep_num,
U8 rbuf,
U8  data_length 
)

usb_read_packet.

This function moves the data stored in the selected endpoint fifo to the address specified by *rbuf.

Parameters:
ep_num number of the addressed endpoint
*rbuf aaddress of the first data to write with the USB data
data_length number of bytes to read
Returns:
address of the next U8 to send.
Example: while(!(Usb_rx_complete)); // wait new packet received usb_read_packet(4,&first_data,usb_get_nb_byte); // read packet from ep 4 Usb_clear_rx(); // acknowledge the transmit

Note: rbuf is incremented of 'data_length'.

Definition at line 163 of file usb_drv.c.

References Is_usb_read_enabled, Usb_read_byte, and Usb_select_endpoint.

00164 {
00165 U8 remaining_length;
00166 
00167    remaining_length = data_length;
00168    Usb_select_endpoint(ep_num);
00169 
00170    while(Is_usb_read_enabled() && (0 != remaining_length))
00171    {
00172       *rbuf = Usb_read_byte();
00173       remaining_length--;
00174       rbuf++;
00175    }
00176    return remaining_length;
00177 }

void usb_halt_endpoint ( U8  ep_num  ) 

usb_halt_endpoint.

This function sends a STALL handshake for the next Host request. A STALL handshake will be send for each next request untill a SETUP or a Clear Halt Feature occurs for this endpoint.

Parameters:
ep_num number of the addressed endpoint
Returns:
none

Definition at line 189 of file usb_drv.c.

References Usb_enable_stall_handshake, and Usb_select_endpoint.

00190 {
00191    Usb_select_endpoint(ep_num);
00192    Usb_enable_stall_handshake();
00193 }

U8 usb_init_device ( void   ) 

usb_init_device.

This function initializes the USB device controller and configures the Default Control Endpoint.

Parameters:
none 
Returns:
status

Definition at line 205 of file usb_drv.c.

References DIRECTION_OUT, EP_CONTROL, FALSE, Is_usb_endpoint_enabled, NYET_DISABLED, ONE_BANK, SIZE_32, TYPE_CONTROL, usb_configure_endpoint, and Usb_select_endpoint.

Referenced by usb_general_interrupt(), and usb_start_device().

00206 {
00207       Usb_select_endpoint(EP_CONTROL);
00208       if(!Is_usb_endpoint_enabled())
00209       {
00210          return usb_configure_endpoint(EP_CONTROL,    \
00211                                 TYPE_CONTROL,  \
00212                                 DIRECTION_OUT, \
00213                                 SIZE_32,       \
00214                                 ONE_BANK,      \
00215                                 NYET_DISABLED);
00216       }
00217    return FALSE;
00218 }

Here is the caller graph for this function:


Generated on Mon May 5 15:58:11 2008 for ATMEL by  doxygen 1.5.1-p1