stm32/h7: Fixed the QuadSPI headers not working with multiple peripehrals

This commit is contained in:
dragonmux
2024-04-10 05:23:00 +01:00
committed by Piotr Esden-Tempski
parent c38a37c387
commit 83e571db67
3 changed files with 67 additions and 23 deletions

View File

@@ -10,45 +10,73 @@
* @{ * @{
*/ */
/** QUADSPI Control register */ /** QUADSPI Control register */
#define QUADSPI_CR MMIO32(QUADSPI_BASE + 0x0U) #define QUADSPI_CR(quadspi_base) MMIO32(quadspi_base + 0x0U)
#define QUADSPI1_CR QUADSPI_CR(QUADSPI1_BASE)
#define QUADSPI2_CR QUADSPI_CR(QUADSPI2_BASE)
/** QUADSPI Device Configuration */ /** QUADSPI Device Configuration */
#define QUADSPI_DCR MMIO32(QUADSPI_BASE + 0x4U) #define QUADSPI_DCR(quadspi_base) MMIO32(quadspi_base + 0x4U)
#define QUADSPI1_DCR QUADSPI_DCR(QUADSPI1_BASE)
#define QUADSPI2_DCR QUADSPI_DCR(QUADSPI2_BASE)
/** QUADSPI Status Register */ /** QUADSPI Status Register */
#define QUADSPI_SR MMIO32(QUADSPI_BASE + 0x8U) #define QUADSPI_SR(quadspi_base) MMIO32(quadspi_base + 0x8U)
#define QUADSPI1_SR QUADSPI_SR(QUADSPI1_BASE)
#define QUADSPI2_SR QUADSPI_SR(QUADSPI2_BASE)
/** QUADSPI Flag Clear Register */ /** QUADSPI Flag Clear Register */
#define QUADSPI_FCR MMIO32(QUADSPI_BASE + 0xCU) #define QUADSPI_FCR(quadspi_base) MMIO32(quadspi_base + 0xCU)
#define QUADSPI1_FCR QUADSPI_FCR(QUADSPI1_BASE)
#define QUADSPI2_FCR QUADSPI_FCR(QUADSPI2_BASE)
/** QUADSPI Data Length Register */ /** QUADSPI Data Length Register */
#define QUADSPI_DLR MMIO32(QUADSPI_BASE + 0x10U) #define QUADSPI_DLR(quadspi_base) MMIO32(quadspi_base + 0x10U)
#define QUADSPI1_DLR QUADSPI_DLR(QUADSPI1_BASE)
#define QUADSPI2_DLR QUADSPI_DLR(QUADSPI2_BASE)
/** QUADSPI Communication Configuration Register */ /** QUADSPI Communication Configuration Register */
#define QUADSPI_CCR MMIO32(QUADSPI_BASE + 0x14U) #define QUADSPI_CCR(quadspi_base) MMIO32(quadspi_base + 0x14U)
#define QUADSPI1_CCR QUADSPI_CCR(QUADSPI1_BASE)
#define QUADSPI2_CCR QUADSPI_CCR(QUADSPI2_BASE)
/** QUADSPI address register */ /** QUADSPI address register */
#define QUADSPI_AR MMIO32(QUADSPI_BASE + 0x18U) #define QUADSPI_AR(quadspi_base) MMIO32(quadspi_base + 0x18U)
#define QUADSPI1_AR QUADSPI_AR(QUADSPI1_BASE)
#define QUADSPI2_AR QUADSPI_AR(QUADSPI2_BASE)
/** QUADSPI alternate bytes register */ /** QUADSPI alternate bytes register */
#define QUADSPI_ABR MMIO32(QUADSPI_BASE + 0x1CU) #define QUADSPI_ABR(quadspi_base) MMIO32(quadspi_base + 0x1CU)
#define QUADSPI1_ABR QUADSPI_ABR(QUADSPI1_BASE)
#define QUADSPI2_ABR QUADSPI_ABR(QUADSPI2_BASE)
/** QUADSPI data register */ /** QUADSPI data register */
#define QUADSPI_DR MMIO32(QUADSPI_BASE + 0x20U) #define QUADSPI_DR(quadspi_base) MMIO32(quadspi_base + 0x20U)
#define QUADSPI1_DR QUADSPI_DR(QUADSPI1_BASE)
#define QUADSPI2_DR QUADSPI_DR(QUADSPI2_BASE)
/** BYTE addressable version for fetching bytes from the interface */ /** BYTE addressable version for fetching bytes from the interface */
#define QUADSPI_BYTE_DR MMIO8(QUADSPI_BASE + 0x20U) #define QUADSPI_BYTE_DR(quadspi_base) MMIO8(quadspi_base + 0x20U)
#define QUADSPI1_BYTE_DR QUADSPI_BYTE_DR(QUADSPI1_BASE)
#define QUADSPI2_BYTE_DR QUADSPI_BYTE_DR(QUADSPI2_BASE)
/** QUADSPI polling status */ /** QUADSPI polling status */
#define QUADSPI_PSMKR MMIO32(QUADSPI_BASE + 0x24U) #define QUADSPI_PSMKR(quadspi_base) MMIO32(quadspi_base + 0x24U)
#define QUADSPI1_PSMKR QUADSPI_PSMKR(QUADSPI1_BASE)
#define QUADSPI2_PSMKR QUADSPI_PSMKR(QUADSPI2_BASE)
/** QUADSPI polling status match */ /** QUADSPI polling status match */
#define QUADSPI_PSMAR MMIO32(QUADSPI_BASE + 0x28U) #define QUADSPI_PSMAR(quadspi_base) MMIO32(quadspi_base + 0x28U)
#define QUADSPI1_PSMAR QUADSPI_PSMAR(QUADSPI1_BASE)
#define QUADSPI2_PSMAR QUADSPI_PSMAR(QUADSPI2_BASE)
/** QUADSPI polling interval register */ /** QUADSPI polling interval register */
#define QUADSPI_PIR MMIO32(QUADSPI_BASE + 0x2CU) #define QUADSPI_PIR(quadspi_base) MMIO32(quadspi_base + 0x2CU)
#define QUADSPI1_PIR QUADSPI_PIR(QUADSPI1_BASE)
#define QUADSPI2_PIR QUADSPI_PIR(QUADSPI2_BASE)
/** QUADSPI low power timeout */ /** QUADSPI low power timeout */
#define QUADSPI_LPTR MMIO32(QUADSPI_BASE + 0x30U) #define QUADSPI_LPTR(quadspi_base) MMIO32(quadspi_base + 0x30U)
#define QUADSPI1_LPTR QUADSPI_LPTR(QUADSPI1_BASE)
#define QUADSPI2_LPTR QUADSPI_LPTR(QUADSPI2_BASE)
/**@}*/ /**@}*/
#define QUADSPI_CR_PRESCALE_MASK 0xff #define QUADSPI_CR_PRESCALE_MASK 0xff
@@ -163,12 +191,12 @@ BEGIN_DECLS
/** /**
* Enable the quadspi peripheral. * Enable the quadspi peripheral.
*/ */
void quadspi_enable(void); void quadspi_enable(uint32_t quadspi);
/** /**
* Disable the quadspi peripheral. * Disable the quadspi peripheral.
*/ */
void quadspi_disable(void); void quadspi_disable(uint32_t quadspi);
END_DECLS END_DECLS

View File

@@ -5,12 +5,28 @@
* @{ * @{
*/ */
#pragma once #ifndef LIBOPENCM3_QUADSPI_H
#define LIBOPENCM3_QUADSPI_H
#include <libopencm3/stm32/memorymap.h> #include <libopencm3/stm32/memorymap.h>
#include <libopencm3/stm32/common/quadspi_common_v1.h> #include <libopencm3/stm32/common/quadspi_common_v1.h>
/**@{*/
/** @defgroup quadspi_reg_base QuadSPI register base addresses
* Holds all the QuadSPI peripherals supported.
* @{
*/
#define QUADSPI1 QUADSPI1_BASE
#define QUADSPI2 QUADSPI2_BASE
/**@}*/
BEGIN_DECLS
END_DECLS
/** Enable free running clock mode, for testing */ /** Enable free running clock mode, for testing */
#define QUADSPI_CCR_FRCM (1 << 29) #define QUADSPI_CCR_FRCM (1 << 29)
/**@}*/ /**@}*/
#endif

View File

@@ -1,12 +1,12 @@
#include <libopencm3/stm32/quadspi.h> #include <libopencm3/stm32/quadspi.h>
void quadspi_enable(void) void quadspi_enable(uint32_t quadspi)
{ {
QUADSPI_CR |= QUADSPI_CR_EN; QUADSPI_CR(quadspi) |= QUADSPI_CR_EN;
} }
void quadspi_disable(void) void quadspi_disable(uint32_t quadspi)
{ {
QUADSPI_CR &= ~QUADSPI_CR_EN; QUADSPI_CR(quadspi) &= ~QUADSPI_CR_EN;
} }