@@ -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