SyterKit 0.4.0.x
SyterKit is a bare-metal framework
Loading...
Searching...
No Matches
reg-spi.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0+ */
2
3#ifndef __REG_SPI_H__
4#define __REG_SPI_H__
5
6#include <stdint.h>
7
8/* SPI Global Control Register Bit Fields & Masks,default value:0x0000_0080 */
9#define SPI_GC_EN (0x1 << 0) /* SPI module enable control 1:enable; 0:disable; default:0 */
10#define SPI_GC_MODE (0x1 << 1) /* SPI function mode select 1:master; 0:slave; default:0 */
11#define SPI_GC_TP_EN (0x1 << 7) /* SPI transmit stop enable 1:stop transmit data when RXFIFO is full; 0:ignore RXFIFO status; default:1 */
12#define SPI_GC_SRST (0x1 << 31) /* soft reset, write 1 will clear SPI control, auto clear to 0 */
13
14/* SPI Transfer Control Register Bit Fields & Masks,default value:0x0000_0087 */
15#define SPI_TC_PHA (0x1 << 0) /* SPI Clock/Data phase control,0: phase0,1: phase1;default:1 */
16#define SPI_TC_POL (0x1 << 1) /* SPI Clock polarity control,0:low level idle,1:high level idle;default:1 */
17#define SPI_TC_SPOL (0x1 << 2) /* SPI Chip select signal polarity control,default: 1,low effective like this:~~|_____~~ */
18#define SPI_TC_SSCTL (0x1 << 3) /* SPI chip select control,default 0:SPI_SSx remains asserted between SPI bursts,1:negate SPI_SSx between SPI bursts */
19#define SPI_TC_SS_MASK (0x3 << 4) /* SPI chip select:00-SPI_SS0;01-SPI_SS1;10-SPI_SS2;11-SPI_SS3*/
20#define SPI_TC_SS_OWNER (0x1 << 6) /* SS output mode select default is 0:automatic output SS;1:manual output SS */
21#define SPI_TC_SS_LEVEL (0x1 << 7) /* defautl is 1:set SS to high;0:set SS to low */
22#define SPI_TC_DHB (0x1 << 8) /* Discard Hash Burst,default 0:receiving all spi burst in BC period 1:discard unused,fectch WTC bursts */
23#define SPI_TC_DDB (0x1 << 9) /* Dummy burst Type,default 0: dummy spi burst is zero;1:dummy spi burst is one */
24#define SPI_TC_RPSM (0x1 << 10) /* select mode for high speed write,0:normal write mode,1:rapids write mode,default 0 */
25#define SPI_TC_SDC (0x1 << 11) /* master sample data control, 1: delay--high speed operation;0:no delay. */
26#define SPI_TC_FBS (0x1 << 12) /* LSB/MSB transfer first select 0:MSB,1:LSB,default 0:MSB first */
27#define SPI_TC_SDM (0x1 << 13) /* master sample data mode, SDM = 1:Normal Sample Mode, SDM = 0:Delay Sample Mode */
28#define SPI_TC_SDC1 (0x1 << 15) /* master sample data mode, SDM = 1:Normal Sample Mode, SDM = 0:Delay Sample Mode */
29#define SPI_TC_XCH (0x1 << 31) /* Exchange burst default 0:idle,1:start exchange;when BC is zero,this bit cleared by SPI controller*/
30#define SPI_TC_SS_BIT_POS (4)
31
32/* SPI Interrupt Control Register Bit Fields & Masks,default value:0x0000_0000 */
33#define SPI_INTEN_RX_RDY (0x1 << 0) /* rxFIFO Ready Interrupt Enable,---used for immediately received,0:disable;1:enable */
34#define SPI_INTEN_RX_EMP (0x1 << 1) /* rxFIFO Empty Interrupt Enable ---used for IRQ received */
35#define SPI_INTEN_RX_FULL (0x1 << 2) /* rxFIFO Full Interrupt Enable ---seldom used */
36#define SPI_INTEN_TX_ERQ (0x1 << 4) /* txFIFO Empty Request Interrupt Enable ---seldom used */
37#define SPI_INTEN_TX_EMP (0x1 << 5) /* txFIFO Empty Interrupt Enable ---used for IRQ tx */
38#define SPI_INTEN_TX_FULL (0x1 << 6) /* txFIFO Full Interrupt Enable ---seldom used */
39#define SPI_INTEN_RX_OVF (0x1 << 8) /* rxFIFO Overflow Interrupt Enable ---used for error detect */
40#define SPI_INTEN_RX_UDR (0x1 << 9) /* rxFIFO Underrun Interrupt Enable ---used for error detect */
41#define SPI_INTEN_TX_OVF (0x1 << 10) /* txFIFO Overflow Interrupt Enable ---used for error detect */
42#define SPI_INTEN_TX_UDR (0x1 << 11) /* txFIFO Underrun Interrupt Enable ---not happened */
43#define SPI_INTEN_TC (0x1 << 12) /* Transfer Completed Interrupt Enable ---used */
44#define SPI_INTEN_SSI (0x1 << 13) /* SSI interrupt Enable,chip select from valid state to invalid state,for slave used only */
45#define SPI_INTEN_ERR (SPI_INTEN_TX_OVF | SPI_INTEN_RX_UDR | SPI_INTEN_RX_OVF) /* NO txFIFO underrun */
46#define SPI_INTEN_MASK (0x77 | (0x3f << 8))
47
48/* SPI Interrupt Status Register Bit Fields & Masks,default value:0x0000_0022 */
49#define SPI_INT_STA_RX_RDY (0x1 << 0) /* rxFIFO ready, 0:RX_WL < RX_TRIG_LEVEL,1:RX_WL >= RX_TRIG_LEVEL */
50#define SPI_INT_STA_RX_EMP (0x1 << 1) /* rxFIFO empty, this bit is set when rxFIFO is empty */
51#define SPI_INT_STA_RX_FULL (0x1 << 2) /* rxFIFO full, this bit is set when rxFIFO is full */
52#define SPI_INT_STA_TX_RDY (0x1 << 4) /* txFIFO ready, 0:TX_WL > TX_TRIG_LEVEL,1:TX_WL <= TX_TRIG_LEVEL */
53#define SPI_INT_STA_TX_EMP (0x1 << 5) /* txFIFO empty, this bit is set when txFIFO is empty */
54#define SPI_INT_STA_TX_FULL (0x1 << 6) /* txFIFO full, this bit is set when txFIFO is full */
55#define SPI_INT_STA_RX_OVF (0x1 << 8) /* rxFIFO overflow, when set rxFIFO has overflowed */
56#define SPI_INT_STA_RX_UDR (0x1 << 9) /* rxFIFO underrun, when set rxFIFO has underrun */
57#define SPI_INT_STA_TX_OVF (0x1 << 10) /* txFIFO overflow, when set txFIFO has overflowed */
58#define SPI_INT_STA_TX_UDR (0x1 << 11) /* fxFIFO underrun, when set txFIFO has underrun */
59#define SPI_INT_STA_TC (0x1 << 12) /* Transfer Completed */
60#define SPI_INT_STA_SSI (0x1 << 13) /* SS invalid interrupt, when set SS has changed from valid to invalid */
61#define SPI_INT_STA_ERR (SPI_INT_STA_TX_OVF | SPI_INT_STA_RX_UDR | SPI_INT_STA_RX_OVF) /* NO txFIFO underrun */
62#define SPI_INT_STA_MASK (0x77 | (0x3f << 8))
63#define SPI_INT_STA_PENDING_BIT (0xffffffff)
64
65/* SPI FIFO Control Register Bit Fields & Masks,default value:0x0040_0001 */
66#define SPI_FIFO_CTL_RX_LEVEL (0xFF << 0) /* rxFIFO reday request trigger level,default 0x1 */
67#define SPI_FIFO_CTL_RX_DRQEN (0x1 << 8) /* rxFIFO DMA request enable,1:enable,0:disable */
68#define SPI_FIFO_CTL_RX_TESTEN (0x1 << 14) /* rxFIFO test mode enable,1:enable,0:disable */
69#define SPI_FIFO_CTL_RX_RST (0x1 << 15) /* rxFIFO reset, write 1, auto clear to 0 */
70#define SPI_FIFO_CTL_TX_LEVEL (0xFF << 16) /* txFIFO empty request trigger level,default 0x40 */
71#define SPI_FIFO_CTL_TX_DRQEN (0x1 << 24) /* txFIFO DMA request enable,1:enable,0:disable */
72#define SPI_FIFO_CTL_TX_TESTEN (0x1 << 30) /* txFIFO test mode enable,1:enable,0:disable */
73#define SPI_FIFO_CTL_TX_RST (0x1 << 31) /* txFIFO reset, write 1, auto clear to 0 */
74#define SPI_FIFO_CTL_DRQEN_MASK (SPI_FIFO_CTL_TX_DRQEN | SPI_FIFO_CTL_RX_DRQEN)
75
76/* SPI FIFO Status Register Bit Fields & Masks,default value:0x0000_0000 */
77#define SPI_FIFO_STA_RX_CNT (0xFF << 0) /* rxFIFO counter,how many bytes in rxFIFO */
78#define SPI_FIFO_STA_RB_CNT (0x7 << 12) /* rxFIFO read buffer counter,how many bytes in rxFIFO read buffer */
79#define SPI_FIFO_STA_RB_WR (0x1 << 15) /* rxFIFO read buffer write enable */
80#define SPI_FIFO_STA_TX_CNT (0xFF << 16) /* txFIFO counter,how many bytes in txFIFO */
81#define SPI_FIFO_STA_TB_CNT (0x7 << 28) /* txFIFO write buffer counter,how many bytes in txFIFO write buffer */
82#define SPI_FIFO_STA_TB_WR (0x1 << 31) /* txFIFO write buffer write enable */
83#define SPI_RXCNT_BIT_POS (0)
84#define SPI_TXCNT_BIT_POS (16)
85
86#define SPI_FIFO_CTL_SHIFT (0x4)
87
88/* SPI Wait Clock Register Bit Fields & Masks,default value:0x0000_0000 */
89#define SPI_WAIT_WCC_MASK (0xFFFF << 0) /* used only in master mode: Wait Between Transactions */
90#define SPI_WAIT_SWC_MASK (0xF << 16) /* used only in master mode: Wait before start dual data transfer in dual SPI mode */
91
92/* SPI Clock Control Register Bit Fields & Masks,default:0x0000_0002 */
93#define SPI_CLK_CTL_CDR2 (0xFF << 0) /* Clock Divide Rate 2,master mode only : SPI_CLK = AHB_CLK/(2*(n+1)) */
94#define SPI_CLK_CTL_CDR1 (0xF << 8) /* Clock Divide Rate 1,master mode only : SPI_CLK = AHB_CLK/2^n */
95#define SPI_CLK_CTL_DRS (0x1 << 12) /* Divide rate select,default,0:rate 1;1:rate 2 */
96#define SPI_CLK_SCOPE (SPI_CLK_CTL_CDR2 + 1)
97
98/* SPI Master Burst Counter Register Bit Fields & Masks,default:0x0000_0000 */
99/* master mode: when SMC = 1,BC specifies total burst number, Max length is 16Mbytes */
100#define SPI_BC_CNT_MASK (0xFFFFFF << 0) /* Total Burst Counter, tx length + rx length ,SMC=1 */
101
102/* SPI Master Transmit Counter reigster default:0x0000_0000 */
103#define SPI_TC_CNT_MASK (0xFFFFFF << 0) /* Write Transmit Counter, tx length, NOT rx length!!! */
104
105/* SPI Master Burst Control Counter reigster Bit Fields & Masks,default:0x0000_0000 */
106#define SPI_BCC_STC_MASK (0xFFFFFF << 0) /* master single mode transmit counter */
107#define SPI_BCC_DBC_MASK (0xF << 24) /* master dummy burst counter */
108#define SPI_BCC_DBC_POS (24) /* master dummy burst pos */
109#define SPI_BCC_DUAL_MODE (0x1 << 28) /* master dual mode RX enable */
110#define SPI_BCC_QUAD_MODE (0x1 << 29) /* master quad mode RX enable */
111
112/* SPI Sample Delay Mode,default:0xaaaa_ffff */
113#define SPI_SAMP_MODE_EN (1U << 2)
114#define SPI_SAMP_DL_SW_EN (1U << 7)
115#define DELAY_NORMAL_SAMPLE (0x100)
116#define DELAY_0_5_CYCLE_SAMPLE (0x000)
117#define DELAY_1_CYCLE_SAMPLE (0x010)
118#define DELAY_1_5_CYCLE_SAMPLE (0x110)
119#define DELAY_2_CYCLE_SAMPLE (0x101)
120#define DELAY_2_5_CYCLE_SAMPLE (0x001)
121#define DELAY_3_CYCLE_SAMPLE (0x011)
122#define SAMP_MODE_DL_DEFAULT 0xaaaaffff
123
124typedef struct {
125 uint32_t volatile ver; /* version number register */
126 uint32_t volatile gc; /* global control register */
127 uint32_t volatile tc; /* transfer control register */
128 uint32_t volatile rev_01[1];
129 uint32_t volatile int_ctl; /* interrupt control register */
130 uint32_t volatile int_sta; /* interrupt status register */
131 uint32_t volatile fifo_ctl; /* fifo control register */
132 uint32_t volatile fifo_sta; /* fifo status register */
133 uint32_t volatile wait_cnt; /* wait clock counter register */
134 uint32_t volatile clk_ctl; /* clock rate control register */
135 uint32_t volatile sdc; /* sample delay control register */
136 uint32_t volatile rev_02[1];
137 uint32_t volatile burst_cnt; /* burst counter register */
138 uint32_t volatile transmit_cnt; /* transmit counter register */
139 uint32_t volatile bcc; /* burst control counter register */
140 uint32_t volatile rev_03[19];
141 uint32_t volatile dma_ctl; /* DMA control register */
142 uint32_t volatile rev_04[93];
143 uint32_t volatile txdata; /* tx data register */
144 uint32_t volatile rev_05[63];
145 uint32_t volatile rxdata; /* rx data register */
147
148#endif// __REG_SPI_H__
u32_t uint32_t
Definition stdint.h:13
Definition reg-spi.h:124
uint32_t volatile gc
Definition reg-spi.h:126
uint32_t volatile sdc
Definition reg-spi.h:135
uint32_t volatile txdata
Definition reg-spi.h:143
uint32_t volatile int_ctl
Definition reg-spi.h:129
uint32_t volatile burst_cnt
Definition reg-spi.h:137
uint32_t volatile rxdata
Definition reg-spi.h:145
uint32_t volatile transmit_cnt
Definition reg-spi.h:138
uint32_t volatile dma_ctl
Definition reg-spi.h:141
uint32_t volatile fifo_ctl
Definition reg-spi.h:131
uint32_t volatile tc
Definition reg-spi.h:127
uint32_t volatile bcc
Definition reg-spi.h:139
uint32_t volatile wait_cnt
Definition reg-spi.h:133
uint32_t volatile int_sta
Definition reg-spi.h:130
uint32_t volatile clk_ctl
Definition reg-spi.h:134
uint32_t volatile fifo_sta
Definition reg-spi.h:132
uint32_t volatile ver
Definition reg-spi.h:125