125 lines
3.5 KiB
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);
|
|
}
|
|
|