| Electronic Components Datasheet Search |
|
PIC16C765/P Datasheet(PDF) 72 Page - Microchip Technology |
|
|
|||||||||||||||||||||||||||||
PIC16C765/P Datasheet(HTML) 72 Page - Microchip Technology |
|
72 / 158 page ![]() PIC16C745/765 DS41124A-page 72 Advanced Information © 1999 Microchip Technology Inc. ter must be provided for in each bank. The 16C745/ 765 can save the appropriate registers in Common RAM and not have to waste a byte in each bank for W register. 10.9.3.6 Buffer allocation The PIC16C745/765 has 64 bytes of Dual Port RAM. 24 are used for the Buffer Descriptor Table (BDT) leav- ing 40 bytes for buffers. Endpoint 0 IN and OUT need dedicated buffers since a setup transaction can never be NAKed. That leaves three buffers for four possible Endpoints. But the USB spec requires that low speed devices are only allowed 2 endpoints (USB 1.1 paragraph 5.3.1.2), where an endpoint is a simplex connection that defined by the combination of Endpoint number and direction. The default configuration allocates individual buffers to EP0 OUT, EP0 In, EP1 Out, and EP1 In. The last buffer is shared between EP2 In and EP2 Out. Again, the spec says low speed devices can only use 2 end- points beyond EP0. This configuration supports most of the possible combinations of endpoints (EP1 OUT and EP1 IN, EP1OUT and EP2IN, EP1 OUT and EP2 OUT, EP1 IN and EP2 OUT, EP1 IN and EP2 IN). The only combination that is not supported by this configu- ration is Endpoint 2 IN and Endpoint 2 OUT. If your application needs both EP2 IN and EP2 OUT, the func- tion USBReset will need to be edited to give each of these dedicated buffers at the expense of EP1. 10.9.4 FUNCTION CALL REFERENCE Interface between the Application and Protocol layer takes place in three main functions: InitUSB, PutUSB and GetUSB. InitUSB should be called by the main program imme- diately upon power-up. It sets up the Buffer Descriptor Table, transitions the part to the Powered state, and prepares the device for enumeration. At this point the USB Reset is the only USB interrupt allowed, prevent- ing the part from responding to anything on the bus until it’s been reset. The USB Reset interrupt transi- tions the part to the default state where it responds to commands on address zero. When it receives a SET ADDRESS command, the device transitions to the addressed state and now responds to commands on the new address. PutUSB (Buffer pointer, Buffer size, Endpoint) sends data up to the host. The pointer to the block of data to transmit, is in the FSR/IRP, and the block size and endpoint is passed in W register. If the IN buffer is available for that endpoint, the block of data is copied to the buffer, then the Data 0/1 bit is flipped and the owns bit is set. A buffer not available would occur when it has been previously loaded and the host has not requested that the USB peripheral transmit it. In this case, a failure code would be returned so the application can try again later. GetUSB (Buffer Pointer, Endpoint) returns data sent from the host. If there is a buffer ready (i.e., data has been received from the host) it is copied to the desti- nation pointed to by FSR/IRP (A buffer pointer in FSF/ IRP and the endpoint number in W must be provided.). If no data is available, it returns a failure code. Thus, the functions of polling for buffer ready and copying the data are combined into the one function. ServiceUSBInt handles all interrupts generated by the USB peripheral. First it copies the active buffer to common RAM which provides a quick turn around on the buffer in dual port RAM and also to avoids having to switch banks during processing of the buffer. StallUSBEP/UnstallUSBEP sets or clears the stall bit in the endpoint control register. The stall bit indicates to the host that user intervention is required and until such intervention is made, further attempts to commu- nicate with the endpoint will not be successful. Once the user intervention has been made, UnstallUSBEP will clear the bit allowing communications to take place. These calls are useful to signal to the host that user intervention is required. An example of this might be a printer out of paper. CheckSleep Tests the UCTRL.UIDLE bit if set, indi- cating that there has been no activity on the bus for 3 mS, puts the device to sleep. This puts the part into a low power standby mode until awakened by bus activ- ity. This has to be handled outside the ISR because we need the interrupt to wake us from sleep, and also because the application may not be ready to sleep when the interrupt occurs. Instead, the application should periodically call this function to poll the bit when the device is in a good place to sleep. Prior to putting the device to sleep, it enables the activ- ity interrupt so the device will be awakened by the first transition on the bus. The device will immediately jump to the ISR, recognizing the activity interrupt, which then disables the interrupt and resumes pro- cessing with the instruction following the CheckSleep call. ConfiguredUSB (Macro) Continuously polls the enu- meration status bits and waits until the device has been configured by the host. 10.9.5 BEHIND THE SCENES The ISR calls ServiceUSBInt, which then further has to mask the USB Interrupt register with the USB Inter- rupt Enable bits, then see what caused the interrupt. InitUSB only enables the Reset interrupt (USB_RST). This prevents the device from responding to anything on the bus until it’s been reset by the host. When the reset is received, the Buffer Descriptors are initialized, most of the rest of the interrupts are unmasked and the device transitions from the POWERED to DEFAULT state. Now it can respond to commands on address zero. From there the rest of the enumeration process takes place, including assigning an address to the device through the SET_ADDRESS command and selecting a configuration through the |
|
Link URL |
| Does ALLDATASHEET help your business so far? [ DONATE ] |
About Alldatasheet | Advertisement | Contact us | Privacy Policy | Link to Datasheet | Link Exchange | Manufacturer List All Rights Reserved©Alldatasheet.com |
| Russian : Alldatasheetru.com | Korean : Alldatasheet.co.kr | Spanish : Alldatasheet.es | French : Alldatasheet.fr | Italian : Alldatasheetit.com Portuguese : Alldatasheetpt.com | Polish : Alldatasheet.pl | Vietnamese : Alldatasheet.vn Indian : Alldatasheet.in | Mexican : Alldatasheet.com.mx | British : Alldatasheet.co.uk | New Zealand : Alldatasheet.co.nz |
|
Family Site : ic2ic.com |
icmetro.com |