Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct
- {
- uint32_t f_Z_min_coord[MAX_CH_NUM];
- uint32_t f_Z_max_coord[MAX_CH_NUM];
- uint32_t f_Z_diff;
- uint32_t f_Z_discrete[MAX_CH_NUM];
- uint32_t f_Z_mem_coord[MAX_CH_NUM];
- uint32_t f_Z_fz_height[MAX_CH_NUM];
- } BridgeConfigStruct;
- #pragma section = "FLASH"
- #pragma location = "FLASH"
- __root const BridgeConfigStruct BridgeConfigData_Default =
- {
- {0*Z_temp_discr, 0*Z_temp_discr}, //f_Z_min_coord
- {2000*Z_temp_discr, 2000*Z_temp_discr}, //f_Z_max_coord
- 50, //f_Z_diff
- {Z_temp_discr, Z_temp_discr}, //f_Z_discrete
- {1914, 1914}, //f_Z_mem_coord
- {20*Z_temp_discr, 20*Z_temp_discr} //Z_fz_height
- };
- uint32_t ReadPage(uint32_t flashAdr, uint16_t *buffer)
- {
- uint32_t i;
- if(!(flashAdr & (FLASH_PAGE_SIZE-1) ))
- {
- for(i=0; i<FLASH_PAGE_SIZE/2; i++)
- {
- buffer[i] = *(__IO uint16_t *)flashAdr;
- flashAdr += 2;
- }
- }
- else return FALSE;
- return TRUE;
- }
- uint32_t WriteFlashPage(uint32_t flashStartAdr, uint8_t *dataPage)
- {
- uint32_t temp = TRUE;
- uint16_t data;
- uint32_t address, i;
- __disable_interrupt();
- FLASH_Unlock();
- /* Clear All pending flags */
- FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
- if(FLASH_ErasePage(flashStartAdr) == FLASH_COMPLETE)
- {
- address = flashStartAdr;
- for(i = 0; i < (FLASH_PAGE_SIZE/2); i++)
- {
- data = *dataPage++;
- data |= (((uint16_t)(*dataPage++)) << 8);
- temp = FLASH_ProgramHalfWord(address, data);
- address += 2;
- if(temp != FLASH_COMPLETE)
- {
- temp = FALSE;
- break;
- }
- }
- if(temp == FLASH_COMPLETE) temp = TRUE;
- }
- else temp = FALSE;
- FLASH_Lock();
- __enable_interrupt();
- return temp;
- }
- uint32_t WriteFlash(uint32_t const *addr, uint8_t *data, uint16_t size)
- {
- uint32_t i, page_addr, index, result = TRUE;
- page_addr = ((uint32_t) addr)&0xFFFFFC00;
- if(ReadPage(page_addr, &flashPage.halfword[0]) == TRUE){
- index = (uint32_t) addr;
- index &= 0x000003FF;
- for(i=0; i< size; i++)
- { flashPage.byte[index++] = *data++; }
- result = WriteFlashPage(page_addr, &flashPage.byte[0]);
- }
- else result = FALSE;
- return result;
- }
- if(WriteFlash(&BridgeConfigData_Default.f_Z_mem_coord[0], uint8_t*)&ZL_passed_height, 4) != TRUE)
- {
- goto ErrorWriteFlashWrite;
- }
- else
- {
- volatile uint32_t *ptrZL_mem = (uint32_t*)0x08001028; //вариант №1
- volatile uint32_t ZL_mem_coord = *(ptrZL_mem);
- volatile uint32_t *ptrZL_mem = (volatile uint32_t *)&BridgeConfigData_Default.f_Z_mem_coord[0]); //вариант №2
- volatile uint32_t ZL_mem_coord = *(ptrZL_mem);
- }
Add Comment
Please, Sign In to add comment