mirror of
https://github.com/stnolting/neorv32.git
synced 2025-04-23 21:57:33 -04:00
[docs] update module base addresses
This commit is contained in:
parent
be8e0038f5
commit
66fe26c83a
19 changed files with 82 additions and 82 deletions
|
@ -63,10 +63,10 @@ and for CRC32-mode the entire 32-bit of `POLY` and `SREG` are used.
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.2+<| `0xffffee00` .2+<| `CTRL` <|`1:0` ^| r/w <| CRC mode select (`00` CRC8, `01`: CRC16, `10`: CRC32)
|
||||
.2+<| `0xffee0000` .2+<| `CTRL` <|`1:0` ^| r/w <| CRC mode select (`00` CRC8, `01`: CRC16, `10`: CRC32)
|
||||
<|`31:2` ^| r/- <| _reserved_, read as zero
|
||||
| `0xffffee04` | `POLY` |`31:0` | r/w | CRC polynomial
|
||||
.2+<| `0xffffee08` .2+<| `DATA` <|`7:0` ^| r/w <| data input (single byte)
|
||||
| `0xffee0004` | `POLY` |`31:0` | r/w | CRC polynomial
|
||||
.2+<| `0xffee0008` .2+<| `DATA` <|`7:0` ^| r/w <| data input (single byte)
|
||||
<|`31:8` ^| r/- <| _reserved_, read as zero, writes are ignored
|
||||
| `0xffffee0c` | `SREG` |`32:0` | r/w | current CRC shift register value (set start value on write)
|
||||
| `0xffee000c` | `SREG` |`32:0` | r/w | current CRC shift register value (set start value on write)
|
||||
|=======================
|
||||
|
|
|
@ -142,7 +142,7 @@ register).
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.12+<| `0xffffed00` .12+<| `CTRL` <|`0` `DMA_CTRL_EN` ^| r/w <| DMA module enable
|
||||
.12+<| `0xffed0000` .12+<| `CTRL` <|`0` `DMA_CTRL_EN` ^| r/w <| DMA module enable
|
||||
<|`1` `DMA_CTRL_AUTO` ^| r/w <| Enable automatic mode (FIRQ-triggered)
|
||||
<|`2` `DMA_CTRL_FENCE` ^| r/w <| Issue a downstream FENCE operation when DMA transfer completes (without errors)
|
||||
<|`7:3` _reserved_ ^| r/- <| reserved, read as zero
|
||||
|
@ -154,9 +154,9 @@ register).
|
|||
<|`15` `DMA_CTRL_FIRQ_TYPE` ^| r/w <| Trigger on rising-edge (`0`) or high-level (`1`) or selected FIRQ channel
|
||||
<|`19:16` `DMA_CTRL_FIRQ_SEL_MSB : DMA_CTRL_FIRQ_SEL_LSB` ^| r/w <| FIRQ trigger select (FIRQ0=0 ... FIRQ15=15)
|
||||
<|`31:20` _reserved_ ^| r/- <| reserved, read as zero
|
||||
| `0xffffed04` | `SRC_BASE` |`31:0` | r/w | Source base address (shows the last-accessed source address when read)
|
||||
| `0xffffed08` | `DST_BASE` |`31:0` | r/w | Destination base address (shows the last-accessed destination address when read)
|
||||
.6+<| `0xffffed0c` .6+<| `TTYPE` <|`23:0` `DMA_TTYPE_NUM_MSB : DMA_TTYPE_NUM_LSB` ^| r/w <| Number of elements to transfer (shows the last-transferred element index when read)
|
||||
| `0xffed0004` | `SRC_BASE` |`31:0` | r/w | Source base address (shows the last-accessed source address when read)
|
||||
| `0xffed0008` | `DST_BASE` |`31:0` | r/w | Destination base address (shows the last-accessed destination address when read)
|
||||
.6+<| `0xffed000c` .6+<| `TTYPE` <|`23:0` `DMA_TTYPE_NUM_MSB : DMA_TTYPE_NUM_LSB` ^| r/w <| Number of elements to transfer (shows the last-transferred element index when read)
|
||||
<|`26:24` _reserved_ ^| r/- <| reserved, read as zero
|
||||
<|`28:27` `DMA_TTYPE_QSEL_MSB : DMA_TTYPE_QSEL_LSB` ^| r/w <| Quantity select (`00` = byte -> byte, `01` = byte -> zero-extended-word, `10` = byte -> sign-extended-word, `11` = word -> word)
|
||||
<|`29` `DMA_TTYPE_SRC_INC` ^| r/w <| Constant (`0`) or incrementing (`1`) source address
|
||||
|
|
|
@ -41,8 +41,8 @@ be performed within a single clock cycle.
|
|||
[options="header",grid="rows"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s) | R/W | Function
|
||||
| `0xfffffc00` | `INPUT[0]` | 31:0 | r/- | parallel input port pins 31:0
|
||||
| `0xfffffc04` | `INPUT[1]` | 31:0 | r/- | parallel input port pins 63:32
|
||||
| `0xfffffc08` | `OUTPUT[0]` | 31:0 | r/w | parallel output port pins 31:0
|
||||
| `0xfffffc0c` | `OUTPUT[1]` | 31:0 | r/w | parallel output port pins 63:32
|
||||
| `0xfffc0000` | `INPUT[0]` | 31:0 | r/- | parallel input port pins 31:0
|
||||
| `0xfffc0004` | `INPUT[1]` | 31:0 | r/- | parallel input port pins 63:32
|
||||
| `0xfffc0008` | `OUTPUT[0]` | 31:0 | r/w | parallel output port pins 31:0
|
||||
| `0xfffc000c` | `OUTPUT[1]` | 31:0 | r/w | parallel output port pins 63:32
|
||||
|=======================
|
||||
|
|
|
@ -62,12 +62,12 @@ stay pending until explicitly cleared by writing a 1 to `GPTMR_CTRL_IRQ_CLR`.
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.6+<| `0xfffff100` .6+<| `CTRL` <|`0` `GPTMR_CTRL_EN` ^| r/w <| Timer enable flag
|
||||
.6+<| `0xfff10000` .6+<| `CTRL` <|`0` `GPTMR_CTRL_EN` ^| r/w <| Timer enable flag
|
||||
<|`3:1` `GPTMR_CTRL_PRSC2 : GPTMR_CTRL_PRSC0` ^| r/w <| 3-bit clock prescaler select
|
||||
<|`4` `GPTMR_CTRL_MODE` ^| r/w <| Operation mode (0=single-shot, 1=continuous)
|
||||
<|`29:5` - ^| r/- <| _reserved_, read as zero
|
||||
<|`30` `GPTMR_CTRL_IRQ_CLR` ^| -/w <| Write `1` to clear timer-match interrupt; auto-clears
|
||||
<|`31` `GPTMR_CTRL_IRQ_PND` ^| r/- <| Timer-match interrupt pending
|
||||
| `0xfffff104` | `THRES` |`31:0` | r/w | Threshold value register
|
||||
| `0xfffff108` | `COUNT` |`31:0` | r/- | Counter register
|
||||
| `0xfff10004` | `THRES` |`31:0` | r/w | Threshold value register
|
||||
| `0xfff10008` | `COUNT` |`31:0` | r/- | Counter register
|
||||
|=======================
|
||||
|
|
|
@ -45,8 +45,8 @@ high until the interrupt request is explicitly acknowledged (e.g. writing to a u
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bits | R/W | Function
|
||||
| `0xfffff400` | `TIME_LO` | 31:0 | r/w | system time, low word
|
||||
| `0xfffff404` | `TIME_HI` | 31:0 | r/w | system time, high word
|
||||
| `0xfffff408` | `TIMECMP_LO` | 31:0 | r/w | time compare, low word
|
||||
| `0xfffff40c` | `TIMECMP_HI` | 31:0 | r/w | time compare, high word
|
||||
| `0xfff40000` | `TIME_LO` | 31:0 | r/w | system time, low word
|
||||
| `0xfff40004` | `TIME_HI` | 31:0 | r/w | system time, high word
|
||||
| `0xfff40008` | `TIMECMP_LO` | 31:0 | r/w | time compare, low word
|
||||
| `0xfff4000c` | `TIMECMP_HI` | 31:0 | r/w | time compare, high word
|
||||
|=======================
|
||||
|
|
|
@ -186,7 +186,7 @@ Once the NEOLED interrupt has fired it remains pending until the actual cause of
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.13+<| `0xfffffd00` .13+<| `CTRL` <|`0` `NEOLED_CTRL_EN` ^| r/w <| NEOLED enable
|
||||
.13+<| `0xfffd0000` .13+<| `CTRL` <|`0` `NEOLED_CTRL_EN` ^| r/w <| NEOLED enable
|
||||
<|`1` `NEOLED_CTRL_MODE` ^| r/w <| data transfer size; `0`=24-bit; `1`=32-bit
|
||||
<|`2` `NEOLED_CTRL_STROBE` ^| r/w <| `0`=send normal color data; `1`=send RESET command on data write access
|
||||
<|`5:3` `NEOLED_CTRL_PRSC2 : NEOLED_CTRL_PRSC0` ^| r/w <| 3-bit clock prescaler, bit 0
|
||||
|
@ -199,5 +199,5 @@ Once the NEOLED interrupt has fired it remains pending until the actual cause of
|
|||
<|`29` `NEOLED_CTRL_TX_HALF` ^| r/- <| TX FIFO is _at least_ half full
|
||||
<|`30` `NEOLED_CTRL_TX_FULL` ^| r/- <| TX FIFO is full
|
||||
<|`31` `NEOLED_CTRL_TX_BUSY` ^| r/- <| TX serial engine is busy when set
|
||||
| `0xfffffd04` | `DATA` <|`31:0` / `23:0` ^| -/w <| TX data (32- or 24-bit, depending on _NEOLED_CTRL_MODE_ bit)
|
||||
| `0xfffd0004` | `DATA` <|`31:0` / `23:0` ^| -/w <| TX data (32- or 24-bit, depending on _NEOLED_CTRL_MODE_ bit)
|
||||
|=======================
|
||||
|
|
|
@ -183,7 +183,7 @@ controller is idle (again) and the data/command FIFO is empty, the interrupt bec
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.11+<| `0xfffff200` .11+<| `CTRL` <|`0` `ONEWIRE_CTRL_EN` ^| r/w <| ONEWIRE enable, reset if cleared
|
||||
.11+<| `0xfff20000` .11+<| `CTRL` <|`0` `ONEWIRE_CTRL_EN` ^| r/w <| ONEWIRE enable, reset if cleared
|
||||
<|`1` `ONEWIRE_CTRL_CLEAR` ^| -/w <| clear RXT FIFO, auto-clears
|
||||
<|`3:2` `ONEWIRE_CTRL_PRSC1 : ONEWIRE_CTRL_PRSC0` ^| r/w <| 2-bit clock prescaler select
|
||||
<|`11:4` `ONEWIRE_CTRL_CLKDIV7 : ONEWIRE_CTRL_CLKDIV0` ^| r/w <| 8-bit clock divider value
|
||||
|
@ -194,7 +194,7 @@ controller is idle (again) and the data/command FIFO is empty, the interrupt bec
|
|||
<|`29` `ONEWIRE_CTRL_RX_AVAIL` ^| r/- <| RX FIFO data available
|
||||
<|`30` `ONEWIRE_CTRL_SENSE` ^| r/- <| current state of the bus line
|
||||
<|`31` `ONEWIRE_CTRL_BUSY` ^| r/- <| operation in progress when set or TX FIFO not empty
|
||||
.4+<| `0xfffff204` .4+<| `DCMD` <|`7:0` `ONEWIRE_DCMD_DATA_MSB : ONEWIRE_DCMD_DATA_LSB` ^| r/w <| receive/transmit data
|
||||
.4+<| `0xfff20004` .4+<| `DCMD` <|`7:0` `ONEWIRE_DCMD_DATA_MSB : ONEWIRE_DCMD_DATA_LSB` ^| r/w <| receive/transmit data
|
||||
<|`9:8` `ONEWIRE_DCMD_CMD_HI : ONEWIRE_DCMD_CMD_LO` ^| -/w <| operation command LSBs
|
||||
<|`10` `ONEWIRE_DCMD_PRESENCE` ^| -/w <| bus presence detected
|
||||
<|`31:11` - ^| r/- <| _reserved_, read as zero
|
||||
|
|
|
@ -60,18 +60,18 @@ _f~PWM~_[Hz] = _f~main~_[Hz] / (2^8^ * `clock_prescaler` * (1 + `PWM_CFG_CDIV`))
|
|||
|
||||
**Register Map**
|
||||
|
||||
.PWM register map (`struct neorv32_pwm_t`)
|
||||
.PWM register map (`struct NEORV32_PWM`)
|
||||
[cols="<4,<2,<6,^2,<8"]
|
||||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.5+<| `0xfffff000` .5+<| `CHANNEL_CFG[0]` <|`31` - `PWM_CFG_EN` ^| r/w <| Channel 0: channel enabled when set
|
||||
.5+<| `0xfff00000` .5+<| `CHANNEL_CFG[0]` <|`31` - `PWM_CFG_EN` ^| r/w <| Channel 0: channel enabled when set
|
||||
<|`30:28` - `PWM_CFG_PRSC_MSB:PWM_CFG_PRSC_LSB` ^| r/w <| Channel 0: 3-bit clock prescaler select
|
||||
<|`27:18` ^| r/- <| Channel 0: _reserved_, hardwired to zero
|
||||
<|`17:8` - `PWM_CFG_CDIV_MSB:PWM_CFG_CDIV_LSB` ^| r/w <| Channel 0: 10-bit clock divider
|
||||
<|`7:0` - `PWM_CFG_DUTY_MSB:PWM_CFG_DUTY_LSB` ^| r/w <| Channel 0: 8-bit duty cycle
|
||||
| `0xfffff004` ... `0xfffff038` | `CHANNEL_CFG[1]` ... `CHANNEL_CFG[14]` | ... | r/w <| Channels 1 to 14
|
||||
.5+<| `0xfffff03C` .5+<| `CHANNEL_CFG[15]` <|`31` - `PWM_CFG_EN` ^| r/w <| Channel 15: channel enabled when set
|
||||
| `0xfff00004` ... `0xfff00038` | `CHANNEL_CFG[1]` ... `CHANNEL_CFG[14]` | ... | r/w <| Channels 1 to 14
|
||||
.5+<| `0xfff0003C` .5+<| `CHANNEL_CFG[15]` <|`31` - `PWM_CFG_EN` ^| r/w <| Channel 15: channel enabled when set
|
||||
<|`30:28` - `PWM_CFG_PRSC_MSB:PWM_CFG_PRSC_LSB` ^| r/w <| Channel 15: 3-bit clock prescaler select
|
||||
<|`27:18` ^| r/- <| Channel 15: _reserved_, hardwired to zero
|
||||
<|`17:8` - `PWM_CFG_CDIV_MSB:PWM_CFG_CDIV_LSB` ^| r/w <| Channel 15: 10-bit clock divider
|
||||
|
|
|
@ -87,7 +87,7 @@ example if just the `SDI_CTRL_IRQ_RX_AVAIL` bit is set, the interrupt will keep
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.18+<| `0xfffff700` .18+<| `CTRL` <|`0` `SDI_CTRL_EN` ^| r/w <| SDI module enable
|
||||
.18+<| `0xfff70000` .18+<| `CTRL` <|`0` `SDI_CTRL_EN` ^| r/w <| SDI module enable
|
||||
<|`3:1` _reserved_ ^| r/- <| reserved, read as zero
|
||||
<|`7:4` `SDI_CTRL_FIFO_MSB : SDI_CTRL_FIFO_LSB` ^| r/- <| FIFO depth; log2(_IO_SDI_FIFO_)
|
||||
<|`14:8` _reserved_ ^| r/- <| reserved, read as zero
|
||||
|
@ -105,6 +105,6 @@ example if just the `SDI_CTRL_IRQ_RX_AVAIL` bit is set, the interrupt will keep
|
|||
<|`28` `SDI_CTRL_TX_FULL` ^| r/- <| TX FIFO full
|
||||
<|`30:29` _reserved_ ^| r/- <| reserved, read as zero
|
||||
<|`31` `SDI_CTRL_CS_ACTIVE` ^| r/- <| Chip-select is active when set
|
||||
.2+<| `0xfffff704` .2+<| `DATA` <|`7:0` ^| r/w <| receive/transmit data (FIFO)
|
||||
.2+<| `0xfff70004` .2+<| `DATA` <|`7:0` ^| r/w <| receive/transmit data (FIFO)
|
||||
<|`31:8` _reserved_ ^| r/- <| reserved, read as zero
|
||||
|=======================
|
||||
|
|
|
@ -116,31 +116,31 @@ interrupt-causing condition is resolved (e.g. by reading from the RX FIFO).
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s) | R/W | Function
|
||||
.22+<| `0xffffec00` .22+<| `NEORV32_SLINK.CTRL` <| `0` `SLINK_CTRL_EN` ^| r/w <| SLINK global enable
|
||||
<| `1` `SLINK_CTRL_RX_CLR` ^| -/w <| Clear RX FIFO when set (bit auto-clears)
|
||||
<| `2` `SLINK_CTRL_TX_CLR` ^| -/w <| Clear TX FIFO when set (bit auto-clears)
|
||||
<| `3` _reserved_ ^| r/- <| _reserved_, read as zero
|
||||
<| `4` `SLINK_CTRL_RX_LAST` ^| r/- <| Last word read from `RX_DATA` is marked as "end of stream"
|
||||
<| `7:5` _reserved_ ^| r/- <| _reserved_, read as zero
|
||||
<| `8` `SLINK_CTRL_RX_EMPTY` ^| r/- <| RX FIFO empty
|
||||
<| `9` `SLINK_CTRL_RX_HALF` ^| r/- <| RX FIFO at least half full
|
||||
<| `10` `SLINK_CTRL_RX_FULL` ^| r/- <| RX FIFO full
|
||||
<| `11` `SLINK_CTRL_TX_EMPTY` ^| r/- <| TX FIFO empty
|
||||
<| `12` `SLINK_CTRL_TX_HALF` ^| r/- <| TX FIFO at least half full
|
||||
<| `13` `SLINK_CTRL_TX_FULL` ^| r/- <| TX FIFO full
|
||||
<| `15:14` _reserved_ ^| r/- <| _reserved_, read as zero
|
||||
<| `16` `SLINK_CTRL_IRQ_RX_NEMPTY` ^| r/w <| RX interrupt if RX FIFO not empty
|
||||
<| `17` `SLINK_CTRL_IRQ_RX_HALF` ^| r/w <| RX interrupt if RX FIFO at least half full
|
||||
<| `18` `SLINK_CTRL_IRQ_RX_FULL` ^| r/w <| RX interrupt if RX FIFO full
|
||||
<| `19` `SLINK_CTRL_IRQ_TX_EMPTY` ^| r/w <| TX interrupt if TX FIFO empty
|
||||
<| `20` `SLINK_CTRL_IRQ_TX_NHALF` ^| r/w <| TX interrupt if TX FIFO not at least half full
|
||||
<| `21` `SLINK_CTRL_IRQ_TX_NFULL` ^| r/w <| TX interrupt if TX FIFO not full
|
||||
<| `23:22` _reserved_ ^| r/- <| _reserved_, read as zero
|
||||
<| `27:24` `SLINK_CTRL_RX_FIFO_MSB : SLINK_CTRL_RX_FIFO_LSB` ^| r/- <| log2(RX FIFO size)
|
||||
<| `31:28` `SLINK_CTRL_TX_FIFO_MSB : SLINK_CTRL_TX_FIFO_LSB` ^| r/- <| log2(TX FIFO size)
|
||||
.3+<| `0xffffec04` .3+<| `NEORV32_SLINK.ROUTE` <| `3:0` | r/w | TX destination routing information (`slink_tx_dst_o`)
|
||||
<| `7:4` | r/- | RX source routing information (`slink_rx_src_i`)
|
||||
<| `31:8` | -/- | _reserved_
|
||||
| `0xffffec08` | `NEORV32_SLINK.DATA` | `31:0` | r/w | Write data to TX FIFO; read data from RX FIFO
|
||||
| `0xffffec0c` | `NEORV32_SLINK.DATA_LAST` | `31:0` | r/w | Write data to TX FIFO (and also set "last" signal); read data from RX FIFO
|
||||
.22+<| `0xffec0000` .22+<| `CTRL` <| `0` `SLINK_CTRL_EN` ^| r/w <| SLINK global enable
|
||||
<| `1` `SLINK_CTRL_RX_CLR` ^| -/w <| Clear RX FIFO when set (bit auto-clears)
|
||||
<| `2` `SLINK_CTRL_TX_CLR` ^| -/w <| Clear TX FIFO when set (bit auto-clears)
|
||||
<| `3` _reserved_ ^| r/- <| _reserved_, read as zero
|
||||
<| `4` `SLINK_CTRL_RX_LAST` ^| r/- <| Last word read from `RX_DATA` is marked as "end of stream"
|
||||
<| `7:5` _reserved_ ^| r/- <| _reserved_, read as zero
|
||||
<| `8` `SLINK_CTRL_RX_EMPTY` ^| r/- <| RX FIFO empty
|
||||
<| `9` `SLINK_CTRL_RX_HALF` ^| r/- <| RX FIFO at least half full
|
||||
<| `10` `SLINK_CTRL_RX_FULL` ^| r/- <| RX FIFO full
|
||||
<| `11` `SLINK_CTRL_TX_EMPTY` ^| r/- <| TX FIFO empty
|
||||
<| `12` `SLINK_CTRL_TX_HALF` ^| r/- <| TX FIFO at least half full
|
||||
<| `13` `SLINK_CTRL_TX_FULL` ^| r/- <| TX FIFO full
|
||||
<| `15:14` _reserved_ ^| r/- <| _reserved_, read as zero
|
||||
<| `16` `SLINK_CTRL_IRQ_RX_NEMPTY` ^| r/w <| RX interrupt if RX FIFO not empty
|
||||
<| `17` `SLINK_CTRL_IRQ_RX_HALF` ^| r/w <| RX interrupt if RX FIFO at least half full
|
||||
<| `18` `SLINK_CTRL_IRQ_RX_FULL` ^| r/w <| RX interrupt if RX FIFO full
|
||||
<| `19` `SLINK_CTRL_IRQ_TX_EMPTY` ^| r/w <| TX interrupt if TX FIFO empty
|
||||
<| `20` `SLINK_CTRL_IRQ_TX_NHALF` ^| r/w <| TX interrupt if TX FIFO not at least half full
|
||||
<| `21` `SLINK_CTRL_IRQ_TX_NFULL` ^| r/w <| TX interrupt if TX FIFO not full
|
||||
<| `23:22` _reserved_ ^| r/- <| _reserved_, read as zero
|
||||
<| `27:24` `SLINK_CTRL_RX_FIFO_MSB : SLINK_CTRL_RX_FIFO_LSB` ^| r/- <| log2(RX FIFO size)
|
||||
<| `31:28` `SLINK_CTRL_TX_FIFO_MSB : SLINK_CTRL_TX_FIFO_LSB` ^| r/- <| log2(TX FIFO size)
|
||||
.3+<| `0xffec0004` .3+<| `ROUTE` <| `3:0` | r/w | TX destination routing information (`slink_tx_dst_o`)
|
||||
<| `7:4` | r/- | RX source routing information (`slink_rx_src_i`)
|
||||
<| `31:8` | -/- | _reserved_
|
||||
| `0xffec0008` | `DATA` | `31:0` | r/w | Write data to TX FIFO; read data from RX FIFO
|
||||
| `0xffec000c` | `DATA_LAST` | `31:0` | r/w | Write data to TX FIFO (and also set "last" signal); read data from RX FIFO
|
||||
|=======================
|
||||
|
|
|
@ -126,7 +126,7 @@ example if just the `SPI_CTRL_IRQ_RX_AVAIL` bit is set, the interrupt will keep
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.19+<| `0xfffff800` .19+<| `CTRL` <|`0` `SPI_CTRL_EN` ^| r/w <| SPI module enable
|
||||
.19+<| `0xfff80000` .19+<| `CTRL` <|`0` `SPI_CTRL_EN` ^| r/w <| SPI module enable
|
||||
<|`1` `SPI_CTRL_CPHA` ^| r/w <| clock phase
|
||||
<|`2` `SPI_CTRL_CPOL` ^| r/w <| clock polarity
|
||||
<|`5:3` `SPI_CTRL_PRSC2 : SPI_CTRL_PRSC0` ^| r/w <| 3-bit clock prescaler select
|
||||
|
@ -145,7 +145,7 @@ example if just the `SPI_CTRL_IRQ_RX_AVAIL` bit is set, the interrupt will keep
|
|||
<|`30:28` _reserved_ ^| r/- <| reserved, read as zero
|
||||
<|`30` `SPI_CS_ACTIVE` ^| r/- <| Set if any chip-select line is active
|
||||
<|`31` `SPI_CTRL_BUSY` ^| r/- <| SPI module busy when set (serial engine operation in progress and TX FIFO not empty yet)
|
||||
.3+<| `0xfffff804` .3+<| `DATA` <|`7:0` `SPI_DATA_MSB : SPI_DATA_LSB` ^| r/w <| receive/transmit data (FIFO)
|
||||
.3+<| `0xfff80004` .3+<| `DATA` <|`7:0` `SPI_DATA_MSB : SPI_DATA_LSB` ^| r/w <| receive/transmit data (FIFO)
|
||||
<|`30:8` _reserved_ ^| r/- <| reserved, read as zero
|
||||
<|`31` `SPI_DATA_CMD` ^| -/w <| data (`0`) / chip-select-command (`1`) select
|
||||
|=======================
|
||||
|
|
|
@ -42,10 +42,10 @@ to take into account a dynamic frequency scaling of the processor.
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | R/W | Description
|
||||
| `0xfffffe00` | `CLK` | r/w | clock frequency in Hz (initialized from top's `CLOCK_FREQUENCY` generic)
|
||||
| `0xfffffe04` | `MEM[4]` | r/- | internal memory configuration (see <<_sysinfo_memory_configuration>>)
|
||||
| `0xfffffe08` | `SOC` | r/- | specific SoC configuration (see <<_sysinfo_soc_configuration>>)
|
||||
| `0xfffffe0c` | `CACHE` | r/- | cache configuration information (see <<_sysinfo_cache_configuration>>)
|
||||
| `0xfffe0000` | `CLK` | r/w | clock frequency in Hz (initialized from top's `CLOCK_FREQUENCY` generic)
|
||||
| `0xfffe0004` | `MEM[4]` | r/- | internal memory configuration (see <<_sysinfo_memory_configuration>>)
|
||||
| `0xfffe0008` | `SOC` | r/- | specific SoC configuration (see <<_sysinfo_soc_configuration>>)
|
||||
| `0xfffe000c` | `CACHE` | r/- | cache configuration information (see <<_sysinfo_cache_configuration>>)
|
||||
|=======================
|
||||
|
||||
|
||||
|
|
|
@ -63,11 +63,11 @@ mode is active.
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.5+<| `0xfffffa00` .5+<| `CTRL` <|`0` `TRNG_CTRL_EN` ^| r/w <| TRNG enable
|
||||
.5+<| `0xfffa0000` .5+<| `CTRL` <|`0` `TRNG_CTRL_EN` ^| r/w <| TRNG enable
|
||||
<|`1` `TRNG_CTRL_FIFO_CLR` ^| -/w <| flush random data FIFO when set; flag auto-clears
|
||||
<|`5:2` `TRNG_CTRL_FIFO_MSB : TRNG_CTRL_FIFO_LSB` ^| r/- <| FIFO depth, log2(`IO_TRNG_FIFO`)
|
||||
<|`6` `TRNG_CTRL_SIM_MODE` ^| r/- <| simulation mode (PRNG!)
|
||||
<|`7` `TRNG_CTRL_AVAIL` ^| r/- <| random data available when set
|
||||
.2+<| `0xfffffa04` .2+<| `DATA` <|`7:0` `TRNG_DATA_MSB : TRNG_DATA_LSB` ^| r/- <| random data byte
|
||||
.2+<| `0xfffa0004` .2+<| `DATA` <|`7:0` `TRNG_DATA_MSB : TRNG_DATA_LSB` ^| r/- <| random data byte
|
||||
<|`31:8` _reserved_ ^| r/- <| reserved, read as zero
|
||||
|=======================
|
||||
|
|
|
@ -144,7 +144,7 @@ twd_scl_i <= std_ulogic(scl_io); -- sense
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.18+<| `0xffffea00` .18+<| `CTRL` <|`0` `TWD_CTRL_EN` ^| r/w <| TWD enable, reset if cleared
|
||||
.18+<| `0xffea0000` .18+<| `CTRL` <|`0` `TWD_CTRL_EN` ^| r/w <| TWD enable, reset if cleared
|
||||
<|`1` `TWD_CTRL_CLR_RX` ^| -/w <| Clear RX FIFO, flag auto-clears
|
||||
<|`2` `TWD_CTRL_CLR_TX` ^| -/w <| Clear TX FIFO, flag auto-clears
|
||||
<|`3` `TWD_CTRL_FSEL` ^| r/w <| Bus sample clock / filter select
|
||||
|
@ -162,6 +162,6 @@ twd_scl_i <= std_ulogic(scl_io); -- sense
|
|||
<|`29` `TWD_CTRL_SENSE_SCL` ^| r/- <| current state of the SCL bus line
|
||||
<|`30` `TWD_CTRL_SENSE_SDA` ^| r/- <| current state of the SDA bus line
|
||||
<|`31` `TWD_CTRL_BUSY` ^| r/- <| bus engine is busy (transaction in progress)
|
||||
.2+<| `0xffffea04` .2+<| `DATA` <|`7:0` `TWD_DATA_MSB : TWD_DATA_LSB` ^| r/w <| RX/TX data FIFO access
|
||||
.2+<| `0xffea0004` .2+<| `DATA` <|`7:0` `TWD_DATA_MSB : TWD_DATA_LSB` ^| r/w <| RX/TX data FIFO access
|
||||
<|`31:8` - ^| r/- <| _reserved_, read as zero
|
||||
|=======================
|
||||
|
|
|
@ -136,7 +136,7 @@ TWI module is enabled (`TWI_CTRL_EN` = `1`) and the TX FIFO is empty and the TWI
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.12+<| `0xfffff900` .12+<| `CTRL` <|`0` `TWI_CTRL_EN` ^| r/w <| TWI enable, reset if cleared
|
||||
.12+<| `0xfff90000` .12+<| `CTRL` <|`0` `TWI_CTRL_EN` ^| r/w <| TWI enable, reset if cleared
|
||||
<|`3:1` `TWI_CTRL_PRSC2 : TWI_CTRL_PRSC0` ^| r/w <| 3-bit clock prescaler select
|
||||
<|`7:4` `TWI_CTRL_CDIV3 : TWI_CTRL_CDIV0` ^| r/w <| 4-bit clock divider
|
||||
<|`8` `TWI_CTRL_CLKSTR` ^| r/w <| Enable (allow) clock stretching
|
||||
|
@ -148,7 +148,7 @@ TWI module is enabled (`TWI_CTRL_EN` = `1`) and the TX FIFO is empty and the TWI
|
|||
<|`29` `TWI_CTRL_TX_FULL` ^| r/- <| set if the TWI bus is claimed by any controller
|
||||
<|`30` `TWI_CTRL_RX_AVAIL` ^| r/- <| RX FIFO data available
|
||||
<|`31` `TWI_CTRL_BUSY` ^| r/- <| TWI bus engine busy or TX FIFO not empty
|
||||
.3+<| `0xfffff904` .3+<| `DCMD` <|`7:0` `TWI_DCMD_MSB : TWI_DCMD_LSB` ^| r/w <| RX/TX data byte
|
||||
.3+<| `0xfff90004` .3+<| `DCMD` <|`7:0` `TWI_DCMD_MSB : TWI_DCMD_LSB` ^| r/w <| RX/TX data byte
|
||||
<|`8` `TWI_DCMD_ACK` ^| r/w <| write: ACK bit sent by controller; read: `1` = device NACK, `0` = device ACK
|
||||
<|`10:9` `TWI_DCMD_CMD_HI : TWI_DCMD_CMD_LO` ^| r/w <| TWI operation (`00` = NOP, `01` = START conditions, `10` = STOP condition, `11` = data transmission)
|
||||
|=======================
|
||||
|
|
|
@ -128,7 +128,7 @@ Both file are created in the simulation's home folder.
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.20+<| `0xfffff500` .20+<| `CTRL` <|`0` `UART_CTRL_EN` ^| r/w <| UART enable
|
||||
.21+<| `0xfff50000` .21+<| `CTRL` <|`0` `UART_CTRL_EN` ^| r/w <| UART enable
|
||||
<|`1` `UART_CTRL_SIM_MODE` ^| r/w <| enable **simulation mode**
|
||||
<|`2` `UART_CTRL_HWFC_EN` ^| r/w <| enable RTS/CTS hardware flow-control
|
||||
<|`5:3` `UART_CTRL_PRSC2 : UART_CTRL_PRSC0` ^| r/w <| Baud rate clock prescaler select
|
||||
|
@ -149,7 +149,7 @@ Both file are created in the simulation's home folder.
|
|||
<|`29` `UART_CTRL_TX_CLR` ^| r/w <| Clear TX FIFO, flag auto-clears
|
||||
<|`30` `UART_CTRL_RX_OVER` ^| r/- <| RX FIFO overflow; cleared by disabling the module
|
||||
<|`31` `UART_CTRL_TX_BUSY` ^| r/- <| TX busy or TX FIFO not empty
|
||||
.4+<| `0xfffff504` .4+<| `DATA` <|`7:0` `UART_DATA_RTX_MSB : UART_DATA_RTX_LSB` ^| r/w <| receive/transmit data
|
||||
.4+<| `0xfff50004` .4+<| `DATA` <|`7:0` `UART_DATA_RTX_MSB : UART_DATA_RTX_LSB` ^| r/w <| receive/transmit data
|
||||
<|`11:8` `UART_DATA_RX_FIFO_SIZE_MSB : UART_DATA_RX_FIFO_SIZE_LSB` ^| r/- <| log2(RX FIFO size)
|
||||
<|`15:12` `UART_DATA_TX_FIFO_SIZE_MSB : UART_DATA_TX_FIFO_SIZE_LSB` ^| r/- <| log2(TX FIFO size)
|
||||
<|`31:16` ^| r/- <| _reserved_, read as zero
|
||||
|
@ -202,6 +202,6 @@ written to UART1-specific file `neorv32.uart1_sim_mode.out`. This data is also p
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
| `0xfffff600` | `CTRL` | ... | ... | Same as UART0
|
||||
| `0xfffff604` | `DATA` | ... | ... | Same as UART0
|
||||
| `0xfff60000` | `CTRL` | ... | ... | Same as UART0
|
||||
| `0xfff60004` | `DATA` | ... | ... | Same as UART0
|
||||
|=======================
|
||||
|
|
|
@ -84,7 +84,7 @@ The cause of the last system hardware reset can be determined via the `WDT_CTRL_
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Reset value | Writable if locked | Function
|
||||
.8+<| `0xfffffb00` .8+<| `CTRL` <|`0` `WDT_CTRL_EN` ^| r/w ^| `0` ^| no <| watchdog enable
|
||||
.8+<| `0xfffb0000` .8+<| `CTRL` <|`0` `WDT_CTRL_EN` ^| r/w ^| `0` ^| no <| watchdog enable
|
||||
<|`1` `WDT_CTRL_LOCK` ^| r/w ^| `0` ^| no <| lock configuration when set, clears only on system reset, can only be set if enable bit is set already
|
||||
<|`2` `WDT_CTRL_DBEN` ^| r/w ^| `0` ^| no <| set to allow WDT to continue operation even when CPU is in debug mode
|
||||
<|`3` `WDT_CTRL_SEN` ^| r/w ^| `0` ^| no <| set to allow WDT to continue operation even when CPU is in sleep mode
|
||||
|
@ -92,5 +92,5 @@ The cause of the last system hardware reset can be determined via the `WDT_CTRL_
|
|||
<|`6:5` `WDT_CTRL_RCAUSE_HI : WDT_CTRL_RCAUSE_LO` ^| r/- ^| `0` ^| - <| cause of last system reset; 0=external reset, 1=ocd-reset, 2=watchdog reset
|
||||
<|`7` - ^| r/- ^| - ^| - <| _reserved_, reads as zero
|
||||
<|`31:8` `WDT_CTRL_TIMEOUT_MSB : WDT_CTRL_TIMEOUT_LSB` ^| r/w ^| 0 ^| no <| 24-bit watchdog timeout value
|
||||
| `0xfffffb04` | `RESET` |`31:0` | -/w | - | yes | Write _PASSWORD_ to reset WDT timeout counter
|
||||
| `0xfffb0004` | `RESET` |`31:0` | -/w | - | yes | Write _PASSWORD_ to reset WDT timeout counter
|
||||
|=======================
|
||||
|
|
|
@ -193,7 +193,7 @@ The XIP cache is cleared when the XIP module is disabled (`XIP_CTRL_EN = 0`), wh
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
||||
.14+<| `0xffffff40` .14+<| `CTRL` <|`0` `XIP_CTRL_EN` ^| r/w <| XIP module enable
|
||||
.14+<| `0xffff4000` .14+<| `CTRL` <|`0` `XIP_CTRL_EN` ^| r/w <| XIP module enable
|
||||
<|`3:1` `XIP_CTRL_PRSC2 : XIP_CTRL_PRSC0` ^| r/w <| 3-bit SPI clock prescaler select
|
||||
<|`4` `XIP_CTRL_CPOL` ^| r/w <| SPI clock polarity
|
||||
<|`5` `XIP_CTRL_CPHA` ^| r/w <| SPI clock phase
|
||||
|
@ -207,7 +207,7 @@ The XIP cache is cleared when the XIP module is disabled (`XIP_CTRL_EN = 0`), wh
|
|||
<|`29:27` - ^| r/- <| _reserved_, read as zero
|
||||
<|`30` `XIP_CTRL_PHY_BUSY` ^| r/- <| SPI PHY busy when set
|
||||
<|`31` `XIP_CTRL_XIP_BUSY` ^| r/- <| XIP access in progress when set
|
||||
| `0xffffff44` | _reserved_ |`31:0` | r/- | _reserved_, read as zero
|
||||
| `0xffffff48` | `DATA_LO` |`31:0` | r/w | Direct SPI access - data register low
|
||||
| `0xffffff4C` | `DATA_HI` |`31:0` | -/w | Direct SPI access - data register high; write access triggers SPI transfer
|
||||
| `0xffff4004` | _reserved_ |`31:0` | r/- | _reserved_, read as zero
|
||||
| `0xffff4008` | `DATA_LO` |`31:0` | r/w | Direct SPI access - data register low
|
||||
| `0xffff400C` | `DATA_HI` |`31:0` | -/w | Direct SPI access - data register high; write access triggers SPI transfer
|
||||
|=======================
|
||||
|
|
|
@ -74,10 +74,10 @@ can issue a new CPU interrupt).
|
|||
[options="header",grid="all"]
|
||||
|=======================
|
||||
| Address | Name [C] | Bit(s) | R/W | Description
|
||||
| `0xfffff300` | `EIE` | `31:0` | r/w | External interrupt enable register (one bit per channel, LSB-aligned)
|
||||
.3+^| `0xfffff304` .3+<| `ESC` ^| `31` ^| r/c <| XIRQ interrupt when set; write any value to this register to acknowledge the current XIRQ interrupt
|
||||
| `0xfff30000` | `EIE` | `31:0` | r/w | External interrupt enable register (one bit per channel, LSB-aligned)
|
||||
.3+^| `0xfff30004` .3+<| `ESC` ^| `31` ^| r/c <| XIRQ interrupt when set; write any value to this register to acknowledge the current XIRQ interrupt
|
||||
^| `30:5` ^| r/- <| _reserved_, read as zero
|
||||
^| `4:0` ^| r/c <| Interrupt source ID (0..31) of firing IRQ (prioritized!)
|
||||
| `0xfffff308` | `TTYP` | `31:0` | r/w | Trigger type select (`0` = level trigger, `1` = edge trigger); each bit corresponds to the according channel number
|
||||
| `0xfffff30c` | `TPOL` | `31:0` | r/w | Trigger polarity select (`0` = low-level/falling-edge, `1` = high-level/rising-edge); each bit corresponds to the according channel number
|
||||
| `0xfff30008` | `TTYP` | `31:0` | r/w | Trigger type select (`0` = level trigger, `1` = edge trigger); each bit corresponds to the according channel number
|
||||
| `0xfff3000c` | `TPOL` | `31:0` | r/w | Trigger polarity select (`0` = low-level/falling-edge, `1` = high-level/rising-edge); each bit corresponds to the according channel number
|
||||
|=======================
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue