Skip to content

Commit 7c844e6

Browse files
committed
add board_comm driver, add DMA to SPI, correct pinout for FF7 F3, rename hal_init.c/h
1 parent 1acd648 commit 7c844e6

13 files changed

+132
-39
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"passthrough_init.h": "c",
88
"gyro_init.h": "c",
99
"board_init.h": "c",
10-
"fix16.h": "c"
10+
"fix16.h": "c",
11+
"hal_gpio_init.h": "c"
1112
}
1213
}

src/board_comm/board_comm_init.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include "includes.h"
2+
#include "spi_init.h"
3+
4+
5+
//SPI 2 is for the gyro
6+
//SPI 2 is for the f4/f3
7+
SPI_HandleTypeDef boardCommSPIHandle;
8+
9+
DMA_HandleTypeDef hdmaBoardCommSPIRx;
10+
DMA_HandleTypeDef hdmaBoardCommSPITx;
11+
12+
void board_comm_init(void)
13+
{
14+
spi_init(&boardCommSPIHandle, BOARD_COMM_SPI, SPI_BAUDRATEPRESCALER_2, SPI_MODE_SLAVE, BOARD_COMM_SPI_IRQn, 1, 3);
15+
spi_dma_init(&boardCommSPIHandle, &hdmaBoardCommSPIRx, &hdmaBoardCommSPITx, BOARD_COMM_RX_DMA, BOARD_COMM_TX_DMA);
16+
17+
if(!BOARD_COMM_CS_HARDWARE)
18+
{
19+
HAL_GPIO_WritePin(GYRO_CS_PORT, GYRO_CS_PIN, GPIO_PIN_SET);
20+
}
21+
}

src/board_comm/board_comm_init.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#pragma once
2+
#include "includes.h"
3+
4+
extern SPI_HandleTypeDef boardCommSPIHandle;
5+
6+
extern DMA_HandleTypeDef hdmaBoardCommSPIRx;
7+
extern DMA_HandleTypeDef hdmaBoardCommSPITx;
8+
9+
extern void board_comm_init(void);

src/bootloader/bootloader.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include "includes.h"
22
#include "boothandler.h"
33
#include "bootloader_commands.h"
4-
#include "hal_init.h"
4+
#include "hal_gpio_init.h"
55
#include "flash.h"
66
#include "report.h"
77

