Corium 1.1.0
High-Performance Zero-Heap C++20 MPSC Application Runtime
Loading...
Searching...
No Matches
corium::embedded::SpiIsrAdapter< EventVariant > Class Template Reference

Non-blocking hardware ISR adapter for SPI controllers and DMA completion interrupts. Ingests SPI frames from interrupt context and posts typed events into Corium lock-free ring buffer. More...

#include <SpiAdapter.hpp>

+ Collaboration diagram for corium::embedded::SpiIsrAdapter< EventVariant >:

Public Member Functions

template<typename TargetEvent = SpiFrame<32>>
void postBufferFromIsr (uint8_t csId, std::span< const uint8_t > rxBytes, uint8_t status=0, EventPriority priority=EventPriority::Normal) noexcept
 Ingest raw SPI RX bytes from a DMA buffer into a typed event and post into sink.
 
template<typename TargetEvent = SpiFrame<32>, size_t MaxRxSize = 32>
void postFromIsr (const SpiFrame< MaxRxSize > &frame, EventPriority priority=EventPriority::Normal) noexcept
 Post an SPI frame directly from ISR context into the event sink.
 
 SpiIsrAdapter (EventSinkT< EventVariant > sink) noexcept
 

Detailed Description

template<typename EventVariant>
class corium::embedded::SpiIsrAdapter< EventVariant >

Non-blocking hardware ISR adapter for SPI controllers and DMA completion interrupts. Ingests SPI frames from interrupt context and posts typed events into Corium lock-free ring buffer.

Constructor & Destructor Documentation

◆ SpiIsrAdapter()

template<typename EventVariant >
corium::embedded::SpiIsrAdapter< EventVariant >::SpiIsrAdapter ( EventSinkT< EventVariant >  sink)
inlineexplicitnoexcept

Member Function Documentation

◆ postBufferFromIsr()

template<typename EventVariant >
template<typename TargetEvent = SpiFrame<32>>
void corium::embedded::SpiIsrAdapter< EventVariant >::postBufferFromIsr ( uint8_t  csId,
std::span< const uint8_t >  rxBytes,
uint8_t  status = 0,
EventPriority  priority = EventPriority::Normal 
)
inlinenoexcept

Ingest raw SPI RX bytes from a DMA buffer into a typed event and post into sink.

Template Parameters
TargetEventUser event type constructible from SpiFrame.
Parameters
csIdChip-select ID of the SPI slave.
rxBytesSpan of received bytes.
statusHardware status code.
priorityEvent priority.

◆ postFromIsr()

template<typename EventVariant >
template<typename TargetEvent = SpiFrame<32>, size_t MaxRxSize = 32>
void corium::embedded::SpiIsrAdapter< EventVariant >::postFromIsr ( const SpiFrame< MaxRxSize > &  frame,
EventPriority  priority = EventPriority::Normal 
)
inlinenoexcept

Post an SPI frame directly from ISR context into the event sink.

Template Parameters
TargetEventUser event type constructible from SpiFrame or SpiFrame itself.
MaxRxSizeBuffer capacity of the SPI frame.
Parameters
frameThe completed SPI hardware frame.
priorityPriority to assign (default: Normal).

The documentation for this class was generated from the following file: