@@ -362,53 +362,54 @@ impl CFGR {
362362
363363 assert ! ( sysclk <= 80_000_000 ) ;
364364
365- let hpre_bits = self . hclk
365+ let ( hpre_bits, hpre_div ) = self . hclk
366366 . map ( |hclk| match sysclk / hclk {
367+ // From p 194 in RM0394
367368 0 => unreachable ! ( ) ,
368- 1 => 0b0000 ,
369- 2 => 0b1000 ,
370- 3 ...5 => 0b1001 ,
371- 6 ...11 => 0b1010 ,
372- 12 ...39 => 0b1011 ,
373- 40 ...95 => 0b1100 ,
374- 96 ...191 => 0b1101 ,
375- 192 ...383 => 0b1110 ,
376- _ => 0b1111 ,
369+ 1 => ( 0b0000 , 1 ) ,
370+ 2 => ( 0b1000 , 2 ) ,
371+ 3 ...5 => ( 0b1001 , 4 ) ,
372+ 6 ...11 => ( 0b1010 , 8 ) ,
373+ 12 ...39 => ( 0b1011 , 16 ) ,
374+ 40 ...95 => ( 0b1100 , 64 ) ,
375+ 96 ...191 => ( 0b1101 , 128 ) ,
376+ 192 ...383 => ( 0b1110 , 256 ) ,
377+ _ => ( 0b1111 , 512 ) ,
377378 } )
378- . unwrap_or ( 0b0000 ) ;
379+ . unwrap_or ( ( 0b0000 , 1 ) ) ;
379380
380- let hclk = sysclk / ( 1 << ( hpre_bits ) ) ;
381+ let hclk = sysclk / hpre_div ;
381382
382383 assert ! ( hclk <= sysclk) ;
383384
384- let ppre1_bits = self . pclk1
385+ let ( ppre1_bits, ppre1 ) = self . pclk1
385386 . map ( |pclk1| match hclk / pclk1 {
387+ // From p 194 in RM0394
386388 0 => unreachable ! ( ) ,
387- 1 => 0b000 ,
388- 2 => 0b100 ,
389- 3 ...5 => 0b101 ,
390- 6 ...11 => 0b110 ,
391- _ => 0b111 ,
389+ 1 => ( 0b000 , 1 ) ,
390+ 2 => ( 0b100 , 2 ) ,
391+ 3 ...5 => ( 0b101 , 4 ) ,
392+ 6 ...11 => ( 0b110 , 8 ) ,
393+ _ => ( 0b111 , 16 )
392394 } )
393- . unwrap_or ( 0b000 ) ;
395+ . unwrap_or ( ( 0b000 , 1 ) ) ;
394396
395- let ppre1 = 1 << ( ppre1_bits) ;
396397 let pclk1 = hclk / u32 ( ppre1) ;
397398
398399 assert ! ( pclk1 <= sysclk) ;
399400
400- let ppre2_bits = self . pclk2
401+ let ( ppre2_bits, ppre2 ) = self . pclk2
401402 . map ( |pclk2| match hclk / pclk2 {
403+ // From p 194 in RM0394
402404 0 => unreachable ! ( ) ,
403- 1 => 0b000 ,
404- 2 => 0b100 ,
405- 3 ...5 => 0b101 ,
406- 6 ...11 => 0b110 ,
407- _ => 0b111 ,
405+ 1 => ( 0b000 , 1 ) ,
406+ 2 => ( 0b100 , 2 ) ,
407+ 3 ...5 => ( 0b101 , 4 ) ,
408+ 6 ...11 => ( 0b110 , 8 ) ,
409+ _ => ( 0b111 , 16 )
408410 } )
409- . unwrap_or ( 0b000 ) ;
411+ . unwrap_or ( ( 0b000 , 1 ) ) ;
410412
411- let ppre2 = 1 << ( ppre2_bits) ;
412413 let pclk2 = hclk / u32 ( ppre2) ;
413414
414415 assert ! ( pclk2 <= sysclk) ;
0 commit comments