25#include <interfaces-impl/arch_registers_impl.h>
26#include <kernel/scheduler/scheduler.h>
46 asm volatile(
"mov r0, #0");
47 asm volatile(
"mov r1, #0");
48 asm volatile(
"bl _Z20CAN_RXIRQHandlerImplii");
55 asm volatile(
"mov r0, #0");
56 asm volatile(
"mov r1, #1");
57 asm volatile(
"bl _Z20CAN_RXIRQHandlerImplii");
64 asm volatile(
"mov r0, #1");
65 asm volatile(
"mov r1, #0");
66 asm volatile(
"bl _Z20CAN_RXIRQHandlerImplii");
73 asm volatile(
"mov r0, #1");
74 asm volatile(
"mov r1, #1");
75 asm volatile(
"bl _Z20CAN_RXIRQHandlerImplii");
82 asm volatile(
"mov r0, #0");
83 asm volatile(
"bl _Z20CAN_TXIRQHandlerImpli");
90 asm volatile(
"mov r0, #1");
91 asm volatile(
"bl _Z20CAN_TXIRQHandlerImpli");
115 CAN_TypeDef* can = bus->
getCAN();
118 res.
tme = can->TSR & CAN_TSR_TME >> 26;
119 res.
errCode = (can->ESR | CAN_ESR_LEC) >> 4;
121 if ((can->TSR & CAN_TSR_RQCP0) > 0)
125 can->TSR & (CAN_TSR_TXOK0 | CAN_TSR_ALST0 | CAN_TSR_TERR0) >> 1;
127 can->TSR |= CAN_TSR_RQCP0;
129 if ((can->TSR & CAN_TSR_RQCP1) > 0)
133 can->TSR & (CAN_TSR_TXOK1 | CAN_TSR_ALST1 | CAN_TSR_TERR1) >> 9;
135 can->TSR |= CAN_TSR_RQCP1;
137 if ((can->TSR & CAN_TSR_RQCP2) > 0)
140 res.
txStatus = can->TSR & (CAN_TSR_TXOK2 | 2 | CAN_TSR_TERR2) >> 17;
142 can->TSR |= CAN_TSR_RQCP2;
152 miosix::Scheduler::IRQfindNextThread();
void __attribute__((naked)) CAN1_RX0_IRQHandler()
Low level CanBus driver, with support for both peripherals (CAN1 and CAN2) on stm32f4 microcontroller...
void handleRXInterrupt(int fifo)
Handles an incoming RX interrupt. ONLY to be called from the Canbus RX interrupt handler routine.
IRQCircularBuffer< CanTXResult, TX_STATUS_BUF_SIZE > & getTXResultBuffer()
Returns a reference to the buffer containing transfer results and statistics.
uint32_t getTXMailboxSequence(uint8_t i)
Gets the sequence number of the message in the ith tx mailbox.
void wakeTXThread()
Wakes the transmission thread. ONLY to be called from the Canbus TX interrupt handler routine.
CAN_TypeDef * getCAN()
Returns the CanBus peripheral assigned to this instance.
CanbusDriver * canDrivers[2]
This file includes all the types the logdecoder script will decode.