gateway_mcu/CH32V303-FreeRTOS/App/application/Host/Src/hostBusIdleDetection.c

125 lines
3.5 KiB
C

#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);
}