1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
use crate::generic::*; #[doc = "GPIO status"] #[repr(transparent)] #[derive(Copy, Clone)] pub struct GpioStatus(pub u32); impl GpioStatus { #[doc = "interrupt to processors, after override is applied"] pub const fn irqtoproc(&self) -> bool { let val = (self.0 >> 26u32) & 0x01; val != 0 } #[doc = "interrupt to processors, after override is applied"] pub fn set_irqtoproc(&mut self, val: bool) { self.0 = (self.0 & !(0x01 << 26u32)) | (((val as u32) & 0x01) << 26u32); } #[doc = "interrupt from pad before override is applied"] pub const fn irqfrompad(&self) -> bool { let val = (self.0 >> 24u32) & 0x01; val != 0 } #[doc = "interrupt from pad before override is applied"] pub fn set_irqfrompad(&mut self, val: bool) { self.0 = (self.0 & !(0x01 << 24u32)) | (((val as u32) & 0x01) << 24u32); } #[doc = "input signal to peripheral, after override is applied"] pub const fn intoperi(&self) -> bool { let val = (self.0 >> 19u32) & 0x01; val != 0 } #[doc = "input signal to peripheral, after override is applied"] pub fn set_intoperi(&mut self, val: bool) { self.0 = (self.0 & !(0x01 << 19u32)) | (((val as u32) & 0x01) << 19u32); } #[doc = "input signal from pad, before override is applied"] pub const fn infrompad(&self) -> bool { let val = (self.0 >> 17u32) & 0x01; val != 0 } #[doc = "input signal from pad, before override is applied"] pub fn set_infrompad(&mut self, val: bool) { self.0 = (self.0 & !(0x01 << 17u32)) | (((val as u32) & 0x01) << 17u32); } #[doc = "output enable to pad after register override is applied"] pub const fn oetopad(&self) -> bool { let val = (self.0 >> 13u32) & 0x01; val != 0 } #[doc = "output enable to pad after register override is applied"] pub fn set_oetopad(&mut self, val: bool) { self.0 = (self.0 & !(0x01 << 13u32)) | (((val as u32) & 0x01) << 13u32); } #[doc = "output enable from selected peripheral, before register override is applied"] pub const fn oefromperi(&self) -> bool { let val = (self.0 >> 12u32) & 0x01; val != 0 } #[doc = "output enable from selected peripheral, before register override is applied"] pub fn set_oefromperi(&mut self, val: bool) { self.0 = (self.0 & !(0x01 << 12u32)) | (((val as u32) & 0x01) << 12u32); } #[doc = "output signal to pad after register override is applied"] pub const fn outtopad(&self) -> bool { let val = (self.0 >> 9u32) & 0x01; val != 0 } #[doc = "output signal to pad after register override is applied"] pub fn set_outtopad(&mut self, val: bool) { self.0 = (self.0 & !(0x01 << 9u32)) | (((val as u32) & 0x01) << 9u32); } #[doc = "output signal from selected peripheral, before register override is applied"] pub const fn outfromperi(&self) -> bool { let val = (self.0 >> 8u32) & 0x01; val != 0 } #[doc = "output signal from selected peripheral, before register override is applied"] pub fn set_outfromperi(&mut self, val: bool) { self.0 = (self.0 & !(0x01 << 8u32)) | (((val as u32) & 0x01) << 8u32); } } impl Default for GpioStatus { fn default() -> GpioStatus { GpioStatus(0) } } #[doc = "Interrupt Force for proc1"] #[repr(transparent)] #[derive(Copy, Clone)] pub struct Int(pub u32); impl Int { pub fn level_high(&self, n: usize) -> bool { assert!(n < 8usize); let offs = 1u32 + (n as u32) * 4u32; let val = (self.0 >> offs) & 0x01; val != 0 } pub fn set_level_high(&mut self, n: usize, val: bool) { assert!(n < 8usize); let offs = 1u32 + (n as u32) * 4u32; self.0 = (self.0 & !(0x01 << offs)) | (((val as u32) & 0x01) << offs); } pub fn edge_low(&self, n: usize) -> bool { assert!(n < 8usize); let offs = 2u32 + (n as u32) * 4u32; let val = (self.0 >> offs) & 0x01; val != 0 } pub fn set_edge_low(&mut self, n: usize, val: bool) { assert!(n < 8usize); let offs = 2u32 + (n as u32) * 4u32; self.0 = (self.0 & !(0x01 << offs)) | (((val as u32) & 0x01) << offs); } pub fn edge_high(&self, n: usize) -> bool { assert!(n < 8usize); let offs = 3u32 + (n as u32) * 4u32; let val = (self.0 >> offs) & 0x01; val != 0 } pub fn set_edge_high(&mut self, n: usize, val: bool) { assert!(n < 8usize); let offs = 3u32 + (n as u32) * 4u32; self.0 = (self.0 & !(0x01 << offs)) | (((val as u32) & 0x01) << offs); } pub fn level_low(&self, n: usize) -> bool { assert!(n < 8usize); let offs = 0u32 + (n as u32) * 4u32; let val = (self.0 >> offs) & 0x01; val != 0 } pub fn set_level_low(&mut self, n: usize, val: bool) { assert!(n < 8usize); let offs = 0u32 + (n as u32) * 4u32; self.0 = (self.0 & !(0x01 << offs)) | (((val as u32) & 0x01) << offs); } } impl Default for Int { fn default() -> Int { Int(0) } } #[doc = "GPIO control including function select and overrides."] #[repr(transparent)] #[derive(Copy, Clone)] pub struct GpioCtrl(pub u32); impl GpioCtrl { pub const fn irqover(&self) -> super::vals::Irqover { let val = (self.0 >> 28u32) & 0x03; super::vals::Irqover(val as u8) } pub fn set_irqover(&mut self, val: super::vals::Irqover) { self.0 = (self.0 & !(0x03 << 28u32)) | (((val.0 as u32) & 0x03) << 28u32); } pub const fn inover(&self) -> super::vals::Inover { let val = (self.0 >> 16u32) & 0x03; super::vals::Inover(val as u8) } pub fn set_inover(&mut self, val: super::vals::Inover) { self.0 = (self.0 & !(0x03 << 16u32)) | (((val.0 as u32) & 0x03) << 16u32); } pub const fn oeover(&self) -> super::vals::Oeover { let val = (self.0 >> 12u32) & 0x03; super::vals::Oeover(val as u8) } pub fn set_oeover(&mut self, val: super::vals::Oeover) { self.0 = (self.0 & !(0x03 << 12u32)) | (((val.0 as u32) & 0x03) << 12u32); } pub const fn outover(&self) -> super::vals::Outover { let val = (self.0 >> 8u32) & 0x03; super::vals::Outover(val as u8) } pub fn set_outover(&mut self, val: super::vals::Outover) { self.0 = (self.0 & !(0x03 << 8u32)) | (((val.0 as u32) & 0x03) << 8u32); } #[doc = "0-31 -> selects pin function according to the gpio table 31 == NULL"] pub const fn funcsel(&self) -> u8 { let val = (self.0 >> 0u32) & 0x1f; val as u8 } #[doc = "0-31 -> selects pin function according to the gpio table 31 == NULL"] pub fn set_funcsel(&mut self, val: u8) { self.0 = (self.0 & !(0x1f << 0u32)) | (((val as u32) & 0x1f) << 0u32); } } impl Default for GpioCtrl { fn default() -> GpioCtrl { GpioCtrl(0) } }