Naze32 clone with Frysky receiver
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

spi.cpp 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * mbed GPIO
  3. */
  4. #pragma GCC diagnostic push
  5. #pragma GCC diagnostic ignored "-Wunused-parameter"
  6. #pragma GCC diagnostic ignored "-pedantic"
  7. #include "mbed.h"
  8. #pragma GCC diagnostic pop
  9. extern "C" {
  10. #include "spi.h"
  11. }
  12. static PinName numToPin(uint8_t num) {
  13. switch (num) {
  14. case 20:
  15. return p20;
  16. case 21:
  17. return p21;
  18. case 22:
  19. return p22;
  20. case 23:
  21. return p23;
  22. case 24:
  23. return p24;
  24. case 25:
  25. return p25;
  26. case 26:
  27. return p26;
  28. }
  29. return p5;
  30. }
  31. #define GPIO_MAX_COUNT 42
  32. DigitalInOut *gpios[GPIO_MAX_COUNT];
  33. extern "C" {
  34. void gpioInit(void) {
  35. for (int i = 0; i < GPIO_MAX_COUNT; i++) {
  36. gpios[i] = NULL;
  37. }
  38. }
  39. void gpioDir(uint8_t num, uint8_t dir) {
  40. PinName n = numToPin(num);
  41. if (gpios[num] == NULL) {
  42. gpios[num] = new DigitalInOut(n);
  43. }
  44. if (dir == DIR_OUTPUT) {
  45. gpios[num]->output();
  46. } else {
  47. gpios[num]->input();
  48. }
  49. }
  50. void gpioSet(uint8_t num, uint8_t val) {
  51. PinName n = numToPin(num);
  52. if (gpios[num] == NULL) {
  53. gpios[num] = new DigitalInOut(n);
  54. gpios[num]->output();
  55. }
  56. gpios[num]->write(val);
  57. }
  58. uint8_t gpioGet(uint8_t num) {
  59. PinName n = numToPin(num);
  60. if (gpios[num] == NULL) {
  61. gpios[num] = new DigitalInOut(n);
  62. gpios[num]->input();
  63. }
  64. return gpios[num]->read();
  65. }
  66. }