gossamer 0.0.0
a very lightweight app framework for SAMD and SAML chips
Loading...
Searching...
No Matches
dma.h
1/*
2 * MIT License
3 *
4 * Copyright (c) 2022 Joey Castillo
5 * Based heavily on Adafruit_ZeroDMA
6 * Written by Phil "PaintYourDragon" Burgess for Adafruit Industries,
7 * based partly on DMA insights from Atmel ASFCORE 3.
8 *
9 * Adafruit invests time and resources providing this open source code,
10 * please support Adafruit and open-source hardware by purchasing
11 * products from Adafruit!
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining a copy
14 * of this software and associated documentation files (the "Software"), to deal
15 * in the Software without restriction, including without limitation the rights
16 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 * copies of the Software, and to permit persons to whom the Software is
18 * furnished to do so, subject to the following conditions:
19 *
20 * The above copyright notice and this permission notice shall be included in all
21 * copies or substantial portions of the Software.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29 * SOFTWARE.
30 */
31
32#pragma once
33
34#include <stdint.h>
35#include <stdbool.h>
36#include "dma_util.h"
37
38#ifndef _SAMD51_
39
40typedef struct {
41 uint8_t channel; // (0 to DMAC_CH_NUM-1, or 0xFF)
42 volatile dma_status_t jobStatus; // Last known DMA job status
43 bool hasDescriptors; // 'true' if one or more descriptors assigned
44 bool loopFlag; // 'true' if descriptor chain loops back to start
45 void (*callbacks[DMA_CALLBACK_N])(void *); // Callback function (is passed an instance of this struct)
47
54void dma_init(void);
55
72bool dma_configure(gossamer_dma_job_t *dmaJob, uint8_t peripheralTrigger, dma_trigger_action_t triggerAction, dma_configuration_flags_t flags);
73
102DmacDescriptor *dma_add_descriptor(gossamer_dma_job_t *dmaJob, void *src, void *dst, uint32_t count, dma_beat_size_t size, dma_address_increment_t addressIncrement, dma_stepsize_t stepSize, dma_stepsel_t stepSel);
103
104bool dma_start_job(gossamer_dma_job_t *dmaJob);
105
106#endif
Definition: dma.h:40