Parcourir la source

add volatile for dev_addr

sakumisu il y a 4 ans
Parent
commit
c97928007d

+ 9 - 11
port/ch32/usb_dc_usbfs.c

@@ -18,22 +18,20 @@ struct usb_dc_ep_state {
 
 /* Driver state */
 struct usb_dc_config_priv {
-    uint8_t dev_addr;
+    volatile uint8_t dev_addr;
     struct usb_dc_ep_state in_ep[USB_NUM_BIDIR_ENDPOINTS];  /*!< IN endpoint parameters*/
     struct usb_dc_ep_state out_ep[USB_NUM_BIDIR_ENDPOINTS]; /*!< OUT endpoint parameters */
 } usb_dc_cfg;
 
-// clang-format off
 /* Endpoint Buffer */
-__attribute__ ((aligned(4))) uint8_t EP0_DatabufHD[64]; //ep0(64)
-__attribute__ ((aligned(4))) uint8_t EP1_DatabufHD[64+64];  //ep1_out(64)+ep1_in(64)
-__attribute__ ((aligned(4))) uint8_t EP2_DatabufHD[64+64];  //ep2_out(64)+ep2_in(64)
-__attribute__ ((aligned(4))) uint8_t EP3_DatabufHD[64+64];  //ep3_out(64)+ep3_in(64)
-__attribute__ ((aligned(4))) uint8_t EP4_DatabufHD[64+64];  //ep4_out(64)+ep4_in(64)
-__attribute__ ((aligned(4))) uint8_t EP5_DatabufHD[64+64];  //ep5_out(64)+ep5_in(64)
-__attribute__ ((aligned(4))) uint8_t EP6_DatabufHD[64+64];  //ep6_out(64)+ep6_in(64)
-__attribute__ ((aligned(4))) uint8_t EP7_DatabufHD[64+64];  //ep7_out(64)+ep7_in(64)
-// clang-format on
+__attribute__((aligned(4))) uint8_t EP0_DatabufHD[64];      //ep0(64)
+__attribute__((aligned(4))) uint8_t EP1_DatabufHD[64 + 64]; //ep1_out(64)+ep1_in(64)
+__attribute__((aligned(4))) uint8_t EP2_DatabufHD[64 + 64]; //ep2_out(64)+ep2_in(64)
+__attribute__((aligned(4))) uint8_t EP3_DatabufHD[64 + 64]; //ep3_out(64)+ep3_in(64)
+__attribute__((aligned(4))) uint8_t EP4_DatabufHD[64 + 64]; //ep4_out(64)+ep4_in(64)
+__attribute__((aligned(4))) uint8_t EP5_DatabufHD[64 + 64]; //ep5_out(64)+ep5_in(64)
+__attribute__((aligned(4))) uint8_t EP6_DatabufHD[64 + 64]; //ep6_out(64)+ep6_in(64)
+__attribute__((aligned(4))) uint8_t EP7_DatabufHD[64 + 64]; //ep7_out(64)+ep7_in(64)
 
 void OTG_FS_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
 

+ 1 - 1
port/ch32/usb_dc_usbhs.c

@@ -18,7 +18,7 @@ struct usb_dc_ep_state {
 
 /* Driver state */
 struct usb_dc_config_priv {
-    uint8_t dev_addr;
+    volatile uint8_t dev_addr;
     struct usb_dc_ep_state in_ep[USB_NUM_BIDIR_ENDPOINTS];  /*!< IN endpoint parameters*/
     struct usb_dc_ep_state out_ep[USB_NUM_BIDIR_ENDPOINTS]; /*!< OUT endpoint parameters */
 } usb_dc_cfg;

+ 6 - 6
port/fsdev/usb_dc_fsdev.c

@@ -40,10 +40,10 @@ struct usb_dc_ep_state {
 /* Driver state */
 struct usb_dc_config_priv {
     USB_TypeDef *Instance;                                  /*!< Register base address */
-    __IO uint8_t USB_Address;                               /*!< USB Address */
+    volatile uint8_t dev_addr;                              /*!< USB Address */
+    volatile uint32_t pma_offset;                           /*!< pma offset */
     struct usb_dc_ep_state in_ep[USB_NUM_BIDIR_ENDPOINTS];  /*!< IN endpoint parameters*/
     struct usb_dc_ep_state out_ep[USB_NUM_BIDIR_ENDPOINTS]; /*!< OUT endpoint parameters */
-    uint32_t pma_offset;
 } usb_dc_cfg;
 
 __WEAK void usb_dc_low_level_init(void)
@@ -116,7 +116,7 @@ int usbd_set_address(const uint8_t addr)
         USBx->DADDR = (uint16_t)USB_DADDR_EF;
     }
 
-    usb_dc_cfg.USB_Address = addr;
+    usb_dc_cfg.dev_addr = addr;
     return 0;
 }
 
@@ -348,9 +348,9 @@ void USBD_IRQHandler(void)
                     /* DIR = 0 implies that (EP_CTR_TX = 1) always */
                     PCD_CLEAR_TX_EP_CTR(USBx, 0);
                     usbd_event_notify_handler(USBD_EVENT_EP0_IN_NOTIFY, NULL);
-                    if ((usb_dc_cfg.USB_Address > 0U) && (PCD_GET_EP_TX_CNT(USBx, 0) == 0U)) {
-                        USBx->DADDR = ((uint16_t)usb_dc_cfg.USB_Address | USB_DADDR_EF);
-                        usb_dc_cfg.USB_Address = 0U;
+                    if ((usb_dc_cfg.dev_addr > 0U) && (PCD_GET_EP_TX_CNT(USBx, 0) == 0U)) {
+                        USBx->DADDR = ((uint16_t)usb_dc_cfg.dev_addr | USB_DADDR_EF);
+                        usb_dc_cfg.dev_addr = 0U;
                     }
                 } else {
                     /* DIR = 1 */

+ 2 - 2
port/synopsys/usb_dc_synopsys.c

@@ -99,10 +99,10 @@ struct usb_dc_ep_state {
 
 /* Driver state */
 struct usb_dc_config_priv {
-    USB_OTG_GlobalTypeDef *Instance;                        /*!< Register base address */
+    USB_OTG_GlobalTypeDef *Instance; /*!< Register base address */
+    volatile uint32_t grxstsp;
     struct usb_dc_ep_state in_ep[USB_NUM_BIDIR_ENDPOINTS];  /*!< IN endpoint parameters*/
     struct usb_dc_ep_state out_ep[USB_NUM_BIDIR_ENDPOINTS]; /*!< OUT endpoint parameters */
-    volatile uint32_t grxstsp;
 } usb_dc_cfg;
 
 static int usb_flush_rxfifo(USB_OTG_GlobalTypeDef *USBx);

+ 1 - 0
port/template/usb_dc.c

@@ -17,6 +17,7 @@ struct usb_dc_ep_state {
 
 /* Driver state */
 struct usb_dc_config_priv {
+    volatile uint8_t dev_addr;
     struct usb_dc_ep_state in_ep[USB_NUM_BIDIR_ENDPOINTS];  /*!< IN endpoint parameters*/
     struct usb_dc_ep_state out_ep[USB_NUM_BIDIR_ENDPOINTS]; /*!< OUT endpoint parameters */
 } usb_dc_cfg;