diff options
| author | sakumisu <[email protected]> | 2022-02-18 22:56:06 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2022-02-18 22:56:06 +0800 |
| commit | c97928007ddef04895aa245ee4dd2c812eead5c2 (patch) | |
| tree | 3942d67e9b2b5d6ee4774bce6ed71a458b34b50a /port/fsdev | |
| parent | c2d048f130af51efa3be42c1abdedcf0b3f21e43 (diff) | |
add volatile for dev_addr
Diffstat (limited to 'port/fsdev')
| -rw-r--r-- | port/fsdev/usb_dc_fsdev.c | 12 |
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 */ |
