221 lines
4.6 KiB
C
221 lines
4.6 KiB
C
#include "busIdleDetection.h"
|
||
|
||
|
||
#ifdef RS485BUSIDLE1
|
||
#include "uart_dev.h"
|
||
|
||
/* 通过软件定时器的方式来完成 */
|
||
static TimerHandle_t J1_485_Swtmr = NULL;
|
||
static TimerHandle_t J2_485_Swtmr = NULL;
|
||
static TimerHandle_t J3_485_Swtmr = NULL;
|
||
static TimerHandle_t J4_485_Swtmr = NULL;
|
||
static TimerHandle_t J5_0_485_Swtmr = NULL;
|
||
|
||
static void J1_485_tmrCallback(void* parameter);
|
||
static void J2_485_tmrCallback(void* parameter);
|
||
static void J3_485_tmrCallback(void* parameter);
|
||
static void J4_485_tmrCallback(void* parameter);
|
||
static void J5_0_485_tmrCallback(void* parameter);
|
||
|
||
#define softwareDelay (30 / (1000 / configTICK_RATE_HZ))
|
||
|
||
/*
|
||
* @brief 初始化所有的软件定时器
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void softwareTimeInit(void)
|
||
{
|
||
J1_485_Swtmr = xTimerCreate((const char*)"J1Timer",
|
||
softwareDelay, //延时
|
||
(UBaseType_t )pdFALSE, //单次模式
|
||
(void *)1, //为每个计时器分配一个索引的唯一ID
|
||
(TimerCallbackFunction_t)J1_485_tmrCallback); //回调函数
|
||
|
||
J2_485_Swtmr = xTimerCreate((const char*)"J2Timer",
|
||
softwareDelay,
|
||
(UBaseType_t )pdFALSE,
|
||
(void *)2,
|
||
(TimerCallbackFunction_t)J2_485_tmrCallback);
|
||
|
||
J3_485_Swtmr = xTimerCreate((const char*)"J3Timer",
|
||
softwareDelay,
|
||
(UBaseType_t )pdFALSE,
|
||
(void *)3,
|
||
(TimerCallbackFunction_t)J3_485_tmrCallback);
|
||
|
||
J4_485_Swtmr = xTimerCreate((const char*)"J4Timer",
|
||
softwareDelay,
|
||
(UBaseType_t )pdFALSE,
|
||
(void *)4,
|
||
(TimerCallbackFunction_t)J4_485_tmrCallback);
|
||
|
||
J5_0_485_Swtmr = xTimerCreate((const char*)"J5_0Timer",
|
||
softwareDelay,
|
||
(UBaseType_t )pdFALSE,
|
||
(void *)5,
|
||
(TimerCallbackFunction_t)J5_0_485_tmrCallback);
|
||
}
|
||
|
||
void J1_485_tmrCallback(void* parameter)
|
||
{
|
||
setBUSIDLEFlag(g_J1_uart6_handle, 0);
|
||
}
|
||
|
||
void J2_485_tmrCallback(void* parameter)
|
||
{
|
||
setBUSIDLEFlag(g_J2_uart7_handle, 0);
|
||
}
|
||
|
||
void J3_485_tmrCallback(void* parameter)
|
||
{
|
||
setBUSIDLEFlag(g_J3_usart2_handle, 0);
|
||
}
|
||
|
||
void J4_485_tmrCallback(void* parameter)
|
||
{
|
||
setBUSIDLEFlag(g_J4_uart8_handle, 0);
|
||
}
|
||
|
||
void J5_0_485_tmrCallback(void* parameter)
|
||
{
|
||
setBUSIDLEFlag(g_J5_0_usart3_handle, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J1_485空闲中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J1_485_IN_IDLE(void)
|
||
{
|
||
xTimerStartFromISR(J1_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J2_485空闲中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J2_485_IN_IDLE(void)
|
||
{
|
||
xTimerStartFromISR(J2_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J3_485空闲中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J3_485_IN_IDLE(void)
|
||
{
|
||
xTimerStartFromISR(J3_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J4_485空闲中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J4_485_IN_IDLE(void)
|
||
{
|
||
xTimerStartFromISR(J4_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J5_0_485空闲中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J5_0_485_IN_IDLE(void)
|
||
{
|
||
xTimerStartFromISR(J5_0_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J1_485空闲中断后,第一次进入接收中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J1_485_IN_RXNE(void)
|
||
{
|
||
xTimerStopFromISR(J1_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J2_485空闲中断后,第一次进入接收中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J2_485_IN_RXNE(void)
|
||
{
|
||
xTimerStopFromISR(J2_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J3_485空闲中断后,第一次进入接收中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J3_485_IN_RXNE(void)
|
||
{
|
||
xTimerStopFromISR(J3_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J4_485空闲中断后,第一次进入接收中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J4_485_IN_RXNE(void)
|
||
{
|
||
xTimerStopFromISR(J4_485_Swtmr, 0);
|
||
}
|
||
|
||
/*
|
||
* @brief J5_0_485空闲中断后,第一次进入接收中断内容
|
||
* @param
|
||
* @retval
|
||
*
|
||
*/
|
||
void J5_0_485_IN_RXNE(void)
|
||
{
|
||
xTimerStopFromISR(J5_0_485_Swtmr, 0);
|
||
}
|
||
#endif
|
||
|
||
/*
|
||
* @brief 得到串口能否发送
|
||
* @param
|
||
* @retval 0 能发送
|
||
1 不能发送
|
||
0xFF 错误
|
||
*/
|
||
uint8_t getRs485State(device_handle device)
|
||
{
|
||
#ifdef RS485BUSIDLE1
|
||
#ifdef UARTINTERRUPTSEND
|
||
return (getUartSendState(device) || getBUSIDLEFlag(device));
|
||
#endif
|
||
#endif
|
||
}
|
||
|
||
uint8_t getUartState(device_handle device)
|
||
{
|
||
#ifdef UARTINTERRUPTSEND
|
||
return getUartSendState(device);
|
||
#endif
|
||
}
|
||
|
||
|