STM8L15x Standard Peripherals Drivers: stm8l15x_dma.h Source File

STM8L15x/16x Standard Peripherals Drivers

STM8L15x Standard Peripherals Drivers

stm8l15x_dma.h

Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm8l15x_dma.h
00004   * @author  MCD Application Team
00005   * @version V1.5.0
00006   * @date    13-May-2011
00007   * @brief   This file contains all the functions prototypes for the DMA 
00008   *          firmware library.
00009   ******************************************************************************
00010   * @attention
00011   *
00012   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
00013   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
00014   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
00015   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
00016   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
00017   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
00018   *
00019   * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
00020   ******************************************************************************  
00021   */
00022 /* Define to prevent recursive inclusion -------------------------------------*/
00023 #ifndef __STM8L15x_DMA_H
00024  #define __STM8L15x_DMA_H
00025 
00026 /* Includes ------------------------------------------------------------------*/
00027 #include "stm8l15x.h"
00028 
00029 /** @addtogroup STM8L15x_StdPeriph_Driver
00030   * @{
00031   */
00032 
00033 /** @addtogroup DMA
00034   * @{
00035   */ 
00036 
00037 /* Exported types ------------------------------------------------------------*/
00038 
00039 /** @addtogroup DMA_Exported_Types
00040   * @{
00041   */
00042 
00043 /** @defgroup DMA_Data_Transfer_Direction
00044   * @{
00045   */
00046 typedef enum
00047 {
00048   DMA_DIR_PeripheralToMemory  = ((uint8_t)0x00), /*!< Data transfer direction is Peripheral To Memory   */
00049   DMA_DIR_MemoryToPeripheral  = ((uint8_t)0x08), /*!< Data transfer direction is Memory To Peripheral */
00050   DMA_DIR_Memory0ToMemory1    = ((uint8_t)0x40)  /*!< Data transfer direction is Memory0 To Memory 1 */
00051 }DMA_DIR_TypeDef;
00052 
00053 #define IS_DMA_DIR(DIR) (((DIR) == DMA_DIR_MemoryToPeripheral) || \
00054                          ((DIR) == DMA_DIR_PeripheralToMemory) || \
00055                          ((DIR) == DMA_DIR_Memory0ToMemory1 ))
00056 /**
00057   * @}
00058   */
00059   
00060 /** @defgroup DMA_Mode
00061   * @{
00062   */
00063 typedef enum
00064 {
00065   DMA_Mode_Normal = ((uint8_t)0x00),  /*!< DMA normal buffer mode*/
00066   DMA_Mode_Circular = ((uint8_t)0x10) /*!< DMA circular buffer mode */
00067 }DMA_Mode_TypeDef;
00068 
00069 #define IS_DMA_MODE(MODE) (((MODE) == DMA_Mode_Circular) || \
00070                            ((MODE) == DMA_Mode_Normal))
00071 /**
00072   * @}
00073   */
00074   
00075 /** @defgroup DMA_Incremented_Mode
00076   * @{
00077   */
00078 typedef enum
00079 {
00080   DMA_MemoryIncMode_Dec = ((uint8_t)0x00), /*!< DMA memory incremented mode is decremental */
00081   DMA_MemoryIncMode_Inc = ((uint8_t)0x20)  /*!< DMA memory incremented mode is incremental */
00082 }DMA_MemoryIncMode_TypeDef;
00083 
00084 #define IS_DMA_MEMORY_INC_MODE(MODE) (((MODE) == DMA_MemoryIncMode_Inc) || \
00085                                       ((MODE) == DMA_MemoryIncMode_Dec))
00086 /**
00087   * @}
00088   */
00089   
00090 /** @defgroup DMA_Priority
00091   * @{
00092   */
00093 typedef enum
00094 {
00095   DMA_Priority_Low      = ((uint8_t)0x00), /*!< Software Priority is Low */
00096   DMA_Priority_Medium   = ((uint8_t)0x10), /*!< Software Priority is Medium */
00097   DMA_Priority_High     = ((uint8_t)0x20), /*!< Software Priority is High */
00098   DMA_Priority_VeryHigh = ((uint8_t)0x30)  /*!< Software Priority is Very High*/
00099 }DMA_Priority_TypeDef;
00100 
00101 #define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_Priority_VeryHigh) || \
00102                                    ((PRIORITY) == DMA_Priority_High) || \
00103                                    ((PRIORITY) == DMA_Priority_Medium) || \
00104                                    ((PRIORITY) == DMA_Priority_Low))
00105 /**
00106   * @}
00107   */
00108   
00109 /** @defgroup DMA_Memory_Data_Size
00110   * @{
00111   */
00112 typedef enum
00113 {
00114   DMA_MemoryDataSize_Byte     = ((uint8_t)0x00),/*!< Memory Data Size is 1 Byte */
00115   DMA_MemoryDataSize_HalfWord = ((uint8_t)0x08) /*!< Memory Data Size is 2 Bytes */
00116 }DMA_MemoryDataSize_TypeDef;
00117 
00118 #define IS_DMA_DATA_SIZE(SIZE) (((SIZE) == DMA_MemoryDataSize_Byte) || \
00119                                 ((SIZE) == DMA_MemoryDataSize_HalfWord))
00120 /**
00121   * @}
00122   */
00123   
00124 /** @defgroup DMA_Flags
00125   * @{
00126   */
00127 typedef enum
00128 {
00129   DMA1_FLAG_GB    = ((uint16_t)0x0002), /*!< Global Busy Flag */
00130 
00131   DMA1_FLAG_IFC0  = ((uint16_t)0x1001), /*!< Global Interrupt Flag Channel 0 */
00132   DMA1_FLAG_IFC1  = ((uint16_t)0x1002), /*!< Global Interrupt Flag Channel 1 */
00133   DMA1_FLAG_IFC2  = ((uint16_t)0x1004), /*!< Global Interrupt Flag Channel 2 */
00134   DMA1_FLAG_IFC3  = ((uint16_t)0x1008), /*!< Global Interrupt Flag Channel 3 */
00135 
00136   DMA1_FLAG_TC0   = ((uint16_t)0x0102), /*!< Transaction Complete Interrupt Flag Channel 0 */
00137   DMA1_FLAG_TC1   = ((uint16_t)0x0202), /*!< Transaction Complete Interrupt Flag Channel 1 */
00138   DMA1_FLAG_TC2   = ((uint16_t)0x0402), /*!< Transaction Complete Interrupt Flag Channel 2 */
00139   DMA1_FLAG_TC3   = ((uint16_t)0x0802), /*!< Transaction Complete Interrupt Flag Channel 3 */
00140 
00141   DMA1_FLAG_HT0   = ((uint16_t)0x0104), /*!< Half Transaction Interrupt Flag Channel 0 */
00142   DMA1_FLAG_HT1   = ((uint16_t)0x0204), /*!< Half Transaction Interrupt Flag Channel 1 */
00143   DMA1_FLAG_HT2   = ((uint16_t)0x0404), /*!< Half Transaction Interrupt Flag Channel 2 */
00144   DMA1_FLAG_HT3   = ((uint16_t)0x0804), /*!< Half Transaction Interrupt Flag Channel 3 */
00145 
00146   DMA1_FLAG_PEND0 = ((uint16_t)0x0140), /*!< DMA Request pending on Channel 0 */
00147   DMA1_FLAG_PEND1 = ((uint16_t)0x0240), /*!< DMA Request pending on Channel 1 */
00148   DMA1_FLAG_PEND2 = ((uint16_t)0x0440), /*!< DMA Request pending on Channel 2 */
00149   DMA1_FLAG_PEND3 = ((uint16_t)0x0840), /*!< DMA Request pending on Channel 3 */
00150 
00151   DMA1_FLAG_BUSY0 = ((uint16_t)0x0180), /*!< No DMA transfer on going in Channel 0 */
00152   DMA1_FLAG_BUSY1 = ((uint16_t)0x0280), /*!< No DMA transfer on going in Channel 1 */
00153   DMA1_FLAG_BUSY2 = ((uint16_t)0x0480), /*!< No DMA transfer on going in Channel 2 */
00154   DMA1_FLAG_BUSY3 = ((uint16_t)0x0880)  /*!< No DMA transfer on going in Channel 3 */
00155 }DMA_FLAG_TypeDef;
00156 
00157 #define IS_DMA_GET_FLAG(FLAG) (((FLAG) == DMA1_FLAG_GB) || \
00158                                ((FLAG) == DMA1_FLAG_IFC0) || \
00159                                ((FLAG) == DMA1_FLAG_IFC1) || \
00160                                ((FLAG) == DMA1_FLAG_IFC2) || \
00161                                ((FLAG) == DMA1_FLAG_IFC3) || \
00162                                ((FLAG) == DMA1_FLAG_TC0) || \
00163                                ((FLAG) == DMA1_FLAG_TC1) || \
00164                                ((FLAG) == DMA1_FLAG_TC2) || \
00165                                ((FLAG) == DMA1_FLAG_TC3) || \
00166                                ((FLAG) == DMA1_FLAG_HT0) || \
00167                                ((FLAG) == DMA1_FLAG_HT1) || \
00168                                ((FLAG) == DMA1_FLAG_HT2) || \
00169                                ((FLAG) == DMA1_FLAG_HT3) || \
00170                                ((FLAG) == DMA1_FLAG_PEND0) || \
00171                                ((FLAG) == DMA1_FLAG_PEND1) || \
00172                                ((FLAG) == DMA1_FLAG_PEND2) || \
00173                                ((FLAG) == DMA1_FLAG_PEND3) || \
00174                                ((FLAG) == DMA1_FLAG_BUSY0) || \
00175                                ((FLAG) == DMA1_FLAG_BUSY1) || \
00176                                ((FLAG) == DMA1_FLAG_BUSY2) || \
00177                                ((FLAG) == DMA1_FLAG_BUSY3))
00178 
00179 #define IS_DMA_CLEAR_FLAG(FLAG) (((FLAG) == DMA1_FLAG_TC0) || \
00180                                  ((FLAG) == DMA1_FLAG_TC1) || \
00181                                  ((FLAG) == DMA1_FLAG_TC2) || \
00182                                  ((FLAG) == DMA1_FLAG_TC3) || \
00183                                  ((FLAG) == DMA1_FLAG_HT0) || \
00184                                  ((FLAG) == DMA1_FLAG_HT1) || \
00185                                  ((FLAG) == DMA1_FLAG_HT2) || \
00186                                  ((FLAG) == DMA1_FLAG_HT3) || \
00187                                  ((FLAG) == (DMA1_FLAG_TC0 |DMA1_FLAG_HT0)) || \
00188                                  ((FLAG) == (DMA1_FLAG_TC1 |DMA1_FLAG_HT1)) || \
00189                                  ((FLAG) == (DMA1_FLAG_TC2 |DMA1_FLAG_HT2)) || \
00190                                  ((FLAG) == (DMA1_FLAG_TC3 |DMA1_FLAG_HT3)))
00191 /**
00192   * @}
00193   */
00194   
00195 /** @defgroup DMA_One_Channel_Interrupts
00196   * @{
00197   */
00198 typedef enum
00199 {
00200   DMA_ITx_TC = ((uint8_t)0x02),/*!< Transaction Complete Interrupt  */
00201   DMA_ITx_HT = ((uint8_t)0x04) /*!< Half Transaction Interrupt*/
00202 }DMA_ITx_TypeDef;
00203 
00204 #define IS_DMA_CONFIG_ITX(IT) ((((IT) & 0xF9) == 0x00) && ((IT) != 0x00))
00205 /**
00206   * @}
00207   */
00208   
00209 /** @defgroup DMA_Interrupts 
00210   * @{
00211   */
00212 typedef enum
00213 {
00214   /* Transaction Complete Interrupts*/
00215   DMA1_IT_TC0 = ((uint8_t)0x12), /*!< Transaction Complete Interrupt Channel 0 */
00216   DMA1_IT_TC1 = ((uint8_t)0x22), /*!< Transaction Complete Interrupt Channel 1 */
00217   DMA1_IT_TC2 = ((uint8_t)0x42), /*!< Transaction Complete Interrupt Channel 2 */
00218   DMA1_IT_TC3 = ((uint8_t)0x82), /*!< Transaction Complete Interrupt Channel 3 */
00219   /* Half Transaction Interrupts */
00220   DMA1_IT_HT0 = ((uint8_t)0x14), /*!< Half Transaction Interrupt Channel 0 */
00221   DMA1_IT_HT1 = ((uint8_t)0x24), /*!< Half Transaction Interrupt Channel 1 */
00222   DMA1_IT_HT2 = ((uint8_t)0x44), /*!< Half Transaction Interrupt Channel 2 */
00223   DMA1_IT_HT3 = ((uint8_t)0x84)  /*!< Half Transaction Interrupt Channel 3 */
00224 }DMA_IT_TypeDef;
00225 
00226 #define IS_DMA_CLEAR_IT(IT) (((IT) == DMA1_IT_TC0) || \
00227                              ((IT) == DMA1_IT_TC1) || \
00228                              ((IT) == DMA1_IT_TC2) || \
00229                              ((IT) == DMA1_IT_TC3) || \
00230                              ((IT) == DMA1_IT_HT0) || \
00231                              ((IT) == DMA1_IT_HT1) || \
00232                              ((IT) == DMA1_IT_HT2) || \
00233                              ((IT) == DMA1_IT_HT3) || \
00234                              ((IT) == (DMA1_IT_TC0|DMA1_IT_HT0)) || \
00235                              ((IT) == (DMA1_IT_TC1|DMA1_IT_HT1)) || \
00236                              ((IT) == (DMA1_IT_TC2|DMA1_IT_HT2)) || \
00237                              ((IT) == (DMA1_IT_TC3|DMA1_IT_HT3)))
00238 
00239 #define IS_DMA_GET_IT(IT)(((IT) == DMA1_IT_TC0) || \
00240                           ((IT) == DMA1_IT_TC1) || \
00241                           ((IT) == DMA1_IT_TC2) || \
00242                           ((IT) == DMA1_IT_TC3) || \
00243                           ((IT) == DMA1_IT_HT0) || \
00244                           ((IT) == DMA1_IT_HT1) || \
00245                           ((IT) == DMA1_IT_HT2) || \
00246                           ((IT) == DMA1_IT_HT3))
00247 /**
00248   * @}
00249   */
00250 
00251 /**
00252   * @}
00253   */
00254 /* Exported constants --------------------------------------------------------*/    
00255 /* Exported macro ------------------------------------------------------------*/
00256 /** @addtogroup DMA_Exported_Macros
00257   * @{
00258   */
00259 
00260 /** @defgroup DMA_Channels
00261   * @{
00262   */
00263 #define IS_DMA_CHANNEL(PERIPH) (((*(uint16_t*)&(PERIPH)) == DMA1_Channel0_BASE)  || \
00264                                 ((*(uint16_t*)&(PERIPH)) == DMA1_Channel1_BASE)  || \
00265                                 ((*(uint16_t*)&(PERIPH)) == DMA1_Channel2_BASE)  || \
00266                                 ((*(uint16_t*)&(PERIPH)) == DMA1_Channel3_BASE))
00267 /**
00268   * @}
00269   */
00270 
00271 
00272 /** @defgroup DMA_Buffer_Size
00273   * @{
00274   */
00275 #define IS_DMA_BUFFER_SIZE(SIZE) ((SIZE) > (uint8_t)0x0)
00276 
00277 /**
00278   * @}
00279   */
00280 
00281 /** @defgroup DMA_Timeout
00282   * @{
00283   */
00284 #define IS_DMA_TIMEOUT(TIME) ((TIME) < (uint8_t)0x40)
00285 
00286 /**
00287   * @}
00288   */
00289   
00290 /**
00291   * @}
00292   */
00293 
00294 /* Exported functions ------------------------------------------------------- */ 
00295   
00296 /*  Functions used to set the DMA configuration to the default reset state ****/ 
00297 void DMA_GlobalDeInit(void);
00298 void DMA_DeInit(DMA_Channel_TypeDef* DMA_Channelx);
00299 
00300 /* Initialization and Configuration functions *********************************/
00301 void DMA_Init(DMA_Channel_TypeDef* DMA_Channelx,
00302               uint32_t DMA_Memory0BaseAddr,
00303               uint16_t DMA_PeripheralMemory1BaseAddr,
00304               uint8_t DMA_BufferSize,
00305               DMA_DIR_TypeDef DMA_DIR,
00306               DMA_Mode_TypeDef DMA_Mode,
00307               DMA_MemoryIncMode_TypeDef DMA_MemoryIncMode,
00308               DMA_Priority_TypeDef DMA_Priority,
00309               DMA_MemoryDataSize_TypeDef DMA_MemoryDataSize );
00310 void DMA_GlobalCmd(FunctionalState NewState);
00311 void DMA_Cmd(DMA_Channel_TypeDef* DMA_Channelx, FunctionalState NewState);
00312 void DMA_SetTimeOut(uint8_t DMA_TimeOut);
00313 
00314 /* Data Counter functions *****************************************************/
00315 void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMA_Channelx, uint8_t DataNumber);
00316 uint8_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMA_Channelx);
00317 
00318 /* Interrupts and flags management functions **********************************/
00319 void DMA_ITConfig(DMA_Channel_TypeDef* DMA_Channelx, DMA_ITx_TypeDef DMA_ITx, FunctionalState NewState);
00320 FlagStatus DMA_GetFlagStatus(DMA_FLAG_TypeDef DMA_FLAG);
00321 void DMA_ClearFlag(DMA_FLAG_TypeDef DMA_FLAG);
00322 ITStatus DMA_GetITStatus(DMA_IT_TypeDef DMA_IT);
00323 void DMA_ClearITPendingBit(DMA_IT_TypeDef DMA_IT);
00324 
00325 #endif /*__STM8L15x_DMA_H */
00326 
00327 /**
00328   * @}
00329   */
00330   
00331 /**
00332   * @}
00333   */
00334 
00335 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
STM8S Firmware Library: Overview

 

 

 

For complete documentation on STM8L15x 8-bit microcontrollers platform visit www.st.com