fix LPC812 PWM
Fork of mbed-dev by
Diff: targets/cmsis/TARGET_STM/TARGET_STM32L0/stm32l0xx_hal_pcd.h
- Revision:
- 113:b3775bf36a83
- Parent:
- 0:9b334a45a8ff
--- a/targets/cmsis/TARGET_STM/TARGET_STM32L0/stm32l0xx_hal_pcd.h Sun Apr 17 17:45:10 2016 +0100 +++ b/targets/cmsis/TARGET_STM/TARGET_STM32L0/stm32l0xx_hal_pcd.h Tue Apr 19 11:15:15 2016 +0100 @@ -2,13 +2,13 @@ ****************************************************************************** * @file stm32l0xx_hal_pcd.h * @author MCD Application Team - * @version V1.2.0 - * @date 06-February-2015 + * @version V1.5.0 + * @date 8-January-2016 * @brief Header file of PCD HAL module. ****************************************************************************** * @attention * - * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> + * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -45,7 +45,7 @@ extern "C" { #endif -#if !defined (STM32L031xx) && !defined (STM32L041xx) && !defined (STM32L051xx) && !defined (STM32L061xx) && !defined (STM32L071xx) && !defined (STM32L081xx) +#if !defined (STM32L011xx) && !defined (STM32L021xx) && !defined (STM32L031xx) && !defined (STM32L041xx) && !defined (STM32L051xx) && !defined (STM32L061xx) && !defined (STM32L071xx) && !defined (STM32L081xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l0xx_hal_def.h" @@ -53,10 +53,13 @@ * @{ */ -/** @addtogroup PCD +/** @defgroup PCD PCD * @{ */ +/** @defgroup PCD_Exported_Types PCD Exported Types + * @{ + */ /* Exported types ------------------------------------------------------------*/ /** @@ -64,10 +67,11 @@ */ typedef enum { - PCD_READY = 0x00, - PCD_ERROR = 0x01, - PCD_BUSY = 0x02, - PCD_TIMEOUT = 0x03 + HAL_PCD_STATE_RESET = 0x00, + HAL_PCD_STATE_READY = 0x01, + HAL_PCD_STATE_ERROR = 0x02, + HAL_PCD_STATE_BUSY = 0x03, + HAL_PCD_STATE_TIMEOUT = 0x04 } PCD_StateTypeDef; typedef enum @@ -86,20 +90,7 @@ PCD_EP_BUF1 }PCD_EP_BUF_NUM; -#define PCD_ENDP0 ((uint8_t)0) -#define PCD_ENDP1 ((uint8_t)1) -#define PCD_ENDP2 ((uint8_t)2) -#define PCD_ENDP3 ((uint8_t)3) -#define PCD_ENDP4 ((uint8_t)4) -#define PCD_ENDP5 ((uint8_t)5) -#define PCD_ENDP6 ((uint8_t)6) -#define PCD_ENDP7 ((uint8_t)7) -/* Endpoint Kind */ -#define PCD_SNG_BUF 0 -#define PCD_DBL_BUF 1 - -#define IS_PCD_ALL_INSTANCE IS_USB_ALL_INSTANCE /** * @brief PCD Initialization Structure definition */ @@ -191,14 +182,44 @@ void *pData; /*!< Pointer to upper stack Handler */ } PCD_HandleTypeDef; - + +/** + * @} + */ + + #include "stm32l0xx_hal_pcd_ex.h" /* Exported constants --------------------------------------------------------*/ -/** @defgroup PCD_Exported_Constants +/** @defgroup PCD_Exported_Constants PCD Exported Constants + * @{ + */ + +/** @defgroup PCD_EndPoint PCD End Point * @{ */ -/** @defgroup PCD_Speed + +#define PCD_ENDP0 ((uint8_t)0) +#define PCD_ENDP1 ((uint8_t)1) +#define PCD_ENDP2 ((uint8_t)2) +#define PCD_ENDP3 ((uint8_t)3) +#define PCD_ENDP4 ((uint8_t)4) +#define PCD_ENDP5 ((uint8_t)5) +#define PCD_ENDP6 ((uint8_t)6) +#define PCD_ENDP7 ((uint8_t)7) + +/* Endpoint Kind */ +#define PCD_SNG_BUF 0 +#define PCD_DBL_BUF 1 + +#define IS_PCD_ALL_INSTANCE IS_USB_ALL_INSTANCE + +/** + * @} + */ + + +/** @defgroup PCD_Speed PCD Speed * @{ */ #define PCD_SPEED_HIGH 0 /* Not Supported */ @@ -207,7 +228,7 @@ * @} */ - /** @defgroup PCD_USB_Core_PHY + /** @defgroup PCD_USB_Core_PHY PCD USB Core PHY * @{ */ #define PCD_PHY_EMBEDDED 2 @@ -215,7 +236,7 @@ * @} */ - /** @defgroup PCD_USB_EP0_MPS + /** @defgroup PCD_USB_EP0_MPS PCD USB EP0 MPS * @{ */ #define DEP0CTL_MPS_64 0 @@ -231,7 +252,7 @@ * @} */ -/** @defgroup PCD_USB_EP_Type +/** @defgroup PCD_USB_EP_Type PCD USB EP Type * @{ */ #define PCD_EP_TYPE_CTRL 0 @@ -242,20 +263,17 @@ * @} */ -/** - * @} - */ /* Exported macros -----------------------------------------------------------*/ -/** @defgroup PCD_Interrupt_Clock +/** @defgroup PCD_Interrupt_Clock PCD Interrupt * @brief macros to handle interrupts and specific clock configurations * @{ */ #define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISTR) & (__INTERRUPT__)) == (__INTERRUPT__)) -#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) = ~(__INTERRUPT__)) +#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->ISTR) &= (uint16_t) ~(__INTERRUPT__)) -#define USB_WAKEUP_EXTI_LINE ((uint32_t)0x00040000) /*!< External interrupt line 18 Connected to the USB FS EXTI Line */ +#define USB_WAKEUP_EXTI_LINE (EXTI_IMR_IM18) /*!< External interrupt line 18 Connected to the USB FS EXTI Line */ #define __HAL_USB_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_WAKEUP_EXTI_LINE #define __HAL_USB_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_WAKEUP_EXTI_LINE) @@ -273,6 +291,7 @@ /** * @brief sets the type in the endpoint register(bits EP_TYPE[1:0]) + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param wType: Endpoint Type. * @retval None @@ -282,6 +301,7 @@ /** * @brief gets the type in the endpoint register(bits EP_TYPE[1:0]) + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval Endpoint Type */ @@ -290,12 +310,13 @@ /** * @brief free buffer used from the application realizing it to the line - toggles bit SW_BUF in the double buffered endpoint register + * toggles bit SW_BUF in the double buffered endpoint register + * @param USBx: USB device. * @param bEpNum, bDir * @retval None */ #define PCD_FreeUserBuffer(USBx, bEpNum, bDir)\ -{\ +do {\ if (bDir == PCD_EP_DBUF_OUT)\ { /* OUT double buffered endpoint */\ PCD_TX_DTOG(USBx, bEpNum);\ @@ -304,31 +325,33 @@ { /* IN double buffered endpoint */\ PCD_RX_DTOG(USBx, bEpNum);\ }\ -} +} while(0) /** * @brief gets direction of the double buffered endpoint + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval EP_DBUF_OUT, EP_DBUF_IN, * EP_DBUF_ERR if the endpoint counter not yet programmed. */ #define PCD_GET_DB_DIR(USBx, bEpNum)\ -{\ +do {\ if ((uint16_t)(*PCD_EP_RX_CNT(USBx, bEpNum) & 0xFC00) != 0)\ return(PCD_EP_DBUF_OUT);\ else if (((uint16_t)(*PCD_EP_TX_CNT(USBx, bEpNum)) & 0x03FF) != 0)\ return(PCD_EP_DBUF_IN);\ else\ return(PCD_EP_DBUF_ERR);\ -} +} while(0) /** * @brief sets the status for tx transfer (bits STAT_TX[1:0]). + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param wState: new state * @retval None */ -#define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) {\ +#define PCD_SET_EP_TX_STATUS(USBx, bEpNum, wState) do {\ register uint16_t _wRegVal; \ \ _wRegVal = PCD_GET_ENDPOINT(USBx, bEpNum) & USB_EPTX_DTOGMASK;\ @@ -339,15 +362,16 @@ if((USB_EPTX_DTOG2 & wState)!= 0) \ _wRegVal ^= USB_EPTX_DTOG2; \ PCD_SET_ENDPOINT(USBx, bEpNum, (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX)); \ - } /* PCD_SET_EP_TX_STATUS */ + } while(0) /* PCD_SET_EP_TX_STATUS */ /** * @brief sets the status for rx transfer (bits STAT_TX[1:0]) + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param wState: new state * @retval None */ -#define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) {\ +#define PCD_SET_EP_RX_STATUS(USBx, bEpNum,wState) do {\ register uint16_t _wRegVal; \ \ _wRegVal = PCD_GET_ENDPOINT(USBx, bEpNum) & USB_EPRX_DTOGMASK;\ @@ -358,16 +382,17 @@ if((USB_EPRX_DTOG2 & wState)!= 0) \ _wRegVal ^= USB_EPRX_DTOG2; \ PCD_SET_ENDPOINT(USBx, bEpNum, (_wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX)); \ - } /* PCD_SET_EP_RX_STATUS */ + } while(0) /* PCD_SET_EP_RX_STATUS */ /** * @brief sets the status for rx & tx (bits STAT_TX[1:0] & STAT_RX[1:0]) + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param wStaterx: new state. * @param wStatetx: new state. * @retval None */ -#define PCD_SET_EP_TXRX_STATUS(USBx,bEpNum,wStaterx,wStatetx) {\ +#define PCD_SET_EP_TXRX_STATUS(USBx,bEpNum,wStaterx,wStatetx) do {\ register uint32_t _wRegVal; \ \ _wRegVal = PCD_GET_ENDPOINT(USBx, bEpNum) & (USB_EPRX_DTOGMASK |USB_EPTX_STAT) ;\ @@ -384,11 +409,12 @@ if((USB_EPTX_DTOG2 & wStatetx)!= 0) \ _wRegVal ^= USB_EPTX_DTOG2; \ PCD_SET_ENDPOINT(USBx, bEpNum, _wRegVal | USB_EP_CTR_RX|USB_EP_CTR_TX); \ - } /* PCD_SET_EP_TXRX_STATUS */ + } while(0) /* PCD_SET_EP_TXRX_STATUS */ /** * @brief gets the status for tx/rx transfer (bits STAT_TX[1:0] * /STAT_RX[1:0]) + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval status */ @@ -398,6 +424,7 @@ /** * @brief sets directly the VALID tx/rx-status into the endpoint register + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -407,6 +434,7 @@ /** * @brief checks stall condition in an endpoint. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval TRUE = endpoint in stall condition. */ @@ -417,6 +445,7 @@ /** * @brief set & clear EP_KIND bit. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -427,6 +456,7 @@ /** * @brief Sets/clears directly STATUS_OUT bit in the endpoint register. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -435,6 +465,7 @@ /** * @brief Sets/clears directly EP_KIND bit in the endpoint register. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -443,6 +474,7 @@ /** * @brief Clears bit CTR_RX / CTR_TX in the endpoint register. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -453,6 +485,7 @@ /** * @brief Toggles DTOG_RX / DTOG_TX bit in the endpoint register. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -463,6 +496,7 @@ /** * @brief Clears DTOG_RX / DTOG_TX bit in the endpoint register. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -473,6 +507,7 @@ /** * @brief Sets address in an endpoint register. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param bAddr: Address. * @retval None @@ -482,6 +517,7 @@ /** * @brief Gets address in an endpoint register. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -493,6 +529,7 @@ /** * @brief sets address of the tx/rx buffer. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param wAddr: address to be set (must be word aligned). * @retval None @@ -502,6 +539,7 @@ /** * @brief Gets address of the tx/rx buffer. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval address of the buffer. */ @@ -510,48 +548,51 @@ /** * @brief Sets counter of rx buffer with no. of blocks. - * @param bEpNum: Endpoint Number. + * @param dwReg: Register. * @param wCount: Counter. + * @param wNBlocks: Nb of block * @retval None */ -#define PCD_CALC_BLK32(dwReg,wCount,wNBlocks) {\ +#define PCD_CALC_BLK32(dwReg,wCount,wNBlocks) do {\ wNBlocks = wCount >> 5;\ if((wCount & 0x1f) == 0)\ wNBlocks--;\ *pdwReg = (uint16_t)((wNBlocks << 10) | 0x8000);\ - }/* PCD_CALC_BLK32 */ + } while(0) /* PCD_CALC_BLK32 */ -#define PCD_CALC_BLK2(dwReg,wCount,wNBlocks) {\ +#define PCD_CALC_BLK2(dwReg,wCount,wNBlocks) do {\ wNBlocks = wCount >> 1;\ if((wCount & 0x1) != 0)\ wNBlocks++;\ *pdwReg = (uint16_t)(wNBlocks << 10);\ - }/* PCD_CALC_BLK2 */ + } while(0) /* PCD_CALC_BLK2 */ -#define PCD_SET_EP_CNT_RX_REG(dwReg,wCount) {\ +#define PCD_SET_EP_CNT_RX_REG(dwReg,wCount) do {\ uint16_t wNBlocks;\ if(wCount > 62){PCD_CALC_BLK32(dwReg,wCount,wNBlocks);}\ else {PCD_CALC_BLK2(dwReg,wCount,wNBlocks);}\ - }/* PCD_SET_EP_CNT_RX_REG */ + } while(0) /* PCD_SET_EP_CNT_RX_REG */ -#define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum,wCount) {\ +#define PCD_SET_EP_RX_DBUF0_CNT(USBx, bEpNum,wCount) do {\ uint16_t *pdwReg = PCD_EP_TX_CNT(USBx, bEpNum); \ PCD_SET_EP_CNT_RX_REG(pdwReg, wCount);\ - } + } while(0) /** * @brief sets counter for the tx/rx buffer. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param wCount: Counter value. * @retval None */ #define PCD_SET_EP_TX_CNT(USBx, bEpNum,wCount) (*PCD_EP_TX_CNT(USBx, bEpNum) = wCount) -#define PCD_SET_EP_RX_CNT(USBx, bEpNum,wCount) {\ +#define PCD_SET_EP_RX_CNT(USBx, bEpNum,wCount) do {\ uint16_t *pdwReg = PCD_EP_RX_CNT(USBx, bEpNum); \ PCD_SET_EP_CNT_RX_REG(pdwReg, wCount);\ - } + } while(0) /** * @brief gets counter of the tx buffer. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval Counter value */ @@ -560,6 +601,7 @@ /** * @brief Sets buffer 0/1 address in a double buffer endpoint. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param wBuf0Addr: buffer 0 address. * @retval Counter value @@ -569,6 +611,7 @@ /** * @brief Sets addresses in a double buffer endpoint. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @param wBuf0Addr: buffer 0 address. * @param wBuf1Addr = buffer 1 address. @@ -581,6 +624,7 @@ /** * @brief Gets buffer 0/1 address of a double buffer endpoint. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ @@ -589,9 +633,9 @@ /** * @brief Gets buffer 0/1 address of a double buffer endpoint. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. - * bDir: endpoint dir EP_DBUF_OUT = OUT - * EP_DBUF_IN = IN + * @param bDir: endpoint dir EP_DBUF_OUT = OUT and EP_DBUF_IN = IN * @param wCount: Counter value * @retval None */ @@ -613,33 +657,51 @@ *PCD_EP_RX_CNT(USBx, bEpNum) = (uint32_t)wCount; \ } /* SetEPDblBuf1Count */ -#define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) {\ +#define PCD_SET_EP_DBUF_CNT(USBx, bEpNum, bDir, wCount) do {\ PCD_SET_EP_DBUF0_CNT(USBx, bEpNum, bDir, wCount); \ PCD_SET_EP_DBUF1_CNT(USBx, bEpNum, bDir, wCount); \ - } /* PCD_SET_EP_DBUF_CNT */ + } while(0) /* PCD_SET_EP_DBUF_CNT */ /** * @brief Gets buffer 0/1 rx/tx counter for double buffering. + * @param USBx: USB device. * @param bEpNum: Endpoint Number. * @retval None */ #define PCD_GET_EP_DBUF0_CNT(USBx, bEpNum) (PCD_GET_EP_TX_CNT(USBx, bEpNum)) #define PCD_GET_EP_DBUF1_CNT(USBx, bEpNum) (PCD_GET_EP_RX_CNT(USBx, bEpNum)) +/** + * @} + */ /** * @} */ /* Exported functions --------------------------------------------------------*/ +/** @defgroup PCD_Exported_Functions PCD Exported Functions + * @{ + */ +/** @defgroup PCD_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * @{ + */ /* Initialization/de-initialization functions **********************************/ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd); HAL_StatusTypeDef HAL_PCD_DeInit (PCD_HandleTypeDef *hpcd); void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd); void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd); +/** + * @} + */ +/** @defgroup PCD_Exported_Functions_Group2 IO Data transfers functions + * @brief Data transfers functions + * @{ + */ -/* I/O operation functions *****************************************************/ + /* I/O operation functions *****************************************************/ /* Non-Blocking mode: Interrupt */ HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd); HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd); @@ -656,9 +718,14 @@ void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd); void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd); - +/** + * @} + */ - +/** @defgroup PCD_Exported_Functions_Group3 Peripheral Control functions + * @brief management functions + * @{ + */ /* Peripheral Control functions ************************************************/ HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd); HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd); @@ -673,18 +740,46 @@ HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); +void PCD_WritePMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes); +void PCD_ReadPMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes); +/** + * @} + */ +/** @defgroup PCD_Exported_Functions_Group4 Peripheral State functions + * @brief Peripheral State functions + * @{ + */ + /* Peripheral State functions **************************************************/ PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd); /** * @} + */ + +/** + * @} + */ + +/* Define the private group ***********************************/ +/**************************************************************/ +/** @defgroup PCD_Private PCD Private + * @{ + */ +/** + * @} + */ +/**************************************************************/ + +/** + * @} */ /** * @} */ -#endif /* #if !defined (STM32L031xx) && !defined (STM32L041xx) && !defined (STM32L051xx) && !defined (STM32L061xx) && !defined (STM32L071xx) && !defined (STM32L081xx) */ +#endif /* #if !defined (STM32L011xx) && !defined (STM32L021xx) && !defined (STM32L031xx) && !defined (STM32L041xx) && !defined (STM32L051xx) && !defined (STM32L061xx) && !defined (STM32L071xx) && !defined (STM32L081xx) */ #ifdef __cplusplus }