Исправления. Переписанный флеш.
This commit is contained in:
@@ -80,13 +80,11 @@ void Error_Handler(void);
|
||||
/* USER CODE BEGIN Private defines */
|
||||
#define ISA_BASE_RD 0x60000000U
|
||||
#define ISA_BASE_WR 0x60400000U
|
||||
#define FLASH_BASE_WR 0x08060000U
|
||||
#define FLASH_BASE_EMS_G 0U
|
||||
#define FLASH_BASE_KEMS_B 0U
|
||||
#define FLASH_BASE_EMS_B0 1200U
|
||||
#define FLASH_BASE_EMS_B1 2400U
|
||||
#define FLASH_BASE_WR 0x081E0000U
|
||||
#define FLASH_BASE_EMS_B0 0x081A0000U
|
||||
#define FLASH_BASE_EMS_B1 0x081C0000U
|
||||
|
||||
#define WORDS_TO_KEMS 60U
|
||||
#define WORDS_TO_KEMS 76U
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -68,7 +68,7 @@ static uint32_t GetSector(uint32_t Address)
|
||||
{
|
||||
sector = FLASH_SECTOR_7;
|
||||
}
|
||||
/* else if((Address < 0x0809FFFF) && (Address >= 0x08080000))
|
||||
else if((Address < 0x0809FFFF) && (Address >= 0x08080000))
|
||||
{
|
||||
sector = FLASH_SECTOR_8;
|
||||
}
|
||||
@@ -128,10 +128,10 @@ static uint32_t GetSector(uint32_t Address)
|
||||
{
|
||||
sector = FLASH_SECTOR_22;
|
||||
}
|
||||
else if (Address < 0x081FFFFF) && (Address >= 0x081E0000)
|
||||
else if ((Address < 0x081FFFFF) && (Address >= 0x081E0000))
|
||||
{
|
||||
sector = FLASH_SECTOR_23;
|
||||
}*/
|
||||
}
|
||||
return sector;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,6 @@ uint32_t pribor; // Прибор в котором стоит ячейк
|
||||
uint32_t pribor_type; // Тип прибора в котором стоит ячейка
|
||||
ip_addr_t rx_addr; // Адрес с которого принят пакет.
|
||||
// Флаги загрузки ячеек ЭМС/КЭМС
|
||||
_Bool flag_load_ems_g = 0;
|
||||
_Bool flag_load_ems_b0 = 0;
|
||||
_Bool flag_load_ems_b1 = 0;
|
||||
_Bool flag_load_kems_b = 0;
|
||||
@@ -174,16 +173,11 @@ int main(void)
|
||||
flash_counter = 0;
|
||||
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:
|
||||
{
|
||||
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_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_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_EMS_B1, BASE_ADDR_EMS_B1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -384,8 +378,8 @@ uint16_t create_header(void)
|
||||
tx_msg.tx_buf[1] = 0;
|
||||
tx_msg.tx_buf[2] = rx_msg.rx_buf[2];
|
||||
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[6] = 0;
|
||||
tx_msg.status_len = set_status(tx_msg.tx_buf, pribor) + 6;
|
||||
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];
|
||||
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
|
||||
tx_msg.tx_buf[5] = 1;
|
||||
rx_counter = 0;
|
||||
switch(rx_msg.cmd_code) // код команды
|
||||
{
|
||||
@@ -600,7 +595,7 @@ void rcv_command(void)
|
||||
//-----------------------------------------------------------
|
||||
|
||||
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))
|
||||
@@ -618,10 +613,13 @@ void rcv_command(void)
|
||||
{
|
||||
// Установить ВЫПОЛНЕНО
|
||||
cmd_buf[1] = NO_ERROR;
|
||||
|
||||
uint16_t flash_addr = rx_msg.rx_buf[7] + (rx_msg.rx_buf[8] << 8);
|
||||
uint32_t sector = FLASH_BASE_WR;
|
||||
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);
|
||||
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;
|
||||
}
|
||||
@@ -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_ok = 0;
|
||||
uint16_t ports_data, i;
|
||||
uint32_t flash_data;
|
||||
write_isa( base_port + 0x2, 200);
|
||||
uint16_t ports_data = 0, i = 0;
|
||||
uint32_t flash_data[2] = {0,0};
|
||||
write_isa(base_port + 0x2, 200);
|
||||
ports_data = read_isa(base_port + 0x2);
|
||||
if (ports_data != 200) return load_ok;
|
||||
for (i = 0; i<=WORDS_TO_KEMS; i++)
|
||||
{
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
write_isa(base_port + 0xa, flash_data);
|
||||
write_isa(base_port + 0xa, flash_data[0]);
|
||||
}
|
||||
load_ok = 1;
|
||||
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 ports_data, i;
|
||||
buf[6] = 27;
|
||||
buf[6] = 31;
|
||||
buf[7] = 0;
|
||||
ports_data = read_isa(BASE_ADDR_EMS_G);
|
||||
buf[8] = 0;
|
||||
if( ports_data != 0xFFFF )
|
||||
{
|
||||
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);
|
||||
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 1, 1);
|
||||
ports_data = read_isa(BASE_ADDR_UKP0);
|
||||
if( ports_data != 0xFFFF ) buf[8] = set_bit(buf[8], 2, 1);
|
||||
ports_data = read_isa(BASE_ADDR_UKP1);
|
||||
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 );
|
||||
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;
|
||||
|
||||
return 29;
|
||||
return 33;
|
||||
}
|
||||
|
||||
uint16_t set_status_uf(unsigned char *buf)
|
||||
{
|
||||
uint16_t ports_data, i;
|
||||
buf[6] = 67;
|
||||
buf[6] = 79;
|
||||
buf[7] = 0;
|
||||
buf[8] = 0;
|
||||
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);
|
||||
}
|
||||
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 );
|
||||
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;
|
||||
write_isa( BASE_ADDR_EMS_B0 + 0xC, i );
|
||||
ports_data = read_isa( BASE_ADDR_EMS_B0 + 0xE );
|
||||
buf[9+(i-1)*2 + 22] = ports_data & 0xFF;
|
||||
buf[10+(i-1)*2 + 22] = ports_data >> 8;
|
||||
buf[9+(i-1)*2 + 26] = ports_data & 0xFF;
|
||||
buf[10+(i-1)*2 + 26] = ports_data >> 8;
|
||||
write_isa( BASE_ADDR_EMS_B1 + 0xC, i );
|
||||
ports_data = read_isa( BASE_ADDR_EMS_B1 + 0xE );
|
||||
buf[9+(i-1)*2 + 44] = ports_data & 0xFF;
|
||||
buf[10+(i-1)*2 + 44] = ports_data >> 8;
|
||||
buf[9+(i-1)*2 + 52] = ports_data & 0xFF;
|
||||
buf[10+(i-1)*2 + 52] = ports_data >> 8;
|
||||
}
|
||||
|
||||
pribor_type = PRIBOR_TYPE_UF;
|
||||
|
||||
return 69;
|
||||
return 81;
|
||||
}
|
||||
|
||||
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