modbus in ethernet stm32.md 8.6 KB

#define CONFIG_BASE         ((uint16_t)0x0000)
#define CONFIG_LEN          18 //32 // CONFIG_LEN в словах по 16 бит
#define CONFIG_VER_SOFT     CONFIG_BASE + 1
#define CONFIG_VER_FPGA     CONFIG_BASE + 2
#define CONFIG_UREF         CONFIG_BASE + 16   

   
#define UART_BASE           0x0012   
#define UART_BAUDRATEL      UART_BASE
#define UART_BAUDRATEH      UART_BASE + 1
#define UART_DATA_BITS      UART_BASE + 2    
#define UART_STOP_BITS      UART_BASE + 3       
#define UART_PARITY         UART_BASE + 4 

#define UART_NREG           5   
   
#define MODBUS_ADDR         0x0017   
   
#define PRESET_BASE         0x0100
#define PRESET_LEN          32 //с резервом   
#define PRESET_MODE         PRESET_BASE
// 0 - без остановки
// 1 - по реальному времени (RTIME)
// 2 - по живому времени    (LTIME)
// 3 - по счету             (SUM)
// 4 - по пику в ROI        (PRESET_SUM_ROI)
#define PRESET_RTIME        PRESET_BASE + 1
#define PRESET_LTIME        PRESET_BASE + 3
#define PRESET_SUM          PRESET_BASE + 5
#define PRESET_SUM_ROI      PRESET_BASE + 7
#define PRESET_ROIL         PRESET_BASE + 9
#define PRESET_ROIH         PRESET_BASE + 10
   

// -------------------------------------------------------------------------- //

#define HV_BASE             0x0200
    
#define HV_STATE            HV_BASE + 0 // состояние/команда hvState 
    
#define HV_CUR_VOLT_L       HV_BASE + 1 // Текущее напряжение в вольтах Float, 4 байта
#define HV_CUR_VOLT_H       HV_BASE + 2 // Текущее напряжение в вольтах Float, 4 байта
    
#define HV_RISE_TIME        HV_BASE + 3 // время подъёма в секундах
    
#define HV_PRESET_L         HV_BASE + 4 // уставка, напряжение в вольтах Float, 4 байта  
#define HV_PRESET_H         HV_BASE + 5 // уставка, напряжение в вольтах Float, 4 байта  
    
#define HV_PRESET_MIN_L     HV_BASE + 6 // минимальная уставка, напряжение в вольтах Float, 4 байта  
#define HV_PRESET_MIN_H     HV_BASE + 7 // минимальнаяуставка, напряжение в вольтах Float, 4 байта  
    
#define HV_PRESET_MAX_L     HV_BASE + 8 // максимальная уставка, напряжение в вольтах Float, 4 байта  
#define HV_PRESET_MAX_H     HV_BASE + 9 // максимальная уставка, напряжение в вольтах Float, 4 байта  

#define HV_K0_L             HV_BASE + 10 // коэф. преобразования напряжения ЦАП в вольты, Float, 4 байта  
#define HV_K0_H             HV_BASE + 11 // коэф. преобразования напряжения ЦАП в вольты, Float, 4 байта  
#define HV_K1_L             HV_BASE + 12 // коэф. преобразования напряжения ЦАП в вольты, Float, 4 байта   
#define HV_K1_H             HV_BASE + 13 // коэф. преобразования напряжения ЦАП в вольты, Float, 4 байта 

#define HV_DELAY            HV_BASE + 14 // время задержки после установки HV перед началом набора

#define HV_NREG             16

// -------------------------------------------------------------------------- //

//"FPGA"		
#define FPGA_BASE           0x300
#define FPGA_NREG           32

// -------------------------------------------------------------------------- //

//Мониторинг
#define MON_BASE            0x500
#define MON_BASE_RAW        0x600

#define MON_BAT_VOLTAGE     MON_BASE + 0x014 // напряжение АКБ
#define MON_BAT_CHARGE_ST   MON_BASE + 0x016 // статус заряда АКБ (есть/нет)
#define MON_FLASH_SIZE      MON_BASE + 0x018 // объем флеш-памяти (байты)
#define MON_FLASH_FREE      MON_BASE + 0x01A // объем свободной флеш-памяти (байты)


// -------------------------------------------------------------------------- //
// Автономный режим работы

