LCM — CH32V003 Light Control Module
Light Control Module, I2C slave
Loading...
Searching...
No Matches
lcm_led.h
Go to the documentation of this file.
1/********************************** (C) COPYRIGHT *******************************
2 * File Name : lcm_led.h
3 * Description : Индикация LCM: красный (ошибка), зелёный (активность I2C).
4 *********************************************************************************/
5
6#ifndef __LCM_LED_H
7#define __LCM_LED_H
8
9#include <stdint.h>
10
11/*********************************************************************
12 * @fn LCM_Led_Init
13 *
14 * @brief Настройка PD4 (красный) и PC0 (зелёный). Вызывать из main
15 * до старта I2C.
16 */
17void LCM_Led_Init(void);
18
19/*********************************************************************
20 * @fn LCM_Led_ErrorOn / LCM_Led_ErrorOff
21 *
22 * @brief Управление красным индикатором ошибки.
23 *
24 * @details ErrorOn() зажигает красный и (пере)запускает минимальный таймер
25 * показа (~100 мс, см. LCM_LED_RED_MIN_MS в lcm_led.c). ErrorOff()
26 * вызывается диспетчером команд (lcm_module.c) сразу после КАЖДОЙ
27 * команды (в т.ч. без явного GET_ERROR — см. описание протокола
28 * в lcm_module.h), поэтому красный работает как короткая вспышка
29 * «ошибка произошла», а не постоянный индикатор непрочитанной
30 * ошибки. ErrorOff() гасит светодиод немедленно, если минимальный
31 * таймер уже истёк, иначе фактическое гашение довершает
32 * LCM_Led_Poll() — это гарантирует видимую вспышку даже при
33 * мгновенном ErrorOn()+ErrorOff() в одном вызове.
34 */
35void LCM_Led_ErrorOn(void);
36void LCM_Led_ErrorOff(void);
37
38/*********************************************************************
39 * @fn LCM_Led_ActivityPulse
40 *
41 * @brief Запрос зелёной вспышки (~100 мс) на принятую I2C-команду.
42 *
43 * @details Безопасно вызывать из I2C ISR: только прямая запись GPIO
44 * (BSHR/BCR — одна инструкция) и установка флага; НЕ использует
45 * __disable_irq()/__enable_irq() (это ломает MPIE при возврате
46 * из WCH-Interrupt-fast обработчика и вешает прерывания навсегда).
47 */
48void LCM_Led_ActivityPulse(void);
49
50/*********************************************************************
51 * @fn LCM_Led_Poll
52 *
53 * @brief Гашение зелёного через ~100 мс после ActivityPulse и гашение
54 * красного по истечении минимального времени показа (если
55 * ErrorOff() уже был запрошен). Вызывать из главного цикла main().
56 */
57void LCM_Led_Poll(void);
58
59#endif /* __LCM_LED_H */
void LCM_Led_Init(void)
Definition lcm_led.c:83
void LCM_Led_ActivityPulse(void)
Definition lcm_led.c:110
void LCM_Led_ErrorOff(void)
Definition lcm_led.c:100
void LCM_Led_ErrorOn(void)
Definition lcm_led.c:93
void LCM_Led_Poll(void)
Definition lcm_led.c:116