Вынеси программные часы, коррекцию по ProtoCAN RTCSETUP и атомарную метку логгера в переносимое ядро без глобального состояния. Подключи eCAN-A и CPU Timer2 отдельным портом F28335; зафиксируй календарные границы, переполнение, задержку RX и защиту IRQ в хостовых тестах.
20 lines
2.6 KiB
C
20 lines
2.6 KiB
C
#ifndef GLOBAL_TIME_F28335_H /* Защищает порт F28335 от повторного включения. */
|
|
#define GLOBAL_TIME_F28335_H /* Отмечает единственный экземпляр аппаратного порта. */
|
|
#include "global_time.h" /* Экспортирует тот же снимок метки и календарный API, что переносимое ядро. */
|
|
#ifdef __cplusplus /* Сохраняет возможность подключения из приложения C++. */
|
|
extern "C" { /* Фиксирует C ABI аппаратных точек входа. */
|
|
#endif /* Завершает условное открытие C ABI. */
|
|
int gt_f28335_init(uint16_t device_type, uint16_t device_id); /* После InitECan и InitPieVectTable, до IRQ: занимает только eCAN-A MBOX7 RX и MBOX8 TX. */
|
|
int gt_f28335_init_periph(uint16_t periph); /* Преобразует PERIPH 0..31 в Type=1/2, ID=0..15 по реестру ProtoCAN. */
|
|
gt_clock *gt_f28335_clock(void); /* Даёт логгеру ядро для gt_get; указатель действителен после успешного init. */
|
|
void gt_f28335_ready(void); /* Вызывается после успешной инициализации всей платы, затем отправка происходит из service. */
|
|
void gt_f28335_tick_1ms(void); /* Подключается к существующему ISR 1 мс, если отдельный Timer2 не используется. */
|
|
void gt_f28335_rx_isr(void); /* Вызывается общим ECAN0INTA ISR до очистки общих флагов; не выполняет календарных циклов. */
|
|
void gt_f28335_service(void); /* Вызывается в main: применяет последний RX, обслуживает ACK и повторы готовности без ожиданий. */
|
|
int gt_f28335_timer2_start(uint32_t cpu_hz); /* Необязательный такт: занимает CPU Timer2/INT14, принимает частоту CPU в Гц, кратную 1000. */
|
|
void gt_f28335_timer2_stop(void); /* Останавливает только ранее запущенный портом Timer2, сохраняя остальные разрешения CPU IRQ. */
|
|
#ifdef __cplusplus /* Закрывает C ABI при использовании C++. */
|
|
} /* Завершает блок аппаратных функций с C-связыванием. */
|
|
#endif /* Завершает языковую проверку. */
|
|
#endif /* Завершает защиту заголовка порта. */
|