Subversion Repositories AFRtranscoder

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_hal_pcd_ex.c
4
  * @author  MCD Application Team
5
  * @brief   PCD Extended HAL module driver.
6
  *          This file provides firmware functions to manage the following
7
  *          functionalities of the USB Peripheral Controller:
8
  *           + Extended features functions
9
  *
10
  ******************************************************************************
11
  * @attention
12
  *
13
  * Copyright (c) 2016 STMicroelectronics.
14
  * All rights reserved.
15
  *
16
  * This software is licensed under terms that can be found in the LICENSE file
17
  * in the root directory of this software component.
18
  * If no LICENSE file comes with this software, it is provided AS-IS.
19
  *
20
  ******************************************************************************
21
  */
22
 
23
/* Includes ------------------------------------------------------------------*/
24
#include "stm32f1xx_hal.h"
25
 
26
/** @addtogroup STM32F1xx_HAL_Driver
27
  * @{
28
  */
29
 
30
/** @defgroup PCDEx PCDEx
31
  * @brief PCD Extended HAL module driver
32
  * @{
33
  */
34
 
35
#ifdef HAL_PCD_MODULE_ENABLED
36
 
37
#if defined (USB) || defined (USB_OTG_FS)
38
/* Private types -------------------------------------------------------------*/
39
/* Private variables ---------------------------------------------------------*/
40
/* Private constants ---------------------------------------------------------*/
41
/* Private macros ------------------------------------------------------------*/
42
/* Private functions ---------------------------------------------------------*/
43
/* Exported functions --------------------------------------------------------*/
44
 
45
/** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions
46
  * @{
47
  */
48
 
49
/** @defgroup PCDEx_Exported_Functions_Group1 Peripheral Control functions
50
  * @brief    PCDEx control functions
51
  *
52
@verbatim
53
 ===============================================================================
54
                 ##### Extended features functions #####
55
 ===============================================================================
56
    [..]  This section provides functions allowing to:
57
      (+) Update FIFO configuration
58
 
59
@endverbatim
60
  * @{
61
  */
62
#if defined (USB_OTG_FS)
63
/**
64
  * @brief  Set Tx FIFO
65
  * @param  hpcd PCD handle
66
  * @param  fifo The number of Tx fifo
67
  * @param  size Fifo size
68
  * @retval HAL status
69
  */
70
HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size)
71
{
72
  uint8_t i;
73
  uint32_t Tx_Offset;
74
 
75
  /*  TXn min size = 16 words. (n  : Transmit FIFO index)
76
      When a TxFIFO is not used, the Configuration should be as follows:
77
          case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
78
         --> Txm can use the space allocated for Txn.
79
         case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
80
         --> Txn should be configured with the minimum space of 16 words
81
     The FIFO is used optimally when used TxFIFOs are allocated in the top
82
         of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
83
     When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */
84
 
85
  Tx_Offset = hpcd->Instance->GRXFSIZ;
86
 
87
  if (fifo == 0U)
88
  {
89
    hpcd->Instance->DIEPTXF0_HNPTXFSIZ = ((uint32_t)size << 16) | Tx_Offset;
90
  }
91
  else
92
  {
93
    Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16;
94
    for (i = 0U; i < (fifo - 1U); i++)
95
    {
96
      Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16);
97
    }
98
 
99
    /* Multiply Tx_Size by 2 to get higher performance */
100
    hpcd->Instance->DIEPTXF[fifo - 1U] = ((uint32_t)size << 16) | Tx_Offset;
101
  }
102
 
103
  return HAL_OK;
104
}
105
 
106
/**
107
  * @brief  Set Rx FIFO
108
  * @param  hpcd PCD handle
109
  * @param  size Size of Rx fifo
110
  * @retval HAL status
111
  */
