1
- use crate :: { svd:: Peripheral , util, Settings } ;
1
+ use crate :: { svd:: Peripheral , util, Config , Settings } ;
2
2
use anyhow:: Result ;
3
3
use log:: debug;
4
4
use proc_macro2:: TokenStream ;
@@ -21,9 +21,15 @@ pub fn render(
21
21
peripherals : & [ Peripheral ] ,
22
22
device_x : & mut String ,
23
23
settings : & Settings ,
24
+ config : & Config ,
24
25
) -> Result < TokenStream > {
25
26
let mut mod_items = TokenStream :: new ( ) ;
26
27
28
+ let defmt = config
29
+ . impl_defmt
30
+ . as_ref ( )
31
+ . map ( |feature| quote ! ( #[ cfg_attr( feature = #feature, derive( defmt:: Format ) ) ] ) ) ;
32
+
27
33
if let Some ( c) = settings. riscv_config . as_ref ( ) {
28
34
if !c. core_interrupts . is_empty ( ) {
29
35
debug ! ( "Rendering target-specific core interrupts" ) ;
@@ -48,6 +54,7 @@ pub fn render(
48
54
mod_items. extend ( quote ! {
49
55
/// Core interrupts. These interrupts are handled by the core itself.
50
56
#[ riscv:: pac_enum( unsafe CoreInterruptNumber ) ]
57
+ #defmt
51
58
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
52
59
pub enum CoreInterrupt {
53
60
#( #interrupts) *
@@ -77,6 +84,7 @@ pub fn render(
77
84
mod_items. extend ( quote ! {
78
85
/// Exception sources in the device.
79
86
#[ riscv:: pac_enum( unsafe ExceptionNumber ) ]
87
+ #defmt
80
88
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
81
89
pub enum Exception {
82
90
#( #exceptions) *
@@ -102,6 +110,7 @@ pub fn render(
102
110
mod_items. extend ( quote ! {
103
111
/// Priority levels in the device
104
112
#[ riscv:: pac_enum( unsafe PriorityNumber ) ]
113
+ #defmt
105
114
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
106
115
pub enum Priority {
107
116
#( #priorities) *
@@ -124,6 +133,7 @@ pub fn render(
124
133
mod_items. extend ( quote ! {
125
134
/// HARTs in the device
126
135
#[ riscv:: pac_enum( unsafe HartIdNumber ) ]
136
+ #defmt
127
137
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
128
138
pub enum Hart {
129
139
#( #harts) *
@@ -197,6 +207,7 @@ pub fn render(
197
207
mod_items. extend ( quote ! {
198
208
/// External interrupts. These interrupts are handled by the external peripherals.
199
209
#[ riscv:: pac_enum( unsafe ExternalInterruptNumber ) ]
210
+ #defmt
200
211
#[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
201
212
pub enum ExternalInterrupt {
202
213
#( #interrupts) *
0 commit comments