gateway_mcu/CH32V303-FreeRTOS/App/application/Src/busIdleDetection.c

221 lines
4.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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