Skip to content

Commit 99b9346

Browse files
committed
Save morning's work.
1 parent 45fda9e commit 99b9346

File tree

4 files changed

+33
-20
lines changed

4 files changed

+33
-20
lines changed

cores/arduino/stm32/dma.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@
4040
#ifndef __DMA_H
4141
#define __DMA_H
4242

43+
#ifdef __cplusplus
44+
extern "C" {
45+
#endif
46+
4347
#include <stm32_def.h>
4448

4549
/**
@@ -56,4 +60,8 @@ void prepare_dma(DMA_HandleTypeDef *dma_handle);
5660
*/
5761
void end_dma(DMA_HandleTypeDef *dma_handle);
5862

63+
#ifdef __cplusplus
64+
}
65+
#endif
66+
5967
#endif

libraries/DMA/library.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
name=DMA
22
version=0.0.1
33
author=J.C. Nelson
4+
maintainer=xC0000005
45
sentence=Enables Direct Memory Access Transfers.
56
paragraph=This library allows use of Direct Memory Access (DMA) for transfer between memory locations, to and from peripherals.
6-
category=Data Transfers
7+
category=Uncategorized
78
architectures=stm32

libraries/DMA/src/DMATransfer.cpp

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,47 @@
11
#include <dma.h>
2+
#include <DMATransfer.h>
23

34
/**
45
* @brief Prepares for DMA Transfer by enabling clocks
56
* and storing the settings in the slots
67
* @param settings : dma transfer settings
78
* @retval None
89
*/
9-
void DMATransferClass::prepare(dmatransfer_t *settings) {
10+
void DMATransferClass::prepare(dmatransfer_t *settings)
11+
{
1012
if (!_prepared) {
1113
// TODO - figure out which DMA to enable the clock for.
1214
__HAL_RCC_DMA1_CLK_ENABLE();
13-
15+
1416
memcpy(&_transfer_settings, settings, sizeof(dmatransfer_t));
1517

16-
_transfer_settings.dma_settings.Init.Direction = transfer_direction;
18+
_transfer_settings.dma_settings.Init.Direction = _transfer_settings.transfer_direction;
1719
_transfer_settings.dma_settings.Init.PeriphInc = DMA_PINC_DISABLE;
1820
_transfer_settings.dma_settings.Init.MemInc = DMA_MINC_DISABLE;
1921
_transfer_settings.dma_settings.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
2022
_transfer_settings.dma_settings.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
21-
_transfer_settings.dma_settings.Init.Mode = settings.circular ? DMA_CIRCULAR : DMA_NORMAL;
23+
_transfer_settings.dma_settings.Init.Mode = _transfer_settings.circular ? DMA_CIRCULAR : DMA_NORMAL;
2224
_transfer_settings.dma_settings.Init.Priority = DMA_PRIORITY_VERY_HIGH;
23-
_transfer_settings.dma_settings.Instance = settings.channel_stream;
25+
_transfer_settings.dma_settings.Instance = _transfer_settings.channel_stream;
2426
// TODO - intialize the callbacks.
2527

2628
// Perform HAL Initialization first.
27-
HAL_DMA_Init(&dmaUpdate);
29+
HAL_DMA_Init(&_transfer_settings.dma_settings);
2830

2931
// Call dma prepare
30-
prepare_dma(&_transfer_settings);
32+
prepare_dma(&_transfer_settings.dma_settings);
3133
}
3234
}
3335

3436
/**
3537
* @brief Begin the DMA transfer
3638
* @retval None
3739
*/
38-
void DMATransferClass::begin(int bytes_to_transfer) {
39-
if (!prepared) {
40+
void DMATransferClass::begin(int bytes_to_transfer)
41+
{
42+
if (!_prepared) {
4043
// call dma prepare
41-
prepare_dma(&_transfer_settings);
44+
prepare_dma(&_transfer_settings.dma_settings);
4245
}
4346

4447
// Reset flags so it starts over
@@ -55,12 +58,13 @@ void DMATransferClass::begin(int bytes_to_transfer) {
5558
* @brief End the DMA transfer
5659
* @retval None
5760
*/
58-
void DMATransferClass::end() {
61+
void DMATransferClass::end()
62+
{
5963

60-
__HAL_DMA_DISABLE(&_transfer_settings);
64+
__HAL_DMA_DISABLE(&_transfer_settings.dma_settings);
6165

6266
if (_prepared) {
63-
end_dma(&_transfer_settings);
67+
end_dma(&_transfer_settings.dma_settings);
6468
_prepared = false;
6569
}
6670
}

libraries/DMA/src/DMATransfer.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@
66
typedef struct dmatransfer_s dmatransfer_t;
77

88
#if defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F7xx)
9-
typedef DMA_Stream_TypeDef DMA_CS_Selection;
9+
typedef DMA_Stream_TypeDef DMA_CS_Selection;
1010
#else
11-
typedef DMA_Channel_TypeDef DMA_CS_Selection;
11+
typedef DMA_Channel_TypeDef DMA_CS_Selection;
1212
#endif
1313

1414

1515
struct dmatransfer_s {
16-
/* Keep this the first member so casting back and forth is easy
17-
*/
18-
DMA_HandleTypeDef *dma_settings;
19-
DMA_CS_Selection channel_stream;
16+
/* Keep this the first member so casting back and forth is easy
17+
*/
18+
DMA_HandleTypeDef dma_settings;
19+
DMA_CS_Selection *channel_stream;
2020
uint32_t transfer_direction;
2121
boolean circular;
2222
void (*transferComplete)(DMA_HandleTypeDef *);

0 commit comments

Comments
 (0)