mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
modbus: add additional timer group options for master
This commit is contained in:
parent
3f10640b67
commit
09c3e4080e
@ -159,18 +159,33 @@ menu "Modbus configuration"
|
||||
Else the internal UART TOUT timeout is used for 3.5T symbol time measurement.
|
||||
|
||||
config FMB_TIMER_GROUP
|
||||
int "Modbus Timer group number"
|
||||
int "Slave Timer group number"
|
||||
range 0 1
|
||||
default 0
|
||||
help
|
||||
Modbus Timer group number that is used for timeout measurement.
|
||||
Modbus slave Timer group number that is used for timeout measurement.
|
||||
|
||||
config FMB_TIMER_INDEX
|
||||
int "Modbus Timer index in the group"
|
||||
int "Slave Timer index in the group"
|
||||
range 0 1
|
||||
default 0
|
||||
help
|
||||
Modbus Timer Index in the group that is used for timeout measurement.
|
||||
Modbus slave Timer Index in the group that is used for timeout measurement.
|
||||
|
||||
config FMB_MASTER_TIMER_GROUP
|
||||
int "Master Timer group number"
|
||||
range 0 1
|
||||
default FMB_TIMER_GROUP
|
||||
help
|
||||
Modbus master Timer group number that is used for timeout measurement.
|
||||
|
||||
config FMB_MASTER_TIMER_INDEX
|
||||
int "Master Timer index"
|
||||
range 0 1
|
||||
default FMB_TIMER_INDEX
|
||||
help
|
||||
Modbus master Timer Index in the group that is used for timeout measurement.
|
||||
Note: Modbus master and slave should have different timer index to be able to work simultaneously.
|
||||
|
||||
config FMB_TIMER_ISR_IN_IRAM
|
||||
bool "Place timer interrupt handler into IRAM"
|
||||
|
@ -55,25 +55,9 @@
|
||||
/* ----------------------- Modbus includes ----------------------------------*/
|
||||
|
||||
/* ----------------------- Variables ----------------------------------------*/
|
||||
static UCHAR ucPortMode = 0;
|
||||
|
||||
/* ----------------------- Start implementation -----------------------------*/
|
||||
|
||||
UCHAR
|
||||
ucMBPortGetMode( void )
|
||||
{
|
||||
return ucPortMode;
|
||||
}
|
||||
|
||||
void
|
||||
vMBPortSetMode( UCHAR ucMode )
|
||||
{
|
||||
ENTER_CRITICAL_SECTION();
|
||||
ucPortMode = ucMode;
|
||||
EXIT_CRITICAL_SECTION();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
vMBMasterPortClose( void )
|
||||
{
|
||||
@ -84,4 +68,3 @@ vMBMasterPortClose( void )
|
||||
vMBMasterPortTimerClose( );
|
||||
vMBMasterPortEventClose( );
|
||||
}
|
||||
|
||||
|
@ -147,8 +147,7 @@ vMBPortTimersDisable(void)
|
||||
void vMBPortTimerClose(void)
|
||||
{
|
||||
#ifdef CONFIG_FMB_TIMER_PORT_ENABLED
|
||||
ESP_ERROR_CHECK(timer_pause(usTimerGroupIndex, usTimerIndex));
|
||||
ESP_ERROR_CHECK(timer_disable_intr(usTimerGroupIndex, usTimerIndex));
|
||||
ESP_ERROR_CHECK(timer_deinit(usTimerGroupIndex, usTimerIndex));
|
||||
ESP_ERROR_CHECK(esp_intr_free(xTimerIntHandle));
|
||||
#endif
|
||||
}
|
||||
|
@ -50,16 +50,13 @@
|
||||
#define MB_TIMER_DIVIDER ((TIMER_BASE_CLK / 1000000UL) * MB_TICK_TIME_US - 1) // divider for 50uS
|
||||
#define MB_TIMER_WITH_RELOAD (1)
|
||||
|
||||
// Timer group and timer number to measure time (configurable in KConfig)
|
||||
#define MB_TIMER_INDEX (CONFIG_FMB_TIMER_INDEX)
|
||||
#define MB_TIMER_GROUP (CONFIG_FMB_TIMER_GROUP)
|
||||
|
||||
/* ----------------------- Variables ----------------------------------------*/
|
||||
static USHORT usT35TimeOut50us;
|
||||
|
||||
static const USHORT usTimerIndex = MB_TIMER_INDEX ^ 1; // Initialize Modbus Timer index used by stack,
|
||||
static const USHORT usTimerGroupIndex = MB_TIMER_GROUP; // Timer group index used by stack
|
||||
static timer_isr_handle_t xTimerIntHandle; // Timer interrupt handle
|
||||
// Initialize Modbus Timer group and index used by stack
|
||||
static const USHORT usTimerIndex = CONFIG_FMB_MASTER_TIMER_INDEX;
|
||||
static const USHORT usTimerGroupIndex = CONFIG_FMB_MASTER_TIMER_GROUP;
|
||||
static timer_isr_handle_t xTimerIntHandle; // Timer interrupt handle
|
||||
|
||||
/* ----------------------- static functions ---------------------------------*/
|
||||
|
||||
@ -194,7 +191,6 @@ vMBMasterPortTimersDisable()
|
||||
|
||||
void vMBMasterPortTimerClose(void)
|
||||
{
|
||||
ESP_ERROR_CHECK(timer_pause(usTimerGroupIndex, usTimerIndex));
|
||||
ESP_ERROR_CHECK(timer_disable_intr(usTimerGroupIndex, usTimerIndex));
|
||||
ESP_ERROR_CHECK(timer_deinit(usTimerGroupIndex, usTimerIndex));
|
||||
ESP_ERROR_CHECK(esp_intr_free(xTimerIntHandle));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user