analog_output.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "at32f403a_407.h"
  2. #include "analog_output.h"
  3. #include "shift_reg.h"
  4. #include "utility.h"
  5. #include "FreeRTOS.h"
  6. #include "task.h"
  7. #include "settings_api.h"
  8. #include "dac_transport.h"
  9. #include "monitoring.h"
  10. #include "mux.h"
  11. #include <stdio.h>
  12. #undef DBG
  13. #define DBG if(1)
  14. #if defined (MAO_4)
  15. uint16_t ao_mode; // режим работы аналоговый
  16. uint16_t ao_power; // слово состояния питания выходных каналов
  17. led_t ao_output_led[4] = {OUT_1_G, OUT_2_G, OUT_3_G, OUT_4_G};
  18. //
  19. void ao_init(void)
  20. {
  21. // Зеленые LED сигнализируют (вкл/выкл) входов.
  22. ao_led_update();
  23. // Сдвиговые регистры
  24. sh_init();
  25. // Внешний DAC
  26. dac_init();
  27. }
  28. // Управление LED для выходов
  29. void ao_led_update(void)
  30. {
  31. for (int i = 0; i < AO_NUMBER; i++)
  32. {
  33. if (settings.ao[i].state)
  34. leds[ao_output_led[i]].state = LED_ON;
  35. else
  36. leds[ao_output_led[i]].state = LED_OFF;
  37. }
  38. }
  39. //
  40. void ao_set(void)
  41. {
  42. for (int i = 0; i < AO_NUMBER; i++)
  43. {
  44. if (((settings.ao_state_bits >> i) & 1) != settings.ao[i].state)
  45. {
  46. settings.ao[i].state = ((settings.ao_state_bits >> i) & 1);
  47. if (settings.ao[i].state == 0) {
  48. leds[ao_output_led[i]].state = LED_OFF;
  49. }
  50. else {
  51. leds[ao_output_led[i]].state = LED_ON;
  52. }
  53. }
  54. }
  55. }
  56. //
  57. void dac_task(void *params)
  58. {
  59. for (;;)
  60. {
  61. ao_mode = 0x01;
  62. ao_power = sh_ao_mode(ao_mode);
  63. //printf("AO_Power: %u\r\n", ao_power);
  64. vTaskDelay(100);
  65. #if 0
  66. ai_alarm = sh_ai_mode(ai_mode);
  67. ai_processing();
  68. ai_leds_processing();
  69. vTaskDelay(10);
  70. #endif
  71. }
  72. }
  73. #endif