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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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 */
#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
@@ -163,12 +191,12 @@ BEGIN_DECLS
/**
* Enable the quadspi peripheral.
*/
void quadspi_enable(void);
void quadspi_enable(uint32_t quadspi);
/**
* Disable the quadspi peripheral.
*/
void quadspi_disable(void);
void quadspi_disable(uint32_t quadspi);
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/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 */
#define QUADSPI_CCR_FRCM (1 << 29)
/**@}*/
/**@}*/
#endif

View File

@@ -1,12 +1,12 @@
#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;
}