sseg.h 972 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef SEVENSEGMENT_H_
  2. #define SEVENSEGMENT_H_
  3. #include "util.h"
  4. enum sseg_segment_id {
  5. SSEG_A,
  6. SSEG_B,
  7. SSEG_C,
  8. SSEG_D,
  9. SSEG_E,
  10. SSEG_F,
  11. SSEG_G,
  12. SSEG_DP,
  13. SSEG_NR_SEGMENTS,
  14. };
  15. struct sseg_segment_iomap {
  16. sfr_addr_t segment_ddr;
  17. sfr_addr_t segment_port;
  18. uint8_t segment_masks[SSEG_NR_SEGMENTS];
  19. bool segment_polarity;
  20. };
  21. struct sseg_iomap {
  22. const struct sseg_segment_iomap __flash *segment;
  23. sfr_addr_t mux_ddr;
  24. sfr_addr_t mux_port;
  25. uint8_t mux_mask;
  26. bool mux_polarity;
  27. };
  28. struct sseg_digit_data {
  29. const struct sseg_iomap __flash *iomap;
  30. uint8_t segment_enable_set;
  31. uint8_t segment_enable_mask;
  32. };
  33. #define SSEG_DIGIT_DP ((char)(1u << 7))
  34. void sseg_digit_set(struct sseg_digit_data *ddata,
  35. char digit);
  36. void sseg_multiplex(const struct sseg_digit_data *ddata_from,
  37. const struct sseg_digit_data *ddata_to);
  38. void sseg_init(struct sseg_digit_data *ddata);
  39. void sseg_exit(struct sseg_digit_data *ddata);
  40. #endif /* SEVENSEGMENT_H_ */