enhering

PIN CLASS from _ami_

Sep 4th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #ifndef _PIN_H
  2. #define _PIN_H
  3.  
  4. extern "C"
  5. {
  6.   #include <libopencm3/stm32/gpio.h>
  7. }
  8.  
  9. enum class PinMode
  10. {
  11.   INPUT,
  12.   OUTPUT_10MHZ,
  13.   OUTPUT_2MHZ,
  14.   OUTPUT_50MHZ,
  15. };
  16.  
  17. enum class PinConfig
  18. {
  19.   INPUT_ANALOG,
  20.   INPUT_FLOAT,
  21.   INPUT_PULLUPDOWN,
  22.   OUTPUT_PUSHPULL,
  23.   OUTPUT_OPENDRAIN,
  24.   OUTPUT_ALTFPUSHPULL,
  25.   OUTPUT_ALTFOPENDRAIN
  26. };
  27.  
  28. class pin
  29. {
  30.   volatile uint32_t _pinBaseAddr;
  31.   uint32_t _port;
  32.  
  33.   uint8_t _getNativePinMode(PinMode pm);
  34.  
  35.   uint8_t _getNativePinConfig(PinConfig pc);
  36.  
  37. public:
  38.   pin(volatile uint32_t pinBaseAddr, uint32_t port);
  39.   pin() {}
  40.  
  41.  
  42.   void assign(volatile uint32_t pinBaseAddr, uint32_t port);
  43.   void setMode(PinMode pm, PinConfig pc);
  44.   void on();
  45.   void off();
  46.   void toggle();
  47.   bool get();
  48. };
  49.  
  50.  
  51. USAGE:
  52.  
  53. 01:55 _ami_: pin p(GPIOC, GPIO13);
  54. 01:55 _ami_:   p.setMode(PinMode::OUTPUT_50MHZ, PinConfig::OUTPUT_PUSHPULL);
  55. 01:55 _ami_: while (1) {  p.toggle();
  56. 01:55 _ami_:  time::delay(1000); }
Add Comment
Please, Sign In to add comment