summaryrefslogtreecommitdiff
path: root/port/fsdev
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2022-02-18 22:56:06 +0800
committersakumisu <[email protected]>2022-02-18 22:56:06 +0800
commitc97928007ddef04895aa245ee4dd2c812eead5c2 (patch)
tree3942d67e9b2b5d6ee4774bce6ed71a458b34b50a /port/fsdev
parentc2d048f130af51efa3be42c1abdedcf0b3f21e43 (diff)
add volatile for dev_addr
Diffstat (limited to 'port/fsdev')
-rw-r--r--port/fsdev/usb_dc_fsdev.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/port/fsdev/usb_dc_fsdev.c b/port/fsdev/usb_dc_fsdev.c
index e16577f2..908f0173 100644
--- a/port/fsdev/usb_dc_fsdev.c
+++ b/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 */