📄 stm32f2xx_dma.c
字号:
assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx));
/* Get the FIFO level bits */
tmpreg = (uint32_t)((DMAy_Streamx->FCR & DMA_SxFCR_FS));
return tmpreg;
}
/**
* @brief Checks whether the specified DMAy Streamx flag is set or not.
* @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0
* to 7 to select the DMA Stream.
* @param DMA_FLAG: specifies the flag to check.
* This parameter can be one of the following values:
* @arg DMA_FLAG_TCIFx: Streamx transfer complete flag
* @arg DMA_FLAG_HTIFx: Streamx half transfer complete flag
* @arg DMA_FLAG_TEIFx: Streamx transfer error flag
* @arg DMA_FLAG_DMEIFx: Streamx direct mode error flag
* @arg DMA_FLAG_FEIFx: Streamx FIFO error flag
* Where x can be 0 to 7 to select the DMA Stream.
* @retval The new state of DMA_FLAG (SET or RESET).
*/
FlagStatus DMA_GetFlagStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG)
{
FlagStatus bitstatus = RESET;
DMA_TypeDef* DMAy;
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx));
assert_param(IS_DMA_GET_FLAG(DMA_FLAG));
/* Determine the DMA to which belongs the stream */
if (DMAy_Streamx < DMA2_Stream0)
{
/* DMAy_Streamx belongs to DMA1 */
DMAy = DMA1;
}
else
{
/* DMAy_Streamx belongs to DMA2 */
DMAy = DMA2;
}
/* Check if the flag is in HISR or LISR */
if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET)
{
/* Get DMAy HISR register value */
tmpreg = DMAy->HISR;
}
else
{
/* Get DMAy LISR register value */
tmpreg = DMAy->LISR;
}
/* Mask the reserved bits */
tmpreg &= (uint32_t)RESERVED_MASK;
/* Check the status of the specified DMA flag */
if ((tmpreg & DMA_FLAG) != (uint32_t)RESET)
{
/* DMA_FLAG is set */
bitstatus = SET;
}
else
{
/* DMA_FLAG is reset */
bitstatus = RESET;
}
/* Return the DMA_FLAG status */
return bitstatus;
}
/**
* @brief Clears the DMAy Streamx's pending flags.
* @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0
* to 7 to select the DMA Stream.
* @param DMA_FLAG: specifies the flag to clear.
* This parameter can be any combination of the following values:
* @arg DMA_FLAG_TCIFx: Streamx transfer complete flag
* @arg DMA_FLAG_HTIFx: Streamx half transfer complete flag
* @arg DMA_FLAG_TEIFx: Streamx transfer error flag
* @arg DMA_FLAG_DMEIFx: Streamx direct mode error flag
* @arg DMA_FLAG_FEIFx: Streamx FIFO error flag
* Where x can be 0 to 7 to select the DMA Stream.
* @retval None
*/
void DMA_ClearFlag(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_FLAG)
{
DMA_TypeDef* DMAy;
/* Check the parameters */
assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx));
assert_param(IS_DMA_CLEAR_FLAG(DMA_FLAG));
/* Determine the DMA to which belongs the stream */
if (DMAy_Streamx < DMA2_Stream0)
{
/* DMAy_Streamx belongs to DMA1 */
DMAy = DMA1;
}
else
{
/* DMAy_Streamx belongs to DMA2 */
DMAy = DMA2;
}
/* Check if LIFCR or HIFCR register is targeted */
if ((DMA_FLAG & HIGH_ISR_MASK) != (uint32_t)RESET)
{
/* Set DMAy HIFCR register clear flag bits */
DMAy->HIFCR = (uint32_t)(DMA_FLAG & RESERVED_MASK);
}
else
{
/* Set DMAy LIFCR register clear flag bits */
DMAy->LIFCR = (uint32_t)(DMA_FLAG & RESERVED_MASK);
}
}
/**
* @brief Enables or disables the specified DMAy Streamx interrupts.
* @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0
* to 7 to select the DMA Stream.
* @param DMA_IT: specifies the DMA interrupt sources to be enabled or disabled.
* This parameter can be any combination of the following values:
* @arg DMA_IT_TC: Transfer complete interrupt mask
* @arg DMA_IT_HT: Half transfer complete interrupt mask
* @arg DMA_IT_TE: Transfer error interrupt mask
* @arg DMA_IT_FE: FIFO error interrupt mask
* @param NewState: new state of the specified DMA interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/
void DMA_ITConfig(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx));
assert_param(IS_DMA_CONFIG_IT(DMA_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
/* Check if the DMA_IT parameter contains a FIFO interrupt */
if ((DMA_IT & DMA_IT_FE) != 0)
{
if (NewState != DISABLE)
{
/* Enable the selected DMA FIFO interrupts */
DMAy_Streamx->FCR |= (uint32_t)DMA_IT_FE;
}
else
{
/* Disable the selected DMA FIFO interrupts */
DMAy_Streamx->FCR &= ~(uint32_t)DMA_IT_FE;
}
}
/* Check if the DMA_IT parameter contains a Transfer interrupt */
if (DMA_IT != DMA_IT_FE)
{
if (NewState != DISABLE)
{
/* Enable the selected DMA transfer interrupts */
DMAy_Streamx->CR |= (uint32_t)(DMA_IT & TRANSFER_IT_ENABLE_MASK);
}
else
{
/* Disable the selected DMA transfer interrupts */
DMAy_Streamx->CR &= ~(uint32_t)(DMA_IT & TRANSFER_IT_ENABLE_MASK);
}
}
}
/**
* @brief Checks whether the specified DMAy Streamx interrupt has occurred or not.
* @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0
* to 7 to select the DMA Stream.
* @param DMA_IT: specifies the DMA interrupt source to check.
* This parameter can be one of the following values:
* @arg DMA_IT_TCIFx: Streamx transfer complete interrupt
* @arg DMA_IT_HTIFx: Streamx half transfer complete interrupt
* @arg DMA_IT_TEIFx: Streamx transfer error interrupt
* @arg DMA_IT_DMEIFx: Streamx direct mode error interrupt
* @arg DMA_IT_FEIFx: Streamx FIFO error interrupt
* Where x can be 0 to 7 to select the DMA Stream.
* @retval The new state of DMA_IT (SET or RESET).
*/
ITStatus DMA_GetITStatus(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT)
{
ITStatus bitstatus = RESET;
DMA_TypeDef* DMAy;
uint32_t tmpreg = 0, enablestatus = 0;
/* Check the parameters */
assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx));
assert_param(IS_DMA_GET_IT(DMA_IT));
/* Determine the DMA to which belongs the stream */
if (DMAy_Streamx < DMA2_Stream0)
{
/* DMAy_Streamx belongs to DMA1 */
DMAy = DMA1;
}
else
{
/* DMAy_Streamx belongs to DMA2 */
DMAy = DMA2;
}
/* Check if the interrupt enable bit is in the CR or FCR register */
if ((DMA_IT & TRANSFER_IT_MASK) != (uint32_t)RESET)
{
/* Get the interrupt enable position mask in CR register */
tmpreg = (uint32_t)((DMA_IT >> 11) & TRANSFER_IT_ENABLE_MASK);
/* Check the enable bit in CR register */
enablestatus = (uint32_t)(DMAy_Streamx->CR & tmpreg);
}
else
{
/* Check the enable bit in FCR register */
enablestatus = (uint32_t)(DMAy_Streamx->FCR & DMA_IT_FE);
}
/* Check if the interrupt pending flag is in LISR or HISR */
if ((DMA_IT & HIGH_ISR_MASK) != (uint32_t)RESET)
{
/* Get DMAy HISR register value */
tmpreg = DMAy->HISR ;
}
else
{
/* Get DMAy LISR register value */
tmpreg = DMAy->LISR ;
}
/* mask all reserved bits */
tmpreg &= (uint32_t)RESERVED_MASK;
/* Check the status of the specified DMA interrupt */
if (((tmpreg & DMA_IT) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET))
{
/* DMA_IT is set */
bitstatus = SET;
}
else
{
/* DMA_IT is reset */
bitstatus = RESET;
}
/* Return the DMA_IT status */
return bitstatus;
}
/**
* @brief Clears the DMAy Streamx's interrupt pending bits.
* @param DMAy_Streamx: where y can be 1 or 2 to select the DMA and x can be 0
* to 7 to select the DMA Stream.
* @param DMA_IT: specifies the DMA interrupt pending bit to clear.
* This parameter can be any combination of the following values:
* @arg DMA_IT_TCIFx: Streamx transfer complete interrupt
* @arg DMA_IT_HTIFx: Streamx half transfer complete interrupt
* @arg DMA_IT_TEIFx: Streamx transfer error interrupt
* @arg DMA_IT_DMEIFx: Streamx direct mode error interrupt
* @arg DMA_IT_FEIFx: Streamx FIFO error interrupt
* Where x can be 0 to 7 to select the DMA Stream.
* @retval None
*/
void DMA_ClearITPendingBit(DMA_Stream_TypeDef* DMAy_Streamx, uint32_t DMA_IT)
{
DMA_TypeDef* DMAy;
/* Check the parameters */
assert_param(IS_DMA_ALL_PERIPH(DMAy_Streamx));
assert_param(IS_DMA_CLEAR_IT(DMA_IT));
/* Determine the DMA to which belongs the stream */
if (DMAy_Streamx < DMA2_Stream0)
{
/* DMAy_Streamx belongs to DMA1 */
DMAy = DMA1;
}
else
{
/* DMAy_Streamx belongs to DMA2 */
DMAy = DMA2;
}
/* Check if LIFCR or HIFCR register is targeted */
if ((DMA_IT & HIGH_ISR_MASK) != (uint32_t)RESET)
{
/* Set DMAy HIFCR register clear interrupt bits */
DMAy->HIFCR = (uint32_t)(DMA_IT & RESERVED_MASK);
}
else
{
/* Set DMAy LIFCR register clear interrupt bits */
DMAy->LIFCR = (uint32_t)(DMA_IT & RESERVED_MASK);
}
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -