Skip to content

Commit

Permalink
Fix for the review comments, moved the functions relevant for aurix c…
Browse files Browse the repository at this point in the history
…ore from macros.tera to aurix.tera.
  • Loading branch information
AthiraRamakrishna authored and pellico committed Jun 13, 2024
1 parent 3aee6cd commit 1b2e19f
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 83 deletions.
83 changes: 79 additions & 4 deletions templates/rust/aurix_core.tera
Original file line number Diff line number Diff line change
@@ -1,4 +1,79 @@
{% import "macros.tera" as macros %}

{# Generated core register function #}
{%- macro register_core_func(types_mod,reg, base_addr) -%}
{%- set reg_struct = reg.name | to_struct_id -%}
{%- set reg_struct_name = types_mod ~ "::" ~ reg_struct -%}
{%- set reg_mod_name = reg.name | to_mod_id -%}
{%- set reg_addr = base_addr+reg.offset | to_hex -%}
#[doc = r"{{reg.description | svd_description_to_doc}}"]
#[inline(always)]
{% if reg.dim == 1 -%}
pub const fn {{reg.name | to_func_id }}(&self) -> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{reg_addr}}> {
unsafe { crate::common::RegCore::new() }
}
{%- else -%}
{%- for index in range(end=reg.dim) -%}
pub const fn {{reg.name~index| to_func_id }}(&self)-> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{base_addr+reg.offset+index*reg.dim_increment | to_hex }}> {
unsafe { crate::common::RegCore::new() }
}
{% endfor -%}
{%- endif -%}
{%- endmacro -%}


{# Generated core cluster unrolled into register function #}
{%- macro cluster_register_core_func(types_mod,reg,base_addr,cluster_index,cluster) -%}
{%- set reg_struct = cluster.name~"_"~reg.name | to_struct_id -%}
{%- set reg_struct_name = types_mod ~ "::" ~ reg_struct -%}
{%- set reg_addr = base_addr+reg.offset | to_hex -%}
#[doc = r"{{reg.description | svd_description_to_doc}}"]
#[inline(always)]
{% if reg.dim == 1 -%}
{% if cluster.dim == 1 -%}
pub const fn {{cluster.name~"_"~reg.name| to_func_id }}(&self) -> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{reg_addr}}> {
unsafe { crate::common::RegCore::new() }
}
{%- else -%}
pub const fn {{cluster.name~"_"~reg.name~cluster_index| to_func_id }}(&self) -> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{reg_addr}}> {
unsafe { crate::common::RegCore::new() }
}
{%- endif -%}
{%- else -%}
{%- for reg_index in range(end=reg.dim) -%}
{% if cluster.dim == 1 -%}
pub const fn {{cluster.name~"_"~reg.name~reg_index| to_func_id }}(&self)-> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{base_addr+reg.offset+reg_index*reg.dim_increment | to_hex }}> {
unsafe { crate::common::RegCore::new() }
}
{%- else -%}
pub const fn {{cluster.name~"_"~reg.name~"_"~cluster_index~"_"~reg_index| to_func_id }}(&self)-> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{base_addr+reg.offset+reg_index*reg.dim_increment | to_hex }}> {
unsafe { crate::common::RegCore::new() }
}
{%- endif -%}
{% endfor -%}
{%- endif -%}
{%- endmacro -%}