112
HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size)
113
{
114
  hpcd->Instance->GRXFSIZ = size;
115
 
116
  return HAL_OK;
117
}
118
#endif /* defined (USB_OTG_FS) */
119
#if defined (USB)
120
/**
121
  * @brief  Configure PMA for EP
122
  * @param  hpcd  Device instance
123
  * @param  ep_addr endpoint address
124
  * @param  ep_kind endpoint Kind
125
  *                  USB_SNG_BUF: Single Buffer used
126
  *                  USB_DBL_BUF: Double Buffer used
127
  * @param  pmaadress: EP address in The PMA: In case of single buffer endpoint
128
  *                   this parameter is 16-bit value providing the address
129
  *                   in PMA allocated to endpoint.
130
  *                   In case of double buffer endpoint this parameter
131
  *                   is a 32-bit value providing the endpoint buffer 0 address
132
  *                   in the LSB part of 32-bit value and endpoint buffer 1 address
133
  *                   in the MSB part of 32-bit value.
134
  * @retval HAL status
135
  */
136
 
137
HAL_StatusTypeDef  HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd, uint16_t ep_addr,
138
                                       uint16_t ep_kind, uint32_t pmaadress)
139
{
140
  PCD_EPTypeDef *ep;
141
 
142
  /* initialize ep structure*/
143
  if ((0x80U & ep_addr) == 0x80U)
144
  {
145
    ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
146
  }
147
  else
148
  {
149
    ep = &hpcd->OUT_ep[ep_addr];
150
  }
151
 
152
  /* Here we check if the endpoint is single or double Buffer*/
153
  if (ep_kind == PCD_SNG_BUF)
154
  {
155
    /* Single Buffer */
156
    ep->doublebuffer = 0U;
157
    /* Configure the PMA */
158
    ep->pmaadress = (uint16_t)pmaadress;
159
  }
160
#if (USE_USB_DOUBLE_BUFFER == 1U)
161
  else /* USB_DBL_BUF */
162
  {
163
    /* Double Buffer Endpoint */
164
    ep->doublebuffer = 1U;
165
    /* Configure the PMA */
166
    ep->pmaaddr0 = (uint16_t)(pmaadress & 0xFFFFU);
167
    ep->pmaaddr1 = (uint16_t)((pmaadress & 0xFFFF0000U) >> 16);
168
  }
169
#endif /* (USE_USB_DOUBLE_BUFFER == 1U) */
170
 
171
  return HAL_OK;
172
}
173
 
174
/**
175
  * @brief  Software Device Connection,
176
  *         this function is not required by USB OTG FS peripheral, it is used
177
  *         only by USB Device FS peripheral.
178
  * @param  hpcd PCD handle
179
  * @param  state connection state (0 : disconnected / 1: connected)
180
  * @retval None
181
  */
182
__weak void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
183
{
184
  /* Prevent unused argument(s) compilation warning */
185
  UNUSED(hpcd);
186
  UNUSED(state);
187
  /* NOTE : This function Should not be modified, when the callback is needed,
188
            the HAL_PCDEx_SetConnectionState could be implemented in the user file
189
   */
190
}
191
#endif /* defined (USB) */
192
 
193
/**
194
  * @brief  Send LPM message to user layer callback.
195
  * @param  hpcd PCD handle
196
  * @param  msg LPM message
197
  * @retval HAL status
198
  */
199
__weak void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
200
{
201
  /* Prevent unused argument(s) compilation warning */
202
  UNUSED(hpcd);
203
  UNUSED(msg);
204
 
205
  /* NOTE : This function should not be modified, when the callback is needed,
206
            the HAL_PCDEx_LPM_Callback could be implemented in the user file
207
   */
208
}
209
 
210
/**
211
  * @brief  Send BatteryCharging message to user layer callback.
212
  * @param  hpcd PCD handle
213
  * @param  msg LPM message
214
  * @retval HAL status
215
  */
216
__weak void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg)
217
{
218
  /* Prevent unused argument(s) compilation warning */
219
  UNUSED(hpcd);
220
  UNUSED(msg);
221
 
222
  /* NOTE : This function should not be modified, when the callback is needed,
223
            the HAL_PCDEx_BCD_Callback could be implemented in the user file
224
   */
225
}
226
 
227
/**
228
  * @}
229
  */
230
 
231
/**
232
  * @}
233
  */
234
#endif /* defined (USB) || defined (USB_OTG_FS) */
235
#endif /* HAL_PCD_MODULE_ENABLED */
236
 
237
/**
238
  * @}
239
  */
240
 
241
/**
242
  * @}
243
  */