Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
68 lines (46 sloc) 3.05 KB
/******************************************************************************
* Модуль: ads1256_InterruptHandlersConnector.c
* Автор: Celeron (c) 2018
* Назначение: Подключение Обработчиков прерываний (SPI и EXTI) для Драйвера АЦП к Стандартным драйверам из STM32Cube HAL-framework...
******************************************************************************/
// Драйверы STM32Cube HAL-framework реализованы так, что для Обработки значимых высокоуровневых событий в прикладном коде
// (например, передача данных полностью завершена - можно обработать принятый пакет данных...)
// предлагают Callback-функции - по ОДНОЙ единственной функции, на каждое СОБЫТИЕ. (Ограничение: но сразу от всех источников - аппаратных модулей - в единственный обработчик!).
// В связи с этим, в коде HAL-Драйверов объявлены пустышки с аттрибутом "WEAK", которые можно переопределить в прикладном коде...
//
// Ограничение применения STM32Cube HAL-Драйверов:
// а если в микроконтроллере несколько аппаратных модулей (а это всегда так!),
// и если понадобиться в Прерываниях обрабатывать События сразу от нескольких Модулей -
// то все события будут направлены в единственную Callback-функцию...
//
// Таким образом, авторы STM32Cube предполагают, что разработчик прикладного кода:
// в одном месте своей программы определит единый обработчик, в котором будет обрабатывать события от всех своих аппаратных модулей.
// Но что делать, если разработчиков прикладного кода несколько? и если они не имеют возможности между собой договориться о "едином стиле"?..
// Тогда возникает вопрос: поскольку WEAK-функцию можно переопределить только один раз в Сборке.
// Если я скрытно переопределю Callback-и в этом ADS1256 Драйвере, то реализация будет неуниверсальной (багнутой).
//
// Поэтому в этот модуль выделил STUB-код с ЯВНЫМИ ПЕРЕОПРЕДЕЛЕНИЯМИ Callback-функций.
// Если Вам (разработчикам прикладного кода) также понадобится использовать эти Callback-функции -
// можете их закомментировать и использовать свою версию кода,
// но не забудьте из них вызвать также и "Обработчики прерываний" текущего "Драйвера АЦП ADS1256".
//============================================================================
#include "stm32f1xx_hal.h" // подключаем HAL API
#include "ads1256.h" // Подключаем АЦП API
//-------------------------------------
// HAL-драйвер SPI "stm32f1xx_hal_spi.c" определяет WEAK user callbacks:
// Событие: Передача всех данных успешно завершена (принятые данные находятся в "Буфере приема", отправляемые данные ушли из "Буфера отправки") - в режиме полный дуплекс для _IT() и _DMA()
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{
ADS1256_INTERRUPT_OnSPI(hspi); //Требуется Драйверу ADS1256
}
// Событие: во время передачи произошла ошибка
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi)
{
assert_param(0);
}
//-------------------------------------
// HAL-драйвер EXTI "stm32f1xx_hal_gpio.c" определяет WEAK user callbacks:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
ADS1256_INTERRUPT_OnDRDY(GPIO_Pin); //Требуется Драйверу ADS1256
}