203 lines
4.8 KiB
C
203 lines
4.8 KiB
C
/*******************************************************************************
|
|
* *
|
|
* Copyright 2010 Rheinmetall Canada Inc. *
|
|
* *
|
|
* No part of this document may be reproduced, stored in *
|
|
* a retrieval system, or transmitted, in any form or by any means, *
|
|
* electronic, mechanical, photocopying, recording, or otherwise, *
|
|
* without the prior written permission of Rheinmetall Canada Inc. *
|
|
* *
|
|
*******************************************************************************/
|
|
|
|
#include "define.h"
|
|
#include "BoardCfg.h"
|
|
#include "InternalUart.h"
|
|
#include "FlashInterface.h"
|
|
#include "BootloaderProtocol.h"
|
|
#include "BootloaderStateMachine.h"
|
|
#include "BootloaderInterface.h"
|
|
#include "DigitalIO.h"
|
|
#include "SPI_Flash.h"
|
|
//#include "FatFS/ff.h"
|
|
|
|
//#pragma config FMIIEN = OFF, FSRSSEL = PRIORITY_7, FETHIO = ON
|
|
//#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
|
|
//#pragma config POSCMOD = XT, FNOSC = PRIPLL, FPBDIV = DIV_1
|
|
//#pragma config ICESEL = ICS_PGx2, BWP = ON
|
|
|
|
|
|
|
|
////#pragma config FMIIEN = OFF, FSRSSEL = PRIORITY_7, FETHIO = ON
|
|
////#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
|
|
//#pragma config FPLLMUL = MUL_19, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
|
|
//#pragma config POSCMOD = XT, FNOSC = PRIPLL, FPBDIV = DIV_1
|
|
//#pragma config ICESEL = ICS_PGx1, BWP = ON
|
|
|
|
|
|
//#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF, WDTPS = PS128
|
|
//#pragma config POSCMOD = EC, FNOSC = PRIPLL, FPBDIV = DIV_1
|
|
//#pragma config POSCMOD = XT, FNOSC = PRIPLL, FPBDIV = DIV_1
|
|
//#pragma config ICESEL = ICS_PGx2, BWP = OFF
|
|
|
|
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF, WDTPS = PS4096 //Watchdog timeout = 4,096s
|
|
#pragma config POSCMOD = EC, FNOSC = PRIPLL, FPBDIV = DIV_1
|
|
//#pragma config POSCMOD = XT, FNOSC = PRIPLL, FPBDIV = DIV_1
|
|
#pragma config ICESEL = ICS_PGx2, BWP = OFF
|
|
#pragma config FSOSCEN = OFF
|
|
|
|
|
|
void _general_exception_handler(void);
|
|
|
|
int main(void)
|
|
{
|
|
// FATFS fs;
|
|
// FRESULT fr;
|
|
// FIL fil;
|
|
char RdBuf[256];
|
|
unsigned int rd,wr;
|
|
|
|
|
|
|
|
|
|
SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); //Use peripheral library to optimize configuration
|
|
// INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);// configure for multi-vectored mode interrupts
|
|
AD1PCFG = 0xFFFF; //Sart with I/O pins configured as digital I/O
|
|
|
|
InitBoard();
|
|
InternalUartInit();
|
|
InitFlashInterface();
|
|
// ProtocolInit();
|
|
BootloaderSMInit();
|
|
InitDigitalIO();
|
|
|
|
OpenInternalPort(0,0,9600,INT_UART_ONE_STOP_BIT,INT_UART_NO_PARITY);
|
|
|
|
InitSPIFlash();
|
|
|
|
if(SPIFlashCheckAndConfigure() == RET_OK)
|
|
{
|
|
BootloaderSMSetSPIFlashDetected(RET_OK);
|
|
}
|
|
else
|
|
{
|
|
BootloaderSMSetSPIFlashDetected(RET_ERROR);
|
|
}
|
|
|
|
|
|
|
|
// fr = f_mount(&fs,"",1);
|
|
// fr = f_open(&fil,"JF.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
|
|
// if(fr == FR_OK)
|
|
// {
|
|
// fr = f_read(&fil,RdBuf,100,&rd);
|
|
// fr = f_write(&fil,RdBuf,rd,&wr);
|
|
// }
|
|
// else
|
|
// {
|
|
// int toto = 0xDEADBEEF;
|
|
// }
|
|
// f_close(&fil);
|
|
|
|
// ProtocolSendCmd(BOOTLOADER_READY_CMD,0,0);
|
|
HEARTBEAT_LED_1_PIN = 0;
|
|
|
|
char mbuf[30];
|
|
mbuf[0] = 'B';
|
|
mbuf[1] = 'o';
|
|
mbuf[2] = 'o';
|
|
mbuf[3] = 't';
|
|
mbuf[4] = 'l';
|
|
mbuf[5] = 'o';
|
|
mbuf[6] = 'a';
|
|
mbuf[7] = 'd';
|
|
mbuf[8] = 'e';
|
|
mbuf[9] = 'r';
|
|
mbuf[10] = ' ';
|
|
mbuf[11] = 'V';
|
|
mbuf[12] = '0';
|
|
mbuf[13] = '.';
|
|
mbuf[14] = '0';
|
|
mbuf[15] = '1';
|
|
mbuf[16] = '\n';
|
|
mbuf[17] = '\r';
|
|
SendInternalUartData(&mbuf[0],18);
|
|
|
|
|
|
|
|
int i,j;
|
|
i =0;
|
|
j = 0;
|
|
while(1)
|
|
{
|
|
|
|
if(ReadInternalUart() > 0)
|
|
{
|
|
// New Data arrived.
|
|
// nothing special to do.
|
|
// could flash a led
|
|
HEARTBEAT_LED_2_PIN = !HEARTBEAT_LED_2_PIN;
|
|
}
|
|
//
|
|
// if(e_CommandPending)
|
|
// {
|
|
// //Valid command received.
|
|
// ProtocolExecCmd();
|
|
// e_CommandPending = false;
|
|
// }
|
|
//
|
|
BootloaderSM(SM_TICK_EVENT,SM_NULL_DATA);
|
|
|
|
if(++i >= 30000)
|
|
{
|
|
// if(++j >= 10000000)
|
|
{
|
|
HEARTBEAT_LED_1_PIN = ~HEARTBEAT_LED_1_PIN;
|
|
i = 0;
|
|
j = 0;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
void _general_exception_handler(void)
|
|
{
|
|
char mbuf[30];
|
|
mbuf[0] = 'E';
|
|
mbuf[1] = 'x';
|
|
mbuf[2] = 'c';
|
|
mbuf[3] = 'e';
|
|
mbuf[4] = 'p';
|
|
mbuf[5] = 't';
|
|
mbuf[6] = 'i';
|
|
mbuf[7] = 'o';
|
|
mbuf[8] = 'n';
|
|
mbuf[9] = ' ';
|
|
mbuf[10] = 'o';
|
|
mbuf[11] = 'c';
|
|
mbuf[12] = 'c';
|
|
mbuf[13] = 'u';
|
|
mbuf[14] = 'r';
|
|
mbuf[15] = 'r';
|
|
mbuf[16] = 'e';
|
|
mbuf[17] = 'd';
|
|
mbuf[18] = '\r';
|
|
SendInternalUartData(&mbuf[0],19);
|
|
|
|
SoftReset();
|
|
|
|
while(1);
|
|
|
|
}
|
|
|
|
//EOF
|
|
|