Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. use mkl25z4::{GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, SIM, SPI0, SPI1};
  2. use mkl25z4_hal::gpio::{self, gpioa, gpiob, gpioc, gpiod, gpioe, GpioExt};
  3. use mkl25z4_hal::spi::{self, Phase, Polarity, Spi};
  4. pub struct Pins {
  5. /// 5V supply for the LED (active high).
  6. pub enable_5v: gpioa::PA1<gpio::Output<gpio::PushPull>>,
  7. /// Red display frontlight LEDs (active high).
  8. pub red: gpioe::PE29<gpio::Output<gpio::PushPull>>,
  9. /// Green display frontlight LEDs (active high).
  10. pub green: gpioe::PE30<gpio::Output<gpio::PushPull>>,
  11. /// Blue display frontlight LEDs (active high).
  12. pub blue: gpioe::PE31<gpio::Output<gpio::PushPull>>,
  13. /// Top switch (active low).
  14. pub top_switch: gpioc::PC1<gpio::Input<gpio::PullUp>>,
  15. /// Left switches (top to bottom, active low).
  16. pub left_switches: (
  17. gpiod::PD1<gpio::Input<gpio::PullUp>>,
  18. gpiod::PD2<gpio::Input<gpio::PullUp>>,
  19. gpiod::PD3<gpio::Input<gpio::PullUp>>,
  20. gpiod::PD4<gpio::Input<gpio::PullUp>>,
  21. ),
  22. /// Right switches (top to bottom, active low).
  23. pub right_switches: (
  24. gpioa::PA13<gpio::Input<gpio::PullUp>>,
  25. gpioa::PA12<gpio::Input<gpio::PullUp>>,
  26. gpioa::PA5<gpio::Input<gpio::PullUp>>,
  27. gpioa::PA4<gpio::Input<gpio::PullUp>>,
  28. ),
  29. /// Ambient light sensor enable (active high).
  30. pub als_en: gpioe::PE20<gpio::Output<gpio::PushPull>>,
  31. // TODO: ADC for the ambient light sensor.
  32. /// Ambient light sensor.
  33. pub als: gpioe::PE21<gpio::Input<gpio::Floating>>,
  34. // TODO: PWM for the buzzer.
  35. /// Buzzer (active high).
  36. pub buzzer: gpioc::PC3<gpio::Output<gpio::PushPull>>,
  37. /// NRF IRQ line (active low).
  38. pub nrf_irq: gpiob::PB0<gpio::Input<gpio::PullUp>>,
  39. /// NRF chip select (active low).
  40. pub nrf_cs: gpiob::PB1<gpio::Output<gpio::PushPull>>,
  41. /// NRF chip enable.
  42. pub nrf_ce: gpiob::PB2<gpio::Output<gpio::PushPull>>,
  43. /// NRF supply voltage enable (active low).
  44. pub nrf_pwr: gpiob::PB3<gpio::Output<gpio::PushPull>>,
  45. /// SPI for the NRF module.
  46. pub nrf_spi: Spi<
  47. SPI1,
  48. gpiob::PB16<gpio::Alternate2>,
  49. gpiob::PB17<gpio::Alternate2>,
  50. gpiod::PD5<gpio::Alternate2>,
  51. >,
  52. /// BME280 chip select (active low).
  53. pub bme_cs: gpioc::PC2<gpio::Output<gpio::PushPull>>,
  54. /// Display busy (active low).
  55. pub display_busy: gpioc::PC4<gpio::Input<gpio::PullUp>>,
  56. /// Display chip select (active low).
  57. pub display_cs: gpioc::PC8<gpio::Output<gpio::PushPull>>,
  58. /// Display data/command.
  59. pub display_dc: gpioc::PC9<gpio::Output<gpio::PushPull>>,
  60. /// Display reset (active low).
  61. pub display_rst: gpioc::PC10<gpio::Output<gpio::PushPull>>,
  62. /// Display supply voltage enable (active low).
  63. pub display_pwr: gpioc::PC11<gpio::Output<gpio::PushPull>>,
  64. /// SPI for both display and BME280.
  65. pub display_bme_spi: Spi<
  66. SPI0,
  67. gpioc::PC7<gpio::Alternate5>,
  68. gpioc::PC6<gpio::Alternate5>,
  69. gpioc::PC5<gpio::Alternate2>,
  70. >,
  71. }
  72. impl Pins {
  73. pub fn configure(
  74. sim: &mut SIM,
  75. gpioa: GPIOA,
  76. gpiob: GPIOB,
  77. gpioc: GPIOC,
  78. gpiod: GPIOD,
  79. gpioe: GPIOE,
  80. spi0: SPI0,
  81. spi1: SPI1,
  82. ) -> Pins {
  83. let mut gpioa = gpioa.split(sim);
  84. let mut gpiob = gpiob.split(sim);
  85. let mut gpioc = gpioc.split(sim);
  86. let mut gpiod = gpiod.split(sim);
  87. let mut gpioe = gpioe.split(sim);
  88. // SPI0 for the display/BME module.
  89. let mosi = gpioc.pc7.into_alternate(&mut gpioc.pddr);
  90. let miso = gpioc.pc6.into_alternate(&mut gpioc.pddr);
  91. let sck = gpioc.pc5.into_alternate(&mut gpioc.pddr);
  92. let mode = spi::Mode {
  93. polarity: Polarity::IdleLow,
  94. phase: Phase::CaptureOnFirstTransition,
  95. };
  96. let spi0 = Spi::spi0(spi0, mosi, miso, sck, mode, sim);
  97. // SPI1 for the NRF module.
  98. let mosi = gpiob.pb16.into_alternate(&mut gpiob.pddr);
  99. let miso = gpiob.pb17.into_alternate(&mut gpiob.pddr);
  100. let sck = gpiod.pd5.into_alternate(&mut gpiod.pddr);
  101. let mode = spi::Mode {
  102. polarity: Polarity::IdleLow,
  103. phase: Phase::CaptureOnFirstTransition,
  104. };
  105. let spi1 = Spi::spi1(spi1, mosi, miso, sck, mode, sim);
  106. Pins {
  107. enable_5v: gpioa.pa1.into_push_pull_output(&mut gpioa.pddr),
  108. red: gpioe.pe29.into_push_pull_output(&mut gpioe.pddr),
  109. green: gpioe.pe30.into_push_pull_output(&mut gpioe.pddr),
  110. blue: gpioe.pe31.into_push_pull_output(&mut gpioe.pddr),
  111. top_switch: gpioc.pc1.into_pull_up_input(&mut gpioc.pddr),
  112. left_switches: (
  113. gpiod.pd1.into_pull_up_input(&mut gpiod.pddr),
  114. gpiod.pd2.into_pull_up_input(&mut gpiod.pddr),
  115. gpiod.pd3.into_pull_up_input(&mut gpiod.pddr),
  116. gpiod.pd4.into_pull_up_input(&mut gpiod.pddr),
  117. ),
  118. right_switches: (
  119. gpioa.pa13.into_pull_up_input(&mut gpioa.pddr),
  120. gpioa.pa12.into_pull_up_input(&mut gpioa.pddr),
  121. gpioa.pa5.into_pull_up_input(&mut gpioa.pddr),
  122. gpioa.pa4.into_pull_up_input(&mut gpioa.pddr),
  123. ),
  124. als_en: gpioe.pe20.into_push_pull_output(&mut gpioe.pddr),
  125. als: gpioe.pe21.into_floating_input(&mut gpioe.pddr),
  126. buzzer: gpioc.pc3.into_push_pull_output(&mut gpioc.pddr),
  127. nrf_irq: gpiob.pb0.into_pull_up_input(&mut gpiob.pddr),
  128. nrf_cs: gpiob.pb1.into_push_pull_output(&mut gpiob.pddr),
  129. nrf_ce: gpiob.pb2.into_push_pull_output(&mut gpiob.pddr),
  130. nrf_pwr: gpiob.pb3.into_push_pull_output(&mut gpiob.pddr),
  131. nrf_spi: spi1,
  132. bme_cs: gpioc.pc2.into_push_pull_output(&mut gpioc.pddr),
  133. display_busy: gpioc.pc4.into_pull_up_input(&mut gpioc.pddr),
  134. display_cs: gpioc.pc8.into_push_pull_output(&mut gpioc.pddr),
  135. display_dc: gpioc.pc9.into_push_pull_output(&mut gpioc.pddr),
  136. display_rst: gpioc.pc10.into_push_pull_output(&mut gpioc.pddr),
  137. display_pwr: gpioc.pc11.into_push_pull_output(&mut gpioc.pddr),
  138. display_bme_spi: spi0,
  139. }
  140. }
  141. }