#include "hostBusIdleDetection.h" static TimerHandle_t J0_485_Swtmr = NULL; static TimerHandle_t J2_485_Swtmr = NULL; static TimerHandle_t J4_485_Swtmr = NULL; static TimerHandle_t J6_485_Swtmr = NULL; static void J0_485_tmrCallback(void* parameter); static void J2_485_tmrCallback(void* parameter); static void J4_485_tmrCallback(void* parameter); static void J6_485_tmrCallback(void* parameter); // 创建二值信号量 SemaphoreHandle_t J0_IDLESemaphore = NULL; SemaphoreHandle_t J2_IDLESemaphore = NULL; SemaphoreHandle_t J4_IDLESemaphore = NULL; SemaphoreHandle_t J6_IDLESemaphore = NULL; #define softwareDelay (30 / (1000 / configTICK_RATE_HZ)) void hostIdleInit(void) { J0_485_Swtmr = xTimerCreate((const char*)"J0Timer", softwareDelay, //延时 (UBaseType_t )pdFALSE, //单次模式 (void *)1, //为每个计时器分配一个索引的唯一ID (TimerCallbackFunction_t)J0_485_tmrCallback); //回调函数 J2_485_Swtmr = xTimerCreate((const char*)"J2Timer", softwareDelay, (UBaseType_t )pdFALSE, (void *)2, (TimerCallbackFunction_t)J2_485_tmrCallback); J4_485_Swtmr = xTimerCreate((const char*)"J4Timer", softwareDelay, (UBaseType_t )pdFALSE, (void *)2, (TimerCallbackFunction_t)J4_485_tmrCallback); J6_485_Swtmr = xTimerCreate((const char*)"J6Timer", softwareDelay, (UBaseType_t )pdFALSE, (void *)2, (TimerCallbackFunction_t)J6_485_tmrCallback); J0_IDLESemaphore = xSemaphoreCreateBinary(); xSemaphoreGive(J0_IDLESemaphore); J2_IDLESemaphore = xSemaphoreCreateBinary(); xSemaphoreGive(J2_IDLESemaphore); J4_IDLESemaphore = xSemaphoreCreateBinary(); xSemaphoreGive(J4_IDLESemaphore); J6_IDLESemaphore = xSemaphoreCreateBinary(); xSemaphoreGive(J6_IDLESemaphore); } void J0_485_tmrCallback(void* parameter) { xSemaphoreGiveFromISR(J0_IDLESemaphore, 0); } void J2_485_tmrCallback(void* parameter) { xSemaphoreGiveFromISR(J2_IDLESemaphore, 0); } void J4_485_tmrCallback(void* parameter) { xSemaphoreGiveFromISR(J4_IDLESemaphore, 0); } void J6_485_tmrCallback(void* parameter) { xSemaphoreGiveFromISR(J6_IDLESemaphore, 0); } /* * @brief 空闲中断内容 * @param * @retval * */ void J0_485_IN_IDLE(void) { xTimerStartFromISR(J0_485_Swtmr, 0); } void J2_485_IN_IDLE(void) { xTimerStartFromISR(J2_485_Swtmr, 0); } void J4_485_IN_IDLE(void) { xTimerStartFromISR(J4_485_Swtmr, 0); } void J6_485_IN_IDLE(void) { xTimerStartFromISR(J6_485_Swtmr, 0); } /* * @brief 空闲中断后,第一次进入接收中断内容 * @param * @retval * */ void J0_485_IN_RXNE(void) { xTimerStopFromISR(J0_485_Swtmr, 0); xSemaphoreTakeFromISR(J0_IDLESemaphore, 0); } void J2_485_IN_RXNE(void) { xTimerStopFromISR(J2_485_Swtmr, 0); xSemaphoreTakeFromISR(J2_IDLESemaphore, 0); } void J4_485_IN_RXNE(void) { xTimerStopFromISR(J4_485_Swtmr, 0); xSemaphoreTakeFromISR(J4_IDLESemaphore, 0); } void J6_485_IN_RXNE(void) { xTimerStopFromISR(J6_485_Swtmr, 0); xSemaphoreTakeFromISR(J6_IDLESemaphore, 0); }