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