{# Unroll the cluster register for aurix csfr #}
{%- macro cluster_func_csfr(types_mod,cluster, base_addr) -%}
{%- set cluster_struct_id = cluster.name | to_struct_id -%}
{%- set cluster_base_addr = base_addr+cluster.offset -%}
#[doc = "{{cluster.description | svd_description_to_doc}}"]
#[inline(always)]
{%- if cluster.dim == 1 %}
{% for register_name,reg in cluster.registers -%}
{{self::cluster_register_core_func(types_mod="self",reg=reg, base_addr=cluster_base_addr,cluster_index=0,cluster=cluster)}}
{% endfor -%}
{%- else %}
{%- for index in range(end=cluster.dim) -%}
{%- set current_cluster_addr = cluster_base_addr+index*cluster.dim_increment -%}
{% for register_name,reg in cluster.registers -%}
{{self::cluster_register_core_func(types_mod="self",reg=reg, base_addr=current_cluster_addr,cluster_index=index,cluster=cluster)}}
{% endfor -%}
{% endfor -%}
{%- endif -%}
{%- endmacro -%}

/*
{{ir.license_text}}
*/
Expand All @@ -16,20 +91,20 @@ unsafe impl core::marker::Send for super::CsfrCpu {}
unsafe impl core::marker::Sync for super::CsfrCpu {}
impl super::CsfrCpu {
{%- for register_name,reg in peri.registers %}
{{macros::register_core_func(types_mod="self",reg=reg, base_addr=peri_base_addr)}}
{{self::register_core_func(types_mod="self",reg=reg, base_addr=peri_base_addr)}}
{% endfor -%}
{% for cluster_name,cluster in peri.clusters -%}
{{macros::cluster_func_csfr(types_mod="self",cluster=cluster, base_addr=peri_base_addr)}}
{{self::cluster_func_csfr(types_mod="self",cluster=cluster, base_addr=peri_base_addr)}}
{% endfor %}

}
{% for register_name,reg in peri.registers -%}
{{macros::register_struct(reg_name=reg.name,reg=reg)}}
{{macros::register_struct(reg=reg)}}
{% endfor %}
{% for cluster_name,cluster in peri.clusters -%}
{% for register_name,reg in cluster.registers -%}
{% set cluster_reg_name = cluster.name~"_"~reg.name -%}
{{macros::register_struct(reg_name=cluster_reg_name,reg=reg)}}
{{macros::register_struct(reg=reg,reg_name=cluster_reg_name)}}
{% endfor %}
{% endfor %}

Expand Down
85 changes: 7 additions & 78 deletions templates/rust/macros.tera
Original file line number Diff line number Diff line change
Expand Up @@ -34,62 +34,6 @@ pub const fn {{reg.name | to_func_id }}(&self) -> [crate::common::Reg<{{reg_stru
{%- endif -%}
{%- endmacro -%}


{# Generated core register function #}
{%- macro register_core_func(types_mod,reg, base_addr) -%}
{%- set reg_struct = reg.name | to_struct_id -%}
{%- set reg_struct_name = types_mod ~ "::" ~ reg_struct -%}
{%- set reg_mod_name = reg.name | to_mod_id -%}
{%- set reg_addr = base_addr+reg.offset | to_hex -%}
#[doc = r"{{reg.description | svd_description_to_doc}}"]
#[inline(always)]
{% if reg.dim == 1 -%}
pub const fn {{reg.name | to_func_id }}(&self) -> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{reg_addr}}> {
unsafe { crate::common::RegCore::new() }
}
{%- else -%}
{%- for index in range(end=reg.dim) -%}
pub const fn {{reg.name~index| to_func_id }}(&self)-> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{base_addr+reg.offset+index*reg.dim_increment | to_hex }}> {
unsafe { crate::common::RegCore::new() }
}
{% endfor -%}
{%- endif -%}
{%- endmacro -%}


{# Generated core cluster unrolled into register function #}
{%- macro cluster_register_core_func(types_mod,reg,base_addr,cluster_index,cluster) -%}
{%- set reg_struct = cluster.name~"_"~reg.name | to_struct_id -%}
{%- set reg_struct_name = types_mod ~ "::" ~ reg_struct -%}
{%- set reg_addr = base_addr+reg.offset | to_hex -%}
#[doc = r"{{reg.description | svd_description_to_doc}}"]
#[inline(always)]
{% if reg.dim == 1 -%}
{% if cluster.dim == 1 -%}
pub const fn {{cluster.name~"_"~reg.name| to_func_id }}(&self) -> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{reg_addr}}> {
unsafe { crate::common::RegCore::new() }
}
{%- else -%}
pub const fn {{cluster.name~"_"~reg.name~cluster_index| to_func_id }}(&self) -> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{reg_addr}}> {
unsafe { crate::common::RegCore::new() }
}
{%- endif -%}
{%- else -%}
{%- for reg_index in range(end=reg.dim) -%}
{% if cluster.dim == 1 -%}
pub const fn {{cluster.name~"_"~reg.name~reg_index| to_func_id }}(&self)-> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{base_addr+reg.offset+reg_index*reg.dim_increment | to_hex }}> {
unsafe { crate::common::RegCore::new() }
}
{%- else -%}
pub const fn {{cluster.name~"_"~reg.name~"_"~cluster_index~"_"~reg_index| to_func_id }}(&self)-> crate::common::RegCore<{{reg_struct_name}}_SPEC, crate::common::{{reg.access}}, {{base_addr+reg.offset+reg_index*reg.dim_increment | to_hex }}> {
unsafe { crate::common::RegCore::new() }
}
{%- endif -%}
{% endfor -%}
{%- endif -%}
{%- endmacro -%}


{%- macro bitfield_type(field,reg_struct_name,reg_mod_name,turbofish) -%}
{%-if turbofish %}{%set separator = "::"%}{%else%}{%set separator = ""%}{%endif-%}
{%- if not field.enum_type and field.mask == 1 %}
Expand All @@ -106,10 +50,14 @@ pub const fn {{cluster.name~"_"~reg.name~"_"~cluster_index~"_"~reg_index| to_fun
{%- endmacro -%}


{%- macro register_struct(reg_name,reg) -%}
{%- macro register_struct(reg,reg_name="") -%}
{%-if reg_name %}
{%- set reg_struct_name = reg_name | to_struct_id -%}
{%- set reg_mod_name = reg_name | to_mod_id -%}

{%- else -%}
{%- set reg_struct_name = reg.name | to_struct_id -%}
{%- set reg_mod_name = reg.name | to_mod_id -%}
{%- endif -%}

#[doc(hidden)]
#[derive(Copy, Clone,Eq, PartialEq)]
Expand Down Expand Up @@ -213,7 +161,7 @@ pub mod {{cluster_mod}} {
#[allow(unused_imports)]
use crate::common::{*};
{% for register_name,reg in cluster.registers -%}
{{self::register_struct(reg_name=reg.name,reg=reg)}}
{{self::register_struct(reg=reg)}}
{% endfor -%}
{% for cluster_name,cluster in cluster.clusters -%}
{{self::cluster_struct(cluster=cluster) }}
Expand All @@ -223,22 +171,3 @@ pub mod {{cluster_mod}} {
{%- endmacro -%}


{# Unroll the cluster register for aurix csfr #}
{%- macro cluster_func_csfr(types_mod,cluster, base_addr) -%}
{%- set cluster_struct_id = cluster.name | to_struct_id -%}
{%- set cluster_base_addr = base_addr+cluster.offset -%}
#[doc = "{{cluster.description | svd_description_to_doc}}"]
#[inline(always)]
{%- if cluster.dim == 1 %}
{% for register_name,reg in cluster.registers -%}
{{self::cluster_register_core_func(types_mod="self",reg=reg, base_addr=cluster_base_addr,cluster_index=0,cluster=cluster)}}
{% endfor -%}
{%- else %}
{%- for index in range(end=cluster.dim) -%}
{%- set current_cluster_addr = cluster_base_addr+index*cluster.dim_increment -%}
{% for register_name,reg in cluster.registers -%}
{{self::cluster_register_core_func(types_mod="self",reg=reg, base_addr=current_cluster_addr,cluster_index=index,cluster=cluster)}}
{% endfor -%}
{% endfor -%}
{%- endif -%}
{%- endmacro -%}
2 changes: 1 addition & 1 deletion templates/rust/peri_mod.tera
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ impl super::{{ peri_struct }} {
{% endfor %}
}
{% for register_name,reg in peri.registers -%}
{{macros::register_struct(reg_name=reg.name,reg=reg)}}
{{macros::register_struct(reg=reg)}}
{% endfor %}
{% for cluster_name,cluster in peri.clusters -%}
{{macros::cluster_struct(cluster=cluster)}}
Expand Down

0 comments on commit 1b2e19f

Please sign in to comment.