STM32L4xx_HAL_Driver  1.14.0
SWPMI Private Functions

Functions

static void SWPMI_Transmit_IT (SWPMI_HandleTypeDef *hswpmi)
 Transmit an amount of data in interrupt mode. More...
 
static void SWPMI_EndTransmit_IT (SWPMI_HandleTypeDef *hswpmi)
 Wraps up transmission in non-blocking mode. More...
 
static void SWPMI_Receive_IT (SWPMI_HandleTypeDef *hswpmi)
 Receive an amount of data in interrupt mode. More...
 
static void SWPMI_EndReceive_IT (SWPMI_HandleTypeDef *hswpmi)
 Wraps up reception in non-blocking mode. More...
 
static void SWPMI_EndTransmitReceive_IT (SWPMI_HandleTypeDef *hswpmi)
 Wraps up transmission and reception in non-blocking mode. More...
 
static void SWPMI_DMATransmitCplt (DMA_HandleTypeDef *hdma)
 DMA SWPMI transmit process complete callback. More...
 
static void SWPMI_DMATxHalfCplt (DMA_HandleTypeDef *hdma)
 DMA SWPMI transmit process half complete callback. More...
 
static void SWPMI_DMAReceiveCplt (DMA_HandleTypeDef *hdma)
 DMA SWPMI receive process complete callback. More...
 
static void SWPMI_DMARxHalfCplt (DMA_HandleTypeDef *hdma)
 DMA SWPMI receive process half complete callback. More...
 
static void SWPMI_DMAError (DMA_HandleTypeDef *hdma)
 DMA SWPMI communication error callback. More...
 
static void SWPMI_DMAAbortOnError (DMA_HandleTypeDef *hdma)
 DMA SWPMI communication abort callback. More...
 
static HAL_StatusTypeDef SWPMI_WaitOnFlagSetUntilTimeout (SWPMI_HandleTypeDef *hswpmi, uint32_t Flag, uint32_t Tickstart, uint32_t Timeout)
 Handle SWPMI Communication Timeout. More...
 

Detailed Description

Function Documentation

◆ SWPMI_DMAAbortOnError()

static void SWPMI_DMAAbortOnError ( DMA_HandleTypeDef hdma)
static

DMA SWPMI communication abort callback.

Parameters
hdmaDMA handle
Return values
None

Definition at line 1880 of file stm32l4xx_hal_swpmi.c.