@@ -46,7 +46,7 @@ static void run_command(bootloaderCommand_t bl_command)
4646
void bootloader_start(void)
4747
{
4848
bootloaderCommand = BL_NONE;
49-
hal_init(BOOTLOADER_CHECK_PORT, BOOTLOADER_CHECK_PIN, GPIO_MODE_INPUT, GPIO_PULLDOWN, 0);
49+
hal_gpio_init(BOOTLOADER_CHECK_PORT, BOOTLOADER_CHECK_PIN, GPIO_MODE_INPUT, GPIO_PULLDOWN, 0);
5050
HAL_Delay(500);
5151
if (HAL_GPIO_ReadPin(BOOTLOADER_CHECK_PORT, BOOTLOADER_CHECK_PIN) == (uint32_t)GPIO_PIN_RESET)
5252
{

src/gpio/gpio_init.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
#include "includes.h"
2-
#include "hal_init.h"
2+
#include "hal_gpio_init.h"
33

44
void gpio_init(void)
55
{
66
uint32_t alt = 0;
77
if(GYRO_CS_HARDWARE)
88
{
99
alt = GYRO_CS_ALTERNATE;
10-
}
11-
hal_init(GYRO_CS_PORT, GYRO_CS_PIN, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, alt);
12-
hal_init(GYRO_SCK_PORT, GYRO_SCK_PIN, GPIO_MODE_AF_PP, GPIO_PULLDOWN, GYRO_SCK_ALTERNATE);
13-
hal_init(GYRO_MISO_PORT, GYRO_MISO_PIN, GPIO_MODE_AF_PP, GPIO_NOPULL, GYRO_MISO_ALTERNATE);
14-
hal_init(GYRO_MOSI_PORT, GYRO_MOSI_PIN, GPIO_MODE_AF_PP, GPIO_NOPULL, GYRO_MOSI_ALTERNATE);
10+
}
11+
//todo: not a good name, maybe call it hal_gpio_init_wrapper
12+
hal_gpio_init_pin(GYRO_CS_PORT, GYRO_CS_PIN, GPIO_MODE_OUTPUT_PP, GPIO_PULLUP, alt);
13+
hal_gpio_init_pin(GYRO_SCK_PORT, GYRO_SCK_PIN, GPIO_MODE_AF_PP, GPIO_PULLDOWN, GYRO_SCK_ALTERNATE);
14+
hal_gpio_init_pin(GYRO_MISO_PORT, GYRO_MISO_PIN, GPIO_MODE_AF_PP, GPIO_NOPULL, GYRO_MISO_ALTERNATE);
15+
hal_gpio_init_pin(GYRO_MOSI_PORT, GYRO_MOSI_PIN, GPIO_MODE_AF_PP, GPIO_NOPULL, GYRO_MOSI_ALTERNATE);
1516
}

src/gpio/hal_init.c renamed to src/gpio/hal_gpio_init.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "includes.h"
22

3-
void hal_init(GPIO_TypeDef* port, uint16_t pin, uint32_t mode, uint32_t pull, uint32_t alternate)
3+
void hal_gpio_init_pin(GPIO_TypeDef* port, uint16_t pin, uint32_t mode, uint32_t pull, uint32_t alternate)
44
{
55
HAL_GPIO_DeInit(port, pin);
66
GPIO_InitTypeDef GPIO_InitStruct;

src/gpio/hal_gpio_init.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#include "includes.h"
2+
3+
extern void hal_gpio_init_pin(GPIO_TypeDef* port, uint16_t pin, uint32_t mode, uint32_t pull, uint32_t alternate);

src/gpio/hal_init.h

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/gyro/gyro_init.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,19 @@
22
#include "spi_init.h"
33
#include "gyro_start.h"
44

5+
6+
//SPI 2 is for the gyro
7+
//SPI 2 is for the f4/f3
58
SPI_HandleTypeDef gyroSPIHandle;
69

10+
DMA_HandleTypeDef hdmaGyroSPIRx;
11+
DMA_HandleTypeDef hdmaGyroSPITx;
12+
13+
714
void gyro_configure(uint32_t baudRatePrescaler)
815
{
9-
spi_init(&gyroSPIHandle, GYRO_SPI, baudRatePrescaler, SPI_MODE_MASTER, GYRO_SPI_IRQn, 0, 0);
16+
spi_init(&gyroSPIHandle, GYRO_SPI, baudRatePrescaler, SPI_MODE_MASTER, GYRO_SPI_IRQn, 1, 2);
17+
spi_dma_init(&gyroSPIHandle, &hdmaGyroSPIRx, &hdmaGyroSPITx, GYRO_RX_DMA, GYRO_TX_DMA);
1018
}
1119

1220
void gyro_init(void)

src/gyro/gyro_init.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
#pragma once
22
#include "includes.h"
33

4-
extern void gyro_init(void);
4+
extern SPI_HandleTypeDef gyroSPIHandle;
5+
6+
extern DMA_HandleTypeDef hdmaGyroSPIRx;
7+
extern DMA_HandleTypeDef hdmaGyroSPITx;
8+
9+
extern void gyro_init(void);

src/gyro/spi_init.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,41 @@ void spi_init(SPI_HandleTypeDef* spiHandle, SPI_TypeDef* instance, uint32_t baud
3535
HAL_NVIC_SetPriority(SPI1_IRQn, irqp, irqsp);
3636
HAL_NVIC_EnableIRQ(SPI1_IRQn);
3737
}
38+
39+
void spi_dma_init(SPI_HandleTypeDef* spiHandle, DMA_HandleTypeDef* hdma_spi_rx, DMA_HandleTypeDef* hdma_spi_tx, DMA_Channel_TypeDef rxDmaChannel, DMA_Channel_TypeDef txDmaChannel)
40+
{
41+
42+
(*hdma_spi_rx).Instance = rxDmaChannel;
43+
(*hdma_spi_rx).Init.Direction = DMA_PERIPH_TO_MEMORY;
44+
(*hdma_spi_rx).Init.PeriphInc = DMA_PINC_DISABLE;
45+
(*hdma_spi_rx).Init.MemInc = DMA_MINC_ENABLE;
46+
(*hdma_spi_rx).Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
47+
(*hdma_spi_rx).Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
48+
(*hdma_spi_rx).Init.Mode = DMA_NORMAL;
49+
(*hdma_spi_rx).Init.Priority = DMA_PRIORITY_LOW;
50+
if (HAL_DMA_Init(hdma_spi_rx) != HAL_OK)
51+
{
52+
//todo error handler
53+
while(1);
54+
}
55+
56+
__HAL_LINKDMA(spiHandle,hdmarx,*hdma_spi_rx);
57+
58+
/* SPI3_TX Init */
59+
(*hdma_spi_tx).Instance = txDmaChannel;
60+
(*hdma_spi_tx).Init.Direction = DMA_MEMORY_TO_PERIPH;
61+
(*hdma_spi_tx).Init.PeriphInc = DMA_PINC_DISABLE;
62+
(*hdma_spi_tx).Init.MemInc = DMA_MINC_ENABLE;
63+
(*hdma_spi_tx).Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
64+
(*hdma_spi_tx).Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
65+
(*hdma_spi_tx).Init.Mode = DMA_NORMAL;
66+
(*hdma_spi_tx).Init.Priority = DMA_PRIORITY_LOW;
67+
if (HAL_DMA_Init(hdma_spi_tx) != HAL_OK)
68+
{
69+
//todo error handler
70+
while(1);
71+
}
72+
73+
__HAL_LINKDMA(spiHandle,hdmatx,*hdma_spi_tx);
74+
75+
}

src/gyro/spi_init.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
#include "includes.h"
33

44
//extern void spi_init(SPI_HandleTypeDef* instance, uint32_t baudRatePrescaler, uint32_t spi_mode, uint32_t irqp, uint32_t irqsp);
5-
extern void spi_init(SPI_HandleTypeDef* spiHandle, SPI_TypeDef* instance, uint32_t baudscaler, uint32_t spi_mode, uint32_t irqp, uint32_t irqsp);
5+
extern void spi_init(SPI_HandleTypeDef* spiHandle, SPI_TypeDef* instance, uint32_t baudscaler, uint32_t spi_mode, uint32_t irqp, uint32_t irqsp);
6+
extern void spi_dma_init(SPI_HandleTypeDef* spiHandle, DMA_HandleTypeDef* hdma_spi_rx, DMA_HandleTypeDef* hdma_spi_tx, DMA_Channel_TypeDef rxDmaChannel, DMA_Channel_TypeDef txDmaChannel);

src/target/default.h

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,44 @@
99
#elif defined(MOTOLAB)
1010
#include "motolab.h"
1111
#else
12-
#define GYRO_SPI SPI3
13-
#define GYRO_SPI_IRQn SPI3_IRQn
12+
13+
#define BOARD_COMM_SPI SPI3
14+
#define BOARD_COMM_SPI_IRQn SPI3_IRQn
15+
#define BOARD_COMM_RX_DMA DMA1_Channel2
16+
#define BOARD_COMM_TX_DMA DMA1_Channel3
17+
#define BOARD_COMM_CS_HARDWARE 1
18+
#define BOARD_COMM_CS_PIN GPIO_PIN_4
19+
#define BOARD_COMM_CS_PORT GPIOA
20+
#define BOARD_COMM_CS_ALTERNATE GPIO_AF5_SPI3
21+
#define BOARD_COMM_MISO_PIN GPIO_PIN_4
22+
#define BOARD_COMM_MISO_PORT GPIOB
23+
#define BOARD_COMM_MISO_ALTERNATE GPIO_AF5_SPI3
24+
#define BOARD_COMM_MOSI_PIN GPIO_PIN_5
25+
#define BOARD_COMM_MOSI_PORT GPIOB
26+
#define BOARD_COMM_MOSI_ALTERNATE GPIO_AF5_SPI3
27+
#define BOARD_COMM_SCK_PIN GPIO_PIN_3
28+
#define BOARD_COMM_SCK_PORT GPIOB
29+
#define BOARD_COMM_SCK_ALTERNATE GPIO_AF5_SPI3
30+
31+
#define GYRO_SPI SPI2
32+
#define GYRO_SPI_IRQn SPI2_IRQn
33+
#define GYRO_RX_DMA DMA1_Channel4
34+
#define GYRO_TX_DMA DMA1_Channel5
1435
#define GYRO_CS_HARDWARE 0
15-
#define GYRO_CS_PIN GPIO_PIN_12
16-
#define GYRO_CS_PORT GPIOB
36+
#define GYRO_CS_PIN GPIO_PIN_9
37+
#define GYRO_CS_PORT GPIOA
1738
#define GYRO_CS_ALTERNATE GPIO_AF5_SPI2
18-
#define GYRO_RX_DMA DMA1_Channel1
19-
#define GYRO_TX_DMA DMA1_Channel2
20-
#define GYRO_MISO_PIN GPIO_PIN_14
21-
#define GYRO_MISO_PORT GPIOB
39+
#define GYRO_MISO_PIN GPIO_PIN_10
40+
#define GYRO_MISO_PORT GPIOA
2241
#define GYRO_MISO_ALTERNATE GPIO_AF5_SPI2
23-
#define GYRO_MOSI_PIN GPIO_PIN_15
24-
#define GYRO_MOSI_PORT GPIOB
42+
#define GYRO_MOSI_PIN GPIO_PIN_11
43+
#define GYRO_MOSI_PORT GPIOA
2544
#define GYRO_MOSI_ALTERNATE GPIO_AF5_SPI2
26-
#define GYRO_SCK_PIN GPIO_PIN_13
27-
#define GYRO_SCK_PORT GPIOB
45+
#define GYRO_SCK_PIN GPIO_PIN_1
46+
#define GYRO_SCK_PORT GPIOF
2847
#define GYRO_SCK_ALTERNATE GPIO_AF5_SPI2
29-
#define SPI2_ENABLED 1
30-
#define SPI2_HARDWARE_CS 0
31-
#define SPI2_CS_PIN 0
32-
#define SPI2_CS_PORT 0
33-
#define SPI2_MISO_PIN GPIO_PIN_10
34-
#define SPI2_MISO_PORT GPIOA
35-
#define SPI2_MOSI_PIN GPIO_PIN_11
36-
#define SPI2_MOSI_PORT GPIOA
37-
#define SPI2_SCK_PIN GPIO_PIN_1
38-
#define SPI2_SCL_PORT GPIOF
39-
4048

4149
#define BOOTLOADER_CHECK_PORT GPIOB
4250
#define BOOTLOADER_CHECK_PIN GPIO_PIN_5
51+
4352
#endif

0 commit comments

Comments
 (0)