Merge pull request #1 from KryoStoffer/master
cc1110 Bootload using the radio interface
This commit is contained in:
commit
9b9bfda1c2
10 files changed
+2793
-7
No files matched your search
+18
-7
@@ -9,8 +9,6 @@
|
||||
#include <getopt.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#define SERIAL_TIMEOUT 2
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
#undef WIN32
|
||||
#endif
|
||||
@@ -35,6 +33,7 @@ static struct option long_options[] =
|
||||
{"device", required_argument, 0, 'd'},
|
||||
{"timeout", required_argument, 0, 't'},
|
||||
{"passthrough", no_argument, 0, 'p'},
|
||||
{"wireless", no_argument, 0, 'w'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
@@ -51,6 +50,7 @@ void usage(void)
|
||||
fprintf(stderr, " --flash=file.hex -f file.hex Reflash device with intel hex file\n");
|
||||
fprintf(stderr, " --timeout=n -t n Search for bootload string for n seconds\n");
|
||||
fprintf(stderr, " --passthrough -p Program remote device over passthrough\n");
|
||||
fprintf(stderr, " --wireless -w Program remote device over wireless ccrl\n");
|
||||
}
|
||||
|
||||
static bool opt_console = false;
|
||||
@@ -60,6 +60,8 @@ static bool opt_device = false;
|
||||
static char *flash_filename = NULL;
|
||||
static char *device_name = NULL;
|
||||
static bool opt_passthrough = 0;
|
||||
static bool opt_wireless = 0;
|
||||
static int serial_timeout = 2;
|
||||
|
||||
#ifndef WIN32
|
||||
static struct termios orig_termios;
|
||||
@@ -72,7 +74,7 @@ int parse_options(int argc, char **argv)
|
||||
|
||||
while(1)
|
||||
{
|
||||
c = getopt_long (argc, argv, "hcf:d:t:p", long_options, &option_index);
|
||||
c = getopt_long (argc, argv, "hcf:d:t:p:w", long_options, &option_index);
|
||||
if (c == -1)
|
||||
break;
|
||||
switch(c)
|
||||
@@ -80,6 +82,10 @@ int parse_options(int argc, char **argv)
|
||||
case 'h':
|
||||
return 1;
|
||||
break;
|
||||
case 'w':
|
||||
opt_wireless = 1;
|
||||
serial_timeout = 4;
|
||||
break;
|
||||
case 'p':
|
||||
opt_passthrough = 1;
|
||||
break;
|
||||
@@ -260,7 +266,7 @@ int serialRead(int fd, void* buf, int len)
|
||||
return rc;
|
||||
gettimeofday(&now, NULL);
|
||||
}
|
||||
while((now.tv_sec - start.tv_sec) < SERIAL_TIMEOUT);
|
||||
while((now.tv_sec - start.tv_sec) < serial_timeout);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -296,7 +302,7 @@ int serialWrite(int fd, void* buf, int len)
|
||||
return rc;
|
||||
gettimeofday(&now, NULL);
|
||||
}
|
||||
while((now.tv_sec - start.tv_sec) < SERIAL_TIMEOUT);
|
||||
while((now.tv_sec - start.tv_sec) < serial_timeout);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -469,8 +475,8 @@ int wait_for_bootloader(int fd, int timeout)
|
||||
|
||||
gettimeofday(&start, NULL);
|
||||
|
||||
if (!opt_passthrough)
|
||||
serialWrite(fd, "+++", 3);
|
||||
if (!opt_passthrough && !opt_wireless)
|
||||
serialWrite(fd, "+++", 5);
|
||||
|
||||
printf("Waiting %ds for bootloader, reset board now\n", timeout);
|
||||
|
||||
@@ -497,6 +503,11 @@ int wait_for_bootloader(int fd, int timeout)
|
||||
if (c == 'P' && prev_c == 'P')
|
||||
break;
|
||||
}
|
||||
else if (opt_wireless)
|
||||
{
|
||||
if (c == 'W' && prev_c == 'W')
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c == 'B' && prev_c == 'B')
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
PROG = /cygdrive/c/Program\ Files/Texas\ Instruments/SmartRF\ Tools/Flash\ Programmer/bin/SmartRFProgConsole.exe
|
||||
|
||||
TARGET = cctl-rf.hex
|
||||
|
||||
CC = sdcc
|
||||
AS = sdas8051
|
||||
|
||||
CFLAGS = --model-small --opt-code-size --acall-ajmp
|
||||
|
||||
LDFLAGS_FLASH = \
|
||||
--out-fmt-ihx \
|
||||
--code-loc 0x0000 --code-size 0x400 \
|
||||
--xram-loc 0xf000 --xram-size 0x1000 \
|
||||
--iram-size 0x100
|
||||
|
||||
|
||||
ASFLAGS = -plosgff
|
||||
|
||||
ifdef DEBUG
|
||||
CFLAGS += --debug
|
||||
endif
|
||||
|
||||
SRC = main.c
|
||||
|
||||
ASM_SRC = start.asm
|
||||
|
||||
ADB = $(SRC:.c=.c.adb)
|
||||
ASM = $(SRC:.c=.c.asm)
|
||||
LNK = $(SRC:.c=.c.lnk)
|
||||
LST = $(SRC:.c=.c.lst)
|
||||
REL = $(SRC:.c=.c.rel)
|
||||
RST = $(SRC:.c=.c.rst)
|
||||
SYM = $(SRC:.c=.c.sym)
|
||||
|
||||
ASM_ADB = $(ASM_SRC:.asm=.adb)
|
||||
ASM_LNK = $(ASM_SRC:.asm=.lnk)
|
||||
ASM_LST = $(ASM_SRC:.asm=.lst)
|
||||
ASM_REL = $(ASM_SRC:.asm=.rel)
|
||||
ASM_RST = $(ASM_SRC:.asm=.rst)
|
||||
ASM_SYM = $(ASM_SRC:.asm=.sym)
|
||||
|
||||
PROGS = $(TARGET)
|
||||
PCDB = $(PROGS:.hex=.cdb)
|
||||
PLNK = $(PROGS:.hex=.lnk)
|
||||
PMAP = $(PROGS:.hex=.map)
|
||||
PMEM = $(PROGS:.hex=.mem)
|
||||
PLK = $(PROGS:.hex=.lk)
|
||||
PAOM = $(PROGS:.hex=)
|
||||
|
||||
%.c.rel : %.c
|
||||
$(CC) -c $(CFLAGS) -o$*.c.rel $<
|
||||
|
||||
%.rel : %.asm
|
||||
$(AS) -c $(ASFLAGS) $<
|
||||
|
||||
all: $(PROGS)
|
||||
|
||||
$(TARGET): $(REL) $(ASM_REL) Makefile
|
||||
$(CC) $(LDFLAGS_FLASH) $(CFLAGS) -o $(TARGET) $(ASM_REL) $(REL)
|
||||
@echo Binary size `makebin -p < $(TARGET) | wc -c`
|
||||
|
||||
|
||||
clean:
|
||||
rm -f $(ADB) $(ASM) $(LNK) $(LST) $(REL) $(RST) $(SYM)
|
||||
rm -f $(ASM_ADB) $(ASM_LNK) $(ASM_LST) $(ASM_REL) $(ASM_RST) $(ASM_SYM)
|
||||
rm -f $(PROGS) $(PCDB) $(PLNK) $(PMAP) $(PMEM) $(PLK) $(PAOM)
|
||||
|
||||
install: $(TARGET)
|
||||
$(PROG) S EPV F="$(TARGET)"
|
||||
@@ -0,0 +1,80 @@
|
||||
ChipCon Tiny Loader Radio Version
|
||||
=================================
|
||||
A bootloader that can replace the original cctl in places where you don't want to load software via serial cable. This is achieved by using the wireless radio interface of the CC1110.
|
||||
|
||||
The readme has only limited information, experience in using the serial version of the cctl is recommended, see the readme of cctl.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
You need 2 cc1110 boards, a device that can run the cctl-prog, and a way to to load the bootloaders, see readme of cctl.
|
||||
|
||||
First board should be loaded with a bootloader and the sensemote app ChipCon Radio Loader (ccrl).
|
||||
|
||||
Second board should have the cctl-rf bootloader.
|
||||
|
||||
Connect the first board via serial to the device running the cctl-prog.
|
||||
|
||||
Use the cctl-prog with the -w option.
|
||||
|
||||
Building
|
||||
--------
|
||||
The code has been tested with SDCC, version 3.2.0
|
||||
|
||||
Radio Protocol
|
||||
--------------
|
||||
On reset the bootloader will send 18 packets containing the following:
|
||||
|
||||
<- `0x02 0xFD 0x10`
|
||||
|
||||
waiting for a reponse like:
|
||||
|
||||
-> `0x02 0xFE 0x10`
|
||||
|
||||
If a response is received, the bootloader will enter upgrade mode.
|
||||
|
||||
If no packet is received, the bootloader will attempt to launch user code from 0x400.
|
||||
|
||||
The bootloader enables the watchdog with a 1s timeout while running. It does not engage the hardware watchdog when jumping to user code (as the watchdog cannot be disabled making it incompatible with applications which remain in deep sleep for long periods).
|
||||
|
||||
Once in upgrade mode, the bootloader expects to receive at least one packet per second, otherwise it will reset using the hardware watchdog.
|
||||
|
||||
In upgrade mode the following commands are available:
|
||||
|
||||
### Erase page
|
||||
|
||||
Erase a 1KB page of flash.
|
||||
|
||||
-> `0x04 0xFE 0x01`, `uint8_t page` (0-31), `0x00`
|
||||
|
||||
<- `0x04 0xFD 0x01`, `uint8_t page` (0-31), `0x00`
|
||||
|
||||
### Program page
|
||||
|
||||
Program a 1KB page of flash from RAM buffer.
|
||||
|
||||
-> `0x04 0xFE 0x02`, `uint8_t page` (0-31), `0x00`
|
||||
|
||||
<- `0x04 0xFD 0x02`, `uint8_t page` (0-31), `0x00`
|
||||
|
||||
### Read segment
|
||||
|
||||
Read 64 byte segment from flash.
|
||||
|
||||
-> `0x04 0xFE 0x03`, `uint8_t page` (0-31), `uint8_t segment` (0-15)
|
||||
|
||||
<- `0x44 0xFD 0x03`, `uint8_t page` (0-31), `uint8_t segment` (0-15), `uint8_t data[64]`
|
||||
|
||||
|
||||
### Load page
|
||||
|
||||
Load 64 byte segment to RAM buffer.
|
||||
|
||||
-> `0x44 0xFE 0x04`, `uint8_t page` (ignored), `uint8_t segment` (0-15), `uint8_t data[64]`
|
||||
|
||||
<- `0x04 0xFD 0x04`, `uint8_t page` (ignored), `uint8_t segment` (0-15)
|
||||
|
||||
### Jump to user code
|
||||
|
||||
-> 0x02 0xFE 0x05
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
+555
@@ -0,0 +1,555 @@
|
||||
/*
|
||||
* CCTL-RF - ChipCon Tiny Loader Radio Version
|
||||
* A 1KB RF bootloader for the CC1110/CC1111
|
||||
*
|
||||
* Kristoffer Larsen (c) 2012 <kri@kri.dk>
|
||||
*
|
||||
* Based on Serial bootload from
|
||||
* Joby Taffey (c) 2012 <jrt-cctl@hodgepig.org>
|
||||
*
|
||||
* Derived from CC Bootloader
|
||||
* Fergus Noble (c) 2011
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
*/
|
||||
|
||||
// Select crystal frequency
|
||||
// Remember to change in start.asm also.
|
||||
#define CRYSTAL_26_MHZ
|
||||
|
||||
|
||||
//#define CONSOLE_DEBUG
|
||||
|
||||
#include <stdint.h>
|
||||
#include <cc1110.h>
|
||||
#include "cc1110-ext.h"
|
||||
|
||||
#define RADIOBUF_MAX 256
|
||||
|
||||
// Flash write timer value:
|
||||
// FWT = 21000 * FCLK / (16 * 10^9)
|
||||
// For FCLK = 24MHz, FWT = 0x1F
|
||||
// For FCLK = 26MHz, FWT = 0x11
|
||||
#ifdef CRYSTAL_26_MHZ
|
||||
#define FLASH_FWT 0x1F
|
||||
#endif
|
||||
#ifdef CRYSTAL_24_MHZ
|
||||
#define FLASH_FWT 0x11
|
||||
#endif
|
||||
// Address of flash controller data register
|
||||
#define FLASH_FWDATA_ADDR 0xDFAF
|
||||
|
||||
|
||||
|
||||
static __xdata struct cc_dma_channel dma0_config;
|
||||
|
||||
static __xdata uint8_t radiobuf[RADIOBUF_MAX];
|
||||
static uint8_t radiobuf_index;
|
||||
#ifdef CONSOLE_DEBUG
|
||||
static __xdata uint8_t * __at (0x0000) flashp;
|
||||
#endif
|
||||
|
||||
__xdata uint8_t rambuf[1024];
|
||||
|
||||
struct cc_dma_channel
|
||||
{
|
||||
uint8_t src_high;
|
||||
uint8_t src_low;
|
||||
uint8_t dst_high;
|
||||
uint8_t dst_low;
|
||||
uint8_t len_high;
|
||||
uint8_t len_low;
|
||||
uint8_t cfg0;
|
||||
uint8_t cfg1;
|
||||
};
|
||||
|
||||
#define DMA_CFG0_TRIGGER_FLASH 18
|
||||
#define DMA_CFG1_SRCINC_1 (1 << 6)
|
||||
#define DMA_CFG1_DESTINC_0 (0 << 4)
|
||||
#define DMA_CFG1_PRIORITY_HIGH (2 << 0)
|
||||
#define DMAARM_DMAARM0 (1 << 0)
|
||||
|
||||
#define DMA_LEN_HIGH_VLEN_MASK (7 << 5)
|
||||
#define DMA_LEN_HIGH_VLEN_LEN (0 << 5)
|
||||
#define DMA_LEN_HIGH_VLEN_PLUS_1 (1 << 5)
|
||||
#define DMA_LEN_HIGH_VLEN (2 << 5)
|
||||
#define DMA_LEN_HIGH_VLEN_PLUS_2 (3 << 5)
|
||||
#define DMA_LEN_HIGH_VLEN_PLUS_3 (4 << 5)
|
||||
#define DMA_LEN_HIGH_MASK (0x1f)
|
||||
|
||||
#define DMA_CFG0_WORDSIZE_8 (0 << 7)
|
||||
#define DMA_CFG0_WORDSIZE_16 (1 << 7)
|
||||
#define DMA_CFG0_TMODE_MASK (3 << 5)
|
||||
#define DMA_CFG0_TMODE_SINGLE (0 << 5)
|
||||
#define DMA_CFG0_TMODE_BLOCK (1 << 5)
|
||||
#define DMA_CFG0_TMODE_REPEATED_SINGLE (2 << 5)
|
||||
#define DMA_CFG0_TMODE_REPEATED_BLOCK (3 << 5)
|
||||
|
||||
|
||||
void flash_erase_page(void)
|
||||
{
|
||||
while (FCTL & FCTL_BUSY);
|
||||
|
||||
FWT = FLASH_FWT;
|
||||
FADDRH = radiobuf[3] << 1;
|
||||
FADDRL = 0x00;
|
||||
|
||||
// Erase the page that will be written to
|
||||
FCTL |= FCTL_ERASE;
|
||||
__asm nop __endasm;
|
||||
|
||||
// Wait for the erase operation to complete
|
||||
while (FCTL & FCTL_BUSY) {}
|
||||
}
|
||||
|
||||
void flash_write_trigger(void)
|
||||
{
|
||||
// Enable flash write. Generates a DMA trigger. Must be aligned on a 2-byte
|
||||
// boundary and is therefore implemented in assembly.
|
||||
|
||||
// p.s. if this looks a little crazy its because it is, sdcc doesn't currently
|
||||
// support explicitly specifying code alignment which would make this easier
|
||||
|
||||
__asm
|
||||
.globl flash_write_trigger_instruction
|
||||
.globl flash_write_trigger_done
|
||||
|
||||
; Put our trigger instruction in the HOME segment (shared with some startup code)
|
||||
; where it wont move around too much
|
||||
.area HOME (CODE)
|
||||
; Comment or uncomment these lines to adjust if you change the start.asm code
|
||||
nop ; Padding to get onto 16-bit boundary
|
||||
flash_write_trigger_instruction:
|
||||
orl _FCTL, #0x02 ; FCTL |= FCTL_ERASE
|
||||
nop ; Required, see datasheet.
|
||||
ljmp flash_write_trigger_done ; Jump back into our function
|
||||
|
||||
; Meanwhile, back in the main CSEG segment...
|
||||
.area CSEG (CODE)
|
||||
; Jump to the trigger instruction
|
||||
ljmp flash_write_trigger_instruction
|
||||
flash_write_trigger_done:
|
||||
__endasm;
|
||||
}
|
||||
|
||||
void flash_write(void)
|
||||
{
|
||||
// Setup DMA descriptor
|
||||
dma0_config.src_high = (((uint16_t)(__xdata uint16_t *)rambuf) >> 8) & 0x00FF;
|
||||
dma0_config.src_low = ((uint16_t)(__xdata uint16_t *)rambuf) & 0x00FF;
|
||||
dma0_config.dst_high = (FLASH_FWDATA_ADDR >> 8) & 0x00FF;
|
||||
dma0_config.dst_low = FLASH_FWDATA_ADDR & 0x00FF;
|
||||
dma0_config.len_high = DMA_LEN_HIGH_VLEN_LEN;
|
||||
dma0_config.len_high |= ((1024) >> 8) & DMA_LEN_HIGH_MASK;
|
||||
dma0_config.len_low = (1024) & 0x00FF;
|
||||
|
||||
dma0_config.cfg0 = \
|
||||
DMA_CFG0_WORDSIZE_8 | \
|
||||
DMA_CFG0_TMODE_SINGLE | \
|
||||
DMA_CFG0_TRIGGER_FLASH;
|
||||
|
||||
dma0_config.cfg1 = \
|
||||
DMA_CFG1_SRCINC_1 | \
|
||||
DMA_CFG1_DESTINC_0 | \
|
||||
DMA_CFG1_PRIORITY_HIGH;
|
||||
|
||||
// Point DMA controller at our DMA descriptor
|
||||
DMA0CFGH = ((uint16_t)&dma0_config >> 8) & 0x00FF;
|
||||
DMA0CFGL = (uint16_t)&dma0_config & 0x00FF;
|
||||
|
||||
// Waiting for the flash controller to be ready
|
||||
while (FCTL & FCTL_BUSY);
|
||||
|
||||
// Configure the flash controller
|
||||
FWT = FLASH_FWT;
|
||||
FADDRH = (radiobuf[3] << 1) & 0x3F;
|
||||
//FADDRL = 0;//(radiobuf[3] << 9) & 0xFF; // reset value is 0x00
|
||||
|
||||
// Arm the DMA channel, so that a DMA trigger will initiate DMA writing
|
||||
DMAARM |= DMAARM_DMAARM0;
|
||||
|
||||
// Enable flash write - triggers the DMA transfer
|
||||
flash_write_trigger();
|
||||
|
||||
// Wait for DMA transfer to complete
|
||||
while (!(DMAIRQ & DMAIRQ_DMAIF0));
|
||||
|
||||
// Wait until flash controller not busy
|
||||
while (FCTL & (FCTL_BUSY | FCTL_SWBSY));
|
||||
|
||||
// By now, the transfer is completed, so the transfer count is reached.
|
||||
// The DMA channel 0 interrupt flag is then set, so we clear it here.
|
||||
DMAIRQ &= ~DMAIRQ_DMAIF0;
|
||||
}
|
||||
|
||||
void jump_to_user(void)
|
||||
{
|
||||
if (*((__xdata uint8_t*)0x400) != 0xFF)
|
||||
{
|
||||
// Disable all interrupts
|
||||
EA = 0;
|
||||
IEN0 = IEN1 = IEN2 = 0;
|
||||
|
||||
// bootloader not running
|
||||
F1 = 0;
|
||||
|
||||
// Jump to user code
|
||||
__asm
|
||||
ljmp #0x400
|
||||
__endasm;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONSOLE_DEBUG
|
||||
void cons_putc(uint8_t ch)
|
||||
{ U0DBUF = ch;
|
||||
while(!(U0CSR & U0CSR_TX_BYTE)); // wait for byte to be transmitted
|
||||
U0CSR &= ~U0CSR_TX_BYTE; // Clear transmit byte status
|
||||
}
|
||||
|
||||
char nibble_to_char(uint8_t nibble)
|
||||
{
|
||||
if (nibble < 0xA)
|
||||
return nibble + '0';
|
||||
return nibble - 0xA + 'A';
|
||||
}
|
||||
|
||||
void cons_puthex8(uint8_t h)
|
||||
{
|
||||
cons_putc(nibble_to_char((h & 0xF0)>>4));
|
||||
cons_putc(nibble_to_char(h & 0x0F));
|
||||
}
|
||||
|
||||
void cons_puthex16(uint16_t h)
|
||||
{
|
||||
cons_putc(nibble_to_char((h & 0xF000)>>12));
|
||||
cons_putc(nibble_to_char((h & 0x0F00)>>8));
|
||||
cons_putc(nibble_to_char((h & 0x00F0)>>4));
|
||||
cons_putc(nibble_to_char(h & 0x000F));
|
||||
}
|
||||
|
||||
void cons_puts(const char *s)
|
||||
{
|
||||
while(0 != *s)
|
||||
cons_putc((uint8_t)(*s++));
|
||||
}
|
||||
#endif
|
||||
|
||||
void rftxrx_isr(void) __interrupt RFTXRX_VECTOR {
|
||||
switch (MARCSTATE) {
|
||||
case MARC_STATE_RX:
|
||||
radiobuf[radiobuf_index] = RFD;
|
||||
goto inc; // stupid way but saves space.
|
||||
break;
|
||||
case MARC_STATE_TX:
|
||||
RFD = radiobuf[radiobuf_index];
|
||||
inc:
|
||||
radiobuf_index++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
void tx_pkt(void) {
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("Start TX\r\n");
|
||||
#endif
|
||||
|
||||
T3CTL=0xDC; // User Timer3 to delay TX, without the delay the programer does not have time to switch from TX to RX.
|
||||
T3OVFIF=0;
|
||||
while (!T3OVFIF);
|
||||
T3CTL=0;
|
||||
radiobuf[1]=0xFD; // Set dev once to save space
|
||||
radiobuf_index=0;
|
||||
RFST = RFST_STX; /* enter TX */
|
||||
while(MARCSTATE != MARC_STATE_TX);
|
||||
//while (!(RFIF & RFIF_IRQ_DONE));
|
||||
while(MARCSTATE != MARC_STATE_IDLE);
|
||||
RFIF =0;
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("Done TX\r\n");
|
||||
#endif
|
||||
}
|
||||
uint8_t rx_pkt(void) {
|
||||
if (RFIF & RFIF_IRQ_DONE) {
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("\r\nR");
|
||||
cons_puthex8(LQI);
|
||||
cons_puthex8(RFIF);
|
||||
cons_puthex8(radiobuf[0]);
|
||||
cons_puthex8(radiobuf[1]);
|
||||
cons_puthex8(radiobuf[2]);
|
||||
cons_puthex8(radiobuf[3]);
|
||||
cons_puthex8(radiobuf[4]);
|
||||
cons_puthex8(radiobuf[5]);
|
||||
cons_puthex8(radiobuf[6]);
|
||||
cons_puthex8(radiobuf[7]);
|
||||
cons_puts("\r\n");
|
||||
#endif
|
||||
RFIF =0;
|
||||
if (LQI & 0x80) { // packet has valid CRC
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("Valid CRC\r\n");
|
||||
#endif
|
||||
while(MARCSTATE != MARC_STATE_IDLE);
|
||||
return 1;
|
||||
} else {
|
||||
radiobuf_index=0;
|
||||
}
|
||||
}
|
||||
if (MARCSTATE != MARC_STATE_RX) {
|
||||
radiobuf_index=0;
|
||||
RFST = RFST_SRX; // Set RX mode
|
||||
while (MARCSTATE != MARC_STATE_RX);
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("Start RX\r\n");
|
||||
#endif
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void radio_init(void) {
|
||||
uint8_t a,b;
|
||||
uint16_t p;
|
||||
uint8_t conf;
|
||||
p=0xDF00; // SYNC1 position
|
||||
b=0;
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("\r\nRadio Init\r\n");
|
||||
#endif
|
||||
for (a=22;a<72;a++) {
|
||||
#ifdef CONSOLE_DEBUG
|
||||
//cons_puthex8(a);
|
||||
//cons_puts(" ");
|
||||
//cons_puthex16(p);
|
||||
//cons_puts(" ");
|
||||
//cons_puthex8(flashp[a]);
|
||||
#endif
|
||||
|
||||
conf=*(__xdata uint8_t*)a;
|
||||
*(__xdata uint8_t*)p=conf;
|
||||
#ifdef CONSOLE_DEBUG
|
||||
//cons_puts(" ");
|
||||
cons_puthex8(flashp[p]);
|
||||
cons_puthex8(conf);
|
||||
cons_puts("\r\n");
|
||||
#endif
|
||||
b++;
|
||||
p++;
|
||||
if (b>4) {
|
||||
b=0;
|
||||
a=a+3;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 250kbaud @ 868MHz from RF Studio 7 */
|
||||
|
||||
/*
|
||||
SYNC1 = 0xD3; // Sync Word, High Byte
|
||||
SYNC0 = 0x91; // Sync Word, Low Byte
|
||||
PKTLEN = 0x50; // Packet Length
|
||||
PKTCTRL1 = 0x05; // Packet Automation Control , Only accept ADDR filter.
|
||||
PKTCTRL0 = 0x05; // Packet Automation Control
|
||||
ADDR = 0xFE; // Device Address
|
||||
CHANNR = 0x00; // Channel Number
|
||||
FSCTRL1 = 0x0C; // Frequency Synthesizer Control
|
||||
FSCTRL0 = 0x00; // Frequency Synthesizer Control
|
||||
#ifdef CRYSTAL_26_MHZ
|
||||
FREQ2 = 0x21; // Frequency Control Word, High Byte
|
||||
FREQ1 = 0x65; // Frequency Control Word, Middle Byte
|
||||
FREQ0 = 0x6A; // Frequency Control Word, Low Byte
|
||||
#endif
|
||||
#ifdef CRYSTAL_24_MHZ
|
||||
FREQ2 = 0x24; // Frequency Control Word, High Byte
|
||||
FREQ1 = 0x2D; // Frequency Control Word, Middle Byte
|
||||
FREQ0 = 0xDD; // Frequency Control Word, Low Byte
|
||||
#endif
|
||||
#ifdef CRYSTAL_26_MHZ
|
||||
MDMCFG4 = 0x2D; // Modem configuration
|
||||
MDMCFG3 = 0x3B; // Modem Configuration
|
||||
#endif
|
||||
#ifdef CRYSTAL_24_MHZ
|
||||
MDMCFG4 = 0x1D; // Modem configuration
|
||||
MDMCFG3 = 0x55; // Modem Configuration
|
||||
#endif
|
||||
MDMCFG2 = 0x13; // Modem Configuration
|
||||
|
||||
MDMCFG1 = 0x22; // Modem Configuration
|
||||
MDMCFG0 = 0xF8; // Modem Configuration
|
||||
DEVIATN = 0x62; // Modem Deviation Setting
|
||||
MCSM2 = 0x07; // Main Radio Control State Machine Configuration
|
||||
MCSM1 = 0x30; // Main Radio Control State Machine Configuration
|
||||
MCSM0 = 0x18; // Main Radio Control State Machine Configuration
|
||||
FOCCFG = 0x1D; // Frequency Offset Compensation Configuration
|
||||
BSCFG = 0x1C; // Bit Synchronization Configuration
|
||||
AGCCTRL2 = 0xC7; // AGC Control
|
||||
AGCCTRL1 = 0x00; // AGC Control
|
||||
AGCCTRL0 = 0xB0; // AGC Control
|
||||
FREND1 = 0xB6; // Front End RX Configuration
|
||||
FREND0 = 0x10; // Front End TX Configuration
|
||||
FSCAL3 = 0xEA; // Frequency Synthesizer Calibration
|
||||
FSCAL2 = 0x2A; // Frequency Synthesizer Calibration
|
||||
FSCAL1 = 0x00; // Frequency Synthesizer Calibration
|
||||
FSCAL0 = 0x1F; // Frequency Synthesizer Calibration
|
||||
*/
|
||||
//TEST2 = 0x88; // Various Test Settings
|
||||
TEST1 = 0x31; // Various Test Settings
|
||||
TEST0 = 0x09; // Various Test Settings
|
||||
//PA_TABLE7 = 0x00; // PA Power Setting 7
|
||||
//PA_TABLE6 = 0x00; // PA Power Setting 6
|
||||
//PA_TABLE5 = 0x00; // PA Power Setting 5
|
||||
//PA_TABLE4 = 0x00; // PA Power Setting 4
|
||||
//PA_TABLE3 = 0x00; // PA Power Setting 3
|
||||
//PA_TABLE2 = 0x00; // PA Power Setting 2
|
||||
//PA_TABLE1 = 0x00; // PA Power Setting 1
|
||||
PA_TABLE0 = 0x50; // PA Power Setting 0
|
||||
//IOCFG2 = 0x00; // Radio Test Signal Configuration (P1_7)
|
||||
//IOCFG1 = 0x00; // Radio Test Signal Configuration (P1_6)
|
||||
//IOCFG0 = 0x00; // Radio Test Signal Configuration (P1_5)
|
||||
//FREQEST = 0x00; // Frequency Offset Estimate from Demodulator
|
||||
//LQI = 0x00; // Demodulator Estimate for Link Quality
|
||||
//RSSI = 0x80; // Received Signal Strength Indication
|
||||
//MARCSTATE = 0x01; // Main Radio Control State Machine State
|
||||
//PKTSTATUS = 0x00; // Packet Status
|
||||
//VCO_VC_DAC = 0x94; // Current Setting from PLL Calibration Module
|
||||
|
||||
#ifdef TX_HIGHPOWER_ENABLED
|
||||
PA_TABLE0 = 0xC2; /* turn power up to 10dBm */
|
||||
#endif
|
||||
#if 0
|
||||
IEN2 |= IEN2_RFIE;
|
||||
RFIM |= RFIF_IRQ_DONE | RFIF_IRQ_TXUNF | RFIF_IRQ_RXOVF | RFIF_IRQ_SFD | RFIF_IRQ_TIMEOUT;
|
||||
#endif
|
||||
radiobuf_index = RFIF = 0;
|
||||
RFTXRXIF = 0; /* enable interrupts */
|
||||
RFTXRXIE = 1;
|
||||
RFST = RFST_SIDLE; /* enter idle */
|
||||
while(MARCSTATE != MARC_STATE_IDLE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void bootloader_main(void) {
|
||||
uint8_t n;
|
||||
uint16_t i;
|
||||
|
||||
// Initialise clocks
|
||||
SLEEP &= ~SLEEP_OSC_PD; // enable RC oscillator
|
||||
while( !(SLEEP & SLEEP_XOSC_S) ); // let oscillator stabilise
|
||||
|
||||
CLKCON = CLKCON_OSC32 | CLKCON_OSC | TICKSPD_DIV_32 | CLKSPD_DIV_2; // select internal HS RC oscillator
|
||||
while (!(CLKCON & CLKCON_OSC));
|
||||
|
||||
CLKCON = CLKCON_OSC32 | TICKSPD_DIV_32 | CLKSPD_DIV_1; // select external crystal
|
||||
|
||||
while (CLKCON & CLKCON_OSC);
|
||||
SLEEP |= SLEEP_OSC_PD; // Disable RC oscillator now that we have an external crystal
|
||||
|
||||
#ifdef CONSOLE_DEBUG
|
||||
PERCFG = (PERCFG & ~PERCFG_U0CFG) | PERCFG_U1CFG;
|
||||
P0SEL |= (1<<3) | (1<<2);
|
||||
U0CSR = 0x80 | 0x40; // UART, RX on
|
||||
U0BAUD = 34; // 115200
|
||||
U0GCR = 13; // 115k2 baud at 13MHz, useful for coming out of sleep. Assumes clkspd_div2 in clkcon for HSRC osc
|
||||
#endif
|
||||
|
||||
radio_init();
|
||||
|
||||
F1 = 1;
|
||||
EA = 1;
|
||||
|
||||
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("\r\nBOOT\r\n");
|
||||
#endif
|
||||
n = 20;
|
||||
i = 65535;
|
||||
while(n > 2) {
|
||||
if (rx_pkt()) n=0;
|
||||
if (i-- == 0) {
|
||||
radiobuf[0] = 2;
|
||||
radiobuf[2] = 0x10;
|
||||
tx_pkt();
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_putc('W');
|
||||
#endif
|
||||
n--;
|
||||
}
|
||||
}
|
||||
if (n == 0)
|
||||
goto upgrade_loop;
|
||||
|
||||
jump_to_user();
|
||||
|
||||
upgrade_loop:
|
||||
WDCTL = 0x08; //Enable watchdog with 1s timeout
|
||||
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("Starting Upgrade loop\r\n");
|
||||
#endif
|
||||
|
||||
while(1) {
|
||||
if (rx_pkt()) {
|
||||
WDCTL = 0xA8; WDCTL = 0x58;
|
||||
switch (radiobuf[2]) {
|
||||
case 0:
|
||||
goto ack;
|
||||
case 1: //erase page
|
||||
flash_erase_page();
|
||||
goto ack;
|
||||
break;
|
||||
case 2: //program page from rambuffer
|
||||
flash_write();
|
||||
goto ack;
|
||||
break;
|
||||
case 3: //read page segment from flash
|
||||
radiobuf[0]=68;
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("Read\r\n");
|
||||
#endif
|
||||
i=(radiobuf[3]<<10)+(radiobuf[4]<<6);
|
||||
for (n=5;n<69;n++) {
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puthex8(flashp[i]);
|
||||
#endif
|
||||
radiobuf[n]=*(__xdata uint8_t*)i;
|
||||
i++;
|
||||
}
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("\r\n");
|
||||
#endif
|
||||
tx_pkt();
|
||||
break;
|
||||
case 4:
|
||||
#ifdef CONSOLE_DEBUG
|
||||
cons_puts("Load Segment to ram\r\n");
|
||||
#endif
|
||||
i=radiobuf[4]<<6;
|
||||
for (n=5;n<69;n++) {
|
||||
rambuf[i]=radiobuf[n];
|
||||
i++;
|
||||
}
|
||||
goto ack;
|
||||
break;
|
||||
case 5:
|
||||
jump_to_user();
|
||||
ack:
|
||||
radiobuf[0] = 4;
|
||||
tx_pkt();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,279 @@
|
||||
:1004E7007E007F007508007D0AED602DE508702904
|
||||
:1004F700EE4F700F90F000C005120F8BD0057E886D
|
||||
:100507007F131D1EBEFF011FC007C006C005120BCB
|
||||
:10051700D0D005D006D00780D0ED600475820122C7
|
||||
:100527007582011211A375820022020F5FC009E5CF
|
||||
:1005370081F5092406F581AF090F7E007D408F8282
|
||||
:100547008E838DF0121116E58270030207AEA8099B
|
||||
:1005570008B6000302078AA809088607BF65028054
|
||||
:100567001ABF6A0302076FBF6C03020689BF7002D6
|
||||
:10057700804FBF720302060E0207AEE5092403FF90
|
||||
:100587007E007D408F828E838DF0121116E582608A
|
||||
:10059700EA90F0007404F090F00174FEF090F0021D
|
||||
:1005A7007401F0E5092403F8741F5690F003F090E6
|
||||
:1005B700F004E4F01204E7E58270030207AE0207D5
|
||||
:1005C700A8E5092403FF7E007D408F828E838DF08E
|
||||
:1005D700121116E58260EA90F0007404F090F001C1
|
||||
:1005E70074FEF090F0027402F0E5092403F8741F1A
|
||||
:1005F7005690F003F090F004E4F01204E7E58270FF
|
||||
:10060700030207AE0207A8E5092403FF7E007D4029
|
||||
:100617008F828E838DF0121116E58260EA7F00BF0C
|
||||
:100627001000503390F0007404F090F00174FEF065
|
||||
:1006370090F0027403F0E5092403F8741F5690F054
|
||||
:1006470003F0740F5F90F004F0C0071204E7E5822F
|
||||
:10065700D00760030F80C87E007F00EF54FC600363
|
||||
:100667000207A8EE2450F582EF34F0F583E0F58217
|
||||
:10067700C007C0061211A3D006D0070EBE00DC0FBC
|
||||
:1006870080D97E007F00EF54FC7035E5092402FD18
|
||||
:100697007C007B408D828C838BF0C007C0061211D3
|
||||
:1006A70016E582D006D00760E2EE2450F582EF34DB
|
||||
:1006B700F0F583A8090808E6F00EBE00C90F80C64A
|
||||
:1006C700E4FEFFE5092404F87600E5092404F8B6FA
|
||||
:1006D700100040030207A890F0007444F090F00166
|
||||
:1006E70074FEF090F0027404F090F003E4F0E50972
|
||||
:1006F7002404F8740F5690F004F08E038F04E50974
|
||||
:100707002405F87605087600E5092405F8C3E6947C
|
||||
:100717004508E694005035E5092405F8E62400FF6E
|
||||
:1007270008E634F0FE8B028C050BBB00010CEA24B3
|
||||
:1007370050F582ED34F0F583E0FD8F828E83F0E58E
|
||||
:10074700092405F806B60002080680BC8B068C074C
|
||||
:10075700C007C0061204E7E582D006D0076042E56D
|
||||
:10076700092404F8060206D190F0007402F090F014
|
||||
:100777000174FEF090F0027405F01204E7E5826060
|
||||
:1007870026801E90F0007404F090F00174FEF09043
|
||||
:10079700F002E4F090F003F090F004F01204E78028
|
||||
:1007A700067582001211A3850981D009222222220F
|
||||
:1007B700020F5FC009E581F5092404F581AE82AA1D
|
||||
:1007C70083A3E0FDE4BDFD0104FD60228E828A83E0
|
||||
:1007D700A3A3E0FC90F002E0FBECB50304740180F6
|
||||
:1007E70001E4FC6009EC6006EC6003750801ED703C
|
||||
:1007F7000302087B8E828A83A3A3E0FCBC03757483
|
||||
:10080700042EFBE43AFCA80908E4F608F6A8090850
|
||||
:10081700C3E6944008E69400506E8B828C83E0FF19
|
||||
:10082700C003C004EF75F040A4FFADF0A80908EFBE
|
||||
:1008370026FFED0836FDE5092403F8EF2450F6ED11
|
||||
:1008470034F008F6A80908740526FBE40836FFEB20
|
||||
:100857002EF582EF3AF583E0FFE5092403F8868257
|
||||
:10086700088683EFF0A8090806B600020806D00438
|
||||
:10087700D0038099ED60118E828A83A3A3E0FFBF26
|
||||
:1008870010067582571211A390F9A8E02401F0A36E
|
||||
:0A089700E03400F0850981D0092249
|
||||
:0213F1000000FA
|
||||
:1008A100AFBE74FB5FF5BEE5BE30E6FB75C6E9E59C
|
||||
:1008B100C630E6FB75C6A8E5C620E6FB43BE0422AA
|
||||
:1008C100222274FC55C94403F5C9AFC974FB5FF515
|
||||
:1008D100C943C90880FEC0E0C082C083C0D0759CF6
|
||||
:1008E100FF90F452E02401F0D0D0D083D082D0E048
|
||||
:1008F1003290F450E4F0A3F090F452F00209007544
|
||||
:100901009D0DAF9E74FC5F4404F59E439E10D2BAC8
|
||||
:100911002290F452E0FE7F00AC9C7D0074FFC39CEA
|
||||
:10092100FCE49DFDEC4207ED420690F450E0FCA38F
|
||||
:10093100E0FDEC2FF582ED3EF58322C009858109AA
|
||||
:10094100C082C083C0F0C0E0E5812404F5817A0053
|
||||
:10095100E4FBFEFFE50924FAF8A90909E6C397C0FB
|
||||
:10096100E008E60997C0E008E60997C0E008E60953
|
||||
:1009710097C0E0E5092408F8D0E0F618D0E0F618B1
|
||||
:10098100D0E0F618D0E0F6E5092405F87DFA8D04EB
|
||||
:100991001DEC6016E5092405F8E62AFA08E63BFB9A
|
||||
:1009A10008E63EFE08E63FFF80E48B828E838509E0
|
||||
:1009B10081D00922AE82AF837D008D048F058E0721
|
||||
:1009C1007E0074FAC0E0E4C0E0C0E0C0E08E828F37
|
||||
:1009D100838DF0EC12126CAC82AD83E58124FCF5C1
|
||||
:1009E10081C005C004120912AE82AF83D004D005C4
|
||||
:1009F100C007C006C005C004120912AA82AB83D089
|
||||
:100A010004D005D006D007EAC39EFAEB9FFBC3ECE6
|
||||
:060A11009AED9B50DB2270
|
||||
:0604000002048B020D86D0
|
||||
:01040B0032BE
|
||||
:030413000210498B
|
||||
:01041B0032AE
|
||||
:0104230032A6
|
||||
:01042B00329E
|
||||
:010433003296
|
||||
:01043B00328E
|
||||
:010443003286
|
||||
:01044B00327E
|
||||
:030453000208D7C5
|
||||
:01045B00326E
|
||||
:010463003266
|
||||
:03046B00020FCCB1
|
||||
:010473003256
|
||||
:03047B00020FC9A4
|
||||
:03048300020E79ED
|
||||
:0304E40002048689
|
||||
:05048600120BA980FE2D
|
||||
:100A1700741855BEFFFEBE0002800ABF0802800E92
|
||||
:100A2700BF101D80129013D175F0800211DE901354
|
||||
:100A3700D575F0800211DE9013D975F0800211DEB2
|
||||
:100A4700221208A11208C11211789013DD75F080E7
|
||||
:100A57001211DE120A171208F2120BB1D2AF120CE2
|
||||
:100A67003B120FE4020531C009E581F5092404F5BD
|
||||
:100A7700811208C2120BD0120BC9E5826003020B68
|
||||
:100A8700A3120534120912AE82AF838E038F02A818
|
||||
:100A97000908A60308A60208760008760090F9AAB6
|
||||
:100AA700E0FEA3E0FF8E048F057E007F00C003C039
|
||||
:100AB70002A80908E6C0E008E6C0E008E6C0E008CA
|
||||
:100AC700E6C0E08C828D838EF0EF12093CAE82AFD8
|
||||
:100AD70083E58124FCF581D002D003C374E89E74BA
|
||||
:100AE700039F501390F9AAEBF0A3EAF0C003C002EA
|
||||
:100AF7001207B4D002D00390F9ACE0FEA3E0FF7D6B
|
||||
:100B0700007C00C003C002A80908E6C0E008E6C0F0
|
||||
:100B1700E008E6C0E008E6C0E08E828F838DF0EC47
|
||||
:100B270012093CAE82AF83E58124FCF581D002D067
|
||||
:100B370003C374649EE49F501690F9ACEBF0A3EAEC
|
||||
:100B4700F0C003C0021207B5120FBFD002D0039046
|
||||
:100B5700F9AEE0FEA3E0FF7D007C00C003C002A861
|
||||
:100B67000908E6C0E008E6C0E008E6C0E008E6C01D
|
||||
:100B7700E08E828F838DF0EC12093CAE82AF83E565
|
||||
:100B87008124FCF581D002D003C3740A9EE49F50F0
|
||||
:100B97000B90F9AEEBF0A3EAF01207B6850981D006
|
||||
:0A0BA7000922120A48120A6E80FBB0
|
||||
:1013D100424F440045585400574454000D0A63637A
|
||||
:0C13E100726C206578706F727465640097
|
||||
:0613F300000000000000F4
|
||||
:100BB10022AF8290F9B2E4F090F9B0F090F453EFE3
|
||||
:100BC100F0EF70030207B72290F9B2E0F5822290AC
|
||||
:100BD100F453E0FF6055BF01028005BF024D803133
|
||||
:100BE10090F9B2E0FF601D90DF3AE0F582120FE369
|
||||
:100BF10090DF39E0FF30E70690F4551207BA7582AD
|
||||
:100C010000120BB290F9B0E0FF6020758200020B78
|
||||
:100C1100B290F9B2E0FF6006758200120BB290F952
|
||||
:100C2100B0E0FF6006758200020BB222AF8290DF56
|
||||
:100C31003BE0FEB507F87582012290DF0074D3F026
|
||||
:100C410090DF017491F090DF0274FFF090DF037484
|
||||
:100C510004F090DF047445F090DF05E4F090DF06C6
|
||||
:100C6100F090DF07740CF090DF08E4F090DF097476
|
||||
:100C710024F090DF0A742DF090DF0B74DDF090DF2B
|
||||
:100C81000C741DF090DF0D7455F090DF0E7413F0AD
|
||||
:100C910090DF0F7422F090DF1074F8F090DF117480
|
||||
:100CA10062F090DF127407F090DF137430F090DF80
|
||||
:100CB100147418F090DF15741DF090DF16741CF099
|
||||
:100CC10090DF1774C7F090DF18E4F090DF1974B06B
|
||||
:100CD100F090DF1A74B6F090DF1B7410F090DF1CF7
|
||||
:100CE10074EAF090DF1D742AF090DF1EE4F090DFCB
|
||||
:100CF1001F741FF090DF237488F090DF247431F0AB
|
||||
:100D010090DF257409F090DF27E4F090DF28F09060
|
||||
:100D1100DF29F090DF2AF090DF2BE4F090DF2CF058
|
||||
:100D210090DF2DF090DF2E7450F090DF2FE4F090E3
|
||||
:100D3100DF30F090DF31F090DF38F090DF39E4F010
|
||||
:100D410090DF3A7480F090DF3B7401F090DF3CE477
|
||||
:100D5100F090DF3D7494F090DF05E4F075E9004315
|
||||
:100D61009A01D2A84391F175E104758201120C2D0B
|
||||
:100D7100758200020BB275E104758201120C2D75AA
|
||||
:100D81008200020BB2C0E0C0F0C082C083C007C0C5
|
||||
:100D910006C005C004C003C0D075D000AFD990DF34
|
||||
:100DA1003BE0FEBE134690F455E0FE7D000EBE0012
|
||||
:100DB100010D90F9B3E0FC7B00C3EC9EEB64808DE8
|
||||
:100DC100F063F08095F0501C90F9B3E0FE90F9B318
|
||||
:100DD100E02401F0EE2455F582E434F4F583E0F5E6
|
||||
:100DE100D9020E6490F9B07401F0807790DF3BE096
|
||||
:100DF100FEBE0D6F90F9B3E0FE602290F455E0FE67
|
||||
:100E01007D000EBE00010D90F9B3E0FC7B00C3EC48
|
||||
:100E11009EEB64808DF063F08095F0502490F9B3DF
|
||||
:100E2100E0FEBE5000501A90F9B3E0FE90F9B3E035
|
||||
:100E31002401F0EE2455F582E434F4F583EFF080DB
|
||||
:100E41002290F455E0FF7E000FBF00010E90F9B330
|
||||
:100E5100E0FD7C00B50706ECB50602800690F9B00E
|
||||
:100E61007401F0D0D0D003D004D005D006D007D083
|
||||
:100E710083D082D0F0D0E032C0E0C082C083C0070E
|
||||
:100E8100C006C005C004C0D075D000AF9B74FC5F24
|
||||
:100E9100F59BE5E930E43090F455E0FF7E000FBFAB
|
||||
:100EA10000010E90F9B3E0FD7C00B5070CECB5062E
|
||||
:100EB1000890F9B27401F0800690F9B07401F075F0
|
||||
:100EC100E10490F9B3E4F0E5E920E70AE5E920E679
|
||||
:100ED10005E5E930E50E75E10490F9B3E4F090F928
|
||||
:100EE100B07401F0E5E930E00590F9B3E4F075E99B
|
||||
:100EF10000D0D0D004D005D006D007D083D082D086
|
||||
:100F0100E03290F453E0FF6009BF012F7402B5E1B4
|
||||
:100F1100012275E104758201120C2D758202120BFA
|
||||
:100F2100B290F9B3E4F090F9B1F090F9B2F090F920
|
||||
:100F3100B0F075E103758213020C2D2290F453E099
|
||||
:100F4100FFBF021690F9B2E0FF700A90F9B0E0FF1E
|
||||
:100F51007003FF80027F018F82227582012290F44B
|
||||
:100F6100537401F075E104758201120C2D90F9B0F2
|
||||
:100F7100E4F090F9B3F090F9B17401F090F9B2E4B2
|
||||
:100F8100F075E10275820D020C2DAE82AF83E0FD9A
|
||||
:100F91007C000DBD00010C7B00C005C004C006C073
|
||||
:100FA10007C00390F45575F0001212D9E58124FBB6
|
||||
:050FB100F581020F03B1
|
||||
:0413F90000000000F0
|
||||
:100FB600E58290F9B4F0020FBF90F9B4E090F9B46D
|
||||
:030FC60023F022F3
|
||||
:0113FD0000EF
|
||||
:100FC900C2EB32C2C532E5B4540C600280F885BC6C
|
||||
:100FD90082743055B44407F5B4222275BC0475BC3B
|
||||
:100FE90004120FCF120FCF020FCFC009858109ADAF
|
||||
:100FF90082AE83AFF0E50924FDF886048C031CEB6F
|
||||
:101009006026C007C006C005C004120FCFAB82D04E
|
||||
:1010190004D005D006D0078D828E838FF0EB121293
|
||||
:1010290053A3AD82AE8380D4D00922AF82BF0A0018
|
||||
:1010390050088F0674302EF5822274372FF58222DC
|
||||
:10104900C020C0E0C0F0C082C083C007C006C00590
|
||||
:10105900C004C003C002C001C000C0D075D000C226
|
||||
:101069008BAFC190F9A6E0FDA3E0FE74FE2DF582D9
|
||||
:1010790074043EF583C00774FFC0E07404C0E01235
|
||||
:101089001388AD82AE8315811581D00790F9A4E04C
|
||||
:10109900FBA3E0FCEBB50506ECB506028038EB24B2
|
||||
:1010A900A5F582EC34F4F583EFF090F9A4E0FDA303
|
||||
:1010B900E0FE8D828E83A3C00774FFC0E07404C074
|
||||
:1010C900E0121388AD82AE8315811581D00790F99E
|
||||
:1010D900A4EDF0A3EEF0BF2B1190F9B5E01490F94F
|
||||
:1010E900B5F0FF700B1208C3800690F9B57403F0D0
|
||||
:1010F900D0D0D000D001D002D003D004D005D00682
|
||||
:10110900D007D083D082D0F0D0E0D02032AD82AEEB
|
||||
:1011190083AFF090F9A4E0FBA3E0FC90F9A6E0F915
|
||||
:10112900A3E0FAEBB50108ECB5020475820022E9E7
|
||||
:1011390024A5F582EA34F4F583E08D828E838FF05D
|
||||
:1011490012125390F9A6E0FEA3E0FF8E828F83A3CB
|
||||
:1011590074FFC0E07404C0E0121388AE82AF831537
|
||||
:1011690081158190F9A6EEF0A3EFF0758201229026
|
||||
:10117900F9A6E4F0A3F090F9A4F0A3E4F0758600D1
|
||||
:1011890075C23B75C50DAFF174FE5F4402F5F143BD
|
||||
:10119900F30C7586C0C28BD2AA228582C1E586303E
|
||||
:1011A900E1FBAF8674FD5FF58622AD82AE83AFF0B9
|
||||
:1011B9008D828E838FF012136CFC60180DBD0001B7
|
||||
:1011C9000E8C82C007C006C0051211A3D005D00637
|
||||
:1011D900D00780DC221211B39013ED75F080021153
|
||||
:1011E900B3AF8274F05FC4540FF582C00712103494
|
||||
:1011F9001211A3D007740F5FF5821210340211A3E4
|
||||
:10120900C009858109AD82AE83AFF0E50924FDF8F7
|
||||
:1012190086048C031CEB60268D828E838FF012135B
|
||||
:101229006CFBA3AD82AE838B82C007C006C005C02C
|
||||
:10123900041211EAD004D005D006D00780D4901347
|
||||
:0A124900F075F0801211DED00922CA
|
||||
:0413ED000D0A0000E5
|
||||
:0113FE0003EB
|
||||
:0604BA00E478FFF6D8FD16
|
||||
:10049800790EE94400601B7A019013F178A87593EE
|
||||
:1004A800F9E493F2A308B800020593D9F4DAF275D7
|
||||
:0204B80093FFB0
|
||||
:1012530020F71030F6118883A88220F507F6A883BB
|
||||
:0912630075830022F280F7F022ED
|
||||
:1004C0007800E84400600A79007593F0E4F309D8F5
|
||||
:1004D000FC78A8E84409600C790A90F000E4F0A3E5
|
||||
:0404E000D8FCD9FA71
|
||||
:10126C00FBE58124FBF8E6F9087A20E4FCFDFEFF9F
|
||||
:10127C00E5822582F582E58333F583E5F033F5F0DD
|
||||
:10128C00EB33FB4017DAE98042E5822582F582E5F3
|
||||
:10129C008333F583E5F033F5F0EB33FBEC33FCED06
|
||||
:1012AC0033FDEE33FEEF33FFEC99ED96EE0896EF3F
|
||||
:1012BC00089618184013EC99FCED96FDEE0896FE76
|
||||
:1012CC00EF0896FF1818438201DABEEB22C009E53D
|
||||
:1012DC0081F5092408F581AD82AE83AFF0A8090829
|
||||
:1012EC00A60508A60608A607E50924FBF8E50924C7
|
||||
:1012FC0004F9E6F70809E6F70809E6F7E50924F921
|
||||
:10130C00F8E5092407F9E6F70809E6F7E5092407E3
|
||||
:10131C00F88603088604E5092407F816B6FF0208C8
|
||||
:10132C0016EB4C602AE5092404F8868208868308AB
|
||||
:10133C0086F012136CFCA31818A68208A6838D8263
|
||||
:10134C008E838FF0EC121253A3AD82AE8380BDA8B6
|
||||
:10135C00090886820886830886F0850981D00922CF
|
||||
:0D048B007581201213CDE582600302048606
|
||||
:10136C0020F71430F6148883A88220F507E6A883AA
|
||||
:10137C0075830022E280F7E49322E022E58124FECB
|
||||
:10138C00F88601188600E84960367A01E825E0F80D
|
||||
:10139C00E933400EF9E58298E5839940030A80EC25
|
||||
:1013AC00C3E913F9E813F8C3E58298F5F0E58399DE
|
||||
:1013BC004005F58385F082C3E913F9E813F8DAE701
|
||||
:0513CC002275820022E1
|
||||
:00000001FF
|
||||
@@ -0,0 +1,279 @@
|
||||
:1004E7007E007F007508007D0AED602DE508702904
|
||||
:1004F700EE4F700F90F000C005120F8BD0057E886D
|
||||
:100507007F131D1EBEFF011FC007C006C005120BCB
|
||||
:10051700D0D005D006D00780D0ED600475820122C7
|
||||
:100527007582011211A375820022020F5FC009E5CF
|
||||
:1005370081F5092406F581AF090F7E007D408F8282
|
||||
:100547008E838DF0121116E58270030207AEA8099B
|
||||
:1005570008B6000302078AA809088607BF65028054
|
||||
:100567001ABF6A0302076FBF6C03020689BF7002D6
|
||||
:10057700804FBF720302060E0207AEE5092403FF90
|
||||
:100587007E007D408F828E838DF0121116E582608A
|
||||
:10059700EA90F0007404F090F00174FEF090F0021D
|
||||
:1005A7007401F0E5092403F8741F5690F003F090E6
|
||||
:1005B700F004E4F01204E7E58270030207AE0207D5
|
||||
:1005C700A8E5092403FF7E007D408F828E838DF08E
|
||||
:1005D700121116E58260EA90F0007404F090F001C1
|
||||
:1005E70074FEF090F0027402F0E5092403F8741F1A
|
||||
:1005F7005690F003F090F004E4F01204E7E58270FF
|
||||
:10060700030207AE0207A8E5092403FF7E007D4029
|
||||
:100617008F828E838DF0121116E58260EA7F00BF0C
|
||||
:100627001000503390F0007404F090F00174FEF065
|
||||
:1006370090F0027403F0E5092403F8741F5690F054
|
||||
:1006470003F0740F5F90F004F0C0071204E7E5822F
|
||||
:10065700D00760030F80C87E007F00EF54FC600363
|
||||
:100667000207A8EE2450F582EF34F0F583E0F58217
|
||||
:10067700C007C0061211A3D006D0070EBE00DC0FBC
|
||||
:1006870080D97E007F00EF54FC7035E5092402FD18
|
||||
:100697007C007B408D828C838BF0C007C0061211D3
|
||||
:1006A70016E582D006D00760E2EE2450F582EF34DB
|
||||
:1006B700F0F583A8090808E6F00EBE00C90F80C64A
|
||||
:1006C700E4FEFFE5092404F87600E5092404F8B6FA
|
||||
:1006D700100040030207A890F0007444F090F00166
|
||||
:1006E70074FEF090F0027404F090F003E4F0E50972
|
||||
:1006F7002404F8740F5690F004F08E038F04E50974
|
||||
:100707002405F87605087600E5092405F8C3E6947C
|
||||
:100717004508E694005035E5092405F8E62400FF6E
|
||||
:1007270008E634F0FE8B028C050BBB00010CEA24B3
|
||||
:1007370050F582ED34F0F583E0FD8F828E83F0E58E
|
||||
:10074700092405F806B60002080680BC8B068C074C
|
||||
:10075700C007C0061204E7E582D006D0076042E56D
|
||||
:10076700092404F8060206D190F0007402F090F014
|
||||
:100777000174FEF090F0027405F01204E7E5826060
|
||||
:1007870026801E90F0007404F090F00174FEF09043
|
||||
:10079700F002E4F090F003F090F004F01204E78028
|
||||
:1007A700067582001211A3850981D009222222220F
|
||||
:1007B700020F5FC009E581F5092404F581AE82AA1D
|
||||
:1007C70083A3E0FDE4BDFD0104FD60228E828A83E0
|
||||
:1007D700A3A3E0FC90F002E0FBECB50304740180F6
|
||||
:1007E70001E4FC6009EC6006EC6003750801ED703C
|
||||
:1007F7000302087B8E828A83A3A3E0FCBC03757483
|
||||
:10080700042EFBE43AFCA80908E4F608F6A8090850
|
||||
:10081700C3E6944008E69400506E8B828C83E0FF19
|
||||
:10082700C003C004EF75F040A4FFADF0A80908EFBE
|
||||
:1008370026FFED0836FDE5092403F8EF2450F6ED11
|
||||
:1008470034F008F6A80908740526FBE40836FFEB20
|
||||
:100857002EF582EF3AF583E0FFE5092403F8868257
|
||||
:10086700088683EFF0A8090806B600020806D00438
|
||||
:10087700D0038099ED60118E828A83A3A3E0FFBF26
|
||||
:1008870010067582571211A390F9A8E02401F0A36E
|
||||
:0A089700E03400F0850981D0092249
|
||||
:0213F1000000FA
|
||||
:1008A100AFBE74FB5FF5BEE5BE30E6FB75C6E9E59C
|
||||
:1008B100C630E6FB75C6A8E5C620E6FB43BE0422AA
|
||||
:1008C100222274FC55C94403F5C9AFC974FB5FF515
|
||||
:1008D100C943C90880FEC0E0C082C083C0D0759CF6
|
||||
:1008E100FF90F452E02401F0D0D0D083D082D0E048
|
||||
:1008F1003290F450E4F0A3F090F452F00209007544
|
||||
:100901009D0DAF9E74FC5F4404F59E439E10D2BAC8
|
||||
:100911002290F452E0FE7F00AC9C7D0074FFC39CEA
|
||||
:10092100FCE49DFDEC4207ED420690F450E0FCA38F
|
||||
:10093100E0FDEC2FF582ED3EF58322C009858109AA
|
||||
:10094100C082C083C0F0C0E0E5812404F5817A0053
|
||||
:10095100E4FBFEFFE50924FAF8A90909E6C397C0FB
|
||||
:10096100E008E60997C0E008E60997C0E008E60953
|
||||
:1009710097C0E0E5092408F8D0E0F618D0E0F618B1
|
||||
:10098100D0E0F618D0E0F6E5092405F87DFA8D04EB
|
||||
:100991001DEC6016E5092405F8E62AFA08E63BFB9A
|
||||
:1009A10008E63EFE08E63FFF80E48B828E838509E0
|
||||
:1009B10081D00922AE82AF837D008D048F058E0721
|
||||
:1009C1007E0074FAC0E0E4C0E0C0E0C0E08E828F37
|
||||
:1009D100838DF0EC12126CAC82AD83E58124FCF5C1
|
||||
:1009E10081C005C004120912AE82AF83D004D005C4
|
||||
:1009F100C007C006C005C004120912AA82AB83D089
|
||||
:100A010004D005D006D007EAC39EFAEB9FFBC3ECE6
|
||||
:060A11009AED9B50DB2270
|
||||
:0604000002048B020D86D0
|
||||
:01040B0032BE
|
||||
:030413000210498B
|
||||
:01041B0032AE
|
||||
:0104230032A6
|
||||
:01042B00329E
|
||||
:010433003296
|
||||
:01043B00328E
|
||||
:010443003286
|
||||
:01044B00327E
|
||||
:030453000208D7C5
|
||||
:01045B00326E
|
||||
:010463003266
|
||||
:03046B00020FCCB1
|
||||
:010473003256
|
||||
:03047B00020FC9A4
|
||||
:03048300020E79ED
|
||||
:0304E40002048689
|
||||
:05048600120BA980FE2D
|
||||
:100A1700741855BEFFFEBE0002800ABF0802800E92
|
||||
:100A2700BF101D80129013D175F0800211DE901354
|
||||
:100A3700D575F0800211DE9013D975F0800211DEB2
|
||||
:100A4700221208A11208C11211789013DD75F080E7
|
||||
:100A57001211DE120A171208F2120BB1D2AF120CE2
|
||||
:100A67003B120FE4020531C009E581F5092404F5BD
|
||||
:100A7700811208C2120BD0120BC9E5826003020B68
|
||||
:100A8700A3120534120912AE82AF838E038F02A818
|
||||
:100A97000908A60308A60208760008760090F9AAB6
|
||||
:100AA700E0FEA3E0FF8E048F057E007F00C003C039
|
||||
:100AB70002A80908E6C0E008E6C0E008E6C0E008CA
|
||||
:100AC700E6C0E08C828D838EF0EF12093CAE82AFD8
|
||||
:100AD70083E58124FCF581D002D003C374E89E74BA
|
||||
:100AE700039F501390F9AAEBF0A3EAF0C003C002EA
|
||||
:100AF7001207B4D002D00390F9ACE0FEA3E0FF7D6B
|
||||
:100B0700007C00C003C002A80908E6C0E008E6C0F0
|
||||
:100B1700E008E6C0E008E6C0E08E828F838DF0EC47
|
||||
:100B270012093CAE82AF83E58124FCF581D002D067
|
||||
:100B370003C374649EE49F501690F9ACEBF0A3EAEC
|
||||
:100B4700F0C003C0021207B5120FBFD002D0039046
|
||||
:100B5700F9AEE0FEA3E0FF7D007C00C003C002A861
|
||||
:100B67000908E6C0E008E6C0E008E6C0E008E6C01D
|
||||
:100B7700E08E828F838DF0EC12093CAE82AF83E565
|
||||
:100B87008124FCF581D002D003C3740A9EE49F50F0
|
||||
:100B97000B90F9AEEBF0A3EAF01207B6850981D006
|
||||
:0A0BA7000922120A48120A6E80FBB0
|
||||
:1013D100424F440045585400574454000D0A63637A
|
||||
:0C13E100726C206578706F727465640097
|
||||
:0613F300000000000000F4
|
||||
:100BB10022AF8290F9B2E4F090F9B0F090F453EFE3
|
||||
:100BC100F0EF70030207B72290F9B2E0F5822290AC
|
||||
:100BD100F453E0FF6055BF01028005BF024D803133
|
||||
:100BE10090F9B2E0FF601D90DF3AE0F582120FE369
|
||||
:100BF10090DF39E0FF30E70690F4551207BA7582AD
|
||||
:100C010000120BB290F9B0E0FF6020758200020B78
|
||||
:100C1100B290F9B2E0FF6006758200120BB290F952
|
||||
:100C2100B0E0FF6006758200020BB222AF8290DF56
|
||||
:100C31003BE0FEB507F87582012290DF0074D3F026
|
||||
:100C410090DF017491F090DF0274FFF090DF037484
|
||||
:100C510004F090DF047445F090DF05E4F090DF06C6
|
||||
:100C6100F090DF07740CF090DF08E4F090DF097476
|
||||
:100C710021F090DF0A7465F090DF0B746AF090DF69
|
||||
:100C81000C742DF090DF0D743BF090DF0E7413F0B7
|
||||
:100C910090DF0F7422F090DF1074F8F090DF117480
|
||||
:100CA10062F090DF127407F090DF137430F090DF80
|
||||
:100CB100147418F090DF15741DF090DF16741CF099
|
||||
:100CC10090DF1774C7F090DF18E4F090DF1974B06B
|
||||
:100CD100F090DF1A74B6F090DF1B7410F090DF1CF7
|
||||
:100CE10074EAF090DF1D742AF090DF1EE4F090DFCB
|
||||
:100CF1001F741FF090DF237488F090DF247431F0AB
|
||||
:100D010090DF257409F090DF27E4F090DF28F09060
|
||||
:100D1100DF29F090DF2AF090DF2BE4F090DF2CF058
|
||||
:100D210090DF2DF090DF2E7450F090DF2FE4F090E3
|
||||
:100D3100DF30F090DF31F090DF38F090DF39E4F010
|
||||
:100D410090DF3A7480F090DF3B7401F090DF3CE477
|
||||
:100D5100F090DF3D7494F090DF05E4F075E9004315
|
||||
:100D61009A01D2A84391F175E104758201120C2D0B
|
||||
:100D7100758200020BB275E104758201120C2D75AA
|
||||
:100D81008200020BB2C0E0C0F0C082C083C007C0C5
|
||||
:100D910006C005C004C003C0D075D000AFD990DF34
|
||||
:100DA1003BE0FEBE134690F455E0FE7D000EBE0012
|
||||
:100DB100010D90F9B3E0FC7B00C3EC9EEB64808DE8
|
||||
:100DC100F063F08095F0501C90F9B3E0FE90F9B318
|
||||
:100DD100E02401F0EE2455F582E434F4F583E0F5E6
|
||||
:100DE100D9020E6490F9B07401F0807790DF3BE096
|
||||
:100DF100FEBE0D6F90F9B3E0FE602290F455E0FE67
|
||||
:100E01007D000EBE00010D90F9B3E0FC7B00C3EC48
|
||||
:100E11009EEB64808DF063F08095F0502490F9B3DF
|
||||
:100E2100E0FEBE5000501A90F9B3E0FE90F9B3E035
|
||||
:100E31002401F0EE2455F582E434F4F583EFF080DB
|
||||
:100E41002290F455E0FF7E000FBF00010E90F9B330
|
||||
:100E5100E0FD7C00B50706ECB50602800690F9B00E
|
||||
:100E61007401F0D0D0D003D004D005D006D007D083
|
||||
:100E710083D082D0F0D0E032C0E0C082C083C0070E
|
||||
:100E8100C006C005C004C0D075D000AF9B74FC5F24
|
||||
:100E9100F59BE5E930E43090F455E0FF7E000FBFAB
|
||||
:100EA10000010E90F9B3E0FD7C00B5070CECB5062E
|
||||
:100EB1000890F9B27401F0800690F9B07401F075F0
|
||||
:100EC100E10490F9B3E4F0E5E920E70AE5E920E679
|
||||
:100ED10005E5E930E50E75E10490F9B3E4F090F928
|
||||
:100EE100B07401F0E5E930E00590F9B3E4F075E99B
|
||||
:100EF10000D0D0D004D005D006D007D083D082D086
|
||||
:100F0100E03290F453E0FF6009BF012F7402B5E1B4
|
||||
:100F1100012275E104758201120C2D758202120BFA
|
||||
:100F2100B290F9B3E4F090F9B1F090F9B2F090F920
|
||||
:100F3100B0F075E103758213020C2D2290F453E099
|
||||
:100F4100FFBF021690F9B2E0FF700A90F9B0E0FF1E
|
||||
:100F51007003FF80027F018F82227582012290F44B
|
||||
:100F6100537401F075E104758201120C2D90F9B0F2
|
||||
:100F7100E4F090F9B3F090F9B17401F090F9B2E4B2
|
||||
:100F8100F075E10275820D020C2DAE82AF83E0FD9A
|
||||
:100F91007C000DBD00010C7B00C005C004C006C073
|
||||
:100FA10007C00390F45575F0001212D9E58124FBB6
|
||||
:050FB100F581020F03B1
|
||||
:0413F90000000000F0
|
||||
:100FB600E58290F9B4F0020FBF90F9B4E090F9B46D
|
||||
:030FC60023F022F3
|
||||
:0113FD0000EF
|
||||
:100FC900C2EB32C2C532E5B4540C600280F885BC6C
|
||||
:100FD90082743055B44407F5B4222275BC0475BC3B
|
||||
:100FE90004120FCF120FCF020FCFC009858109ADAF
|
||||
:100FF90082AE83AFF0E50924FDF886048C031CEB6F
|
||||
:101009006026C007C006C005C004120FCFAB82D04E
|
||||
:1010190004D005D006D0078D828E838FF0EB121293
|
||||
:1010290053A3AD82AE8380D4D00922AF82BF0A0018
|
||||
:1010390050088F0674302EF5822274372FF58222DC
|
||||
:10104900C020C0E0C0F0C082C083C007C006C00590
|
||||
:10105900C004C003C002C001C000C0D075D000C226
|
||||
:101069008BAFC190F9A6E0FDA3E0FE74FE2DF582D9
|
||||
:1010790074043EF583C00774FFC0E07404C0E01235
|
||||
:101089001388AD82AE8315811581D00790F9A4E04C
|
||||
:10109900FBA3E0FCEBB50506ECB506028038EB24B2
|
||||
:1010A900A5F582EC34F4F583EFF090F9A4E0FDA303
|
||||
:1010B900E0FE8D828E83A3C00774FFC0E07404C074
|
||||
:1010C900E0121388AD82AE8315811581D00790F99E
|
||||
:1010D900A4EDF0A3EEF0BF2B1190F9B5E01490F94F
|
||||
:1010E900B5F0FF700B1208C3800690F9B57403F0D0
|
||||
:1010F900D0D0D000D001D002D003D004D005D00682
|
||||
:10110900D007D083D082D0F0D0E0D02032AD82AEEB
|
||||
:1011190083AFF090F9A4E0FBA3E0FC90F9A6E0F915
|
||||
:10112900A3E0FAEBB50108ECB5020475820022E9E7
|
||||
:1011390024A5F582EA34F4F583E08D828E838FF05D
|
||||
:1011490012125390F9A6E0FEA3E0FF8E828F83A3CB
|
||||
:1011590074FFC0E07404C0E0121388AE82AF831537
|
||||
:1011690081158190F9A6EEF0A3EFF0758201229026
|
||||
:10117900F9A6E4F0A3F090F9A4F0A3E4F0758600D1
|
||||
:1011890075C22275C50DAFF174FE5F4402F5F143D6
|
||||
:10119900F30C7586C0C28BD2AA228582C1E586303E
|
||||
:1011A900E1FBAF8674FD5FF58622AD82AE83AFF0B9
|
||||
:1011B9008D828E838FF012136CFC60180DBD0001B7
|
||||
:1011C9000E8C82C007C006C0051211A3D005D00637
|
||||
:1011D900D00780DC221211B39013ED75F080021153
|
||||
:1011E900B3AF8274F05FC4540FF582C00712103494
|
||||
:1011F9001211A3D007740F5FF5821210340211A3E4
|
||||
:10120900C009858109AD82AE83AFF0E50924FDF8F7
|
||||
:1012190086048C031CEB60268D828E838FF012135B
|
||||
:101229006CFBA3AD82AE838B82C007C006C005C02C
|
||||
:10123900041211EAD004D005D006D00780D4901347
|
||||
:0A124900F075F0801211DED00922CA
|
||||
:0413ED000D0A0000E5
|
||||
:0113FE0003EB
|
||||
:0604BA00E478FFF6D8FD16
|
||||
:10049800790EE94400601B7A019013F178A87593EE
|
||||
:1004A800F9E493F2A308B800020593D9F4DAF275D7
|
||||
:0204B80093FFB0
|
||||
:1012530020F71030F6118883A88220F507F6A883BB
|
||||
:0912630075830022F280F7F022ED
|
||||
:1004C0007800E84400600A79007593F0E4F309D8F5
|
||||
:1004D000FC78A8E84409600C790A90F000E4F0A3E5
|
||||
:0404E000D8FCD9FA71
|
||||
:10126C00FBE58124FBF8E6F9087A20E4FCFDFEFF9F
|
||||
:10127C00E5822582F582E58333F583E5F033F5F0DD
|
||||
:10128C00EB33FB4017DAE98042E5822582F582E5F3
|
||||
:10129C008333F583E5F033F5F0EB33FBEC33FCED06
|
||||
:1012AC0033FDEE33FEEF33FFEC99ED96EE0896EF3F
|
||||
:1012BC00089618184013EC99FCED96FDEE0896FE76
|
||||
:1012CC00EF0896FF1818438201DABEEB22C009E53D
|
||||
:1012DC0081F5092408F581AD82AE83AFF0A8090829
|
||||
:1012EC00A60508A60608A607E50924FBF8E50924C7
|
||||
:1012FC0004F9E6F70809E6F70809E6F7E50924F921
|
||||
:10130C00F8E5092407F9E6F70809E6F7E5092407E3
|
||||
:10131C00F88603088604E5092407F816B6FF0208C8
|
||||
:10132C0016EB4C602AE5092404F8868208868308AB
|
||||
:10133C0086F012136CFCA31818A68208A6838D8263
|
||||
:10134C008E838FF0EC121253A3AD82AE8380BDA8B6
|
||||
:10135C00090886820886830886F0850981D00922CF
|
||||
:0D048B007581201213CDE582600302048606
|
||||
:10136C0020F71430F6148883A88220F507E6A883AA
|
||||
:10137C0075830022E280F7E49322E022E58124FECB
|
||||
:10138C00F88601188600E84960367A01E825E0F80D
|
||||
:10139C00E933400EF9E58298E5839940030A80EC25
|
||||
:1013AC00C3E913F9E813F8C3E58298F5F0E58399DE
|
||||
:1013BC004005F58385F082C3E913F9E813F8DAE701
|
||||
:0513CC002275820022E1
|
||||
:00000001FF
|
||||
@@ -0,0 +1,48 @@
|
||||
:0900000002009830D1080201ABA6
|
||||
:06000B0002040B020403D5
|
||||
:20001300020413D391FF054502041BFE000C00240204232DDD1D551302042B22F86207301C
|
||||
:15003300020433181D1CC70002043BB0B610EA2A020443001F34
|
||||
:03004B0002044B61
|
||||
:0300530002045351
|
||||
:03005B0002045B41
|
||||
:0300630002046331
|
||||
:03006B0002046B21
|
||||
:0300730002047311
|
||||
:03007B0002047B01
|
||||
:03008300020483F1
|
||||
:03008B0002048BE1
|
||||
:0300F10002008E7C
|
||||
:02008E0051AF70
|
||||
:1E00F400E5AE20E7FB75AB1190F00BE0FF25E0F5AD75AC0043AE0100E5AE20E7FB224D
|
||||
:080090000043AE02000201155D
|
||||
:20011200020091227E087FF18F0690F000EEF07E087FF190F001EEF090F00274DFF090F095
|
||||
:200132000374AFF090F004E4F090F004E04404F090F005E4F090F0067412F090F007744211
|
||||
:20015200F07E007FF08F068ED57E007FF07F008ED4E5AE20E7FB75AB1190F00BE025E0FFB5
|
||||
:20017200743F5FF5AD43D6013112E5D130E0FBE5AE54C0600280F8AFD174FE5FF5D1229051
|
||||
:200192000400E0FFBFFF0122C2AF759A0075B80075A800C2D102040022C0E0C082C083C01F
|
||||
:2001B20007C0D075D00090DF3BE0FFBF0D028005BF13228010E5082408F582E434F0F583E1
|
||||
:2001D200E5D9F0800EE5082408F582E434F0F583E0F5D90508D0D0D007D083D082D0E03208
|
||||
:2001F20075CBDCC2D830D8FD75CB0090F00974FDF075080075E10390DF3BE0FFBF13F8904F
|
||||
:20021200DF3BE0FFBF01F875E90022E5E930E41A75E90090DF39E0FF30E70C90DF3BE0FF0E
|
||||
:20023200BF01F87582012275080090DF3BE0FFBF0D02800E75080075E10290DF3BE0FFBF5B
|
||||
:200252000DF8758200227F007E167C007DDFBE480050228E027B008A828B83E0FA8C828D71
|
||||
:2002720083F00F0CBC00010DEF24FB50057F000E0E0E0E80D990DF247431F090DF25740968
|
||||
:20029200F090DF2E7450F075E900750800C289D2A875E10490DF3BE0FFBF01F822AFBE74CD
|
||||
:2002B200FB5FF5BEE5BE30E6FB75C6E9E5C630E6FB75C6A8E5C620E6FB43BE045158D2D1AB
|
||||
:2002D200D2AF7F147DFF7EFFEF24FD503EC007C006C005511DE582D005D006D00760027FD7
|
||||
:2002F200008D038E041DBDFF011EEB4C70DA90F0087402F090F00A7410F0C007C006C00513
|
||||
:2003120031F2D005D006D0071F80BDEF6002319175C908511DE58260FA75C9A875C9589036
|
||||
:20033200F00AE0FF24FA40EBEF2F90034073614C614E6152615661A661E161E311F461E389
|
||||
:20035200311661E390F0087444F090F00BE025E025E0FE7F0090F00CE0FDE4C3CD13CD130E
|
||||
:20037200A2E0CD13CD13CDFCED2FFFEC3EFE7D05BD4500501BED2408FBE434F0FC8F828E77
|
||||
:2003920083E0FA8B828C83F00FBF00010E0D80E031F2612590F00CE0FFE4C3CF13CF13A277
|
||||
:2003B200E0CF13CF13CFFE7D05BD45005023EF2408FBEE34F1FCED2408F582E434F0F5838E
|
||||
:1B03D200E0FA8B828C83F00FBF00010E0D80DA319190F0087404F031F261258B
|
||||
:0600C700E478FFF6D8FD0D
|
||||
:2000A5007900E94400601B7A009003F17800759300E493F2A308B800020593D9F4DAF27528
|
||||
:0200C50093FFA7
|
||||
:2000CD007800E84400600A79007593F0E4F309D8FC7808E84405600C790690F000E4F0A34D
|
||||
:0400ED00D8FCD9FA68
|
||||
:0D0098007581081203EDE582600302008E01
|
||||
:0403ED0075820022F3
|
||||
:00000001FF
|
||||
@@ -0,0 +1,48 @@
|
||||
:0900000002009830D1080201ABA6
|
||||
:06000B0002040B020403D5
|
||||
:20001300020413D391FF054502041BFE000C0021020423656A2D3B1302042B22F862073064
|
||||
:15003300020433181D1CC70002043BB0B610EA2A020443001F34
|
||||
:03004B0002044B61
|
||||
:0300530002045351
|
||||
:03005B0002045B41
|
||||
:0300630002046331
|
||||
:03006B0002046B21
|
||||
:0300730002047311
|
||||
:03007B0002047B01
|
||||
:03008300020483F1
|
||||
:03008B0002048BE1
|
||||
:0300F10002008E7C
|
||||
:02008E0051AF70
|
||||
:1E00F400E5AE20E7FB75AB1F90F00BE0FF25E0F5AD75AC0043AE0100E5AE20E7FB223F
|
||||
:080090000043AE02000201155D
|
||||
:20011200020091227E087FF18F0690F000EEF07E087FF190F001EEF090F00274DFF090F095
|
||||
:200132000374AFF090F004E4F090F004E04404F090F005E4F090F0067412F090F007744211
|
||||
:20015200F07E007FF08F068ED57E007FF07F008ED4E5AE20E7FB75AB1F90F00BE025E0FFA7
|
||||
:20017200743F5FF5AD43D6013112E5D130E0FBE5AE54C0600280F8AFD174FE5FF5D1229051
|
||||
:200192000400E0FFBFFF0122C2AF759A0075B80075A800C2D102040022C0E0C082C083C01F
|
||||
:2001B20007C0D075D00090DF3BE0FFBF0D028005BF13228010E5082408F582E434F0F583E1
|
||||
:2001D200E5D9F0800EE5082408F582E434F0F583E0F5D90508D0D0D007D083D082D0E03208
|
||||
:2001F20075CBDCC2D830D8FD75CB0090F00974FDF075080075E10390DF3BE0FFBF13F8904F
|
||||
:20021200DF3BE0FFBF01F875E90022E5E930E41A75E90090DF39E0FF30E70C90DF3BE0FF0E
|
||||
:20023200BF01F87582012275080090DF3BE0FFBF0D02800E75080075E10290DF3BE0FFBF5B
|
||||
:200252000DF8758200227F007E167C007DDFBE480050228E027B008A828B83E0FA8C828D71
|
||||
:2002720083F00F0CBC00010DEF24FB50057F000E0E0E0E80D990DF247431F090DF25740968
|
||||
:20029200F090DF2E7450F075E900750800C289D2A875E10490DF3BE0FFBF01F822AFBE74CD
|
||||
:2002B200FB5FF5BEE5BE30E6FB75C6E9E5C630E6FB75C6A8E5C620E6FB43BE045158D2D1AB
|
||||
:2002D200D2AF7F147DFF7EFFEF24FD503EC007C006C005511DE582D005D006D00760027FD7
|
||||
:2002F200008D038E041DBDFF011EEB4C70DA90F0087402F090F00A7410F0C007C006C00513
|
||||
:2003120031F2D005D006D0071F80BDEF6002319175C908511DE58260FA75C9A875C9589036
|
||||
:20033200F00AE0FF24FA40EBEF2F90034073614C614E6152615661A661E161E311F461E389
|
||||
:20035200311661E390F0087444F090F00BE025E025E0FE7F0090F00CE0FDE4C3CD13CD130E
|
||||
:20037200A2E0CD13CD13CDFCED2FFFEC3EFE7D05BD4500501BED2408FBE434F0FC8F828E77
|
||||
:2003920083E0FA8B828C83F00FBF00010E0D80E031F2612590F00CE0FFE4C3CF13CF13A277
|
||||
:2003B200E0CF13CF13CFFE7D05BD45005023EF2408FBEE34F1FCED2408F582E434F0F5838E
|
||||
:1B03D200E0FA8B828C83F00FBF00010E0D80DA319190F0087404F031F261258B
|
||||
:0600C700E478FFF6D8FD0D
|
||||
:2000A5007900E94400601B7A009003F17800759300E493F2A308B800020593D9F4DAF27528
|
||||
:0200C50093FFA7
|
||||
:2000CD007800E84400600A79007593F0E4F309D8FC7808E84405600C790690F000E4F0A34D
|
||||
:0400ED00D8FCD9FA68
|
||||
:0D0098007581081203EDE582600302008E01
|
||||
:0403ED0075820022F3
|
||||
:00000001FF
|
||||
@@ -0,0 +1,134 @@
|
||||
; RF config is interleaved witht the interupt vectors to save space.
|
||||
; To select crystal frequency set 1 or 0
|
||||
CRYSTAL_26_MHZ=1
|
||||
; Remember to change in main.c also.
|
||||
;
|
||||
.globl __start__stack
|
||||
;--------------------------------------------------------
|
||||
; Stack segment in internal ram
|
||||
;--------------------------------------------------------
|
||||
.area SSEG (DATA)
|
||||
__start__stack:
|
||||
.ds 1
|
||||
|
||||
;--------------------------------------------------------
|
||||
; interrupt vector
|
||||
;--------------------------------------------------------
|
||||
.area VECTOR (CODE)
|
||||
.globl __interrupt_vect
|
||||
__interrupt_vect:
|
||||
ljmp __sdcc_gsinit_startup
|
||||
|
||||
jnb psw.1, 00001$ ; RFTXRX if F1=1 call bootload isr
|
||||
ljmp _rftxrx_isr ;
|
||||
.ds 2
|
||||
ljmp #(0x400+0x0B) ; ADC
|
||||
00001$:
|
||||
ljmp #(0x400+0x03) ; User code RFTXRX usr
|
||||
.ds 2
|
||||
ljmp #(0x400+0x13) ; URX0
|
||||
.db 0xD3 ; SYNC1
|
||||
.db 0x91 ; SYNC0
|
||||
.db 0xFF ; PKTLEN
|
||||
.db 0x05 ; PKTCTRL1
|
||||
.db 0x45 ; PKTCTRL0
|
||||
ljmp #(0x400+0x1B) ; URX1
|
||||
.db 0xFE ; ADDR
|
||||
.db 0x00 ; CHANNR
|
||||
.db 0x0C ; FSCTRL1
|
||||
.db 0x00 ; FSCTRL0
|
||||
.if CRYSTAL_26_MHZ
|
||||
.db 0x21 ; FREQ2
|
||||
.else
|
||||
.db 0x24 ; FREQ2
|
||||
.endif
|
||||
ljmp #(0x400+0x23) ; ENC
|
||||
.if CRYSTAL_26_MHZ
|
||||
.db 0x65 ; FREQ1
|
||||
.db 0x6A ; FREQ0
|
||||
.db 0x2D ; MDMCFG4
|
||||
.db 0x3B ; MDMCFG3
|
||||
.else
|
||||
.db 0x2D ; FREQ1
|
||||
.db 0xDD ; FREQ0
|
||||
.db 0x1D ; MDMCFG4
|
||||
.db 0x55 ; MDMCFG3
|
||||
.endif
|
||||
.db 0x13 ; MDMCFG2
|
||||
ljmp #(0x400+0x2B) ; ST
|
||||
.db 0x22 ; MDMCFG1
|
||||
.db 0xF8 ; MDMCFG0
|
||||
.db 0x62 ; DEVIATN
|
||||
.db 0x07 ; MCSM2
|
||||
.db 0x30 ; MCSM1
|
||||
ljmp #(0x400+0x33) ; P2INT
|
||||
.db 0x18 ; MCSM0
|
||||
.db 0x1D ; FOCCFG
|
||||
.db 0x1C ; BSCFG
|
||||
.db 0xC7 ; AGCCTRL2
|
||||
.db 0x00 ; AGCCTRL1
|
||||
ljmp #(0x400+0x3B) ; UTX0
|
||||
.db 0xB0 ; AGCCTRL0
|
||||
.db 0xB6 ; FREND1
|
||||
.db 0x10 ; FREND0
|
||||
.db 0xEA ; FSCAL3
|
||||
.db 0x2A ; FSCAL2
|
||||
ljmp #(0x400+0x43) ; DMA
|
||||
.db 0x00 ; FSCAL1
|
||||
.db 0x1F ; FSCAL0
|
||||
.ds 3
|
||||
ljmp #(0x400+0x4B) ; T1
|
||||
.ds 5
|
||||
ljmp #(0x400+0x53) ; T2
|
||||
.ds 5
|
||||
ljmp #(0x400+0x5B) ; T3
|
||||
.ds 5
|
||||
ljmp #(0x400+0x63) ; T4
|
||||
.ds 5
|
||||
ljmp #(0x400+0x6B) ; P0INT
|
||||
.ds 5
|
||||
ljmp #(0x400+0x73) ; UTX1
|
||||
.ds 5
|
||||
ljmp #(0x400+0x7B) ; P1INT
|
||||
.ds 5
|
||||
ljmp #(0x400+0x83) ; RF
|
||||
.ds 5
|
||||
ljmp #(0x400+0x8B) ; WDT
|
||||
|
||||
|
||||
;--------------------------------------------------------
|
||||
; external initialized ram data
|
||||
;--------------------------------------------------------
|
||||
.area XISEG (XDATA)
|
||||
.area HOME (CODE)
|
||||
.area GSINIT0 (CODE)
|
||||
.area GSINIT1 (CODE)
|
||||
.area GSINIT2 (CODE)
|
||||
.area GSINIT3 (CODE)
|
||||
.area GSINIT4 (CODE)
|
||||
.area GSINIT5 (CODE)
|
||||
.area GSINIT (CODE)
|
||||
.area GSFINAL (CODE)
|
||||
.area CSEG (CODE)
|
||||
|
||||
;--------------------------------------------------------
|
||||
; global & static initialisations
|
||||
;--------------------------------------------------------
|
||||
|
||||
.area GSINIT (CODE)
|
||||
.globl __sdcc_gsinit_startup
|
||||
.globl __sdcc_program_startup
|
||||
.globl __start__stack
|
||||
.globl __mcs51_genXINIT
|
||||
.globl __mcs51_genXRAMCLEAR
|
||||
.globl __mcs51_genRAMCLEAR
|
||||
.area GSFINAL (CODE)
|
||||
ljmp __sdcc_program_startup
|
||||
;--------------------------------------------------------
|
||||
; Home
|
||||
;--------------------------------------------------------
|
||||
.area HOME (CODE)
|
||||
.area HOME (CODE)
|
||||
__sdcc_program_startup:
|
||||
acall _bootloader_main
|
||||
; return from main will lock up
|
||||
Reference in new issue
Block a user