Explorar o código

Added function to get USB frame number from hardware

Dmitry %!s(int64=9) %!d(string=hai) anos
pai
achega
26197499ff
Modificáronse 2 ficheiros con 17 adicións e 0 borrados
  1. 6 0
      inc/usbd_core.h
  2. 11 0
      src/usb_32l0A.S

+ 6 - 0
inc/usbd_core.h

@@ -237,6 +237,11 @@ typedef bool (*usbd_hw_ep_isstalled)(uint8_t ep);
  */
 typedef void (*usbd_hw_poll)(usbd_device *dev, usbd_evt_callback drv_callback);
 
+/** Gets frame number from usb hardware
+ */
+typedef uint16_t (*usbd_hw_get_frameno)(void);
+
+
 /** Makes a string descriptor contains unique serial number from hardware ID's
  * \param[in] buffer pointer to buffer for the descriptor
  * \return of the descriptor in bytes
@@ -281,6 +286,7 @@ struct usbd_driver {
     usbd_hw_ep_setstall     ep_setstall;
     usbd_hw_ep_isstalled    ep_isstalled;
     usbd_hw_poll            poll;
+    usbd_hw_get_frameno     frame_no;
     usbd_hw_get_serialno    get_serialno_desc;
 };
 

+ 11 - 0
src/usb_32l0A.S

@@ -82,6 +82,7 @@ usb_stml0a:
     .long   _ep_setstall
     .long   _ep_isstalled
     .long   _evt_poll
+    .long   _get_frame
     .long   _get_serial_desc
     .size   usb_stml0a, . - usb_stml0a
 
@@ -190,6 +191,16 @@ _reset:
     .size   _reset, . - _reset
 
     .thumb_func
+    .type   _get_frame, %function
+_get_frame:
+    ldr     r0, =#USB_REGBASE
+    ldrh    r0, [r0, #0x08]     //FNR
+    lsls    r0, #21
+    lsrs    r0, #21
+    bx      lr
+    .size   _get_frame, . - _get_frame
+
+    .thumb_func
     .type   _enable, %function
 _enable:
     ldr     r1, =#USB_REGBASE     //USB->CNTR