use crate::svd::register::{
create_bit_range, create_field, create_register, create_register_properties,
};
use crate::Result;
pub fn create() -> Result<svd::RegisterCluster> {
Ok(svd::RegisterCluster::Register(create_register(
"ctl",
"DMAC Channel Control.",
0x18,
create_register_properties(64, 0)?,
Some(&[
create_field(
"sms",
"Source Master Select - 0: AXI Master 1, 1: AXI Master 2",
create_bit_range("[0:0]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"dms",
"Destination Master Select - 0: AXI Master 1, 1: AXI Master 2",
create_bit_range("[2:2]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"sinc",
"Source address increment - 0: increment, 1: no change. Indicates whether to increment the address on every transfer.",
create_bit_range("[4:4]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"dinc",
"Destination address increment - 0: increment, 1: no change. Indicates whether to increment the address on every transfer.",
create_bit_range("[6:6]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"tr_width",
"Transfer width - 0: 8-bits, 1: 16-bits, 2: 32-bits, 3: 64-bits, 4: 128-bits, 5: 256-bits, 6: 512-bits.",
create_bit_range("[10:8]")?,
svd::Access::ReadWrite,
Some(svd::DimElement::builder()
.dim(2)
.dim_increment(3)
.dim_index(Some([
String::from("_src"),
String::from("_dst"),
].into()))
.build(svd::ValidateLevel::Strict)?),
)?,
create_field(
"msize",
"Burst transaction length - 0: 1 data item, 1: 4 data items, 2: 8 data items, 3: 16 data items, 4: 32 data items, 5: 64 data items, 6: 128 data items, 7: 256 data items, 8: 512 data items, 9: 1024 data items.",
create_bit_range("[17:14]")?,
svd::Access::ReadWrite,
Some(svd::DimElement::builder()
.dim(2)
.dim_increment(4)
.dim_index(Some([
String::from("_src"),
String::from("_dst"),
].into()))
.build(svd::ValidateLevel::Strict)?),
)?,
create_field(
"cache",
"AXI cache signal",
create_bit_range("[25:22]")?,
svd::Access::ReadWrite,
Some(svd::DimElement::builder()
.dim(2)
.dim_increment(4)
.dim_index(Some([
String::from("_ar"),
String::from("_aw"),
].into()))
.build(svd::ValidateLevel::Strict)?),
)?,
create_field(
"non_posted_last_write_en",
"Non-posted Last Write Enable - 0: posted writes can be used throughout the block transfer, 1: posted writes can be used up to the last write, the last write must be non-posted.",
create_bit_range("[30:30]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"prot",
"AXI prot signal",
create_bit_range("[34:32]")?,
svd::Access::ReadWrite,
Some(svd::DimElement::builder()
.dim(2)
.dim_increment(3)
.dim_index(Some([
String::from("_ar"),
String::from("_aw"),
].into()))
.build(svd::ValidateLevel::Strict)?),
)?,
create_field(
"arlen_en",
"Source burst length enable - 0: disable, 1: enable",
create_bit_range("[38:38]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"arlen",
"Source burst length",
create_bit_range("[46:39]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"awlen_en",
"Destination burst length enable - 0: disable, 1: enable",
create_bit_range("[47:47]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"awlen",
"Destination burst length",
create_bit_range("[55:48]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"stat_en",
"Status enable",
create_bit_range("[56:56]")?,
svd::Access::ReadWrite,
Some(svd::DimElement::builder()
.dim(2)
.dim_increment(1)
.dim_index(Some([
String::from("_src"),
String::from("_dst"),
].into()))
.build(svd::ValidateLevel::Strict)?),
)?,
create_field(
"ioc_block_tr",
"Interrupt-on-completion block transfer - 0: disable, 1: enable",
create_bit_range("[58:58]")?,
svd::Access::ReadWrite,
None,
)?,
create_field(
"shadow_or_lli",
"Shadow or Linked List Item - 0: not last/valid, 1: last/valid",
create_bit_range("[62:62]")?,
svd::Access::ReadWrite,
Some(svd::DimElement::builder()
.dim(2)
.dim_increment(1)
.dim_index(Some([
String::from("_last"),
String::from("_valid"),
].into()))
.build(svd::ValidateLevel::Strict)?),
)?,
]),
None,
)?))
}