Naze32 clone with Frysky receiver
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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. }