1 /*
2  * Copyright (c) 2022 OpenLuat & AirM2M
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy of
5  * this software and associated documentation files (the "Software"), to deal in
6  * the Software without restriction, including without limitation the rights to
7  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
8  * the Software, and to permit persons to whom the Software is furnished to do so,
9  * subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in all
12  * copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20  */
21 
22 #ifndef __CORE_DMA_H__
23 #define __CORE_DMA_H__
24 
25 enum
26 {
27     DMA1_STREAM_0,
28     DMA1_STREAM_1,
29     DMA1_STREAM_2,
30     DMA1_STREAM_3,
31     DMA1_STREAM_4,
32     DMA1_STREAM_5,
33     DMA1_STREAM_6,
34     DMA1_STREAM_7,
35 //  DMA1_STREAM_QTY,
36 //  DMA2_STREAM_0 = DMA1_STREAM_QTY,
37 //  DMA2_STREAM_1,
38 //  DMA2_STREAM_2,
39 //  DMA2_STREAM_3,
40 //  DMA2_STREAM_4,
41 //  DMA2_STREAM_5,
42 //  DMA2_STREAM_6,
43 //  DMA2_STREAM_7,
44     DMA2_STREAM_QTY,
45     DMA_STREAM_QTY = DMA2_STREAM_QTY,
46 };
47 void DMA_GlobalInit(void);
48 void *DMA_TakeStream(uint8_t Stream);
49 int DMA_CheckStreamLock(uint8_t Stream);
50 void DMA_ReleaseStream(uint8_t Stream);
51 uint8_t DMA_CheckStreamBusy(uint8_t Stream);
52 int DMA_ConfigStream(uint8_t Stream, void *Config);
53 int DMA_StartStream(uint8_t Stream, const void *Data, uint32_t Len, CBFuncEx_t CB, void *pUserData, uint8_t NeedIrq);
54 /**
55  * @brief 强制启动DMA传输
56  * @param Stream DMA流序号
57  * @param Data DMA缓存
58  * @param Len DMA缓存长度
59  * @param CB 完成或者出错回调。完成时,回调函数参数pParam为0,出错为0xffffffff
60  * @param NeedIrq 是否需要中断
61  * @return 无
62  */
63 void DMA_ForceStartStream(uint8_t Stream, const void *Data, uint32_t Len, CBFuncEx_t CB, void *pUserData, uint8_t NeedIrq);
64 void DMA_ClearStreamFlag(uint8_t Stream);
65 void DMA_StopStream(uint8_t Stream);
66 uint32_t DMA_GetRemainingDataLength(uint8_t Stream);
67 uint32_t DMA_GetDataLength(uint8_t Stream, uint32_t FirstAddress);
68 void DMA_BaseConfig(void *Config);
69 void DMA_PrintGlobalReg(void);
70 void DMA_PrintReg(uint8_t Stream);
71 #endif
72