| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 
							- /*
 
-  * sys_hal.c
 
-  *
 
-  *  Created on: 12.03.2017
 
-  *      Author: pavel
 
-  */
 
- #include <stdint.h>
 
- #include "sys_hal.h"
 
- #include "sys_api.h"
 
- #include "common_config.h"
 
- #include "main.h"
 
- //#include "hal.h"
 
- #ifdef PRINTF_STDLIB
 
- #include <stdio.h>
 
- #endif
 
- #ifdef PRINTF_CUSTOM
 
- #include "tinystdio.h"
 
- #endif
 
- /**
 
-   * @brief
 
-   */
 
- void SYS_ReadFromFlash(uint8_t *data, uint32_t size, uint32_t baseAddress)
 
- {
 
-   for (uint32_t i = 0; i < size; i++)
 
-     *data++ = (*(uint32_t*)baseAddress++);
 
- }
 
- /**
 
-   * @brief
 
-   */
 
- void SYS_WriteToFlash(uint8_t *data, uint32_t size, uint32_t crc)
 
- {
 
-   uint32_t baseAddress = SYS_SECTOR;
 
-   uint32_t checkCrc = 0;
 
-   bool fAlarm = 0;
 
-   FLASH_Status status;
 
-   uint8_t *pdata = data;
 
-   for (uint8_t i = 0; i < 3; i++)
 
-   {
 
-     fAlarm = 0;
 
-     FLASH_Unlock();
 
-     SYS_EraseFlashSector();
 
-     for (uint32_t i = 0; i < size; i++)
 
-         if ((status = FLASH_ProgramByte(baseAddress++, *pdata++)) != FLASH_COMPLETE) {
 
-              DBG printf("FLASH_ProgramByte error: %d\r\n", status);
 
-              break;
 
-          }
 
-     if ((status = FLASH_ProgramWord((uint32_t)SYS_CRC_ADDRESS, crc)) != FLASH_COMPLETE) {
 
-          DBG printf("FLASH_ProgramWord error: %d\r\n", status);
 
-      }
 
-     FLASH_Lock();
 
- //    /* Считываем что записали */
 
- //    SYS_ReadFromFlash((uint8_t*)data, size, SYS_SECTOR);
 
- //
 
- //    checkCrc = SYS_GetCRC(data);
 
-     checkCrc = SYS_GetCRC((SYS_t *)SYS_SECTOR);
 
-     /* Проверяем  CRC того что было записано */
 
-     if (checkCrc == crc) {
 
-     //  DBG printf("SYS write OK\r\n");
 
-       break;
 
-     }
 
-     else
 
-       fAlarm = 1; // Авария
 
-   }
 
-   /* Произошел сбой при записи - заносим ошибку в лог и перезагружаемся */
 
-   if (fAlarm) {
 
-     DBG printf("Flash write error: 1%d", (uint8_t)status);;
 
-     NVIC_SystemReset();
 
- //    while (1)
 
- //    {};
 
-   }
 
- }
 
- /**
 
-   * @brief  Очистка сектора настроек
 
-   * @retval
 
-   */
 
- void SYS_EraseFlashSector(void)
 
- {
 
-   FLASH_Status status;
 
-   if ((status = FLASH_EraseSector(FLASH_Sector_2, VoltageRange_3)) != FLASH_COMPLETE) {
 
-       DBG printf("SYS_EraseFlashSector error: %d\r\n", status);
 
-   }
 
- }
 
 
  |