You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.4 KiB
80 lines
1.4 KiB
#include "config.h"
|
|
|
|
#include "System.h"
|
|
#include "boot.h"
|
|
#include "USART1.h"
|
|
#include "RSLink.h"
|
|
|
|
#include <avr/fuse.h>
|
|
FUSES={ .extended=F_Ext, .high = F_High, .low = F_Low }; // Fuses + Lock programming
|
|
LOCKBITS=F_Lock;
|
|
|
|
int main(void)
|
|
{
|
|
//FUSE CHECK
|
|
asm volatile (
|
|
"ldi R31, 0x00 \n\t"
|
|
"ldi R30, 0x01 \n\t"
|
|
"ldi R16, 0x09 \n\t"
|
|
"out 0x37, R16 \n\t"
|
|
"lpm R17, Z \n\t"
|
|
"cpi R17, %0 \n\t"
|
|
"brne L_LOOP_%= \n\t"
|
|
// Fuse Extended
|
|
"ldi R30, 0x02 \n\t"
|
|
"out 0x37, R16 \n\t"
|
|
"lpm R17, Z \n\t"
|
|
"cpi R17, %1 \n\t"
|
|
"brne L_LOOP_%= \n\t"
|
|
// Fuse Low Byte
|
|
"ldi R30, 0x00 \n\t"
|
|
"out 0x37, R16 \n\t"
|
|
"lpm R17, Z \n\t"
|
|
"cpi R17, %2 \n\t"
|
|
"brne L_LOOP_%= \n\t"
|
|
// Fuse Hi Byte
|
|
"ldi R30, 0x03 \n\t"
|
|
"out 0x37, R16 \n\t"
|
|
"lpm R17, Z \n\t"
|
|
"cpi R17, %3 \n\t"
|
|
"breq L_EXIT_%= \n\t"
|
|
"L_LOOP_%=: \n\t"
|
|
"rjmp L_LOOP_%= \n\t"
|
|
"L_EXIT_%=: \n\t"
|
|
: //No output
|
|
: "M" (F_Lock),
|
|
"M" (F_Ext),
|
|
"M" (F_Low),
|
|
"M" (F_High)
|
|
);
|
|
|
|
wdt_enable(WDTO_2S);
|
|
wdt_reset();
|
|
|
|
//Move interrupt table
|
|
uint8_t temp = MCUCR;
|
|
MCUCR=temp|(1<<IVCE);
|
|
MCUCR=temp|(1<<IVSEL);
|
|
|
|
USART1_Init();
|
|
|
|
RSLink_Init();
|
|
|
|
FindBootloaderEnterReason(); //Do checks
|
|
wdt_reset();
|
|
|
|
if (BootloaderInfo.Reason == IDIFMW_REASON_NoReason) LaunchApplication();
|
|
|
|
BootloaderInfo.BlockNumber = -1; //Find Better Place!!
|
|
AES_DISABLED = 0;
|
|
|
|
sei();
|
|
|
|
while (1)
|
|
{
|
|
RSLink_Handler();
|
|
wdt_reset();
|
|
}
|
|
}
|
|
|