Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
In RTU mode, message frames are separated by a silent interval of at least 3.5 character times
If a silent interval of more than 1.5 character times occurs between two characters, the message frame is declared incomplete and
should be discarded by the receiver.
Далее нас интересуют макросы ENTER_CRITICAL_SECTION( ) и EXIT_CRITICAL_SECTION( ). Заменяем их на __disable_irq() и __enable_irq() соответственно.
// Declare interrupt save area
#define INTR_SAVE_AREA unsigned int _interrupt_save, _interrupt_temp
// Disable iterrupts and save old status register
#define INTR_DISABLE __asm volatile (\
"mrs %0, CPSR\n\t" \
"orr %1, %0, #128\n\t" \
"msr CPSR_c, %1" \
: "=r"(_interrupt_save), "=r"(_interrupt_temp) /* output */ \
: /* input */ \
: /* clobber */ \
)
// Restore status register
#define INTR_RESTORE __asm volatile (\
"msr CPSR_c, %0" \
: /* output */ \
: "r"(_interrupt_save)/* input */ \
: /* clobber */ \
)По поводу вложенных прерываний
я не зря указал в статье, что мы работаем с HAL
Портирование FreeModbus 1.5 под STM32 HAL rs485 без RTOS