Skip to content

Commit 14d4b49

Browse files
fix to add Can to ccm mod
1 parent 4dc8d71 commit 14d4b49

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed

imxrt-hal/src/ccm.rs

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -965,3 +965,162 @@ pub mod spi {
965965
}
966966
}
967967
}
968+
969+
/// Timing configurations for FlexCAN peripherals
970+
pub mod can {
971+
use super::{ral::ccm, Divider, Frequency};
972+
973+
#[derive(Clone, Copy)]
974+
#[non_exhaustive] // Not all variants added
975+
pub enum ClockSelect {
976+
Pll2,
977+
}
978+
979+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
980+
#[allow(non_camel_case_types)] // Easier mapping if the names are consistent
981+
#[repr(u32)]
982+
pub enum PrescalarSelect {
983+
/// 0b000000: Divide by 1
984+
DIVIDE_1 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_1,
985+
/// 0b000001: Divide by 2
986+
DIVIDE_2 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_2,
987+
/// 0b000010: Divide by 3
988+
DIVIDE_3 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_3,
989+
/// 0b000011: Divide by 4
990+
DIVIDE_4 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_4,
991+
/// 0b000100: Divide by 5
992+
DIVIDE_5 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_5,
993+
/// 0b000101: Divide by 6
994+
DIVIDE_6 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_6,
995+
/// 0b000110: Divide by 7
996+
DIVIDE_7 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_7,
997+
/// 0b000111: Divide by 8
998+
DIVIDE_8 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_8,
999+
/// 0b001000: Divide by 9
1000+
DIVIDE_9 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_9,
1001+
/// 0b001001: Divide by 10
1002+
DIVIDE_10 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_10,
1003+
/// 0b001010: Divide by 11
1004+
DIVIDE_11 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_11,
1005+
/// 0b001011: Divide by 12
1006+
DIVIDE_12 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_12,
1007+
/// 0b001100: Divide by 13
1008+
DIVIDE_13 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_13,
1009+
/// 0b001101: Divide by 14
1010+
DIVIDE_14 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_14,
1011+
/// 0b001110: Divide by 15
1012+
DIVIDE_15 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_15,
1013+
/// 0b001111: Divide by 16
1014+
DIVIDE_16 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_16,
1015+
/// 0b010000: Divide by 17
1016+
DIVIDE_17 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_17,
1017+
/// 0b010001: Divide by 18
1018+
DIVIDE_18 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_18,
1019+
/// 0b010010: Divide by 19
1020+
DIVIDE_19 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_19,
1021+
/// 0b010011: Divide by 20
1022+
DIVIDE_20 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_20,
1023+
/// 0b010100: Divide by 21
1024+
DIVIDE_21 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_21,
1025+
/// 0b010101: Divide by 22
1026+
DIVIDE_22 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_22,
1027+
/// 0b010110: Divide by 23
1028+
DIVIDE_23 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_23,
1029+
/// 0b010111: Divide by 24
1030+
DIVIDE_24 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_24,
1031+
/// 0b011000: Divide by 25
1032+
DIVIDE_25 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_25,
1033+
/// 0b011001: Divide by 26
1034+
DIVIDE_26 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_26,
1035+
/// 0b011010: Divide by 27
1036+
DIVIDE_27 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_27,
1037+
/// 0b011011: Divide by 28
1038+
DIVIDE_28 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_28,
1039+
/// 0b011100: Divide by 29
1040+
DIVIDE_29 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_29,
1041+
/// 0b011101: Divide by 30
1042+
DIVIDE_30 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_30,
1043+
/// 0b011110: Divide by 31
1044+
DIVIDE_31 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_31,
1045+
/// 0b011111: Divide by 32
1046+
DIVIDE_32 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_32,
1047+
/// 0b100000: Divide by 33
1048+
DIVIDE_33 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_33,
1049+
/// 0b100001: Divide by 34
1050+
DIVIDE_34 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_34,
1051+
/// 0b100010: Divide by 35
1052+
DIVIDE_35 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_35,
1053+
/// 0b100011: Divide by 36
1054+
DIVIDE_36 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_36,
1055+
/// 0b100100: Divide by 37
1056+
DIVIDE_37 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_37,
1057+
/// 0b100101: Divide by 38
1058+
DIVIDE_38 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_38,
1059+
/// 0b100110: Divide by 39
1060+
DIVIDE_39 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_39,
1061+
/// 0b100111: Divide by 40
1062+
DIVIDE_40 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_40,
1063+
/// 0b101000: Divide by 41
1064+
DIVIDE_41 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_41,
1065+
/// 0b101001: Divide by 42
1066+
DIVIDE_42 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_42,
1067+
/// 0b101010: Divide by 43
1068+
DIVIDE_43 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_43,
1069+
/// 0b101011: Divide by 44
1070+
DIVIDE_44 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_44,
1071+
/// 0b101100: Divide by 45
1072+
DIVIDE_45 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_45,
1073+
/// 0b101101: Divide by 46
1074+
DIVIDE_46 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_46,
1075+
/// 0b101110: Divide by 47
1076+
DIVIDE_47 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_47,
1077+
/// 0b101111: Divide by 48
1078+
DIVIDE_48 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_48,
1079+
/// 0b110000: Divide by 49
1080+
DIVIDE_49 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_49,
1081+
/// 0b110001: Divide by 50
1082+
DIVIDE_50 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_50,
1083+
/// 0b110010: Divide by 51
1084+
DIVIDE_51 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_51,
1085+
/// 0b110011: Divide by 52
1086+
DIVIDE_52 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_52,
1087+
/// 0b110100: Divide by 53
1088+
DIVIDE_53 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_53,
1089+
/// 0b110101: Divide by 54
1090+
DIVIDE_54 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_54,
1091+
/// 0b110110: Divide by 55
1092+
DIVIDE_55 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_55,
1093+
/// 0b110111: Divide by 56
1094+
DIVIDE_56 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_56,
1095+
/// 0b111000: Divide by 57
1096+
DIVIDE_57 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_57,
1097+
/// 0b111001: Divide by 58
1098+
DIVIDE_58 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_58,
1099+
/// 0b111010: Divide by 59
1100+
DIVIDE_59 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_59,
1101+
/// 0b111011: Divide by 60
1102+
DIVIDE_60 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_60,
1103+
/// 0b111100: Divide by 61
1104+
DIVIDE_61 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_61,
1105+
/// 0b111101: Divide by 62
1106+
DIVIDE_62 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_62,
1107+
/// 0b111110: Divide by 63
1108+
DIVIDE_63 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_63,
1109+
/// 0b111111: Divide by 64
1110+
DIVIDE_64 = ccm::CSCMR2::CAN_CLK_PODF::RW::DIVIDE_64,
1111+
}
1112+
1113+
impl From<ClockSelect> for Frequency {
1114+
fn from(clock_select: ClockSelect) -> Self {
1115+
match clock_select {
1116+
ClockSelect::Pll2 => Frequency(528_000_000),
1117+
}
1118+
}
1119+
}
1120+
1121+
impl From<PrescalarSelect> for Divider {
1122+
fn from(prescalar_select: PrescalarSelect) -> Self {
1123+
Divider((prescalar_select as u32) + 1)
1124+
}
1125+
}
1126+
}

0 commit comments

Comments
 (0)