#define AUTO_BASE           0x700
#define AUTO_NREG           12
#define AUTO_STATE          AUTO_BASE + 0 // статус автономного режима
#define AUTO_DELAY_L        AUTO_BASE + 1 // задержка перед началом цикла измерений (сек.)
#define AUTO_DELAY_H        AUTO_BASE + 2 // задержка перед началом цикла измерений (сек.)
#define AUTO_CNT_DW_L       AUTO_BASE + 3 // осталось до начала цикла (сек.)
#define AUTO_CNT_DW_H       AUTO_BASE + 4 // осталось до начала цикла (сек.)
#define AUTO_PERIOD_L       AUTO_BASE + 5 // период начала набора каждого спектра
#define AUTO_PERIOD_H       AUTO_BASE + 6 // период начала набора каждого спектра
#define AUTO_NBR_SP         AUTO_BASE + 7 // количество набираемых спектров (0 без остановки)
#define AUTO_NBR_SP_ALR     AUTO_BASE + 8 // количество уже набранных спектров
#define AUTO_STNB_MODE      AUTO_BASE + 9 // режим сна 
#define AUTO_STNB_DELAY_L   AUTO_BASE + 10// время до перехода в режим сна (сек.)
#define AUTO_STNB_DELAY_H   AUTO_BASE + 11// время до перехода в режим сна (сек.)


// -------------------------------------------------------------------------- //

//Сохранение настройек прибора
#define SAVE_LOAD_BASE          0x800
#define SAVE_LOAD_LOAD          (SAVE_LOAD_BASE + 0)
#define SAVE_LOAD_SAVE          (SAVE_LOAD_BASE + 1)
#define SAVE_LOAD_LOAD_SP_PARAM (SAVE_LOAD_BASE + 2)
#define SAVE_LOAD_SAVE_SP_PARAM (SAVE_LOAD_BASE + 3)

// -------------------------------------------------------------------------- //

// Режимы работы
#define KEY_REBOOT          0x2031  // перезагрузка в режиме бутлоадера (DFU)
#define KEY_RESET           0x2032  // перезагрузка
#define REBOOT_OK           0x3120
#define REBOOT_0            0x840

#define BLAST_FPGA          0x841
#define BLAST_MODE_ON       0x1
#define BLAST_MODE_OFF      0x0
#define WORK_MODE_N_REG     2

// specter
// Состояние набора   
#if 0
enum spState 
{
  SP_CLEAR = 0, // очистка, нет спектра
  SP_STOP  = 1, // останов, есть спектр
  SP_ACQ   = 2, // набор спектра
};
#endif

// -------------------------------------------------------------------------- //

#define SPECTER_INFO_BASE   0x900
#define SPECTER_INFO_NREG   15

#define SPECTER_FORMAT      0x0900
#define SPECTER_ACQ_STATE   0x0901
#define SPECTER_NCHANNELS   0x0902
#define SPECTER_EN_K0       0x0903
#define SPECTER_EN_K1       0x0905
#define SPECTER_REGRATE     0x0907
#define SPECTER_INPRATE     0x0909
#define SPECTER_RTIME       0x090B
#define SPECTER_LTIME       0x090D
#define SPECTER_LOCALTIME   0x090F
#define GPS_STATUS          0x0911
#define GPS_LON             0x0912
#define GPS_LAT             0x0914
#define GPS_ALT             0x0916
#define SP_OFFSET           0x0918

// -------------------------------------------------------------------------- //
// Для считывания заголовка спектра из файла. 

#define SPECTER_FILE_INFO_BASE   0xB000
#define SPECTER_FILE_INFO_NREG   255

#define SPECTER_FORMAT_F    0xB000
#define SPECTER_ACQ_STATE_F 0xB001
#define SPECTER_NCHANNELS_F 0xB002
#define SPECTER_EN_K0_F     0xB003
#define SPECTER_EN_K1_F     0xB005
#define SPECTER_REGRATE_F   0xB007
#define SPECTER_INPRATE_F   0xB009
#define SPECTER_RTIME_F     0xB00B
#define SPECTER_LTIME_F     0xB00D
#define SPECTER_LOCALTIME_F 0xB00F
#define GPS_STATUS_F        0xB011
#define GPS_LON_F           0xB012
#define GPS_LAT_F           0xB014
#define GPS_ALT_F           0xB016
#define SP_OFFSET_F         0xB018

#define SPECTER_FILE_BASE   0xB100


#define SPECTER_BASE        0x1000
#define SPECTER_CNL         4096
#define SPECTER_NREG        (SPECTER_CNL * 2)

#define N_REGS_BIG_FRAME    ((64 + 2)*2)

// осциллограф	
#define N_SCOPE_FRAME       4
#define SCOPE_BASE          0xA000
#define SCOPE_NREG          (N_REGS_BIG_FRAME * N_SCOPE_FRAME)

// fifo
#define N_FIFO_FRAME        8
#define FIFO_BASE           0xA400
#define FIFO_NREG           (N_REGS_BIG_FRAME * N_FIFO_FRAME)

// Обмен текстовыми сообщениями
#define STR_BASE            0x7F00
#define STR_NREG            125