Ika Shouyu Poppoyaki - LPC82x supported

Dependencies:   MODSERIAL mbed

Fork of ika_shouyu_poppoyaki by Tedd OKANO

Committer:
okano
Date:
Fri Sep 20 02:21:58 2013 +0000
Revision:
30:e0d7524661ca
Child:
32:3700d5df4e18
** version 0.95. redundant code and files are removed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 30:e0d7524661ca 1
okano 30:e0d7524661ca 2 #include "mbed.h"
okano 30:e0d7524661ca 3 #include "target_table.h"
okano 30:e0d7524661ca 4 #include "serial_utilities.h"
okano 30:e0d7524661ca 5 #include "command_interface.h"
okano 30:e0d7524661ca 6 #include "writing.h"
okano 30:e0d7524661ca 7 #include "uu_coding.h"
okano 30:e0d7524661ca 8 #include "target_handling.h"
okano 30:e0d7524661ca 9 #include "verification.h"
okano 30:e0d7524661ca 10 #include "isp.h"
okano 30:e0d7524661ca 11 #include "_user_settings.h"
okano 30:e0d7524661ca 12
okano 30:e0d7524661ca 13
okano 30:e0d7524661ca 14 BusOut leds( LED4, LED3, LED2, LED1 );
okano 30:e0d7524661ca 15 Ticker success;
okano 30:e0d7524661ca 16
okano 30:e0d7524661ca 17
okano 30:e0d7524661ca 18 int file_size( FILE *fp );
okano 30:e0d7524661ca 19 void success_indicator();
okano 30:e0d7524661ca 20
okano 30:e0d7524661ca 21 int isp_flash_write( char *file_name )
okano 30:e0d7524661ca 22 {
okano 30:e0d7524661ca 23 FILE *fp;
okano 30:e0d7524661ca 24 target_param *tpp;
okano 30:e0d7524661ca 25 int data_size;
okano 30:e0d7524661ca 26 int last_sector;
okano 30:e0d7524661ca 27 int transferred_size;
okano 30:e0d7524661ca 28 int err;
okano 30:e0d7524661ca 29
okano 30:e0d7524661ca 30 if ( NULL == (tpp = open_target( ISP_BAUD_RATE )) ) {
okano 30:e0d7524661ca 31 return ( ERROR_AT_TARGET_OPEN );
okano 30:e0d7524661ca 32 }
okano 30:e0d7524661ca 33
okano 30:e0d7524661ca 34 printf( " target device found : type = \"%s\"\r\n", tpp->type_name );
okano 30:e0d7524661ca 35 printf( " ID = 0x%08X\r\n", tpp->id );
okano 30:e0d7524661ca 36 printf( " RAM size = %10d bytes\r\n", tpp->ram_size );
okano 30:e0d7524661ca 37 printf( " flash size = %10d bytes\r\n", tpp->flash_size );
okano 30:e0d7524661ca 38
okano 30:e0d7524661ca 39 printf( " opening file: \"%s\"\r\n", file_name );
okano 30:e0d7524661ca 40
okano 30:e0d7524661ca 41 if ( NULL == (fp = fopen( file_name, "rb" )) ) {
okano 30:e0d7524661ca 42 return ( ERROR_AT_FILE_OPEN );
okano 30:e0d7524661ca 43 }
okano 30:e0d7524661ca 44
okano 30:e0d7524661ca 45 data_size = file_size( fp );
okano 30:e0d7524661ca 46 last_sector = data_size / tpp->sector_size;
okano 30:e0d7524661ca 47
okano 30:e0d7524661ca 48 printf( " data size = %d bytes, it takes %d secotrs in flash area\r\n", data_size, last_sector + 1 );
okano 30:e0d7524661ca 49 printf( " resetting target\r\n" );
okano 30:e0d7524661ca 50
okano 30:e0d7524661ca 51 if ( erase_sectors( last_sector ) )
okano 30:e0d7524661ca 52 return ( ERROR_AT_SECTOR_ERASE );
okano 30:e0d7524661ca 53
okano 30:e0d7524661ca 54 printf( "\r\n ==== flash writing ====\r\n" );
okano 30:e0d7524661ca 55
okano 30:e0d7524661ca 56 if ( err = write_flash( fp, tpp, &transferred_size ) )
okano 30:e0d7524661ca 57 return ( err );
okano 30:e0d7524661ca 58
okano 30:e0d7524661ca 59 printf( " -- %d bytes data are written\r\n", transferred_size );
okano 30:e0d7524661ca 60
okano 30:e0d7524661ca 61
okano 30:e0d7524661ca 62 printf( "\r\n ==== flash reading and verifying ====\r\n" );
okano 30:e0d7524661ca 63
okano 30:e0d7524661ca 64 if ( err = verify_flash( fp, tpp, &transferred_size ) )
okano 30:e0d7524661ca 65 return ( err );
okano 30:e0d7524661ca 66
okano 30:e0d7524661ca 67 printf( " -- %d bytes data are read and verified\r\n", transferred_size );
okano 30:e0d7524661ca 68
okano 30:e0d7524661ca 69 fclose( fp );
okano 30:e0d7524661ca 70
okano 30:e0d7524661ca 71 post_writing_process( tpp );
okano 30:e0d7524661ca 72
okano 30:e0d7524661ca 73 return ( 0 );
okano 30:e0d7524661ca 74 }
okano 30:e0d7524661ca 75
okano 30:e0d7524661ca 76
okano 30:e0d7524661ca 77 int file_size( FILE *fp )
okano 30:e0d7524661ca 78 {
okano 30:e0d7524661ca 79 int size;
okano 30:e0d7524661ca 80
okano 30:e0d7524661ca 81 fseek( fp, 0, SEEK_END ); // seek to end of file
okano 30:e0d7524661ca 82 size = ftell( fp ); // get current file pointer
okano 30:e0d7524661ca 83 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
okano 30:e0d7524661ca 84
okano 30:e0d7524661ca 85 return size;
okano 30:e0d7524661ca 86 }
okano 30:e0d7524661ca 87
okano 30:e0d7524661ca 88
okano 30:e0d7524661ca 89 void start_target_in_normal_mode( int baud_rate )
okano 30:e0d7524661ca 90 {
okano 30:e0d7524661ca 91 set_target_baud_rate( baud_rate );
okano 30:e0d7524661ca 92 reset_target( NO_ISP_MODE );
okano 30:e0d7524661ca 93 }
okano 30:e0d7524661ca 94
okano 30:e0d7524661ca 95 void start_success_indicator( void )
okano 30:e0d7524661ca 96 {
okano 30:e0d7524661ca 97 success.attach( &success_indicator, 0.1 );
okano 30:e0d7524661ca 98 }
okano 30:e0d7524661ca 99
okano 30:e0d7524661ca 100 void success_indicator()
okano 30:e0d7524661ca 101 {
okano 30:e0d7524661ca 102 static int i = 0;
okano 30:e0d7524661ca 103
okano 30:e0d7524661ca 104 leds = 0x1 << (i++ & 0x3);
okano 30:e0d7524661ca 105 }
okano 30:e0d7524661ca 106
okano 30:e0d7524661ca 107
okano 30:e0d7524661ca 108 void toggle_led( char v )
okano 30:e0d7524661ca 109 {
okano 30:e0d7524661ca 110 leds = leds ^ (0x1 << v);
okano 30:e0d7524661ca 111 }
okano 30:e0d7524661ca 112