187 lines
5.1 KiB
C
187 lines
5.1 KiB
C
|
|
#include "slaveBusIdleDetection.h"
|
|
#include "semphr.h"
|
|
|
|
|
|
static TimerHandle_t J1_485_Swtmr = NULL;
|
|
static TimerHandle_t J3_485_Swtmr = NULL;
|
|
static TimerHandle_t J5_485_Swtmr = NULL;
|
|
static TimerHandle_t J7_485_Swtmr = NULL;
|
|
static TimerHandle_t J8_485_Swtmr = NULL;
|
|
static TimerHandle_t J9_485_Swtmr = NULL;
|
|
|
|
static void J1_485_tmrCallback(void* parameter);
|
|
static void J3_485_tmrCallback(void* parameter);
|
|
static void J5_485_tmrCallback(void* parameter);
|
|
static void J7_485_tmrCallback(void* parameter);
|
|
static void J8_485_tmrCallback(void* parameter);
|
|
static void J9_485_tmrCallback(void* parameter);
|
|
|
|
// 创建二值信号量
|
|
SemaphoreHandle_t J1_IDLESemaphore = NULL;
|
|
SemaphoreHandle_t J3_IDLESemaphore = NULL;
|
|
SemaphoreHandle_t J5_IDLESemaphore = NULL;
|
|
SemaphoreHandle_t J7_IDLESemaphore = NULL;
|
|
SemaphoreHandle_t J8_IDLESemaphore = NULL;
|
|
SemaphoreHandle_t J9_IDLESemaphore = NULL;
|
|
|
|
|
|
|
|
/* 设置延时时间为30mS */
|
|
#define softwareDelay (30 / (1000 / configTICK_RATE_HZ))
|
|
|
|
/*
|
|
* @brief 初始化所有用于空闲检测的软件定时器和二值变量
|
|
* @param
|
|
* @retval
|
|
*
|
|
*/
|
|
void slaveIdleInit(void)
|
|
{
|
|
J1_485_Swtmr = xTimerCreate((const char*)"J1Timer",
|
|
softwareDelay, //延时
|
|
(UBaseType_t )pdFALSE, //单次模式
|
|
(void *)1, //为每个计时器分配一个索引的唯一ID
|
|
(TimerCallbackFunction_t)J1_485_tmrCallback); //回调函数
|
|
|
|
J3_485_Swtmr = xTimerCreate((const char*)"J3Timer",
|
|
softwareDelay,
|
|
(UBaseType_t )pdFALSE,
|
|
(void *)2,
|
|
(TimerCallbackFunction_t)J3_485_tmrCallback);
|
|
|
|
J5_485_Swtmr = xTimerCreate((const char*)"J5Timer",
|
|
softwareDelay,
|
|
(UBaseType_t )pdFALSE,
|
|
(void *)2,
|
|
(TimerCallbackFunction_t)J5_485_tmrCallback);
|
|
|
|
J7_485_Swtmr = xTimerCreate((const char*)"J7Timer",
|
|
softwareDelay,
|
|
(UBaseType_t )pdFALSE,
|
|
(void *)2,
|
|
(TimerCallbackFunction_t)J7_485_tmrCallback);
|
|
|
|
J8_485_Swtmr = xTimerCreate((const char*)"J8Timer",
|
|
softwareDelay,
|
|
(UBaseType_t )pdFALSE,
|
|
(void *)2,
|
|
(TimerCallbackFunction_t)J8_485_tmrCallback);
|
|
|
|
J9_485_Swtmr = xTimerCreate((const char*)"J9Timer",
|
|
softwareDelay,
|
|
(UBaseType_t )pdFALSE,
|
|
(void *)2,
|
|
(TimerCallbackFunction_t)J9_485_tmrCallback);
|
|
|
|
J1_IDLESemaphore = xSemaphoreCreateBinary();
|
|
xSemaphoreGive(J1_IDLESemaphore);
|
|
J3_IDLESemaphore = xSemaphoreCreateBinary();
|
|
xSemaphoreGive(J3_IDLESemaphore);
|
|
J5_IDLESemaphore = xSemaphoreCreateBinary();
|
|
xSemaphoreGive(J5_IDLESemaphore);
|
|
J7_IDLESemaphore = xSemaphoreCreateBinary();
|
|
xSemaphoreGive(J7_IDLESemaphore);
|
|
J8_IDLESemaphore = xSemaphoreCreateBinary();
|
|
xSemaphoreGive(J8_IDLESemaphore);
|
|
J9_IDLESemaphore = xSemaphoreCreateBinary();
|
|
xSemaphoreGive(J9_IDLESemaphore);
|
|
}
|
|
|
|
void J1_485_tmrCallback(void* parameter)
|
|
{
|
|
xSemaphoreGiveFromISR(J1_IDLESemaphore, 0);
|
|
}
|
|
void J3_485_tmrCallback(void* parameter)
|
|
{
|
|
xSemaphoreGiveFromISR(J3_IDLESemaphore, 0);
|
|
}
|
|
void J5_485_tmrCallback(void* parameter)
|
|
{
|
|
xSemaphoreGiveFromISR(J5_IDLESemaphore, 0);
|
|
}
|
|
void J7_485_tmrCallback(void* parameter)
|
|
{
|
|
xSemaphoreGiveFromISR(J7_IDLESemaphore, 0);
|
|
}
|
|
void J8_485_tmrCallback(void* parameter)
|
|
{
|
|
xSemaphoreGiveFromISR(J8_IDLESemaphore, 0);
|
|
}
|
|
void J9_485_tmrCallback(void* parameter)
|
|
{
|
|
xSemaphoreGiveFromISR(J9_IDLESemaphore, 0);
|
|
}
|
|
|
|
|
|
/*
|
|
* @brief 空闲中断内容
|
|
* @param
|
|
* @retval
|
|
*
|
|
*/
|
|
void J1_485_IN_IDLE(void)
|
|
{
|
|
xTimerStartFromISR(J1_485_Swtmr, 0);
|
|
}
|
|
void J3_485_IN_IDLE(void)
|
|
{
|
|
xTimerStartFromISR(J3_485_Swtmr, 0);
|
|
}
|
|
void J5_485_IN_IDLE(void)
|
|
{
|
|
xTimerStartFromISR(J5_485_Swtmr, 0);
|
|
}
|
|
void J7_485_IN_IDLE(void)
|
|
{
|
|
xTimerStartFromISR(J7_485_Swtmr, 0);
|
|
}
|
|
void J8_485_IN_IDLE(void)
|
|
{
|
|
xTimerStartFromISR(J8_485_Swtmr, 0);
|
|
}
|
|
void J9_485_IN_IDLE(void)
|
|
{
|
|
xTimerStartFromISR(J9_485_Swtmr, 0);
|
|
}
|
|
|
|
/*
|
|
* @brief 空闲中断后,第一次进入接收中断内容
|
|
* @param
|
|
* @retval
|
|
*
|
|
*/
|
|
void J1_485_IN_RXNE(void)
|
|
{
|
|
xTimerStopFromISR(J1_485_Swtmr, 0);
|
|
xSemaphoreTakeFromISR(J1_IDLESemaphore, 0);
|
|
}
|
|
void J3_485_IN_RXNE(void)
|
|
{
|
|
xTimerStopFromISR(J3_485_Swtmr, 0);
|
|
xSemaphoreTakeFromISR(J3_IDLESemaphore, 0);
|
|
}
|
|
void J5_485_IN_RXNE(void)
|
|
{
|
|
xTimerStopFromISR(J5_485_Swtmr, 0);
|
|
xSemaphoreTakeFromISR(J5_IDLESemaphore, 0);
|
|
}
|
|
void J7_485_IN_RXNE(void)
|
|
{
|
|
xTimerStopFromISR(J7_485_Swtmr, 0);
|
|
xSemaphoreTakeFromISR(J7_IDLESemaphore, 0);
|
|
}
|
|
void J8_485_IN_RXNE(void)
|
|
{
|
|
xTimerStopFromISR(J8_485_Swtmr, 0);
|
|
xSemaphoreTakeFromISR(J8_IDLESemaphore, 0);
|
|
}
|
|
void J9_485_IN_RXNE(void)
|
|
{
|
|
xTimerStopFromISR(J9_485_Swtmr, 0);
|
|
xSemaphoreTakeFromISR(J9_IDLESemaphore, 0);
|
|
}
|
|
|
|
|
|
|