Choco OS  V.0.16.9.0
Join to the chocolate world
oc_dma_lld.h
Go to the documentation of this file.
1 
42 #ifndef INC_LLD_OC_DMA_LLD_H_
43 #define INC_LLD_OC_DMA_LLD_H_
44 
45 #include <oc_machine.h>
46 #include <oc_errors.h>
47 
48 #if oC_Channel_IsModuleDefined(DMA) == false
49 #error DMA module is not defined
50 #else
51 
57 #define _________________________________________TYPES_SECTION______________________________________________________________________________
58 #define MODULE_NAME DMA
61 
62 //==========================================================================================================================================
67 //==========================================================================================================================================
69 
70 //==========================================================================================================================================
76 //==========================================================================================================================================
77 typedef enum
78 {
79  oC_DMA_LLD_Priority_Low ,
80  oC_DMA_LLD_Priority_Medium ,
81  oC_DMA_LLD_Priority_High
82 } oC_DMA_LLD_Priority_t;
83 
84 //==========================================================================================================================================
92 //==========================================================================================================================================
93 typedef void (*oC_DMA_LLD_EventHandler_t)(oC_DMA_Channel_t Channel);
94 
95 //==========================================================================================================================================
99 //==========================================================================================================================================
100 typedef enum
101 {
102  oC_DMA_LLD_ElementSize_Byte = 0 ,
103  oC_DMA_LLD_ElementSize_HalfWord = 1 ,
104  oC_DMA_LLD_ElementSize_Word = 2
105 } oC_DMA_LLD_ElementSize_t;
106 
107 //==========================================================================================================================================
111 //==========================================================================================================================================
112 typedef enum
113 {
114  oC_DMA_LLD_Direction_Transmit ,
115  oC_DMA_LLD_Direction_Receive
116 } oC_DMA_LLD_Direction_t;
117 
118 //==========================================================================================================================================
122 //==========================================================================================================================================
123 typedef struct
124 {
125  const void * Source;
126  void * Destination;
127  oC_DMA_LLD_EventHandler_t TransferCompleteEventHandler;
128  oC_UInt_t BufferSize;
129  oC_DMA_LLD_Priority_t Priority;
130  oC_DMA_LLD_ElementSize_t ElementSize;
131 } oC_DMA_LLD_SoftwareTradeConfig_t;
132 
133 //==========================================================================================================================================
137 //==========================================================================================================================================
138 typedef struct
139 {
140  void * Buffer;
141  oC_DMA_LLD_EventHandler_t TransferCompleteEventHandler;
142  oC_Channel_t PeripheralChannel;
143  void * PeripheralData;
144  oC_UInt_t BufferSize;
145  oC_DMA_LLD_Priority_t Priority;
146  oC_DMA_LLD_ElementSize_t ElementSize;
147  oC_DMA_LLD_Direction_t TransmitDirection;
148  oC_Machine_DmaSignalType_t SignalType;
149 } oC_DMA_LLD_PeripheralTradeConfig_t;
150 
151 #undef MODULE_NAME
152 #undef _________________________________________TYPES_SECTION______________________________________________________________________________
153 
160 #define _________________________________________MACROS_SECTION_____________________________________________________________________________
161 
164 //==========================================================================================================================================
192 //==========================================================================================================================================
193 #define oC_DMA_LLD_ForeachChannel(Channel) oC_Channel_Foreach(DMA , Channel)
194 
195 #undef _________________________________________MACROS_SECTION_____________________________________________________________________________
196 
198 
199 
205 #define _________________________________________FUNCTIONS_SECTION__________________________________________________________________________
206 
209 //==========================================================================================================================================
218 //==========================================================================================================================================
219 extern oC_ErrorCode_t oC_DMA_LLD_TurnOnDriver( void );
220 //==========================================================================================================================================
230 //==========================================================================================================================================
231 extern oC_ErrorCode_t oC_DMA_LLD_TurnOffDriver( void );
232 //==========================================================================================================================================
243 //==========================================================================================================================================
244 extern bool oC_DMA_LLD_IsChannelAvailable( oC_DMA_Channel_t Channel );
245 //==========================================================================================================================================
253 //==========================================================================================================================================
254 extern void oC_DMA_LLD_RestoreDefaultStateOnChannel( oC_DMA_Channel_t Channel );
255 //==========================================================================================================================================
267 //==========================================================================================================================================
268 extern bool oC_DMA_LLD_IsChannelSupportedOnDmaChannel( oC_DMA_Channel_t DmaChannel , oC_Channel_t Channel , oC_Machine_DmaSignalType_t SignalType );
269 //==========================================================================================================================================
279 //==========================================================================================================================================
280 extern bool oC_DMA_LLD_IsSoftwareTradeSupportedOnDmaChannel( oC_DMA_Channel_t DmaChannel );
281 //==========================================================================================================================================
292 //==========================================================================================================================================
293 extern bool oC_DMA_LLD_DoesDmaHasAccessToAddress( oC_DMA_Channel_t Channel , const void * Address );
294 //==========================================================================================================================================
305 //==========================================================================================================================================
306 extern oC_ErrorCode_t oC_DMA_LLD_ConfigureSoftwareTrade( oC_DMA_Channel_t Channel , const oC_DMA_LLD_SoftwareTradeConfig_t * Config );
307 //==========================================================================================================================================
318 //==========================================================================================================================================
319 extern oC_ErrorCode_t oC_DMA_LLD_ConfigurePeripheralTrade( oC_DMA_Channel_t Channel , const oC_DMA_LLD_PeripheralTradeConfig_t * Config );
320 //==========================================================================================================================================
330 //==========================================================================================================================================
331 extern bool oC_DMA_LLD_IsTransferCompleteOnChannel( oC_DMA_Channel_t Channel );
332 //==========================================================================================================================================
343 //==========================================================================================================================================
344 extern oC_ErrorCode_t oC_DMA_LLD_ReadChannelUsedReference( oC_DMA_Channel_t Channel , bool ** outChannelUsedFlag );
345 //==========================================================================================================================================
357 //==========================================================================================================================================
358 extern oC_ErrorCode_t oC_DMA_LLD_FindFreeDmaChannelForPeripheralTrade( oC_DMA_Channel_t * outDmaChannel , oC_Channel_t Channel , oC_Machine_DmaSignalType_t SignalType );
359 
360 #undef _________________________________________FUNCTIONS_SECTION__________________________________________________________________________
361 
363 #endif /* DMA DEFINED */
364 #endif /* INC_LLD_OC_DMA_LLD_H_ */
oC_Machine_DmaSignalType_t
type with DMA signal types
Definition: oc_machine.h:429
#define oC_ModuleChannel_DefineType
defines module channel type
Definition: oc_channels.h:541
oC_Channel_t
stores machine channel
Definition: oc_channels.h:573
The file with interface for the machine module.