Исправления. Переписанный флеш.
This commit is contained in:
@@ -80,13 +80,11 @@ void Error_Handler(void);
|
|||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
#define ISA_BASE_RD 0x60000000U
|
#define ISA_BASE_RD 0x60000000U
|
||||||
#define ISA_BASE_WR 0x60400000U
|
#define ISA_BASE_WR 0x60400000U
|
||||||
#define FLASH_BASE_WR 0x08060000U
|
#define FLASH_BASE_WR 0x081E0000U
|
||||||
#define FLASH_BASE_EMS_G 0U
|
#define FLASH_BASE_EMS_B0 0x081A0000U
|
||||||
#define FLASH_BASE_KEMS_B 0U
|
#define FLASH_BASE_EMS_B1 0x081C0000U
|
||||||
#define FLASH_BASE_EMS_B0 1200U
|
|
||||||
#define FLASH_BASE_EMS_B1 2400U
|
|
||||||
|
|
||||||
#define WORDS_TO_KEMS 60U
|
#define WORDS_TO_KEMS 76U
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ static uint32_t GetSector(uint32_t Address)
|
|||||||
{
|
{
|
||||||
sector = FLASH_SECTOR_7;
|
sector = FLASH_SECTOR_7;
|
||||||
}
|
}
|
||||||
/* else if((Address < 0x0809FFFF) && (Address >= 0x08080000))
|
else if((Address < 0x0809FFFF) && (Address >= 0x08080000))
|
||||||
{
|
{
|
||||||
sector = FLASH_SECTOR_8;
|
sector = FLASH_SECTOR_8;
|
||||||
}
|
}
|
||||||
@@ -128,10 +128,10 @@ static uint32_t GetSector(uint32_t Address)
|
|||||||
{
|
{
|
||||||
sector = FLASH_SECTOR_22;
|
sector = FLASH_SECTOR_22;
|
||||||
}
|
}
|
||||||
else if (Address < 0x081FFFFF) && (Address >= 0x081E0000)
|
else if ((Address < 0x081FFFFF) && (Address >= 0x081E0000))
|
||||||
{
|
{
|
||||||
sector = FLASH_SECTOR_23;
|
sector = FLASH_SECTOR_23;
|
||||||
}*/
|
}
|
||||||
return sector;
|
return sector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ uint32_t pribor; // Прибор в котором стоит ячейк
|
|||||||
uint32_t pribor_type; // Тип прибора в котором стоит ячейка
|
uint32_t pribor_type; // Тип прибора в котором стоит ячейка
|
||||||
ip_addr_t rx_addr; // Адрес с которого принят пакет.
|
ip_addr_t rx_addr; // Адрес с которого принят пакет.
|
||||||
// Флаги загрузки ячеек ЭМС/КЭМС
|
// Флаги загрузки ячеек ЭМС/КЭМС
|
||||||
_Bool flag_load_ems_g = 0;
|
|
||||||
_Bool flag_load_ems_b0 = 0;
|
_Bool flag_load_ems_b0 = 0;
|
||||||
_Bool flag_load_ems_b1 = 0;
|
_Bool flag_load_ems_b1 = 0;
|
||||||
_Bool flag_load_kems_b = 0;
|
_Bool flag_load_kems_b = 0;
|
||||||
@@ -174,16 +173,11 @@ int main(void)
|
|||||||
flash_counter = 0;
|
flash_counter = 0;
|
||||||
switch(pribor_type)
|
switch(pribor_type)
|
||||||
{
|
{
|
||||||
case PRIBOR_TYPE_PRD:
|
|
||||||
{
|
|
||||||
if (flag_load_ems_g == 0) flag_load_ems_g = load_flash_to_ems(FLASH_BASE_WR, BASE_ADDR_EMS_G);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case PRIBOR_TYPE_UF:
|
case PRIBOR_TYPE_UF:
|
||||||
{
|
{
|
||||||
if (flag_load_kems_b == 0) flag_load_kems_b = load_flash_to_ems(FLASH_BASE_WR, BASE_ADDR_KEMS_B);
|
if (flag_load_kems_b == 0) flag_load_kems_b = load_flash_to_ems(FLASH_BASE_WR, BASE_ADDR_KEMS_B);
|
||||||
if (flag_load_ems_b0 == 0) flag_load_ems_b0 = load_flash_to_ems(FLASH_BASE_WR + FLASH_BASE_EMS_B0, BASE_ADDR_EMS_B0);
|
if (flag_load_ems_b0 == 0) flag_load_ems_b0 = load_flash_to_ems(FLASH_BASE_EMS_B0, BASE_ADDR_EMS_B0);
|
||||||
if (flag_load_ems_b1 == 0) flag_load_ems_b1 = load_flash_to_ems(FLASH_BASE_WR + FLASH_BASE_EMS_B1, BASE_ADDR_EMS_B1);
|
if (flag_load_ems_b1 == 0) flag_load_ems_b1 = load_flash_to_ems(FLASH_BASE_EMS_B1, BASE_ADDR_EMS_B1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -384,8 +378,8 @@ uint16_t create_header(void)
|
|||||||
tx_msg.tx_buf[1] = 0;
|
tx_msg.tx_buf[1] = 0;
|
||||||
tx_msg.tx_buf[2] = rx_msg.rx_buf[2];
|
tx_msg.tx_buf[2] = rx_msg.rx_buf[2];
|
||||||
tx_msg.tx_buf[3] = rx_msg.rx_buf[3];
|
tx_msg.tx_buf[3] = rx_msg.rx_buf[3];
|
||||||
|
tx_msg.tx_buf[4] = 0;
|
||||||
tx_msg.tx_buf[5] = 0;
|
tx_msg.tx_buf[5] = 0;
|
||||||
tx_msg.tx_buf[6] = 0;
|
|
||||||
tx_msg.status_len = set_status(tx_msg.tx_buf, pribor) + 6;
|
tx_msg.status_len = set_status(tx_msg.tx_buf, pribor) + 6;
|
||||||
return tx_msg.status_len;
|
return tx_msg.status_len;
|
||||||
}
|
}
|
||||||
@@ -464,6 +458,7 @@ void rcv_command(void)
|
|||||||
|
|
||||||
unsigned char *cmd_buf = &tx_msg.tx_buf[tx_msg.status_len];
|
unsigned char *cmd_buf = &tx_msg.tx_buf[tx_msg.status_len];
|
||||||
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
|
||||||
|
tx_msg.tx_buf[5] = 1;
|
||||||
rx_counter = 0;
|
rx_counter = 0;
|
||||||
switch(rx_msg.cmd_code) // код команды
|
switch(rx_msg.cmd_code) // код команды
|
||||||
{
|
{
|
||||||
@@ -600,7 +595,7 @@ void rcv_command(void)
|
|||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
cmd_buf[0] = rx_msg.cmd_code; // - код команды
|
cmd_buf[0] = rx_msg.cmd_code; // - код команды
|
||||||
bytes_amount = rx_msg.rx_buf[9] + (rx_msg.rx_buf[10] << 8);
|
bytes_amount = rx_msg.rx_buf[10] + (rx_msg.rx_buf[11] << 8);
|
||||||
|
|
||||||
// Проверка размера принятого буфера
|
// Проверка размера принятого буфера
|
||||||
if( rx_msg.length < (10 + bytes_amount))
|
if( rx_msg.length < (10 + bytes_amount))
|
||||||
@@ -618,10 +613,13 @@ void rcv_command(void)
|
|||||||
{
|
{
|
||||||
// Установить ВЫПОЛНЕНО
|
// Установить ВЫПОЛНЕНО
|
||||||
cmd_buf[1] = NO_ERROR;
|
cmd_buf[1] = NO_ERROR;
|
||||||
|
uint32_t sector = FLASH_BASE_WR;
|
||||||
uint16_t flash_addr = rx_msg.rx_buf[7] + (rx_msg.rx_buf[8] << 8);
|
unsigned char flash_sector = rx_msg.rx_buf[7];
|
||||||
|
if (flash_sector == 1) sector = FLASH_BASE_EMS_B0;
|
||||||
|
if (flash_sector == 2) sector = FLASH_BASE_EMS_B1;
|
||||||
|
uint16_t flash_addr = rx_msg.rx_buf[8] + (rx_msg.rx_buf[9] << 8);
|
||||||
uint16_t numofwords = (bytes_amount/4)+((bytes_amount%4)!=0);
|
uint16_t numofwords = (bytes_amount/4)+((bytes_amount%4)!=0);
|
||||||
Flash_Write_Data(FLASH_BASE_WR + flash_addr, (uint32_t *)&rx_msg.rx_buf[11], numofwords);
|
Flash_Write_Data(sector + flash_addr, (uint32_t *)&rx_msg.rx_buf[12], numofwords);
|
||||||
// Установить размер буфера
|
// Установить размер буфера
|
||||||
tx_msg.cmd_len = 2;
|
tx_msg.cmd_len = 2;
|
||||||
}
|
}
|
||||||
@@ -745,23 +743,23 @@ void write_isa(uint16_t addr, uint16_t data)
|
|||||||
_Bool load_flash_to_ems(uint32_t base_addr, uint16_t base_port)
|
_Bool load_flash_to_ems(uint32_t base_addr, uint16_t base_port)
|
||||||
{
|
{
|
||||||
_Bool load_ok = 0;
|
_Bool load_ok = 0;
|
||||||
uint16_t ports_data, i;
|
uint16_t ports_data = 0, i = 0;
|
||||||
uint32_t flash_data;
|
uint32_t flash_data[2] = {0,0};
|
||||||
write_isa( base_port + 0x2, 200);
|
write_isa(base_port + 0x2, 200);
|
||||||
ports_data = read_isa(base_port + 0x2);
|
ports_data = read_isa(base_port + 0x2);
|
||||||
if (ports_data != 200) return load_ok;
|
if (ports_data != 200) return load_ok;
|
||||||
for (i = 0; i<=WORDS_TO_KEMS; i++)
|
for (i = 0; i<=WORDS_TO_KEMS; i++)
|
||||||
{
|
{
|
||||||
Flash_Read_Data(base_addr + i * 10, (uint32_t *)&flash_data, 1);
|
Flash_Read_Data(base_addr + i * 10, (uint32_t *)&flash_data, 1);
|
||||||
write_isa(base_port + 0x2, flash_data);
|
write_isa(base_port + 0x2, flash_data[0]);
|
||||||
Flash_Read_Data(base_addr + i * 10 + 2, (uint32_t *)&flash_data, 1);
|
Flash_Read_Data(base_addr + i * 10 + 2, (uint32_t *)&flash_data, 1);
|
||||||
write_isa(base_port + 0x4, flash_data);
|
write_isa(base_port + 0x4, flash_data[0]);
|
||||||
Flash_Read_Data(base_addr + i * 10 + 4, (uint32_t *)&flash_data, 1);
|
Flash_Read_Data(base_addr + i * 10 + 4, (uint32_t *)&flash_data, 1);
|
||||||
write_isa(base_port + 0x6, flash_data);
|
write_isa(base_port + 0x6, flash_data[0]);
|
||||||
Flash_Read_Data(base_addr + i * 10 + 6, (uint32_t *)&flash_data, 1);
|
Flash_Read_Data(base_addr + i * 10 + 6, (uint32_t *)&flash_data, 1);
|
||||||
write_isa(base_port + 0x8, flash_data);
|
write_isa(base_port + 0x8, flash_data[0]);
|
||||||
Flash_Read_Data(base_addr + i * 10 + 8, (uint32_t *)&flash_data, 1);
|
Flash_Read_Data(base_addr + i * 10 + 8, (uint32_t *)&flash_data, 1);
|
||||||
write_isa(base_port + 0xa, flash_data);
|
write_isa(base_port + 0xa, flash_data[0]);
|
||||||
}
|
}
|
||||||
load_ok = 1;
|
load_ok = 1;
|
||||||
return load_ok;
|
return load_ok;
|
||||||
|
|||||||
@@ -91,23 +91,21 @@ uint16_t set_status(unsigned char *buf, uint32_t pribor)
|
|||||||
uint16_t set_status_prd(unsigned char *buf)
|
uint16_t set_status_prd(unsigned char *buf)
|
||||||
{
|
{
|
||||||
uint16_t ports_data, i;
|
uint16_t ports_data, i;
|
||||||
buf[6] = 27;
|
buf[6] = 31;
|
||||||
buf[7] = 0;
|
buf[7] = 0;
|
||||||
ports_data = read_isa(BASE_ADDR_EMS_G);
|
ports_data = read_isa(BASE_ADDR_EMS_G);
|
||||||
buf[8] = 0;
|
buf[8] = 0;
|
||||||
if( ports_data != 0xFFFF )
|
if( ports_data != 0xFFFF )
|
||||||
{
|
{
|
||||||
buf[8] = set_bit(buf[8], 0, 1);
|
buf[8] = set_bit(buf[8], 0, 1);
|
||||||
buf[8] = set_bit(buf[8], 4, flag_load_ems_g);
|
|
||||||
}
|
}
|
||||||
else flag_load_ems_g = 0;
|
|
||||||
ports_data = read_isa(BASE_ADDR_UG);
|
ports_data = read_isa(BASE_ADDR_UG);
|
||||||
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 1, 1);
|
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 1, 1);
|
||||||
ports_data = read_isa(BASE_ADDR_UKP0);
|
ports_data = read_isa(BASE_ADDR_UKP0);
|
||||||
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 2, 1);
|
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 2, 1);
|
||||||
ports_data = read_isa(BASE_ADDR_UKP1);
|
ports_data = read_isa(BASE_ADDR_UKP1);
|
||||||
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 3, 1);
|
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 3, 1);
|
||||||
for (i = 1; i <12; i++)
|
for (i = 1; i <14; i++)
|
||||||
{
|
{
|
||||||
write_isa( BASE_ADDR_EMS_G + 0xC, i );
|
write_isa( BASE_ADDR_EMS_G + 0xC, i );
|
||||||
ports_data = read_isa( BASE_ADDR_EMS_G + 0xE );
|
ports_data = read_isa( BASE_ADDR_EMS_G + 0xE );
|
||||||
@@ -123,13 +121,13 @@ uint16_t set_status_prd(unsigned char *buf)
|
|||||||
|
|
||||||
pribor_type = PRIBOR_TYPE_PRD;
|
pribor_type = PRIBOR_TYPE_PRD;
|
||||||
|
|
||||||
return 29;
|
return 33;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t set_status_uf(unsigned char *buf)
|
uint16_t set_status_uf(unsigned char *buf)
|
||||||
{
|
{
|
||||||
uint16_t ports_data, i;
|
uint16_t ports_data, i;
|
||||||
buf[6] = 67;
|
buf[6] = 79;
|
||||||
buf[7] = 0;
|
buf[7] = 0;
|
||||||
buf[8] = 0;
|
buf[8] = 0;
|
||||||
ports_data = read_isa(BASE_ADDR_KEMS_B);
|
ports_data = read_isa(BASE_ADDR_KEMS_B);
|
||||||
@@ -153,7 +151,7 @@ uint16_t set_status_uf(unsigned char *buf)
|
|||||||
buf[8] = set_bit(buf[8], 5, flag_load_ems_b1);
|
buf[8] = set_bit(buf[8], 5, flag_load_ems_b1);
|
||||||
}
|
}
|
||||||
else flag_load_ems_b1 = 0;
|
else flag_load_ems_b1 = 0;
|
||||||
for (i = 1; i <12; i++)
|
for (i = 1; i <14; i++)
|
||||||
{
|
{
|
||||||
write_isa( BASE_ADDR_KEMS_B + 0xC, i );
|
write_isa( BASE_ADDR_KEMS_B + 0xC, i );
|
||||||
ports_data = read_isa( BASE_ADDR_KEMS_B + 0xE );
|
ports_data = read_isa( BASE_ADDR_KEMS_B + 0xE );
|
||||||
@@ -161,17 +159,17 @@ uint16_t set_status_uf(unsigned char *buf)
|
|||||||
buf[10+(i-1)*2] = ports_data >> 8;
|
buf[10+(i-1)*2] = ports_data >> 8;
|
||||||
write_isa( BASE_ADDR_EMS_B0 + 0xC, i );
|
write_isa( BASE_ADDR_EMS_B0 + 0xC, i );
|
||||||
ports_data = read_isa( BASE_ADDR_EMS_B0 + 0xE );
|
ports_data = read_isa( BASE_ADDR_EMS_B0 + 0xE );
|
||||||
buf[9+(i-1)*2 + 22] = ports_data & 0xFF;
|
buf[9+(i-1)*2 + 26] = ports_data & 0xFF;
|
||||||
buf[10+(i-1)*2 + 22] = ports_data >> 8;
|
buf[10+(i-1)*2 + 26] = ports_data >> 8;
|
||||||
write_isa( BASE_ADDR_EMS_B1 + 0xC, i );
|
write_isa( BASE_ADDR_EMS_B1 + 0xC, i );
|
||||||
ports_data = read_isa( BASE_ADDR_EMS_B1 + 0xE );
|
ports_data = read_isa( BASE_ADDR_EMS_B1 + 0xE );
|
||||||
buf[9+(i-1)*2 + 44] = ports_data & 0xFF;
|
buf[9+(i-1)*2 + 52] = ports_data & 0xFF;
|
||||||
buf[10+(i-1)*2 + 44] = ports_data >> 8;
|
buf[10+(i-1)*2 + 52] = ports_data >> 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
pribor_type = PRIBOR_TYPE_UF;
|
pribor_type = PRIBOR_TYPE_UF;
|
||||||
|
|
||||||
return 69;
|
return 81;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char set_bit(unsigned char bits, unsigned char index, _Bool val)
|
unsigned char set_bit(unsigned char bits, unsigned char index, _Bool val)
|
||||||
|
|||||||
78772
Debug/yau-07b.list
78772
Debug/yau-07b.list
File diff suppressed because it is too large
Load Diff
35647
Release/yau-07b.list
35647
Release/yau-07b.list
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user