Adjusts the great pinscape controller to work with a cheap linear potentiometer instead of the expensive CCD array

Dependencies:   USBDevice mbed

Fork of Pinscape_Controller by Mike R

Revision:
2:c174f9ee414a
Parent:
1:d913e0afb2ac
Child:
3:3514575d4f86
--- a/FreescaleIAP.cpp	Wed Jul 16 23:33:12 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,190 +0,0 @@
-#include "FreescaleIAP.h"
- 
-//#define IAPDEBUG
- 
-enum FCMD {
-    Read1s = 0x01,
-    ProgramCheck = 0x02,
-    ReadResource = 0x03,
-    ProgramLongword = 0x06,
-    EraseSector = 0x09,
-    Read1sBlock = 0x40,
-    ReadOnce = 0x41,
-    ProgramOnce = 0x43,
-    EraseAll = 0x44,
-    VerifyBackdoor = 0x45
-    };
- 
-inline void run_command(void);
-bool check_boundary(int address, unsigned int length);
-bool check_align(int address);
-IAPCode verify_erased(int address, unsigned int length);
-IAPCode check_error(void);
-IAPCode program_word(int address, char *data);IAPCode program_word(int address, char *data);
-    
-IAPCode erase_sector(int address) {
-    #ifdef IAPDEBUG
-    printf("IAP: Erasing at %x\r\n", address);
-    #endif
-    if (check_align(address))
-        return AlignError;
-    
-    //Setup command
-    FTFA->FCCOB0 = EraseSector;
-    FTFA->FCCOB1 = (address >> 16) & 0xFF;
-    FTFA->FCCOB2 = (address >> 8) & 0xFF;
-    FTFA->FCCOB3 = address & 0xFF;
-    
-    run_command();
-    
-    return check_error();
-}
- 
-IAPCode program_flash(int address, char *data, unsigned int length) {
-    #ifdef IAPDEBUG
-    printf("IAP: Programming flash at %x with length %d\r\n", address, length);
-    #endif
-    if (check_align(address))
-        return AlignError;
-        
-    IAPCode eraseCheck = verify_erased(address, length);
-    if (eraseCheck != Success)
-        return eraseCheck;
-    
-    IAPCode progResult;
-    for (int i = 0; i < length; i+=4) {
-        progResult = program_word(address + i, data + i);
-        if (progResult != Success)
-            return progResult;
-    }
-    
-    return Success;
-}
- 
-uint32_t flash_size(void) {
-    uint32_t retval = (SIM->FCFG2 & 0x7F000000u) >> (24-13);
-    if (SIM->FCFG2 & (1<<23))           //Possible second flash bank
-        retval += (SIM->FCFG2 & 0x007F0000u) >> (16-13);
-    return retval;
-}
- 
-IAPCode program_word(int address, char *data) {
-    #ifdef IAPDEBUG
-    printf("IAP: Programming word at %x, %d - %d - %d - %d\r\n", address, data[0], data[1], data[2], data[3]);
-    #endif
-    if (check_align(address))
-        return AlignError;
-    
-    //Setup command
-    FTFA->FCCOB0 = ProgramLongword;
-    FTFA->FCCOB1 = (address >> 16) & 0xFF;
-    FTFA->FCCOB2 = (address >> 8) & 0xFF;
-    FTFA->FCCOB3 = address & 0xFF;
-    FTFA->FCCOB4 = data[3];
-    FTFA->FCCOB5 = data[2];
-    FTFA->FCCOB6 = data[1];
-    FTFA->FCCOB7 = data[0];
-    
-    run_command();
-    
-    return check_error();
-}
- 
-/* Clear possible flags which are set, run command, wait until done */
-inline void run_command(void) {
-    //Clear possible old errors, start command, wait until done
-    FTFA->FSTAT = FTFA_FSTAT_FPVIOL_MASK | FTFA_FSTAT_ACCERR_MASK | FTFA_FSTAT_RDCOLERR_MASK;
-    FTFA->FSTAT = FTFA_FSTAT_CCIF_MASK;
-    while (!(FTFA->FSTAT & FTFA_FSTAT_CCIF_MASK));
-}    
-    
-    
- 
-/* Check if no flash boundary is violated
-   Returns true on violation */
-bool check_boundary(int address, unsigned int length) {
-    int temp = (address+length - 1) / SECTOR_SIZE;
-    address /= SECTOR_SIZE;
-    bool retval = (address != temp);
-    #ifdef IAPDEBUG
-    if (retval)
-        printf("IAP: Boundary violation\r\n");
-    #endif
-    return retval;
-}
- 
-/* Check if address is correctly aligned
-   Returns true on violation */
-bool check_align(int address) {
-    bool retval = address & 0x03;
-    #ifdef IAPDEBUG
-    if (retval)
-        printf("IAP: Alignment violation\r\n");
-    #endif
-    return retval;
-}
- 
-/* Check if an area of flash memory is erased
-   Returns error code or Success (in case of fully erased) */
-IAPCode verify_erased(int address, unsigned int length) {
-    #ifdef IAPDEBUG
-    printf("IAP: Verify erased at %x with length %d\r\n", address, length);
-    #endif
-    
-    if (check_align(address))
-        return AlignError;
-    
-    //Setup command
-    FTFA->FCCOB0 = Read1s;
-    FTFA->FCCOB1 = (address >> 16) & 0xFF;
-    FTFA->FCCOB2 = (address >> 8) & 0xFF;
-    FTFA->FCCOB3 = address & 0xFF;
-    FTFA->FCCOB4 = (length >> 10) & 0xFF;
-    FTFA->FCCOB5 = (length >> 2) & 0xFF;
-    FTFA->FCCOB6 = 0;
-    
-    run_command();
-    
-    IAPCode retval = check_error();
-    if (retval == RuntimeError) {
-        #ifdef IAPDEBUG
-        printf("IAP: Flash was not erased\r\n");
-        #endif
-        return EraseError;
-    }
-    return retval;
-        
-}
- 
-/* Check if an error occured 
-   Returns error code or Success*/
-IAPCode check_error(void) {
-    if (FTFA->FSTAT & FTFA_FSTAT_FPVIOL_MASK) {
-        #ifdef IAPDEBUG
-        printf("IAP: Protection violation\r\n");
-        #endif
-        return ProtectionError;
-    }
-    if (FTFA->FSTAT & FTFA_FSTAT_ACCERR_MASK) {
-        #ifdef IAPDEBUG
-        printf("IAP: Flash access error\r\n");
-        #endif
-        return AccessError;
-    }
-    if (FTFA->FSTAT & FTFA_FSTAT_RDCOLERR_MASK) {
-        #ifdef IAPDEBUG
-        printf("IAP: Collision error\r\n");
-        #endif
-        return CollisionError;
-    }
-    if (FTFA->FSTAT & FTFA_FSTAT_MGSTAT0_MASK) {
-        #ifdef IAPDEBUG
-        printf("IAP: Runtime error\r\n");
-        #endif
-        return RuntimeError;
-    }
-    #ifdef IAPDEBUG
-    printf("IAP: No error reported\r\n");
-    #endif
-    return Success;
-}
\ No newline at end of file