ClearCore Library
DmaManager.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Teknic, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all 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,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20  * SOFTWARE.
21  */
22 
30 #ifndef __DMAMANAGER_H__
31 #define __DMAMANAGER_H__
32 
33 #include <stdint.h>
34 #include <sam.h>
35 
36 #ifndef HIDE_FROM_DOXYGEN
37 namespace ClearCore {
38 
39 /* DMA channels */
40 typedef enum {
41  DMA_ADC_RESULTS,
42  DMA_ADC_SEQUENCE,
43  DMA_SERCOM0_SPI_RX,
44  DMA_SERCOM0_SPI_TX,
45  DMA_SERCOM7_SPI_RX,
46  DMA_SERCOM7_SPI_TX,
47  DMA_CHANNEL_COUNT, // Keep at end
48  DMA_INVALID_CHANNEL // Placeholder for unset values
49 } DmaChannels;
50 
56 class DmaManager {
57  friend class SysManager;
58 
59 public:
60  static DmacChannel *Channel(DmaChannels index);
61  static DmacDescriptor *BaseDescriptor(DmaChannels index);
62 
66  static DmaManager &Instance();
67 private:
68 
69  static DmacDescriptor writeBackDescriptor[DMA_CHANNEL_COUNT] __attribute__((
70  aligned(16)));
71  static DmacDescriptor descriptorBase[DMA_CHANNEL_COUNT] __attribute__((aligned(
72  16)));
73 
81  DmaManager() {};
82 
89  static void Initialize();
90 }; // DmaManager
91 
92 } // ClearCore namespace
93 
94 #endif // HIDE_FROM_DOXYGEN
95 #endif // __DMAMANAGER_H__
Namespace to encompass the ClearCore board API.
Definition: AdcManager.h:36