Added some comments and deleted unimportant function

This commit is contained in:
millerd
2013-04-24 17:39:26 +02:00
committed by Piotr Esden-Tempski
parent 76ebdb86cd
commit 76cdc22896

View File

@@ -38,10 +38,9 @@ static void usart_send_string(u32 usart, u8 *string, u16 str_size);
static void usart_get_string(u32 usart, u8 *string, u16 str_max_size); static void usart_get_string(u32 usart, u8 *string, u16 str_max_size);
/*flash operations*/ /*flash operations*/
static u32 flash_program_data(u32 start_address, u8 *input_data, u16 num_elements); static u32 flash_program_data(u32 start_address, u8 *input_data, u16 num_elements);
static void flash_read_data(u32 start_address, u16 num_elements, u8 *out_string); static void flash_read_data(u32 start_address, u16 num_elements, u8 *output_data);
/*local functions to work with strings*/ /*local functions to work with strings*/
static u16 local_strlen(u8 *string); static void local_ltoa_hex(u32 value, u8 *out_string);
static void local_atol_hex(u32 value, u8 *out_string);
int main(void) int main(void)
{ {
@@ -52,28 +51,28 @@ int main(void)
while(1) while(1)
{ {
usart_send_string(USART1, (u8*)"Please enter string to write into Flash memory:\n\r", local_strlen((u8*)"Please enter string to write into Flash memory:\n\r")); usart_send_string(USART1, (u8*)"Please enter string to write into Flash memory:\n\r", SEND_BUFFER_SIZE);
usart_get_string(USART1, str_send, SEND_BUFFER_SIZE); usart_get_string(USART1, str_send, SEND_BUFFER_SIZE);
result = flash_program_data(FLASH_OPERATION_ADDRESS, str_send, local_strlen(str_send)); result = flash_program_data(FLASH_OPERATION_ADDRESS, str_send, SEND_BUFFER_SIZE);
switch(result) switch(result)
{ {
case RESULT_OK: /*everything ok*/ case RESULT_OK: /*everything ok*/
usart_send_string(USART1, (u8*)"Verification of written data: ", local_strlen((u8*)"Verification of written data: ")); usart_send_string(USART1, (u8*)"Verification of written data: ", SEND_BUFFER_SIZE);
flash_read_data(FLASH_OPERATION_ADDRESS, SEND_BUFFER_SIZE, str_verify); flash_read_data(FLASH_OPERATION_ADDRESS, SEND_BUFFER_SIZE, str_verify);
usart_send_string(USART1, str_verify, local_strlen(str_verify)); usart_send_string(USART1, str_verify, SEND_BUFFER_SIZE);
break; break;
case FLASH_WRONG_DATA_WRITTEN: /*data read from Flash is different than written data*/ case FLASH_WRONG_DATA_WRITTEN: /*data read from Flash is different than written data*/
usart_send_string(USART1, (u8*)"Wrong data written into flash memory", SEND_BUFFER_SIZE); usart_send_string(USART1, (u8*)"Wrong data written into flash memory", SEND_BUFFER_SIZE);
break; break;
default: /*wrong flags' values in Flash Status Register (FLASH_SR)*/ default: /*wrong flags' values in Flash Status Register (FLASH_SR)*/
usart_send_string(USART1, (u8*)"Wrong value of FLASH_SR: ", SEND_BUFFER_SIZE); usart_send_string(USART1, (u8*)"Wrong value of FLASH_SR: ", SEND_BUFFER_SIZE);
local_atol_hex(result, str_send); local_ltoa_hex(result, str_send);
usart_send_string(USART1, str_send, SEND_BUFFER_SIZE); usart_send_string(USART1, str_send, SEND_BUFFER_SIZE);
break; break;
} }
/*send end_of_line*/
usart_send_string(USART1, (u8*)"\r\n", local_strlen((u8*)"\r\n")); usart_send_string(USART1, (u8*)"\r\n", 3);
} }
return 0; return 0;
} }
@@ -141,27 +140,32 @@ static u32 flash_program_data(u32 start_address, u8 *input_data, u16 num_element
u32 page_address = start_address; u32 page_address = start_address;
u32 flash_status = 0; u32 flash_status = 0;
/*check if start_address is in proper range*/
if((start_address - FLASH_BASE) >= (FLASH_PAGE_SIZE * (FLASH_PAGE_NUM_MAX+1))) if((start_address - FLASH_BASE) >= (FLASH_PAGE_SIZE * (FLASH_PAGE_NUM_MAX+1)))
return 1; return 1;
/*calculate current page address*/
if(start_address % FLASH_PAGE_SIZE) if(start_address % FLASH_PAGE_SIZE)
page_address -= (start_address % FLASH_PAGE_SIZE); page_address -= (start_address % FLASH_PAGE_SIZE);
flash_unlock(); flash_unlock();
/*Erasing page*/
flash_erase_page(page_address); flash_erase_page(page_address);
flash_status = flash_get_status_flags(); flash_status = flash_get_status_flags();
if(flash_status != FLASH_SR_EOP) if(flash_status != FLASH_SR_EOP)
return flash_status; return flash_status;
/*programming flash memory*/
for(iter=0; iter<num_elements; iter += 4) for(iter=0; iter<num_elements; iter += 4)
{ {
/*programming word data*/
flash_program_word(current_address+iter, *((u32*)(input_data + iter))); flash_program_word(current_address+iter, *((u32*)(input_data + iter)));
flash_status = flash_get_status_flags(); flash_status = flash_get_status_flags();
if(flash_status != FLASH_SR_EOP) if(flash_status != FLASH_SR_EOP)
return flash_status; return flash_status;
/*verify if correct data is programmed*/
if(*((u32*)(current_address+iter)) != *((u32*)(input_data + iter))) if(*((u32*)(current_address+iter)) != *((u32*)(input_data + iter)))
return FLASH_WRONG_DATA_WRITTEN; return FLASH_WRONG_DATA_WRITTEN;
} }
@@ -169,28 +173,19 @@ static u32 flash_program_data(u32 start_address, u8 *input_data, u16 num_element
return 0; return 0;
} }
static void flash_read_data(u32 start_address, u16 num_elements, u8 *out_string) static void flash_read_data(u32 start_address, u16 num_elements, u8 *output_data)
{ {
u16 iter; u16 iter;
u32 *memory_ptr= (u32*)start_address; u32 *memory_ptr= (u32*)start_address;
for(iter=0; iter<num_elements/4; iter++) for(iter=0; iter<num_elements/4; iter++)
{ {
*(u32*)out_string = *(memory_ptr + iter); *(u32*)output_data = *(memory_ptr + iter);
out_string += 4; output_data += 4;
} }
} }
static u16 local_strlen(u8 *string) static void local_ltoa_hex(u32 value, u8 *out_string)
{
u16 iter = 0;
while(string[iter++] != 0);
return iter;
}
static void local_atol_hex(u32 value, u8 *out_string)
{ {
u8 iter; u8 iter;