/* Copyright 2023 Dual Tachyon * https://github.com/DualTachyon * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef HARDWARE_DP32G030_SPI_H #define HARDWARE_DP32G030_SPI_H #if !defined(__ASSEMBLY__) #include #endif /* -------- SPI0 -------- */ #define SPI0_BASE_ADDR 0x400B8000U #define SPI0_BASE_SIZE 0x00000800U #define SPI0 ((volatile SPI_Port_t *)SPI0_BASE_ADDR) /* -------- SPI1 -------- */ #define SPI1_BASE_ADDR 0x400B8800U #define SPI1_BASE_SIZE 0x00000800U #define SPI1 ((volatile SPI_Port_t *)SPI1_BASE_ADDR) /* -------- SPI -------- */ typedef struct { uint32_t CR; uint32_t WDR; uint32_t RDR; uint32_t Reserved_000C[1]; uint32_t IE; uint32_t IF; uint32_t FIFOST; } SPI_Port_t; #define SPI_CR_SPR_SHIFT 0 #define SPI_CR_SPR_WIDTH 3 #define SPI_CR_SPR_MASK (((1U << SPI_CR_SPR_WIDTH) - 1U) << SPI_CR_SPR_SHIFT) #define SPI_CR_SPR_VALUE_FPCLK_DIV_4 0U #define SPI_CR_SPR_BITS_FPCLK_DIV_4 (SPI_CR_SPR_VALUE_FPCLK_DIV_4 << SPI_CR_SPR_SHIFT) #define SPI_CR_SPR_VALUE_FPCLK_DIV_8 1U #define SPI_CR_SPR_BITS_FPCLK_DIV_8 (SPI_CR_SPR_VALUE_FPCLK_DIV_8 << SPI_CR_SPR_SHIFT) #define SPI_CR_SPR_VALUE_FPCLK_DIV_16 2U #define SPI_CR_SPR_BITS_FPCLK_DIV_16 (SPI_CR_SPR_VALUE_FPCLK_DIV_16 << SPI_CR_SPR_SHIFT) #define SPI_CR_SPR_VALUE_FPCLK_DIV_32 3U #define SPI_CR_SPR_BITS_FPCLK_DIV_32 (SPI_CR_SPR_VALUE_FPCLK_DIV_32 << SPI_CR_SPR_SHIFT) #define SPI_CR_SPR_VALUE_FPCLK_DIV_64 4U #define SPI_CR_SPR_BITS_FPCLK_DIV_64 (SPI_CR_SPR_VALUE_FPCLK_DIV_64 << SPI_CR_SPR_SHIFT) #define SPI_CR_SPR_VALUE_FPCLK_DIV_128 5U #define SPI_CR_SPR_BITS_FPCLK_DIV_128 (SPI_CR_SPR_VALUE_FPCLK_DIV_128 << SPI_CR_SPR_SHIFT) #define SPI_CR_SPR_VALUE_FPCLK_DIV_256 6U #define SPI_CR_SPR_BITS_FPCLK_DIV_256 (SPI_CR_SPR_VALUE_FPCLK_DIV_256 << SPI_CR_SPR_SHIFT) #define SPI_CR_SPR_VALUE_FPCLK_DIV_512 7U #define SPI_CR_SPR_BITS_FPCLK_DIV_512 (SPI_CR_SPR_VALUE_FPCLK_DIV_512 << SPI_CR_SPR_SHIFT) #define SPI_CR_SPE_SHIFT 3 #define SPI_CR_SPE_WIDTH 1 #define SPI_CR_SPE_MASK (((1U << SPI_CR_SPE_WIDTH) - 1U) << SPI_CR_SPE_SHIFT) #define SPI_CR_SPE_VALUE_DISABLE 0U #define SPI_CR_SPE_BITS_DISABLE (SPI_CR_SPE_VALUE_DISABLE << SPI_CR_SPE_SHIFT) #define SPI_CR_SPE_VALUE_ENABLE 1U #define SPI_CR_SPE_BITS_ENABLE (SPI_CR_SPE_VALUE_ENABLE << SPI_CR_SPE_SHIFT) #define SPI_CR_CPHA_SHIFT 4 #define SPI_CR_CPHA_WIDTH 1 #define SPI_CR_CPHA_MASK (((1U << SPI_CR_CPHA_WIDTH) - 1U) << SPI_CR_CPHA_SHIFT) #define SPI_CR_CPOL_SHIFT 5 #define SPI_CR_CPOL_WIDTH 1 #define SPI_CR_CPOL_MASK (((1U << SPI_CR_CPOL_WIDTH) - 1U) << SPI_CR_CPOL_SHIFT) #define SPI_CR_MSTR_SHIFT 6 #define SPI_CR_MSTR_WIDTH 1 #define SPI_CR_MSTR_MASK (((1U << SPI_CR_MSTR_WIDTH) - 1U) << SPI_CR_MSTR_SHIFT) #define SPI_CR_LSB_SHIFT 7 #define SPI_CR_LSB_WIDTH 1 #define SPI_CR_LSB_MASK (((1U << SPI_CR_LSB_WIDTH) - 1U) << SPI_CR_LSB_SHIFT) #define SPI_CR_CPHA_DATA_HOLD_S_SHIFT 8 #define SPI_CR_CPHA_DATA_HOLD_S_WIDTH 4 #define SPI_CR_CPHA_DATA_HOLD_S_MASK (((1U << SPI_CR_CPHA_DATA_HOLD_S_WIDTH) - 1U) << SPI_CR_CPHA_DATA_HOLD_S_SHIFT) #define SPI_CR_MSR_SSN_SHIFT 12 #define SPI_CR_MSR_SSN_WIDTH 1 #define SPI_CR_MSR_SSN_MASK (((1U << SPI_CR_MSR_SSN_WIDTH) - 1U) << SPI_CR_MSR_SSN_SHIFT) #define SPI_CR_MSR_SSN_VALUE_DISABLE 0U #define SPI_CR_MSR_SSN_BITS_DISABLE (SPI_CR_MSR_SSN_VALUE_DISABLE << SPI_CR_MSR_SSN_SHIFT) #define SPI_CR_MSR_SSN_VALUE_ENABLE 1U #define SPI_CR_MSR_SSN_BITS_ENABLE (SPI_CR_MSR_SSN_VALUE_ENABLE << SPI_CR_MSR_SSN_SHIFT) #define SPI_CR_RXDMAEN_SHIFT 13 #define SPI_CR_RXDMAEN_WIDTH 1 #define SPI_CR_RXDMAEN_MASK (((1U << SPI_CR_RXDMAEN_WIDTH) - 1U) << SPI_CR_RXDMAEN_SHIFT) #define SPI_CR_TXDMAEN_SHIFT 14 #define SPI_CR_TXDMAEN_WIDTH 1 #define SPI_CR_TXDMAEN_MASK (((1U << SPI_CR_TXDMAEN_WIDTH) - 1U) << SPI_CR_TXDMAEN_SHIFT) #define SPI_CR_RF_CLR_SHIFT 15 #define SPI_CR_RF_CLR_WIDTH 1 #define SPI_CR_RF_CLR_MASK (((1U << SPI_CR_RF_CLR_WIDTH) - 1U) << SPI_CR_RF_CLR_SHIFT) #define SPI_CR_TF_CLR_SHIFT 16 #define SPI_CR_TF_CLR_WIDTH 1 #define SPI_CR_TF_CLR_MASK (((1U << SPI_CR_TF_CLR_WIDTH) - 1U) << SPI_CR_TF_CLR_SHIFT) #define SPI_IE_RXFIFO_OVF_SHIFT 0 #define SPI_IE_RXFIFO_OVF_WIDTH 1 #define SPI_IE_RXFIFO_OVF_MASK (((1U << SPI_IE_RXFIFO_OVF_WIDTH) - 1U) << SPI_IE_RXFIFO_OVF_SHIFT) #define SPI_IE_RXFIFO_OVF_VALUE_DISABLE 0U #define SPI_IE_RXFIFO_OVF_BITS_DISABLE (SPI_IE_RXFIFO_OVF_VALUE_DISABLE << SPI_IE_RXFIFO_OVF_SHIFT) #define SPI_IE_RXFIFO_OVF_VALUE_ENABLE 1U #define SPI_IE_RXFIFO_OVF_BITS_ENABLE (SPI_IE_RXFIFO_OVF_VALUE_ENABLE << SPI_IE_RXFIFO_OVF_SHIFT) #define SPI_IE_RXFIFO_FULL_SHIFT 1 #define SPI_IE_RXFIFO_FULL_WIDTH 1 #define SPI_IE_RXFIFO_FULL_MASK (((1U << SPI_IE_RXFIFO_FULL_WIDTH) - 1U) << SPI_IE_RXFIFO_FULL_SHIFT) #define SPI_IE_RXFIFO_FULL_VALUE_DISABLE 0U #define SPI_IE_RXFIFO_FULL_BITS_DISABLE (SPI_IE_RXFIFO_FULL_VALUE_DISABLE << SPI_IE_RXFIFO_FULL_SHIFT) #define SPI_IE_RXFIFO_FULL_VALUE_ENABLE 1U #define SPI_IE_RXFIFO_FULL_BITS_ENABLE (SPI_IE_RXFIFO_FULL_VALUE_ENABLE << SPI_IE_RXFIFO_FULL_SHIFT) #define SPI_IE_RXFIFO_HFULL_SHIFT 2 #define SPI_IE_RXFIFO_HFULL_WIDTH 1 #define SPI_IE_RXFIFO_HFULL_MASK (((1U << SPI_IE_RXFIFO_HFULL_WIDTH) - 1U) << SPI_IE_RXFIFO_HFULL_SHIFT) #define SPI_IE_RXFIFO_HFULL_VALUE_DISABLE 0U #define SPI_IE_RXFIFO_HFULL_BITS_DISABLE (SPI_IE_RXFIFO_HFULL_VALUE_DISABLE << SPI_IE_RXFIFO_HFULL_SHIFT) #define SPI_IE_RXFIFO_HFULL_VALUE_ENABLE 1U #define SPI_IE_RXFIFO_HFULL_BITS_ENABLE (SPI_IE_RXFIFO_HFULL_VALUE_ENABLE << SPI_IE_RXFIFO_HFULL_SHIFT) #define SPI_IE_TXFIFO_EMPTY_SHIFT 3 #define SPI_IE_TXFIFO_EMPTY_WIDTH 1 #define SPI_IE_TXFIFO_EMPTY_MASK (((1U << SPI_IE_TXFIFO_EMPTY_WIDTH) - 1U) << SPI_IE_TXFIFO_EMPTY_SHIFT) #define SPI_IE_TXFIFO_EMPTY_VALUE_DISABLE 0U #define SPI_IE_TXFIFO_EMPTY_BITS_DISABLE (SPI_IE_TXFIFO_EMPTY_VALUE_DISABLE << SPI_IE_TXFIFO_EMPTY_SHIFT) #define SPI_IE_TXFIFO_EMPTY_VALUE_ENABLE 1U #define SPI_IE_TXFIFO_EMPTY_BITS_ENABLE (SPI_IE_TXFIFO_EMPTY_VALUE_ENABLE << SPI_IE_TXFIFO_EMPTY_SHIFT) #define SPI_IE_TXFIFO_HFULL_SHIFT 4 #define SPI_IE_TXFIFO_HFULL_WIDTH 1 #define SPI_IE_TXFIFO_HFULL_MASK (((1U << SPI_IE_TXFIFO_HFULL_WIDTH) - 1U) << SPI_IE_TXFIFO_HFULL_SHIFT) #define SPI_IE_TXFIFO_HFULL_VALUE_DISABLE 0U #define SPI_IE_TXFIFO_HFULL_BITS_DISABLE (SPI_IE_TXFIFO_HFULL_VALUE_DISABLE << SPI_IE_TXFIFO_HFULL_SHIFT) #define SPI_IE_TXFIFO_HFULL_VALUE_ENABLE 1U #define SPI_IE_TXFIFO_HFULL_BITS_ENABLE (SPI_IE_TXFIFO_HFULL_VALUE_ENABLE << SPI_IE_TXFIFO_HFULL_SHIFT) #define SPI_FIFOST_RFE_SHIFT 0 #define SPI_FIFOST_RFE_WIDTH 1 #define SPI_FIFOST_RFE_MASK (((1U << SPI_FIFOST_RFE_WIDTH) - 1U) << SPI_FIFOST_RFE_SHIFT) #define SPI_FIFOST_RFE_VALUE_NOT_EMPTY 0U #define SPI_FIFOST_RFE_BITS_NOT_EMPTY (SPI_FIFOST_RFE_VALUE_NOT_EMPTY << SPI_FIFOST_RFE_SHIFT) #define SPI_FIFOST_RFE_VALUE_EMPTY 1U #define SPI_FIFOST_RFE_BITS_EMPTY (SPI_FIFOST_RFE_VALUE_EMPTY << SPI_FIFOST_RFE_SHIFT) #define SPI_FIFOST_RFF_SHIFT 1 #define SPI_FIFOST_RFF_WIDTH 1 #define SPI_FIFOST_RFF_MASK (((1U << SPI_FIFOST_RFF_WIDTH) - 1U) << SPI_FIFOST_RFF_SHIFT) #define SPI_FIFOST_RFF_VALUE_NOT_FULL 0U #define SPI_FIFOST_RFF_BITS_NOT_FULL (SPI_FIFOST_RFF_VALUE_NOT_FULL << SPI_FIFOST_RFF_SHIFT) #define SPI_FIFOST_RFF_VALUE_FULL 1U #define SPI_FIFOST_RFF_BITS_FULL (SPI_FIFOST_RFF_VALUE_FULL << SPI_FIFOST_RFF_SHIFT) #define SPI_FIFOST_RFHF_SHIFT 2 #define SPI_FIFOST_RFHF_WIDTH 1 #define SPI_FIFOST_RFHF_MASK (((1U << SPI_FIFOST_RFHF_WIDTH) - 1U) << SPI_FIFOST_RFHF_SHIFT) #define SPI_FIFOST_RFHF_VALUE_NOT_HALF_FULL 0U #define SPI_FIFOST_RFHF_BITS_NOT_HALF_FULL (SPI_FIFOST_RFHF_VALUE_NOT_HALF_FULL << SPI_FIFOST_RFHF_SHIFT) #define SPI_FIFOST_RFHF_VALUE_HALF_FULL 1U #define SPI_FIFOST_RFHF_BITS_HALF_FULL (SPI_FIFOST_RFHF_VALUE_HALF_FULL << SPI_FIFOST_RFHF_SHIFT) #define SPI_FIFOST_TFE_SHIFT 3 #define SPI_FIFOST_TFE_WIDTH 1 #define SPI_FIFOST_TFE_MASK (((1U << SPI_FIFOST_TFE_WIDTH) - 1U) << SPI_FIFOST_TFE_SHIFT) #define SPI_FIFOST_TFE_VALUE_NOT_EMPTY 0U #define SPI_FIFOST_TFE_BITS_NOT_EMPTY (SPI_FIFOST_TFE_VALUE_NOT_EMPTY << SPI_FIFOST_TFE_SHIFT) #define SPI_FIFOST_TFE_VALUE_EMPTY 1U #define SPI_FIFOST_TFE_BITS_EMPTY (SPI_FIFOST_TFE_VALUE_EMPTY << SPI_FIFOST_TFE_SHIFT) #define SPI_FIFOST_TFF_SHIFT 4 #define SPI_FIFOST_TFF_WIDTH 1 #define SPI_FIFOST_TFF_MASK (((1U << SPI_FIFOST_TFF_WIDTH) - 1U) << SPI_FIFOST_TFF_SHIFT) #define SPI_FIFOST_TFF_VALUE_NOT_FULL 0U #define SPI_FIFOST_TFF_BITS_NOT_FULL (SPI_FIFOST_TFF_VALUE_NOT_FULL << SPI_FIFOST_TFF_SHIFT) #define SPI_FIFOST_TFF_VALUE_FULL 1U #define SPI_FIFOST_TFF_BITS_FULL (SPI_FIFOST_TFF_VALUE_FULL << SPI_FIFOST_TFF_SHIFT) #define SPI_FIFOST_TFHF_SHIFT 5 #define SPI_FIFOST_TFHF_WIDTH 1 #define SPI_FIFOST_TFHF_MASK (((1U << SPI_FIFOST_TFHF_WIDTH) - 1U) << SPI_FIFOST_TFHF_SHIFT) #define SPI_FIFOST_TFHF_VALUE_NOT_HALF_FULL 0U #define SPI_FIFOST_TFHF_BITS_NOT_HALF_FULL (SPI_FIFOST_TFHF_VALUE_NOT_HALF_FULL << SPI_FIFOST_TFHF_SHIFT) #define SPI_FIFOST_TFHF_VALUE_HALF_FULL 1U #define SPI_FIFOST_TFHF_BITS_HALF_FULL (SPI_FIFOST_TFHF_VALUE_HALF_FULL << SPI_FIFOST_TFHF_SHIFT) #define SPI_FIFOST_RF_LEVEL_SHIFT 6 #define SPI_FIFOST_RF_LEVEL_WIDTH 3 #define SPI_FIFOST_RF_LEVEL_MASK (((1U << SPI_FIFOST_RF_LEVEL_WIDTH) - 1U) << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_RF_LEVEL_VALUE_0_BYTE 0U #define SPI_FIFOST_RF_LEVEL_BITS_0_BYTE (SPI_FIFOST_RF_LEVEL_VALUE_0_BYTE << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_RF_LEVEL_VALUE_1_BYTE 1U #define SPI_FIFOST_RF_LEVEL_BITS_1_BYTE (SPI_FIFOST_RF_LEVEL_VALUE_1_BYTE << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_RF_LEVEL_VALUE_2_BYTE 2U #define SPI_FIFOST_RF_LEVEL_BITS_2_BYTE (SPI_FIFOST_RF_LEVEL_VALUE_2_BYTE << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_RF_LEVEL_VALUE_3_BYTE 3U #define SPI_FIFOST_RF_LEVEL_BITS_3_BYTE (SPI_FIFOST_RF_LEVEL_VALUE_3_BYTE << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_RF_LEVEL_VALUE_4_BYTE 4U #define SPI_FIFOST_RF_LEVEL_BITS_4_BYTE (SPI_FIFOST_RF_LEVEL_VALUE_4_BYTE << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_RF_LEVEL_VALUE_5_BYTE 5U #define SPI_FIFOST_RF_LEVEL_BITS_5_BYTE (SPI_FIFOST_RF_LEVEL_VALUE_5_BYTE << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_RF_LEVEL_VALUE_6_BYTE 6U #define SPI_FIFOST_RF_LEVEL_BITS_6_BYTE (SPI_FIFOST_RF_LEVEL_VALUE_6_BYTE << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_RF_LEVEL_VALUE_7_BYTE 7U #define SPI_FIFOST_RF_LEVEL_BITS_7_BYTE (SPI_FIFOST_RF_LEVEL_VALUE_7_BYTE << SPI_FIFOST_RF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_SHIFT 9 #define SPI_FIFOST_TF_LEVEL_WIDTH 3 #define SPI_FIFOST_TF_LEVEL_MASK (((1U << SPI_FIFOST_TF_LEVEL_WIDTH) - 1U) << SPI_FIFOST_TF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_VALUE_0_BYTE 0U #define SPI_FIFOST_TF_LEVEL_BITS_0_BYTE (SPI_FIFOST_TF_LEVEL_VALUE_0_BYTE << SPI_FIFOST_TF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_VALUE_1_BYTE 1U #define SPI_FIFOST_TF_LEVEL_BITS_1_BYTE (SPI_FIFOST_TF_LEVEL_VALUE_1_BYTE << SPI_FIFOST_TF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_VALUE_2_BYTE 2U #define SPI_FIFOST_TF_LEVEL_BITS_2_BYTE (SPI_FIFOST_TF_LEVEL_VALUE_2_BYTE << SPI_FIFOST_TF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_VALUE_3_BYTE 3U #define SPI_FIFOST_TF_LEVEL_BITS_3_BYTE (SPI_FIFOST_TF_LEVEL_VALUE_3_BYTE << SPI_FIFOST_TF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_VALUE_4_BYTE 4U #define SPI_FIFOST_TF_LEVEL_BITS_4_BYTE (SPI_FIFOST_TF_LEVEL_VALUE_4_BYTE << SPI_FIFOST_TF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_VALUE_5_BYTE 5U #define SPI_FIFOST_TF_LEVEL_BITS_5_BYTE (SPI_FIFOST_TF_LEVEL_VALUE_5_BYTE << SPI_FIFOST_TF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_VALUE_6_BYTE 6U #define SPI_FIFOST_TF_LEVEL_BITS_6_BYTE (SPI_FIFOST_TF_LEVEL_VALUE_6_BYTE << SPI_FIFOST_TF_LEVEL_SHIFT) #define SPI_FIFOST_TF_LEVEL_VALUE_7_BYTE 7U #define SPI_FIFOST_TF_LEVEL_BITS_7_BYTE (SPI_FIFOST_TF_LEVEL_VALUE_7_BYTE << SPI_FIFOST_TF_LEVEL_SHIFT) #endif