Adjusts the great pinscape controller to work with a cheap linear potentiometer instead of the expensive CCD array
Fork of Pinscape_Controller by
Diff: FreescaleIAP/FreescaleIAP.h
- Revision:
- 2:c174f9ee414a
diff -r d913e0afb2ac -r c174f9ee414a FreescaleIAP/FreescaleIAP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FreescaleIAP/FreescaleIAP.h Tue Jul 22 04:33:47 2014 +0000 @@ -0,0 +1,102 @@ +/* + * Freescale FTFA Flash Memory programmer + * + * Sample usage: + +#include "mbed.h" +#include "FreescaleIAP.h" + +int main() { + int address = flash_size() - SECTOR_SIZE; //Write in last sector + + int *data = (int*)address; + printf("Starting\r\n"); + erase_sector(address); + int numbers[10] = {0, 1, 10, 100, 1000, 10000, 1000000, 10000000, 100000000, 1000000000}; + program_flash(address, (char*)&numbers, 40); //10 integers of 4 bytes each: 40 bytes length + printf("Resulting flash: \r\n"); + for (int i = 0; i<10; i++) + printf("%d\r\n", data[i]); + + printf("Done\r\n\n"); + + + while (true) { + } +} + +*/ + +#ifndef FREESCALEIAP_H +#define FREESCALEIAP_H + +#include "mbed.h" + +#ifdef TARGET_KLXX +#define SECTOR_SIZE 1024 +#elif TARGET_K20D5M +#define SECTOR_SIZE 2048 +#elif TARGET_K64F +#define SECTOR_SIZE 4096 +#else +#define SECTOR_SIZE 1024 +#endif + +enum IAPCode { + BoundaryError = -99, //Commands may not span several sectors + AlignError, //Data must be aligned on longword (two LSBs zero) + ProtectionError, //Flash sector is protected + AccessError, //Something went wrong + CollisionError, //During writing something tried to flash which was written to + LengthError, //The length must be multiples of 4 + RuntimeError, + EraseError, //The flash was not erased before writing to it + Success = 0 +}; + + +class FreescaleIAP +{ +public: + FreescaleIAP(); + ~FreescaleIAP(); + + /** Erase a flash sector + * + * The size erased depends on the used device + * + * @param address address in the sector which needs to be erased + * @param return Success if no errors were encountered, otherwise one of the error states + */ + IAPCode erase_sector(int address); + + /** Program flash + * + * Before programming the used area needs to be erased. The erase state is checked + * before programming, and will return an error if not erased. + * + * @param address starting address where the data needs to be programmed (must be longword alligned: two LSBs must be zero) + * @param data pointer to array with the data to program + * @param length number of bytes to program (must be a multiple of 4) + * @param return Success if no errors were encountered, otherwise one of the error states + */ + IAPCode program_flash(int address, const void *data, unsigned int length); + + /** + * Returns size of flash memory + * + * This is the first address which is not flash + * + * @param return length of flash memory in bytes + */ + uint32_t flash_size(void); + +private: + // program a word of flash + IAPCode program_word(int address, const char *data); + + // verify that a flash area has been erased + IAPCode verify_erased(int address, unsigned int length); +}; + +#endif