blob: 405e6c0d7056fc1eb5a229c156a205c03ebc156e [file] [log] [blame]
// Copyright 2023 Google LLC
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{ name: "i2s",
clocking: [
{clock: "clk_i", reset: "rst_ni", primary: true},
{clock: "clk_audio_i"},
],
bus_interfaces: [
{ protocol: "tlul", direction: "device" }
],
available_input_list: [
{ name: "rx_sd", desc: "Serial receive bit" }
],
available_output_list: [
{ name: "rx_sclk", desc: "Serial data clock" }
{ name: "rx_ws", desc: "Serial data word select" }
{ name: "tx_sclk", desc: "Serial data clock" }
{ name: "tx_ws", desc: "Serial data word select tx" }
{ name: "tx_sd", desc: "Serial data tx bit" }
],
interrupt_list: [
{ name: "tx_watermark"
desc: "raised if the transmit FIFO is below the high-water mark. See TXILVL."}
{ name: "rx_watermark"
desc: "raised if the receive FIFO is above the high-water mark. See RXILVL."}
{ name: "tx_empty"
desc: "raised if the transmit FIFO has emptied."}
{ name: "rx_overflow"
desc: "raised if the receive FIFO has overflowed."}
],
regwidth: "32",
registers: [
{ name: "CTRL",
desc: "I2S control register",
swaccess: "rw",
hwaccess: "hro",
fields: [
{ bits: "0",
name: "TX",
desc: "TX enable"
}
{ bits: "1",
name: "RX",
desc: "RX enable"
}
{ bits: "2",
name: "SLPBK",
desc: '''System loopback enable.
If this bit is turned on, any outgoing bits to TX are received through RX.
See Block Diagram.
'''
}
{ bits: "24:18",
name: "NCO_RX",
desc: "SCLK / BCLK Clock divide control TX. CLK_divided = clk_audio/(2*NCO_RX)."
resval: "1"
}
{ bits: "31:25",
name: "NCO_TX",
desc: "SCLK / BCLK Clock divide control RX. CLK_divided = clk_audio/(2*NCO_TX)."
resval: "1"
}
]
},
{ name: "STATUS"
desc: "I2S live status register"
swaccess: "ro"
hwaccess: "hrw"
hwext: "true"
hwre: "true"
fields: [
{ bits: "0"
name: "TXFULL"
desc: "TX buffer is full"
}
{ bits: "1"
name: "RXFULL"
desc: "RX buffer is full"
}
{ bits: "2"
name: "TXEMPTY"
desc: "TX FIFO is empty"
resval: "1"
}
{ bits: "3"
name: "RXEMPTY"
desc: "RX FIFO is empty"
resval: "1"
}
],
tags: [// STATUS in read only
"excl:CsrAllTests:CsrExclWrite"]
}
{ name: "RDATA",
desc: "I2S read data",
swaccess: "ro",
hwaccess: "hrw",
hwext: "true",
hwre: "true",
fields: [
{ bits: "31:0" }
],
tags: [// RDATA in read only
"excl:CsrAllTests:CsrExclWrite"]
}
{ name: "WDATA",
desc: "I2S write data",
swaccess: "wo",
hwaccess: "hro",
hwqe: "true",
fields: [
{ bits: "31:0" }
]
tags: [// don't write to wdata - it affects several other csrs
"excl:CsrAllTests:CsrExclAll"]
}
{ name: "FIFO_CTRL",
desc: "I2S FIFO control register",
swaccess: "rw",
hwaccess: "hrw",
hwqe: "true",
fields: [
{ bits: "0",
swaccess: "wo",
hwaccess: "hro",
name: "RXRST",
desc: "RX fifo reset. Write 1 to the register resets RX_FIFO. Read returns 0",
tags: [
"excl:CsrAllTests:CsrExclAll"]
}
{ bits: "1",
swaccess: "wo",
hwaccess: "hro",
name: "TXRST",
desc: "TX fifo reset. Write 1 to the register resets TX_FIFO. Read returns 0",
tags: [
"excl:CsrAllTests:CsrExclAll"]
}
{ bits: "4:2",
name: "RXILVL",
desc: '''Trigger level for RX interrupts. If the FIFO depth is greater than or equal to
the setting, it raises rx_watermark interrupt.
''',
resval: "2"
enum: [
{ value: "0",
name: "rxlvl1",
desc: "1 word"
},
{ value: "1",
name: "rxlvl4",
desc: "4 word"
},
{ value: "2",
name: "rxlvl8",
desc: "8 word",
},
{ value: "3",
name: "rxlvl16",
desc: "16 word"
},
{ value: "4",
name: "rxlvl30",
desc: "30 word"
},
]
}
{ bits: "6:5",
name: "TXILVL",
desc: '''Trigger level for TX interrupts. If the FIFO depth is less than the setting, it
raises tx_watermark interrupt.
''',
resval: "2"
enum: [
{ value: "0",
name: "txlvl1",
desc: "2 word"
},
{ value: "1",
name: "txlvl4",
desc: "4 word"
},
{ value: "2",
name: "txlvl8",
desc: "8 word"
},
{ value: "3",
name: "txlvl16",
desc: "16 word"
}
]
}
]
}
{ name: "FIFO_STATUS",
desc: "I2S FIFO status register",
swaccess: "ro",
hwaccess: "hwo",
hwext: "true",
fields: [
{ bits: "5:0",
name: "TXLVL",
desc: "Current fill level of TX fifo"
}
{ bits: "21:16",
name: "RXLVL",
desc: "Current fill level of RX fifo"
}
],
tags: [// FIFO_STATUS in read only
"excl:CsrAllTests:CsrExclWrite"]
}
]
}