afio.rs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. use stm32::{afio, AFIO};
  2. use rcc::APB2;
  3. pub trait AfioExt {
  4. fn constrain(self, apb2: &mut APB2) -> Parts;
  5. }
  6. impl AfioExt for AFIO {
  7. fn constrain(self, apb2: &mut APB2) -> Parts {
  8. apb2.enr().modify(|_, w| w.afioen().set_bit());
  9. apb2.rstr().modify(|_, w| w.afiorst().set_bit());
  10. apb2.rstr().modify(|_, w| w.afiorst().clear_bit());
  11. Parts {
  12. evcr: EVCR { _0: () },
  13. mapr: MAPR { _0: () },
  14. exticr1: EXTICR1 { _0: () },
  15. exticr2: EXTICR2 { _0: () },
  16. exticr3: EXTICR3 { _0: () },
  17. exticr4: EXTICR4 { _0: () },
  18. mapr2: MAPR2 { _0: () },
  19. }
  20. }
  21. }
  22. pub struct Parts {
  23. pub evcr: EVCR,
  24. pub mapr: MAPR,
  25. pub exticr1: EXTICR1,
  26. pub exticr2: EXTICR2,
  27. pub exticr3: EXTICR3,
  28. pub exticr4: EXTICR4,
  29. pub mapr2: MAPR2,
  30. }
  31. pub struct EVCR {
  32. _0: (),
  33. }
  34. impl EVCR {
  35. pub fn evcr(&mut self) -> &afio::EVCR {
  36. unsafe { &(*AFIO::ptr()).evcr }
  37. }
  38. }
  39. pub struct MAPR {
  40. _0: (),
  41. }
  42. impl MAPR {
  43. pub fn mapr(&mut self) -> &afio::MAPR {
  44. unsafe { &(*AFIO::ptr()).mapr }
  45. }
  46. /// Disables the JTAG to free up pb3, pb4 and pa15 for normal use
  47. pub fn disable_jtag(&mut self) {
  48. self.mapr().modify(|_, w| unsafe{w.swj_cfg().bits(0b010)})
  49. }
  50. }
  51. pub struct EXTICR1 {
  52. _0: (),
  53. }
  54. impl EXTICR1 {
  55. pub fn exticr1(&mut self) -> &afio::EXTICR1 {
  56. unsafe { &(*AFIO::ptr()).exticr1 }
  57. }
  58. }
  59. pub struct EXTICR2 {
  60. _0: (),
  61. }
  62. impl EXTICR2 {
  63. pub fn exticr2(&mut self) -> &afio::EXTICR2 {
  64. unsafe { &(*AFIO::ptr()).exticr2 }
  65. }
  66. }
  67. pub struct EXTICR3 {
  68. _0: (),
  69. }
  70. impl EXTICR3 {
  71. pub fn exticr3(&mut self) -> &afio::EXTICR3 {
  72. unsafe { &(*AFIO::ptr()).exticr3 }
  73. }
  74. }
  75. pub struct EXTICR4 {
  76. _0: (),
  77. }
  78. impl EXTICR4 {
  79. pub fn exticr4(&mut self) -> &afio::EXTICR4 {
  80. unsafe { &(*AFIO::ptr()).exticr4 }
  81. }
  82. }
  83. pub struct MAPR2 {
  84. _0: (),
  85. }
  86. impl MAPR2 {
  87. pub fn mapr2(&mut self) -> &afio::MAPR2 {
  88. unsafe { &(*AFIO::ptr()).mapr2 }
  89. }
  90. }