#define _PIC32MX534F064H_C #include // DEVCFG3 // USERID = No Setting #pragma config FSRSSEL = PRIORITY_7 // SRS Select (SRS Priority 7) #pragma config FCANIO = OFF // CAN I/O Pin Select (Alternate CAN I/O) #pragma config FUSBIDIO = OFF // USB USID Selection (Controlled by Port Function) #pragma config FVBUSONIO = OFF // USB VBUS OFF Selection (Not Controlled by USB Module) // DEVCFG2 #pragma config FPLLIDIV = DIV_2 // PLL Input Divider (2x Divider) #pragma config FPLLMUL = MUL_20 // PLL Multiplier (20x Multiplier) #pragma config UPLLIDIV = DIV_2 // USB PLL Input Divider (2x Divider) #pragma config UPLLEN = ON // USB PLL Enable (Enabled) #pragma config FPLLODIV = DIV_1 // System PLL Output Clock Divider (PLL Divide by 1) // DEVCFG1 #pragma config FNOSC = PRIPLL // Oscillator Selection Bits (Primary Osc w/PLL (XT+,HS+,EC+PLL)) #pragma config FSOSCEN = OFF // Secondary Oscillator Enable (Disabled) #pragma config IESO = OFF // Internal/External Switch Over (Disabled) #pragma config POSCMOD = XT // Primary Oscillator Configuration (XT osc mode) #pragma config OSCIOFNC = OFF // CLKO Output Signal Active on the OSCO Pin (Disabled) #pragma config FPBDIV = DIV_2 // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1) #pragma config FCKSM = CSDCMD // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled) #pragma config WDTPS = PS1048576 // Watchdog Timer Postscaler (1:1048576) #pragma config FWDTEN = OFF // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls)) // DEVCFG0 #pragma config DEBUG = OFF // Background Debugger Enable (Debugger is disabled) #pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel Select (ICE EMUC2/EMUD2 pins shared with PGC2/PGD2) #pragma config PWP = OFF // Program Flash Write Protect (Disable) #pragma config BWP = OFF // Boot Flash Write Protect bit (Protection Disabled) #pragma config CP = OFF // Code Protect (Protection Disabled) #include #include "PIC32MX534F064H.h" #include #include #include "usb/usb.h" #include "crc.h" typedef struct { UINT32 Address; UINT16 RecDataLen; UINT8* Data; }T_FLASH_RECORD; void DelayTicks(UINT32 a){ UINT32 StartTime; StartTime=ReadCoreTimer(); while((UINT32)(ReadCoreTimer()-StartTime)=512)&&((lFR.Address & 511L)==0)) { Result=NVMWriteRow(ProgAddress,lFR.Data); lFR.Address+=512; lFR.RecDataLen-=512; lFR.Data+=512; } else { if((((ProgAddress >= (void *)APP_FLASH_BASE_ADDRESS) && (ProgAddressEnd <= (void *)APP_FLASH_END_ADDRESS)) || ((ProgAddress >= (void *)APP_IVT_BASE_ADDRESS) && (ProgAddressEnd <= (void *)APP_IVT_END_ADDRESS))) && ((ProgAddressEnd <= (void*)DEV_CONFIG_REG_BASE_ADDRESS) || (ProgAddress > (void*)DEV_CONFIG_REG_END_ADDRESS))) { WrData = 0xFFFFFFFF; memcpy(&WrData,lFR.Data,min(4,lFR.RecDataLen)); Result = NVMWriteWord(ProgAddress, WrData); } lFR.Address += 4; lFR.Data += 4; if(lFR.RecDataLen > 3) { lFR.RecDataLen -= 4; } else { lFR.RecDataLen = 0; } } if(Result)break; } return Result; } UINT32 mcuProgramComplete(){ UINT32 pCRC; pCRC = CalculateCRC(1234, (void *)KVA0_TO_KVA1(APP_FLASH_BASE_ADDRESS), (APP_FLASH_END_ADDRESS - APP_FLASH_BASE_ADDRESS) - 3); NVMWriteWord((void *)(APP_FLASH_END_ADDRESS - 3), pCRC); return pCRC; } UINT mcuValidAppPresent() { UINT32 pCRC; pCRC = CalculateCRC(1234, (void *)KVA0_TO_KVA1(APP_FLASH_BASE_ADDRESS), (APP_FLASH_END_ADDRESS - APP_FLASH_BASE_ADDRESS) - 3); if(pCRC == (*((UINT32 *)KVA0_TO_KVA1(APP_FLASH_END_ADDRESS - 3))))return 1; return 0; } void mcuSPIWait(){ while(mcuSPIIsBusy()); } #undef _PIC32MX534F064H_C