| 1 | //! Enums used in Hspi configuration. |
| 2 | |
| 3 | #[allow (dead_code)] |
| 4 | #[derive (Copy, Clone, defmt::Format)] |
| 5 | pub(crate) enum HspiMode { |
| 6 | IndirectWrite, |
| 7 | IndirectRead, |
| 8 | AutoPolling, |
| 9 | MemoryMapped, |
| 10 | } |
| 11 | |
| 12 | impl Into<u8> for HspiMode { |
| 13 | fn into(self) -> u8 { |
| 14 | match self { |
| 15 | HspiMode::IndirectWrite => 0b00, |
| 16 | HspiMode::IndirectRead => 0b01, |
| 17 | HspiMode::AutoPolling => 0b10, |
| 18 | HspiMode::MemoryMapped => 0b11, |
| 19 | } |
| 20 | } |
| 21 | } |
| 22 | |
| 23 | /// Hspi lane width |
| 24 | #[allow (dead_code)] |
| 25 | #[derive (Copy, Clone, defmt::Format)] |
| 26 | pub enum HspiWidth { |
| 27 | /// None |
| 28 | NONE, |
| 29 | /// Single lane |
| 30 | SING, |
| 31 | /// Dual lanes |
| 32 | DUAL, |
| 33 | /// Quad lanes |
| 34 | QUAD, |
| 35 | /// Eight lanes |
| 36 | OCTO, |
| 37 | /// Sixteen lanes |
| 38 | HEXADECA, |
| 39 | } |
| 40 | |
| 41 | impl Into<u8> for HspiWidth { |
| 42 | fn into(self) -> u8 { |
| 43 | match self { |
| 44 | HspiWidth::NONE => 0b00, |
| 45 | HspiWidth::SING => 0b01, |
| 46 | HspiWidth::DUAL => 0b10, |
| 47 | HspiWidth::QUAD => 0b11, |
| 48 | HspiWidth::OCTO => 0b100, |
| 49 | HspiWidth::HEXADECA => 0b101, |
| 50 | } |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | /// Flash bank selection |
| 55 | #[allow (dead_code)] |
| 56 | #[derive (Copy, Clone, defmt::Format)] |
| 57 | pub enum FlashSelection { |
| 58 | /// Bank 1 |
| 59 | Flash1, |
| 60 | /// Bank 2 |
| 61 | Flash2, |
| 62 | } |
| 63 | |
| 64 | impl Into<bool> for FlashSelection { |
| 65 | fn into(self) -> bool { |
| 66 | match self { |
| 67 | FlashSelection::Flash1 => false, |
| 68 | FlashSelection::Flash2 => true, |
| 69 | } |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | /// Wrap Size |
| 74 | #[allow (dead_code)] |
| 75 | #[allow (missing_docs)] |
| 76 | #[derive (Copy, Clone, defmt::Format)] |
| 77 | pub enum WrapSize { |
| 78 | None, |
| 79 | _16Bytes, |
| 80 | _32Bytes, |
| 81 | _64Bytes, |
| 82 | _128Bytes, |
| 83 | } |
| 84 | |
| 85 | impl Into<u8> for WrapSize { |
| 86 | fn into(self) -> u8 { |
| 87 | match self { |
| 88 | WrapSize::None => 0x00, |
| 89 | WrapSize::_16Bytes => 0x02, |
| 90 | WrapSize::_32Bytes => 0x03, |
| 91 | WrapSize::_64Bytes => 0x04, |
| 92 | WrapSize::_128Bytes => 0x05, |
| 93 | } |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | /// Memory Type |
| 98 | #[allow (missing_docs)] |
| 99 | #[allow (dead_code)] |
| 100 | #[derive (Copy, Clone, defmt::Format)] |
| 101 | pub enum MemoryType { |
| 102 | Micron, |
| 103 | Macronix, |
| 104 | Standard, |
| 105 | MacronixRam, |
| 106 | HyperBusMemory, |
| 107 | HyperBusRegister, |
| 108 | } |
| 109 | |
| 110 | impl Into<u8> for MemoryType { |
| 111 | fn into(self) -> u8 { |
| 112 | match self { |
| 113 | MemoryType::Micron => 0x00, |
| 114 | MemoryType::Macronix => 0x01, |
| 115 | MemoryType::Standard => 0x02, |
| 116 | MemoryType::MacronixRam => 0x03, |
| 117 | MemoryType::HyperBusMemory => 0x04, |
| 118 | MemoryType::HyperBusRegister => 0x04, |
| 119 | } |
| 120 | } |
| 121 | } |
| 122 | |
| 123 | /// Hspi memory size. |
| 124 | #[allow (missing_docs)] |
| 125 | #[derive (Copy, Clone, defmt::Format)] |
| 126 | pub enum MemorySize { |
| 127 | _1KiB, |
| 128 | _2KiB, |
| 129 | _4KiB, |
| 130 | _8KiB, |
| 131 | _16KiB, |
| 132 | _32KiB, |
| 133 | _64KiB, |
| 134 | _128KiB, |
| 135 | _256KiB, |
| 136 | _512KiB, |
| 137 | _1MiB, |
| 138 | _2MiB, |
| 139 | _4MiB, |
| 140 | _8MiB, |
| 141 | _16MiB, |
| 142 | _32MiB, |
| 143 | _64MiB, |
| 144 | _128MiB, |
| 145 | _256MiB, |
| 146 | _512MiB, |
| 147 | _1GiB, |
| 148 | _2GiB, |
| 149 | _4GiB, |
| 150 | Other(u8), |
| 151 | } |
| 152 | |
| 153 | impl Into<u8> for MemorySize { |
| 154 | fn into(self) -> u8 { |
| 155 | match self { |
| 156 | MemorySize::_1KiB => 6, |
| 157 | MemorySize::_2KiB => 7, |
| 158 | MemorySize::_4KiB => 8, |
| 159 | MemorySize::_8KiB => 9, |
| 160 | MemorySize::_16KiB => 10, |
| 161 | MemorySize::_32KiB => 11, |
| 162 | MemorySize::_64KiB => 12, |
| 163 | MemorySize::_128KiB => 13, |
| 164 | MemorySize::_256KiB => 14, |
| 165 | MemorySize::_512KiB => 15, |
| 166 | MemorySize::_1MiB => 16, |
| 167 | MemorySize::_2MiB => 17, |
| 168 | MemorySize::_4MiB => 18, |
| 169 | MemorySize::_8MiB => 19, |
| 170 | MemorySize::_16MiB => 20, |
| 171 | MemorySize::_32MiB => 21, |
| 172 | MemorySize::_64MiB => 22, |
| 173 | MemorySize::_128MiB => 23, |
| 174 | MemorySize::_256MiB => 24, |
| 175 | MemorySize::_512MiB => 25, |
| 176 | MemorySize::_1GiB => 26, |
| 177 | MemorySize::_2GiB => 27, |
| 178 | MemorySize::_4GiB => 28, |
| 179 | MemorySize::Other(val) => val, |
| 180 | } |
| 181 | } |
| 182 | } |
| 183 | |
| 184 | /// Hspi Address size |
| 185 | #[derive (Copy, Clone, defmt::Format)] |
| 186 | pub enum AddressSize { |
| 187 | /// 8-bit address |
| 188 | _8Bit, |
| 189 | /// 16-bit address |
| 190 | _16Bit, |
| 191 | /// 24-bit address |
| 192 | _24Bit, |
| 193 | /// 32-bit address |
| 194 | _32Bit, |
| 195 | } |
| 196 | |
| 197 | impl Into<u8> for AddressSize { |
| 198 | fn into(self) -> u8 { |
| 199 | match self { |
| 200 | AddressSize::_8Bit => 0b00, |
| 201 | AddressSize::_16Bit => 0b01, |
| 202 | AddressSize::_24Bit => 0b10, |
| 203 | AddressSize::_32Bit => 0b11, |
| 204 | } |
| 205 | } |
| 206 | } |
| 207 | |
| 208 | /// Time the Chip Select line stays high. |
| 209 | #[allow (missing_docs)] |
| 210 | #[derive (Copy, Clone, defmt::Format)] |
| 211 | pub enum ChipSelectHighTime { |
| 212 | _1Cycle, |
| 213 | _2Cycle, |
| 214 | _3Cycle, |
| 215 | _4Cycle, |
| 216 | _5Cycle, |
| 217 | _6Cycle, |
| 218 | _7Cycle, |
| 219 | _8Cycle, |
| 220 | } |
| 221 | |
| 222 | impl Into<u8> for ChipSelectHighTime { |
| 223 | fn into(self) -> u8 { |
| 224 | match self { |
| 225 | ChipSelectHighTime::_1Cycle => 0, |
| 226 | ChipSelectHighTime::_2Cycle => 1, |
| 227 | ChipSelectHighTime::_3Cycle => 2, |
| 228 | ChipSelectHighTime::_4Cycle => 3, |
| 229 | ChipSelectHighTime::_5Cycle => 4, |
| 230 | ChipSelectHighTime::_6Cycle => 5, |
| 231 | ChipSelectHighTime::_7Cycle => 6, |
| 232 | ChipSelectHighTime::_8Cycle => 7, |
| 233 | } |
| 234 | } |
| 235 | } |
| 236 | |
| 237 | /// FIFO threshold. |
| 238 | #[allow (missing_docs)] |
| 239 | #[derive (Copy, Clone, defmt::Format)] |
| 240 | pub enum FIFOThresholdLevel { |
| 241 | _1Bytes, |
| 242 | _2Bytes, |
| 243 | _3Bytes, |
| 244 | _4Bytes, |
| 245 | _5Bytes, |
| 246 | _6Bytes, |
| 247 | _7Bytes, |
| 248 | _8Bytes, |
| 249 | _9Bytes, |
| 250 | _10Bytes, |
| 251 | _11Bytes, |
| 252 | _12Bytes, |
| 253 | _13Bytes, |
| 254 | _14Bytes, |
| 255 | _15Bytes, |
| 256 | _16Bytes, |
| 257 | _17Bytes, |
| 258 | _18Bytes, |
| 259 | _19Bytes, |
| 260 | _20Bytes, |
| 261 | _21Bytes, |
| 262 | _22Bytes, |
| 263 | _23Bytes, |
| 264 | _24Bytes, |
| 265 | _25Bytes, |
| 266 | _26Bytes, |
| 267 | _27Bytes, |
| 268 | _28Bytes, |
| 269 | _29Bytes, |
| 270 | _30Bytes, |
| 271 | _31Bytes, |
| 272 | _32Bytes, |
| 273 | } |
| 274 | |
| 275 | impl Into<u8> for FIFOThresholdLevel { |
| 276 | fn into(self) -> u8 { |
| 277 | match self { |
| 278 | FIFOThresholdLevel::_1Bytes => 0, |
| 279 | FIFOThresholdLevel::_2Bytes => 1, |
| 280 | FIFOThresholdLevel::_3Bytes => 2, |
| 281 | FIFOThresholdLevel::_4Bytes => 3, |
| 282 | FIFOThresholdLevel::_5Bytes => 4, |
| 283 | FIFOThresholdLevel::_6Bytes => 5, |
| 284 | FIFOThresholdLevel::_7Bytes => 6, |
| 285 | FIFOThresholdLevel::_8Bytes => 7, |
| 286 | FIFOThresholdLevel::_9Bytes => 8, |
| 287 | FIFOThresholdLevel::_10Bytes => 9, |
| 288 | FIFOThresholdLevel::_11Bytes => 10, |
| 289 | FIFOThresholdLevel::_12Bytes => 11, |
| 290 | FIFOThresholdLevel::_13Bytes => 12, |
| 291 | FIFOThresholdLevel::_14Bytes => 13, |
| 292 | FIFOThresholdLevel::_15Bytes => 14, |
| 293 | FIFOThresholdLevel::_16Bytes => 15, |
| 294 | FIFOThresholdLevel::_17Bytes => 16, |
| 295 | FIFOThresholdLevel::_18Bytes => 17, |
| 296 | FIFOThresholdLevel::_19Bytes => 18, |
| 297 | FIFOThresholdLevel::_20Bytes => 19, |
| 298 | FIFOThresholdLevel::_21Bytes => 20, |
| 299 | FIFOThresholdLevel::_22Bytes => 21, |
| 300 | FIFOThresholdLevel::_23Bytes => 22, |
| 301 | FIFOThresholdLevel::_24Bytes => 23, |
| 302 | FIFOThresholdLevel::_25Bytes => 24, |
| 303 | FIFOThresholdLevel::_26Bytes => 25, |
| 304 | FIFOThresholdLevel::_27Bytes => 26, |
| 305 | FIFOThresholdLevel::_28Bytes => 27, |
| 306 | FIFOThresholdLevel::_29Bytes => 28, |
| 307 | FIFOThresholdLevel::_30Bytes => 29, |
| 308 | FIFOThresholdLevel::_31Bytes => 30, |
| 309 | FIFOThresholdLevel::_32Bytes => 31, |
| 310 | } |
| 311 | } |
| 312 | } |
| 313 | |
| 314 | /// Dummy cycle count |
| 315 | #[allow (missing_docs)] |
| 316 | #[derive (Copy, Clone, defmt::Format)] |
| 317 | pub enum DummyCycles { |
| 318 | _0, |
| 319 | _1, |
| 320 | _2, |
| 321 | _3, |
| 322 | _4, |
| 323 | _5, |
| 324 | _6, |
| 325 | _7, |
| 326 | _8, |
| 327 | _9, |
| 328 | _10, |
| 329 | _11, |
| 330 | _12, |
| 331 | _13, |
| 332 | _14, |
| 333 | _15, |
| 334 | _16, |
| 335 | _17, |
| 336 | _18, |
| 337 | _19, |
| 338 | _20, |
| 339 | _21, |
| 340 | _22, |
| 341 | _23, |
| 342 | _24, |
| 343 | _25, |
| 344 | _26, |
| 345 | _27, |
| 346 | _28, |
| 347 | _29, |
| 348 | _30, |
| 349 | _31, |
| 350 | } |
| 351 | |
| 352 | impl Into<u8> for DummyCycles { |
| 353 | fn into(self) -> u8 { |
| 354 | match self { |
| 355 | DummyCycles::_0 => 0, |
| 356 | DummyCycles::_1 => 1, |
| 357 | DummyCycles::_2 => 2, |
| 358 | DummyCycles::_3 => 3, |
| 359 | DummyCycles::_4 => 4, |
| 360 | DummyCycles::_5 => 5, |
| 361 | DummyCycles::_6 => 6, |
| 362 | DummyCycles::_7 => 7, |
| 363 | DummyCycles::_8 => 8, |
| 364 | DummyCycles::_9 => 9, |
| 365 | DummyCycles::_10 => 10, |
| 366 | DummyCycles::_11 => 11, |
| 367 | DummyCycles::_12 => 12, |
| 368 | DummyCycles::_13 => 13, |
| 369 | DummyCycles::_14 => 14, |
| 370 | DummyCycles::_15 => 15, |
| 371 | DummyCycles::_16 => 16, |
| 372 | DummyCycles::_17 => 17, |
| 373 | DummyCycles::_18 => 18, |
| 374 | DummyCycles::_19 => 19, |
| 375 | DummyCycles::_20 => 20, |
| 376 | DummyCycles::_21 => 21, |
| 377 | DummyCycles::_22 => 22, |
| 378 | DummyCycles::_23 => 23, |
| 379 | DummyCycles::_24 => 24, |
| 380 | DummyCycles::_25 => 25, |
| 381 | DummyCycles::_26 => 26, |
| 382 | DummyCycles::_27 => 27, |
| 383 | DummyCycles::_28 => 28, |
| 384 | DummyCycles::_29 => 29, |
| 385 | DummyCycles::_30 => 30, |
| 386 | DummyCycles::_31 => 31, |
| 387 | } |
| 388 | } |
| 389 | } |
| 390 | |
| 391 | /// Functional mode |
| 392 | #[allow (missing_docs)] |
| 393 | #[allow (dead_code)] |
| 394 | #[derive (Copy, Clone, defmt::Format)] |
| 395 | pub enum FunctionalMode { |
| 396 | IndirectWrite, |
| 397 | IndirectRead, |
| 398 | AutoStatusPolling, |
| 399 | MemoryMapped, |
| 400 | } |
| 401 | |
| 402 | impl Into<u8> for FunctionalMode { |
| 403 | fn into(self) -> u8 { |
| 404 | match self { |
| 405 | FunctionalMode::IndirectWrite => 0x00, |
| 406 | FunctionalMode::IndirectRead => 0x01, |
| 407 | FunctionalMode::AutoStatusPolling => 0x02, |
| 408 | FunctionalMode::MemoryMapped => 0x03, |
| 409 | } |
| 410 | } |
| 411 | } |
| 412 | |