1use kernel::utilities::registers::interfaces::ReadWriteable;
6use kernel::utilities::registers::{register_bitfields, ReadOnly, ReadWrite};
7use kernel::utilities::StaticRef;
8
9#[repr(C)]
11struct DbgRegisters {
12 dbgmcu_idcode: ReadOnly<u32, DBGMCU_IDCODE::Register>,
14 dbgmcu_cr: ReadWrite<u32, DBGMCU_CR::Register>,
16 dbgmcu_apb1_fz: ReadWrite<u32, DBGMCU_APB1_FZ::Register>,
18 dbgmcu_apb2_fz: ReadWrite<u32, DBGMCU_APB2_FZ::Register>,
20}
21
22register_bitfields![u32,
23 DBGMCU_IDCODE [
24 DEV_ID OFFSET(0) NUMBITS(12) [],
26 REV_ID OFFSET(16) NUMBITS(16) []
28 ],
29 DBGMCU_CR [
30 DBG_SLEEP OFFSET(0) NUMBITS(1) [],
32 DBG_STOP OFFSET(1) NUMBITS(1) [],
34 DBG_STANDBY OFFSET(2) NUMBITS(1) [],
36 TRACE_IOEN OFFSET(5) NUMBITS(1) [],
38 TRACE_MODE OFFSET(6) NUMBITS(2) []
40 ],
41 DBGMCU_APB1_FZ [
42 DBG_TIM2_STOP OFFSET(0) NUMBITS(1) [],
44 DBG_TIM3_STOP OFFSET(1) NUMBITS(1) [],
46 DBG_TIM4_STOP OFFSET(2) NUMBITS(1) [],
48 DBG_TIM5_STOP OFFSET(3) NUMBITS(1) [],
50 DBG_TIM6_STOP OFFSET(4) NUMBITS(1) [],
52 DBG_TIM7_STOP OFFSET(5) NUMBITS(1) [],
54 DBG_TIM12_STOP OFFSET(6) NUMBITS(1) [],
56 DBG_TIM13_STOP OFFSET(7) NUMBITS(1) [],
58 DBG_TIM14_STOP OFFSET(8) NUMBITS(1) [],
60 DBG_RTC_STOP OFFSET(10) NUMBITS(1) [],
62 DBG_WWDG_STOP OFFSET(11) NUMBITS(1) [],
64 DBG_IWDEG_STOP OFFSET(12) NUMBITS(1) [],
66 DBG_J2C1_SMBUS_TIMEOUT OFFSET(21) NUMBITS(1) [],
68 DBG_J2C2_SMBUS_TIMEOUT OFFSET(22) NUMBITS(1) [],
70 DBG_J2C3SMBUS_TIMEOUT OFFSET(23) NUMBITS(1) [],
72 DBG_I2CFMP_SMBUS_TIMEOUT OFFSET(24) NUMBITS(1) [],
74 DBG_CAN1_STOP OFFSET(25) NUMBITS(1) [],
76 DBG_CAN2_STOP OFFSET(26) NUMBITS(1) []
78 ],
79 DBGMCU_APB2_FZ [
80 DBG_TIM1_STOP OFFSET(0) NUMBITS(1) [],
82 DBG_TIM8_STOP OFFSET(1) NUMBITS(1) [],
84 DBG_TIM9_STOP OFFSET(16) NUMBITS(1) [],
86 DBG_TIM10_STOP OFFSET(17) NUMBITS(1) [],
88 DBG_TIM11_STOP OFFSET(18) NUMBITS(1) []
90 ]
91];
92
93const DBG_BASE: StaticRef<DbgRegisters> =
94 unsafe { StaticRef::new(0xE0042000 as *const DbgRegisters) };
95
96pub struct Dbg {
97 registers: StaticRef<DbgRegisters>,
98}
99
100impl Dbg {
101 pub const fn new() -> Dbg {
102 Dbg {
103 registers: DBG_BASE,
104 }
105 }
106
107 pub fn disable_tim2_counter(&self) {
108 self.registers
109 .dbgmcu_apb1_fz
110 .modify(DBGMCU_APB1_FZ::DBG_TIM2_STOP::SET);
111 }
112}