1881 {
1882  SWPMI_HandleTypeDef* hswpmi = ( SWPMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1883 
1884  /* Update handle */
1885  hswpmi->RxXferCount = 0U;
1886  hswpmi->TxXferCount = 0U;
1887  hswpmi->State= HAL_SWPMI_STATE_READY;
1888 
1889 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1890  hswpmi->ErrorCallback(hswpmi);
1891 #else
1892  HAL_SWPMI_ErrorCallback(hswpmi);
1893 #endif
1894 }
DMA handle Structure definition.
__weak void HAL_SWPMI_ErrorCallback(SWPMI_HandleTypeDef *hswpmi)
SWPMI error callback.
struct __SWPMI_HandleTypeDef else typedef struct endif SWPMI_HandleTypeDef
SWPMI handle Structure definition.

◆ SWPMI_DMAError()

static void SWPMI_DMAError ( DMA_HandleTypeDef hdma)
static

DMA SWPMI communication error callback.

Parameters
hdmaDMA handle
Return values
None

Definition at line 1858 of file stm32l4xx_hal_swpmi.c.

1859 {
1860  SWPMI_HandleTypeDef* hswpmi = ( SWPMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1861 
1862  /* Update handle */
1863  hswpmi->RxXferCount = 0U;
1864  hswpmi->TxXferCount = 0U;
1865  hswpmi->State= HAL_SWPMI_STATE_READY;
1866  hswpmi->ErrorCode |= HAL_SWPMI_ERROR_DMA;
1867 
1868 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1869  hswpmi->ErrorCallback(hswpmi);
1870 #else
1871  HAL_SWPMI_ErrorCallback(hswpmi);
1872 #endif
1873 }
DMA handle Structure definition.
__weak void HAL_SWPMI_ErrorCallback(SWPMI_HandleTypeDef *hswpmi)
SWPMI error callback.
struct __SWPMI_HandleTypeDef else typedef struct endif SWPMI_HandleTypeDef
SWPMI handle Structure definition.

◆ SWPMI_DMAReceiveCplt()

static void SWPMI_DMAReceiveCplt ( DMA_HandleTypeDef hdma)
static

DMA SWPMI receive process complete callback.

Parameters
hdmaDMA handle
Return values
None

Definition at line 1807 of file stm32l4xx_hal_swpmi.c.

1808 {
1809  SWPMI_HandleTypeDef* hswpmi = ( SWPMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1810 
1811  /* DMA Normal mode*/
1812  if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U)
1813  {
1814  hswpmi->RxXferCount = 0U;
1815 
1816  /* Disable the DMA transfer for the receiver request by setting the RXDMA bit
1817  in the SWPMI CR register */
1818  CLEAR_BIT(hswpmi->Instance->CR, SWPMI_CR_RXDMA);
1819 
1820  /* Check if a transmit Process is ongoing or not */
1821  if(hswpmi->State == HAL_SWPMI_STATE_BUSY_TX_RX)
1822  {
1823  hswpmi->State = HAL_SWPMI_STATE_BUSY_TX;
1824  }
1825  else
1826  {
1827  hswpmi->State = HAL_SWPMI_STATE_READY;
1828  }
1829  }
1830 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1831  hswpmi->RxCpltCallback(hswpmi);
1832 #else
1833  HAL_SWPMI_RxCpltCallback(hswpmi);
1834 #endif
1835 }
DMA handle Structure definition.
DMA_Channel_TypeDef * Instance
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
__weak void HAL_SWPMI_RxCpltCallback(SWPMI_HandleTypeDef *hswpmi)
Rx Transfer completed callback.
struct __SWPMI_HandleTypeDef else typedef struct endif SWPMI_HandleTypeDef
SWPMI handle Structure definition.

◆ SWPMI_DMARxHalfCplt()

static void SWPMI_DMARxHalfCplt ( DMA_HandleTypeDef hdma)
static

DMA SWPMI receive process half complete callback.

Parameters
hdmaDMA handle
Return values
None

Definition at line 1842 of file stm32l4xx_hal_swpmi.c.

1843 {
1844  SWPMI_HandleTypeDef* hswpmi = (SWPMI_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
1845 
1846 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1847  hswpmi->RxHalfCpltCallback(hswpmi);
1848 #else
1850 #endif
1851 }
DMA handle Structure definition.
__weak void HAL_SWPMI_RxHalfCpltCallback(SWPMI_HandleTypeDef *hswpmi)
Rx Half Transfer completed callback.
struct __SWPMI_HandleTypeDef else typedef struct endif SWPMI_HandleTypeDef
SWPMI handle Structure definition.

◆ SWPMI_DMATransmitCplt()

static void SWPMI_DMATransmitCplt ( DMA_HandleTypeDef hdma)
static

DMA SWPMI transmit process complete callback.

Parameters
hdmaDMA handle
Return values
None

Definition at line 1725 of file stm32l4xx_hal_swpmi.c.

1726 {
1727  SWPMI_HandleTypeDef* hswpmi = ( SWPMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
1728  uint32_t tickstart;
1729 
1730  /* DMA Normal mode*/
1731  if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U)
1732  {
1733  hswpmi->TxXferCount = 0U;
1734 
1735  /* Disable the DMA transfer for transmit request by setting the TXDMA bit
1736  in the SWPMI CR register */
1737  CLEAR_BIT(hswpmi->Instance->CR, SWPMI_CR_TXDMA);
1738 
1739  /* Init tickstart for timeout managment*/
1740  tickstart = HAL_GetTick();
1741 
1742  /* Wait the TXBEF */
1743  if(SWPMI_WaitOnFlagSetUntilTimeout(hswpmi, SWPMI_FLAG_TXBEF, tickstart, SWPMI_TIMEOUT_VALUE) != HAL_OK)
1744  {
1745  /* Timeout occurred */
1746  hswpmi->ErrorCode |= HAL_SWPMI_ERROR_TXBEF_TIMEOUT;
1747 
1748 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1749  hswpmi->ErrorCallback(hswpmi);
1750 #else
1751  HAL_SWPMI_ErrorCallback(hswpmi);
1752 #endif
1753  }
1754  else
1755  {
1756  /* No Timeout */
1757  /* Check if a receive process is ongoing or not */
1758  if(hswpmi->State == HAL_SWPMI_STATE_BUSY_TX_RX)
1759  {
1760  hswpmi->State = HAL_SWPMI_STATE_BUSY_RX;
1761  }
1762  else
1763  {
1764  hswpmi->State = HAL_SWPMI_STATE_READY;
1765  }
1766 
1767 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1768  hswpmi->TxCpltCallback(hswpmi);
1769 #else
1770  HAL_SWPMI_TxCpltCallback(hswpmi);
1771 #endif
1772  }
1773  }
1774  /* DMA Circular mode */
1775  else
1776  {
1777 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1778  hswpmi->TxCpltCallback(hswpmi);
1779 #else
1780  HAL_SWPMI_TxCpltCallback(hswpmi);
1781 #endif
1782  }
1783 }
DMA handle Structure definition.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
DMA_Channel_TypeDef * Instance
__weak void HAL_SWPMI_TxCpltCallback(SWPMI_HandleTypeDef *hswpmi)
Tx Transfer completed callback.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
return HAL_OK
__weak void HAL_SWPMI_ErrorCallback(SWPMI_HandleTypeDef *hswpmi)
SWPMI error callback.
struct __SWPMI_HandleTypeDef else typedef struct endif SWPMI_HandleTypeDef
SWPMI handle Structure definition.
static HAL_StatusTypeDef SWPMI_WaitOnFlagSetUntilTimeout(SWPMI_HandleTypeDef *hswpmi, uint32_t Flag, uint32_t Tickstart, uint32_t Timeout)
Handle SWPMI Communication Timeout.

◆ SWPMI_DMATxHalfCplt()

static void SWPMI_DMATxHalfCplt ( DMA_HandleTypeDef hdma)
static

DMA SWPMI transmit process half complete callback.

Parameters
hdmaDMA handle
Return values
None

Definition at line 1790 of file stm32l4xx_hal_swpmi.c.

1791 {
1792  SWPMI_HandleTypeDef* hswpmi = (SWPMI_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
1793 
1794 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1795  hswpmi->TxHalfCpltCallback(hswpmi);
1796 #else
1798 #endif
1799 }
DMA handle Structure definition.
__weak void HAL_SWPMI_TxHalfCpltCallback(SWPMI_HandleTypeDef *hswpmi)
Tx Half Transfer completed callback.
struct __SWPMI_HandleTypeDef else typedef struct endif SWPMI_HandleTypeDef
SWPMI handle Structure definition.

◆ SWPMI_EndReceive_IT()

static void SWPMI_EndReceive_IT ( SWPMI_HandleTypeDef hswpmi)
static

Wraps up reception in non-blocking mode.

Parameters
hswpmiSWPMI handle
Return values
None

Definition at line 1675 of file stm32l4xx_hal_swpmi.c.

1676 {
1677  /* Clear the SWPMI Receive buffer full Flag */
1678  WRITE_REG(hswpmi->Instance->ICR, SWPMI_FLAG_RXBFF);
1679  /* Disable the all SWPMI Receive Interrupts */
1680  CLEAR_BIT(hswpmi->Instance->IER, SWPMI_IT_RIE | SWPMI_IT_RXBERIE | SWPMI_IT_RXOVRIE | SWPMI_IT_RXBFIE);
1681 
1682  /* Check if a transmit Process is ongoing or not */
1683  if(hswpmi->State == HAL_SWPMI_STATE_BUSY_TX_RX)
1684  {
1685  hswpmi->State = HAL_SWPMI_STATE_BUSY_TX;
1686  }
1687  else
1688  {
1689  hswpmi->State = HAL_SWPMI_STATE_READY;
1690  }
1691 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)

◆ SWPMI_EndTransmit_IT()

static void SWPMI_EndTransmit_IT ( SWPMI_HandleTypeDef hswpmi)
static

Wraps up transmission in non-blocking mode.

Parameters
hswpmiSWPMI handle
Return values
None

Definition at line 1614 of file stm32l4xx_hal_swpmi.c.

1615 {
1616  /* Clear the SWPMI Transmit buffer empty Flag */
1617  WRITE_REG(hswpmi->Instance->ICR, SWPMI_FLAG_TXBEF);
1618  /* Disable the all SWPMI Transmit Interrupts */
1619  CLEAR_BIT(hswpmi->Instance->IER, SWPMI_IT_TIE | SWPMI_IT_TXUNRIE | SWPMI_IT_TXBEIE);
1620 
1621  /* Check if a receive Process is ongoing or not */
1622  if(hswpmi->State == HAL_SWPMI_STATE_BUSY_TX_RX)
1623  {
1624  hswpmi->State = HAL_SWPMI_STATE_BUSY_RX;
1625  }
1626  else
1627  {
1628  hswpmi->State = HAL_SWPMI_STATE_READY;
1629  }
1630 
1631 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1632  hswpmi->TxCpltCallback(hswpmi);
1633 #else
1634  HAL_SWPMI_TxCpltCallback(hswpmi);
1635 #endif
1636 }
__weak void HAL_SWPMI_TxCpltCallback(SWPMI_HandleTypeDef *hswpmi)
Tx Transfer completed callback.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)

◆ SWPMI_EndTransmitReceive_IT()

static void SWPMI_EndTransmitReceive_IT ( SWPMI_HandleTypeDef hswpmi)
static

Wraps up transmission and reception in non-blocking mode.

Parameters
hswpmiSWPMI handle
Return values
None

Definition at line 1698 of file stm32l4xx_hal_swpmi.c.

1699 {
1700  /* Clear the SWPMI Transmission Complete Flag */
1701  WRITE_REG(hswpmi->Instance->ICR, SWPMI_FLAG_TCF);
1702  /* Disable the SWPMI Transmission Complete Interrupt */
1703  CLEAR_BIT(hswpmi->Instance->IER, SWPMI_IT_TCIE);
1704 
1705  /* Check if a receive Process is ongoing or not */
1706  if(hswpmi->State == HAL_SWPMI_STATE_BUSY_TX_RX)
1707  {
1708  hswpmi->State = HAL_SWPMI_STATE_BUSY_RX;
1709  }
1710  else if(hswpmi->State == HAL_SWPMI_STATE_BUSY_TX)
1711  {
1712  hswpmi->State = HAL_SWPMI_STATE_READY;
1713  }
1714  else
1715  {
1716  /* nothing to do */
1717  }
1718 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)

◆ SWPMI_Receive_IT()

static void SWPMI_Receive_IT ( SWPMI_HandleTypeDef hswpmi)
static

Receive an amount of data in interrupt mode.

Note
Function called under interruption only, once interruptions have been enabled by HAL_SWPMI_Receive_IT()
Parameters
hswpmiSWPMI handle
Return values
None

Definition at line 1644 of file stm32l4xx_hal_swpmi.c.

1645 {
1646  HAL_SWPMI_StateTypeDef tmp_state = hswpmi->State;
1647 
1648  if((tmp_state == HAL_SWPMI_STATE_BUSY_RX) || (tmp_state == HAL_SWPMI_STATE_BUSY_TX_RX))
1649  {
1650  *hswpmi->pRxBuffPtr = (uint32_t)(hswpmi->Instance->RDR);
1651  hswpmi->pRxBuffPtr++;
1652 
1653  --hswpmi->RxXferCount;
1654  if(hswpmi->RxXferCount == 0U)
1655  {
1656  /* Wait for RXBFF flag to update state */
1657 #if (USE_HAL_SWPMI_REGISTER_CALLBACKS == 1)
1658  hswpmi->RxCpltCallback(hswpmi);
1659 #else
1660  HAL_SWPMI_RxCpltCallback(hswpmi);
1661 #endif
1662  }
1663  }
1664  else
1665  {
1666  /* nothing to do */
1667  }
1668 }
__weak void HAL_SWPMI_RxCpltCallback(SWPMI_HandleTypeDef *hswpmi)
Rx Transfer completed callback.
HAL_SWPMI_StateTypeDef
HAL SWPMI State structures definition.

◆ SWPMI_Transmit_IT()

static void SWPMI_Transmit_IT ( SWPMI_HandleTypeDef hswpmi)
static

Transmit an amount of data in interrupt mode.

Note
Function called under interruption only, once interruptions have been enabled by HAL_SWPMI_Transmit_IT()
Parameters
hswpmiSWPMI handle
Return values
None

Definition at line 1585 of file stm32l4xx_hal_swpmi.c.

1586 {
1587  HAL_SWPMI_StateTypeDef tmp_state = hswpmi->State;
1588 
1589  if ((tmp_state == HAL_SWPMI_STATE_BUSY_TX) || (tmp_state == HAL_SWPMI_STATE_BUSY_TX_RX))
1590  {
1591  if(hswpmi->TxXferCount == 0U)
1592  {
1593  /* Disable the SWPMI TXE and Underrun Interrupts */
1594  CLEAR_BIT(hswpmi->Instance->IER, (SWPMI_IT_TIE | SWPMI_IT_TXUNRIE));
1595  }
1596  else
1597  {
1598  hswpmi->Instance->TDR = (uint32_t)*hswpmi->pTxBuffPtr;
1599  hswpmi->pTxBuffPtr++;
1600  hswpmi->TxXferCount--;
1601  }
1602  }
1603  else
1604  {
1605  /* nothing to do */
1606  }
1607 }
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
HAL_SWPMI_StateTypeDef
HAL SWPMI State structures definition.

◆ SWPMI_WaitOnFlagSetUntilTimeout()

static HAL_StatusTypeDef SWPMI_WaitOnFlagSetUntilTimeout ( SWPMI_HandleTypeDef hswpmi,
uint32_t  Flag,
uint32_t  Tickstart,
uint32_t  Timeout 
)
static

Handle SWPMI Communication Timeout.

Parameters
hswpmiSWPMI handle
Flagspecifies the SWPMI flag to check.
TickstartTick start value
Timeouttimeout duration.
Return values
HALstatus

Definition at line 1904 of file stm32l4xx_hal_swpmi.c.

1905 {
1906  HAL_StatusTypeDef status = HAL_OK;
1907 
1908  /* Wait until flag is set */
1909  while(!(HAL_IS_BIT_SET(hswpmi->Instance->ISR, Flag)))
1910  {
1911  /* Check for the Timeout */
1912  if ((((HAL_GetTick() - Tickstart) > Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
1913  {
1914  /* Set the SWPMI state ready to be able to start again the process */
1915  hswpmi->State = HAL_SWPMI_STATE_READY;
1916 
1917  status = HAL_TIMEOUT;
1918  break;
1919  }
1920  }
1921 
1922  return status;
1923 }
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
return HAL_OK