Guest User

Untitled

a guest
Dec 18th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. typedef struct
  2. {
  3. uint32_t f_Z_min_coord[MAX_CH_NUM];
  4. uint32_t f_Z_max_coord[MAX_CH_NUM];
  5. uint32_t f_Z_diff;
  6. uint32_t f_Z_discrete[MAX_CH_NUM];
  7. uint32_t f_Z_mem_coord[MAX_CH_NUM];
  8. uint32_t f_Z_fz_height[MAX_CH_NUM];
  9. } BridgeConfigStruct;
  10.  
  11. #pragma section = "FLASH"
  12. #pragma location = "FLASH"
  13. __root const BridgeConfigStruct BridgeConfigData_Default =
  14. {
  15. {0*Z_temp_discr, 0*Z_temp_discr}, //f_Z_min_coord
  16. {2000*Z_temp_discr, 2000*Z_temp_discr}, //f_Z_max_coord
  17. 50, //f_Z_diff
  18. {Z_temp_discr, Z_temp_discr}, //f_Z_discrete
  19. {1914, 1914}, //f_Z_mem_coord
  20. {20*Z_temp_discr, 20*Z_temp_discr} //Z_fz_height
  21. };
  22.  
  23. uint32_t ReadPage(uint32_t flashAdr, uint16_t *buffer)
  24. {
  25. uint32_t i;
  26. if(!(flashAdr & (FLASH_PAGE_SIZE-1) ))
  27. {
  28. for(i=0; i<FLASH_PAGE_SIZE/2; i++)
  29. {
  30. buffer[i] = *(__IO uint16_t *)flashAdr;
  31. flashAdr += 2;
  32. }
  33. }
  34. else return FALSE;
  35. return TRUE;
  36. }
  37.  
  38. uint32_t WriteFlashPage(uint32_t flashStartAdr, uint8_t *dataPage)
  39. {
  40. uint32_t temp = TRUE;
  41. uint16_t data;
  42. uint32_t address, i;
  43. __disable_interrupt();
  44. FLASH_Unlock();
  45.  
  46. /* Clear All pending flags */
  47. FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
  48. if(FLASH_ErasePage(flashStartAdr) == FLASH_COMPLETE)
  49. {
  50. address = flashStartAdr;
  51. for(i = 0; i < (FLASH_PAGE_SIZE/2); i++)
  52. {
  53. data = *dataPage++;
  54. data |= (((uint16_t)(*dataPage++)) << 8);
  55. temp = FLASH_ProgramHalfWord(address, data);
  56. address += 2;
  57. if(temp != FLASH_COMPLETE)
  58. {
  59. temp = FALSE;
  60. break;
  61. }
  62. }
  63. if(temp == FLASH_COMPLETE) temp = TRUE;
  64. }
  65. else temp = FALSE;
  66. FLASH_Lock();
  67. __enable_interrupt();
  68. return temp;
  69. }
  70.  
  71. uint32_t WriteFlash(uint32_t const *addr, uint8_t *data, uint16_t size)
  72. {
  73. uint32_t i, page_addr, index, result = TRUE;
  74. page_addr = ((uint32_t) addr)&0xFFFFFC00;
  75. if(ReadPage(page_addr, &flashPage.halfword[0]) == TRUE){
  76. index = (uint32_t) addr;
  77. index &= 0x000003FF;
  78. for(i=0; i< size; i++)
  79. { flashPage.byte[index++] = *data++; }
  80. result = WriteFlashPage(page_addr, &flashPage.byte[0]);
  81. }
  82. else result = FALSE;
  83.  
  84. return result;
  85. }
  86.  
  87. if(WriteFlash(&BridgeConfigData_Default.f_Z_mem_coord[0], uint8_t*)&ZL_passed_height, 4) != TRUE)
  88. {
  89. goto ErrorWriteFlashWrite;
  90. }
  91. else
  92. {
  93. volatile uint32_t *ptrZL_mem = (uint32_t*)0x08001028; //вариант №1
  94.  
  95. volatile uint32_t ZL_mem_coord = *(ptrZL_mem);
  96.  
  97. volatile uint32_t *ptrZL_mem = (volatile uint32_t *)&BridgeConfigData_Default.f_Z_mem_coord[0]); //вариант №2
  98.  
  99. volatile uint32_t ZL_mem_coord = *(ptrZL_mem);
  100. }
Add Comment
Please, Sign In to add comment