Skip to content

Commit 11e70af

Browse files
authored
Merge pull request #5 from heliorc/gyo-experiment
Gyo experiment into initial release to bring them together
2 parents fba0e71 + 7c844e6 commit 11e70af

14 files changed

+171
-38
lines changed

.vscode/settings.json

+2-1
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

+21
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

+9
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

+2-2
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

@@ -57,7 +57,7 @@ void run_command(bootloaderCommand_t* bl_command)
5757
void bootloader_start(void)
5858
{
5959
bootloaderCommand = BL_NONE;
60-
hal_init(BOOTLOADER_CHECK_PORT, BOOTLOADER_CHECK_PIN, GPIO_MODE_INPUT, GPIO_PULLDOWN, 0);
60+
hal_gpio_init(BOOTLOADER_CHECK_PORT, BOOTLOADER_CHECK_PIN, GPIO_MODE_INPUT, GPIO_PULLDOWN, 0);
6161
HAL_Delay(500);
6262
if (HAL_GPIO_ReadPin(BOOTLOADER_CHECK_PORT, BOOTLOADER_CHECK_PIN) == (uint32_t)GPIO_PIN_RESET)
6363
{

src/gpio/gpio_init.c

+7-6
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

+1-1
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

+3
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

-3
This file was deleted.

src/gyro/gyro_init.c

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
#include "includes.h"
22
#include "spi_init.h"
3+
#include "gyro_start.h"
4+
5+
6+
//SPI 2 is for the gyro
7+
//SPI 2 is for the f4/f3
8+
SPI_HandleTypeDef gyroSPIHandle;
9+
10+
DMA_HandleTypeDef hdmaGyroSPIRx;
11+
DMA_HandleTypeDef hdmaGyroSPITx;
312

4-
SPI_HandleTypeDef gyroHandle;
513

614
void gyro_configure(uint32_t baudRatePrescaler)
715
{
8-
spi_init(&gyroHandle, 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);
918
}
1019

1120
void gyro_init(void)

src/gyro/gyro_init.h

+6-1
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/gyro_start.c

+37
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,49 @@
11
#include "includes.h"
2+
#include "gyro_init.h"
3+
4+
DMA_HandleTypeDef gyroRx;
5+
DMA_HandleTypeDef gyroTx;
26

37
void gyro_passthrough_start()
48
{
9+
gyroTx->Instance GYRO
10+
11+
HAL_DMA_Init(&gyroTx)
12+
HAL_DMA_Init(&gyroRx)
13+
14+
515
while(1)
616
{
717
GPIOB->ODR = 0xFFFF;
818
//InlineDigitalHi(GPIOB, GPIO_PIN_5);
919
GPIOB->ODR = 0x0000;
1020
//InlineDigitalLo(GPIOB, GPIO_PIN_5);
1121
}
22+
}
23+
24+
25+
void imuRxCallback(void)
26+
{
27+
gyroData[0] = (int32_t)(int16_t)((gyroRxFrame.gyroX_H << 8) | gyroRxFrame.gyroX_L);
28+
gyroData[1] = (int32_t)(int16_t)((gyroRxFrame.gyroY_H << 8) | gyroRxFrame.gyroY_L);
29+
gyroData[2] = (int32_t)(int16_t)((gyroRxFrame.gyroZ_H << 8) | gyroRxFrame.gyroZ_L);
30+
31+
if (deviceWhoAmI == ICM20601_WHO_AM_I)
32+
InlineUpdateGyro( gyroData, 0.1219512195121951f ); // 1/8.2 is 0.1219512195121951
33+
else
34+
InlineUpdateGyro( gyroData, 0.060975609756098f ); // 1/16.4 is 0.060975609756098
35+
36+
//32,767
37+
if (accelUpdate)
38+
{
39+
accelData[0] = (int32_t)(int16_t)((gyroRxFrame.accelX_H << 8) | gyroRxFrame.accelX_L);
40+
accelData[1] = (int32_t)(int16_t)((gyroRxFrame.accelY_H << 8) | gyroRxFrame.accelY_L);
41+
accelData[2] = (int32_t)(int16_t)((gyroRxFrame.accelZ_H << 8) | gyroRxFrame.accelZ_L);
42+
43+
if (deviceWhoAmI == ICM20601_WHO_AM_I)
44+
InlineUpdateAcc( accelData, 0.0009765625f); // 1/1024 is 0.0009765625f
45+
else
46+
InlineUpdateAcc( accelData, 0.00048828125f); // 1/2048 is 0.00048828125f
47+
48+
}
1249
}

src/gyro/spi_init.c

+38
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

+2-1
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

+32-21
Original file line numberDiff line numberDiff line change
@@ -9,33 +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_MISO_PIN GPIO_PIN_14
19-
#define GYRO_MISO_PORT GPIOB
39+
#define GYRO_MISO_PIN GPIO_PIN_10
40+
#define GYRO_MISO_PORT GPIOA
2041
#define GYRO_MISO_ALTERNATE GPIO_AF5_SPI2
21-
#define GYRO_MOSI_PIN GPIO_PIN_15
22-
#define GYRO_MOSI_PORT GPIOB
42+
#define GYRO_MOSI_PIN GPIO_PIN_11
43+
#define GYRO_MOSI_PORT GPIOA
2344
#define GYRO_MOSI_ALTERNATE GPIO_AF5_SPI2
24-
#define GYRO_SCK_PIN GPIO_PIN_13
25-
#define GYRO_SCK_PORT GPIOB
45+
#define GYRO_SCK_PIN GPIO_PIN_1
46+
#define GYRO_SCK_PORT GPIOF
2647
#define GYRO_SCK_ALTERNATE GPIO_AF5_SPI2
27-
#define SPI2_ENABLED 1
28-
#define SPI2_HARDWARE_CS 0
29-
#define SPI2_CS_PIN 0
30-
#define SPI2_CS_PORT 0
31-
#define SPI2_MISO_PIN GPIO_PIN_10
32-
#define SPI2_MISO_PORT GPIOA
33-
#define SPI2_MOSI_PIN GPIO_PIN_11
34-
#define SPI2_MOSI_PORT GPIOA
35-
#define SPI2_SCK_PIN GPIO_PIN_1
36-
#define SPI2_SCL_PORT GPIOF
37-
3848

3949
#define BOOTLOADER_CHECK_PORT GPIOB
4050
#define BOOTLOADER_CHECK_PIN GPIO_PIN_5
51+
4152
#endif

0 commit comments

Comments
 (0)