Browse Source

Initial commit of BLHeli

Matching published Rev2.0 of SiLabs and Rev3.0 of Atmel

Add GPL License file.
master
Steffen Skaug 13 years ago
committed by Chris
commit
fbeac34dbb
  1. 2963
      Atmel/BLHeli.asm
  2. 625
      Atmel/BLHeliTxPgm.inc
  3. 315
      Atmel/Feigao6.inc
  4. 350
      Atmel/HC5A1SA48V.inc
  5. 355
      Atmel/HC5A1SA8.inc
  6. 26
      Atmel/README
  7. 387
      Atmel/WalkeraWST10LT.inc
  8. 958
      Atmel/m48def.inc
  9. 976
      Atmel/m88Pdef.inc
  10. 738
      Atmel/m8def.inc
  11. 674
      COPYING
  12. 12
      README
  13. 2995
      SiLabs/BLHeli.asm
  14. 743
      SiLabs/BLHeliTxPgm.inc
  15. 204
      SiLabs/C8051F330.INC
  16. 256
      SiLabs/DP_3A.inc
  17. 267
      SiLabs/Hex files/DP 3A Main.hex
  18. 256
      SiLabs/Hex files/DP 3A Tail.hex
  19. 267
      SiLabs/Hex files/Supermicro_3p5A Main.hex
  20. 256
      SiLabs/Hex files/Supermicro_3p5A Tail.hex
  21. 266
      SiLabs/Hex files/Turnigy6A Main.hex
  22. 256
      SiLabs/Hex files/Turnigy6A Tail.hex
  23. 267
      SiLabs/Hex files/XP 12A Main.hex
  24. 256
      SiLabs/Hex files/XP 12A Tail.hex
  25. 267
      SiLabs/Hex files/XP 3A Main.hex
  26. 256
      SiLabs/Hex files/XP 3A Tail.hex
  27. 267
      SiLabs/Hex files/XP 7A Main.hex
  28. 256
      SiLabs/Hex files/XP 7A Tail.hex
  29. 31
      SiLabs/README
  30. 256
      SiLabs/Supermicro_3p5A.inc
  31. 255
      SiLabs/Turnigy6A.inc
  32. 256
      SiLabs/XP_12A.inc
  33. 256
      SiLabs/XP_3A.inc
  34. 256
      SiLabs/XP_7A.inc

2963
Atmel/BLHeli.asm
File diff suppressed because it is too large
View File

625
Atmel/BLHeliTxPgm.inc

@ -0,0 +1,625 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;
; BLHeliTxPgm Atmel
;
;**** **** **** **** ****
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Read eeprom byte routine
;
; Assumes data in Temp1 and address in X
; Also assumes address high byte to be zero
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
read_eeprom_byte:
; Wait for completion of previous write
Check_Eeprom_Ready
rjmp read_eeprom_byte
; Set up address in address register
Set_Eeprom_Address Temp2, Temp3
; Start eeprom read
sbi EECR, EERE
in Temp1, EEDR
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Write eeprom byte routine
;
; Assumes data in Temp1 and address in Temp2/Temp3
; Also assumes address high byte to be zero
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
write_eeprom_byte:
; Wait for completion of previous write
Check_Eeprom_Ready
rjmp write_eeprom_byte
; Set up address in address register
out EEDR, Temp1
Set_Eeprom_Address Temp2, Temp3
; Set write enables and start writing
cli ; Disable interrupts
Start_Eeprom_Write
sei ; Enable interrupts
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Clear eeprom signature routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
clear_eeprom_signature:
ldi Temp2, low(Eep_Initialized_L)
ldi Temp3, high(Eep_Initialized_L)
ldi Temp1, 0xFF
rcall write_eeprom_byte
ldi Temp2, low(Eep_Initialized_H)
ldi Temp3, high(Eep_Initialized_H)
ldi Temp1, 0xFF
rcall write_eeprom_byte
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Write eeprom signature routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
write_eeprom_signature:
.if TAIL == 0
ldi Temp2, low(Eep_Initialized_L)
ldi Temp3, high(Eep_Initialized_L)
ldi Temp1, 0xA5
rcall write_eeprom_byte
ldi Temp2, low(Eep_Initialized_H)
ldi Temp3, high(Eep_Initialized_H)
ldi Temp1, 0x5A
rcall write_eeprom_byte
.else
ldi Temp2, low(Eep_Initialized_L)
ldi Temp3, high(Eep_Initialized_L)
ldi Temp1, 0x5A
rcall write_eeprom_byte
ldi Temp2, low(Eep_Initialized_H)
ldi Temp3, high(Eep_Initialized_H)
ldi Temp1, 0xA5
rcall write_eeprom_byte
.endif
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Read eeprom perameters routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
read_eeprom_parameters:
.if TAIL == 0
; Check initialized signature
ldi Temp2, low(Eep_Initialized_L)
ldi Temp3, high(Eep_Initialized_L)
rcall read_eeprom_byte
cpi Temp1, 0xA5
brne read_eeprom_store_defaults
ldi Temp2, low(Eep_Initialized_H)
ldi Temp3, high(Eep_Initialized_H)
rcall read_eeprom_byte
cpi Temp1, 0x5A
brne read_eeprom_store_defaults
; Read eeprom
ldi Temp2, low(Eep_Pgm_Gov_P_Gain)
ldi Temp3, high(Eep_Pgm_Gov_P_Gain)
rcall read_eeprom_byte
sts Pgm_Gov_P_Gain, Temp1
ldi Temp2, low(Eep_Pgm_Gov_I_Gain)
ldi Temp3, high(Eep_Pgm_Gov_I_Gain)
rcall read_eeprom_byte
sts Pgm_Gov_I_Gain, Temp1
ldi Temp2, low(Eep_Pgm_Gov_Mode)
ldi Temp3, high(Eep_Pgm_Gov_Mode)
rcall read_eeprom_byte
sts Pgm_Gov_Mode, Temp1
ldi Temp2, low(Eep_Pgm_Startup_Pwr)
ldi Temp3, high(Eep_Pgm_Startup_Pwr)
rcall read_eeprom_byte
sts Pgm_Startup_Pwr, Temp1
ldi Temp2, low(Eep_Pgm_Pwm_Freq)
ldi Temp3, high(Eep_Pgm_Pwm_Freq)
rcall read_eeprom_byte
sbr Flags2, (1<<PGM_PWM_HIGH_FREQ)
sbrc Temp1, 1
cbr Flags2, (1<<PGM_PWM_HIGH_FREQ)
ldi Temp2, low(Eep_Pgm_Input_Pol)
ldi Temp3, high(Eep_Pgm_Input_Pol)
rcall read_eeprom_byte
cbr Flags2, (1<<PGM_RCP_PWM_POL)
sbrc Temp1, 1
sbr Flags2, (1<<PGM_RCP_PWM_POL)
.else
; Check initialized signature
ldi Temp2, low(Eep_Initialized_L)
ldi Temp3, high(Eep_Initialized_L)
rcall read_eeprom_byte
cpi Temp1, 0x5A
brne read_eeprom_store_defaults
ldi Temp2, low(Eep_Initialized_H)
ldi Temp3, high(Eep_Initialized_H)
rcall read_eeprom_byte
cpi Temp1, 0xA5
brne read_eeprom_store_defaults
; Read eeprom
ldi Temp2, low(Eep_Pgm_Tail_Gain)
ldi Temp3, high(Eep_Pgm_Tail_Gain)
rcall read_eeprom_byte
sts Pgm_Tail_Gain, Temp1
ldi Temp2, low(Eep_Pgm_Tail_Idle)
ldi Temp3, high(Eep_Pgm_Tail_Idle)
rcall read_eeprom_byte
sts Pgm_Tail_Idle, Temp1
ldi Temp2, low(Eep_Pgm_Startup_Pwr)
ldi Temp3, high(Eep_Pgm_Startup_Pwr)
rcall read_eeprom_byte
sts Pgm_Startup_Pwr, Temp1
ldi Temp2, low(Eep_Pgm_Pwm_Freq)
ldi Temp3, high(Eep_Pgm_Pwm_Freq)
rcall read_eeprom_byte
sbr Flags2, (1<<PGM_PWM_HIGH_FREQ)
sbrc Temp1, 1
cbr Flags2, (1<<PGM_PWM_HIGH_FREQ)
ldi Temp2, low(Eep_Pgm_Input_Pol)
ldi Temp3, high(Eep_Pgm_Input_Pol)
rcall read_eeprom_byte
cbr Flags2, (1<<PGM_RCP_PWM_POL)
sbrc Temp1, 1
sbr Flags2, (1<<PGM_RCP_PWM_POL)
ldi Temp1, 3
sts Pgm_Gov_Mode, Temp1
.endif
rjmp read_eeprom_exit
read_eeprom_store_defaults:
rcall set_default_parameters
rcall store_eeprom_defaults
read_eeprom_exit:
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Store default parameter value in EEPROM routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
store_eeprom_defaults:
rcall clear_eeprom_signature
.if TAIL == 0
ldi Temp1, 1
sts Tx_Pgm_Func_No, Temp1
lds Temp1, Pgm_Gov_P_Gain
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 2
sts Tx_Pgm_Func_No, Temp1
lds Temp1, Pgm_Gov_I_Gain
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 3
sts Tx_Pgm_Func_No, Temp1
lds Temp1, Pgm_Gov_Mode
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 4
sts Tx_Pgm_Func_No, Temp1
lds Temp1, Pgm_Startup_Pwr
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 5
sts Tx_Pgm_Func_No, Temp1
ldi Temp1, 1
sbrs Flags2, PGM_PWM_HIGH_FREQ
ldi Temp1, 2
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 6
sts Tx_Pgm_Func_No, Temp1
ldi Temp1, 1
sbrc Flags2, PGM_RCP_PWM_POL
ldi Temp1, 2
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
rcall write_eeprom_signature
.else
ldi Temp1, 1
sts Tx_Pgm_Func_No, Temp1
lds Temp1, Pgm_Tail_Gain
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 2
sts Tx_Pgm_Func_No, Temp1
lds Temp1, Pgm_Tail_Idle
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 3
sts Tx_Pgm_Func_No, Temp1
lds Temp1, Pgm_Startup_Pwr
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 4
sts Tx_Pgm_Func_No, Temp1
ldi Temp1, 1
sbrs Flags2, PGM_PWM_HIGH_FREQ
ldi Temp1, 2
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
ldi Temp1, 5
sts Tx_Pgm_Func_No, Temp1
ldi Temp1, 1
sbrc Flags2, PGM_RCP_PWM_POL
ldi Temp1, 2
sts Tx_Pgm_Paraval_No, Temp1
rcall store_in_eeprom
rcall write_eeprom_signature
.endif
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Store new parameter value in EEPROM routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
store_in_eeprom:
lds Temp4, Tx_Pgm_Func_No ; Function no
lds Temp1, Tx_Pgm_Paraval_No ; Parameter value no
.if TAIL == 0
cpi Temp4, 1
breq store_main_func_1
cpi Temp4, 2
breq store_main_func_2
cpi Temp4, 3
breq store_main_func_3
cpi Temp4, 4
breq store_main_func_4
cpi Temp4, 5
breq store_main_func_5
cpi Temp4, 6
breq store_main_func_6
store_main_func_1:
ldi Temp2, low(Eep_Pgm_Gov_P_Gain)
ldi Temp3, high(Eep_Pgm_Gov_P_Gain)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_main_func_2:
ldi Temp2, low(Eep_Pgm_Gov_I_Gain)
ldi Temp3, high(Eep_Pgm_Gov_I_Gain)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_main_func_3:
ldi Temp2, low(Eep_Pgm_Gov_Mode)
ldi Temp3, high(Eep_Pgm_Gov_Mode)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_main_func_4:
ldi Temp2, low(Eep_Pgm_Startup_Pwr)
ldi Temp3, high(Eep_Pgm_Startup_Pwr)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_main_func_5:
ldi Temp2, low(Eep_Pgm_Pwm_Freq)
ldi Temp3, high(Eep_Pgm_Pwm_Freq)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_main_func_6:
ldi Temp2, low(Eep_Pgm_Input_Pol)
ldi Temp3, high(Eep_Pgm_Input_Pol)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
.else
cpi Temp4, 1
breq store_tail_func_1
cpi Temp4, 2
breq store_tail_func_2
cpi Temp4, 3
breq store_tail_func_3
cpi Temp4, 4
breq store_tail_func_4
cpi Temp4, 5
breq store_tail_func_5
store_tail_func_1:
ldi Temp2, low(Eep_Pgm_Tail_Gain)
ldi Temp3, high(Eep_Pgm_Tail_Gain)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_tail_func_2:
ldi Temp2, low(Eep_Pgm_Tail_Idle)
ldi Temp3, high(Eep_Pgm_Tail_Idle)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_tail_func_3:
ldi Temp2, low(Eep_Pgm_Startup_Pwr)
ldi Temp3, high(Eep_Pgm_Startup_Pwr)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_tail_func_4:
ldi Temp2, low(Eep_Pgm_Pwm_Freq)
ldi Temp3, high(Eep_Pgm_Pwm_Freq)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
store_tail_func_5:
ldi Temp2, low(Eep_Pgm_Input_Pol)
ldi Temp3, high(Eep_Pgm_Input_Pol)
rcall write_eeprom_byte
rjmp store_in_eeprom_exit
.endif
store_in_eeprom_exit:
ret
;**;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Wait 1 second routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
wait1s:
ldi Temp1, 5
mov Temp5, Temp1
wait1s_loop:
rcall wait200ms
dec Temp5
brne wait1s_loop
ret
;**;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Success beep routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
success_beep:
cli ; Disable all interrupts
rcall beep_f1
rcall beep_f2
rcall beep_f3
rcall beep_f4
rcall wait10ms
rcall beep_f1
rcall beep_f2
rcall beep_f3
rcall beep_f4
rcall wait10ms
rcall beep_f1
rcall beep_f2
rcall beep_f3
rcall beep_f4
sei ; Enable all interrupts
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Function and parameter value beep routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
function_paraval_beep:
lds Temp5, Tx_Pgm_Func_No ; Function no
lds Temp6, Tx_Pgm_Paraval_No ; Parameter value no
cli ; Disable all interrupts
function_beep:
rcall beep_f1
rcall beep_f1
rcall beep_f1
rcall wait10ms
dec Temp5
brne function_beep
paraval_beep:
rcall beep_f4
rcall wait10ms
dec Temp6
brne paraval_beep
sei ; Enable all interrupts
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Program by TX routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
program_by_tx:
; Start programming mode entry sequence by waiting for low RC pulse
cli ; Disable all interrupts
rcall beep_f4
sei ; Enable all interrupts
rcall wait100ms
lds Temp1, New_Rcp ; Load new RC pulse value
cpi Temp1, RCP_STOP ; Below stop?
brsh program_by_tx ; No - start over
; Continue programming mode entry sequence by waiting for high RC pulse
wait_for_rc_pulse_max:
cli ; Disable all interrupts
rcall beep_f1
rcall wait10ms
rcall beep_f1
sei ; Enable all interrupts
rcall wait100ms
lds Temp1, New_Rcp ; Load new RC pulse value
cpi Temp1, RCP_MAX ; Above max?
brlo wait_for_rc_pulse_max ; No - start over
; Programming mode entry beeps
rcall success_beep
rcall wait1s
rcall wait1s
; Start at function 1, parameter value 1
ldi Temp1, 1
sts Tx_Pgm_Func_No, Temp1
paraval_no_entry:
ldi Temp1, 1
sts Tx_Pgm_Paraval_No, Temp1
beep_no_entry:
ldi Temp1, 0
sts Tx_Pgm_Beep_No, Temp1
func_paraval:
rcall function_paraval_beep
ldi Temp1, 5 ; Wait is 5x 200ms
mov Temp5, Temp1
func_paraval_wait:
rcall wait200ms
lds Temp1, New_Rcp ; Load new rc pulse value
cpi Temp1, RCP_STOP ; Below stop?
brsh func_paraval_cont_wait ; No - branch
rcall clear_eeprom_signature ; Clear signature
rcall store_in_eeprom ; Yes - store new value in EEPROM
rcall write_eeprom_signature ; Write signature
rcall success_beep ; Beep success
Enable_Watchdog Temp1 ; Generate hardware reset from watchdog
rcall wait1s
func_paraval_cont_wait:
dec Temp5
brne func_paraval_wait
lds Temp1, Tx_Pgm_Beep_No ; Load and check number of beeps
inc Temp1
sts Tx_Pgm_Beep_No, Temp1
cpi Temp1, 3 ; Three beeps done?
brsh paraval_next ; Yes - Next parameter value
rjmp func_paraval ; No - go back
paraval_next:
rcall wait1s
lds Temp1, Tx_Pgm_Paraval_No ; Parameter value no
inc Temp1
sts Tx_Pgm_Paraval_No, Temp1
ldi Temp2, 5 ; Default 5 parameter values
.if TAIL == 0
lds Temp1, Tx_Pgm_Func_No
cpi Temp1, 3 ; Function 3?
brne paraval_end_a ; No - branch
ldi Temp2, 3 ; Yes - set max parameter values
paraval_end_a:
lds Temp1, Tx_Pgm_Func_No
cpi Temp1, 5 ; Function below 5?
brlo paraval_end_b ; Yes - branch
ldi Temp2, 2 ; No - set max parameter values
paraval_end_b:
.else
lds Temp1, Tx_Pgm_Func_No
cpi Temp1, 4 ; Function below 4?
brlo paraval_end_a ; Yes - branch
ldi Temp2, 2 ; No - set max parameter values
paraval_end_a:
.endif
inc Temp2
lds Temp1, Tx_Pgm_Paraval_No
cp Temp1, Temp2
brsh function_next ; Last parameter value?
rjmp beep_no_entry ; No - go back
function_next: ; Yes - Next function value
rcall wait1s
rcall wait1s
lds Temp1, Tx_Pgm_Func_No ; Function value no
inc Temp1
sts Tx_Pgm_Func_No, Temp1
.if TAIL == 0
cpi Temp1, 7 ; Main has 6 functions
.else
cpi Temp1, 6 ; Tail has 5 functions
.endif
brsh program_by_tx_exit ; Last function value?
rjmp paraval_no_entry ; No - go back
program_by_tx_exit:
Enable_Watchdog Temp1 ; Generate hardware reset from watchdog
rcall wait1s

315
Atmel/Feigao6.inc

@ -0,0 +1,315 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;*********************
; Device Atmega8
;*********************
.include "m8def.inc"
;**** **** **** **** ****
; Fuses must be set to internal calibrated oscillator = 8Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
.equ ADC_LIMIT_L = 211 ; Power supply measurement ADC value for which main motor power is limited (low byte)
.equ ADC_LIMIT_H = 0 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT D definitions *
;*********************
;.equ = 7 ;i
.equ Comp_Com = 6 ;i Comparator common input (AIN0)
.equ ApFET = 5 ;o
.equ CpFET = 4 ;o
.equ BpFET = 3 ;o
.equ Rcp_In = 2 ;i RC pulse input
;.equ = 1 ;i
;.equ = 0 ;i
.equ INIT_PD = 0
.equ DIR_PD = (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
.MACRO Read_Rcp_Int
in @0, PIND
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
com @0 ; Yes - invert
.ENDMACRO
.MACRO Read_Rcp_Icp_Int
in @0, PINB
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
com @0 ; Yes - invert
.ENDMACRO
.MACRO Rcp_Int_Enable
ldi @0, (1<<INT0) ; Enable ext0int
out GICR, @0
.ENDMACRO
.MACRO Rcp_Int_Disable
ldi @0, 0 ; Disable ext0int
out GICR, @0
.ENDMACRO
.MACRO Rcp_Int_First
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
ldi @0, (1<<ISC01)+(1<<ISC00) ; Yes - set next int0 to rising
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
ldi @0, (1<<ISC01) ; Yes - set next int0 to falling
out MCUCR, @0
.ENDMACRO
.MACRO Rcp_Int_Second
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
ldi @0, (1<<ISC01) ; Yes - set next int0 to falling
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
ldi @0, (1<<ISC01)+(1<<ISC00) ; Yes - set next int0 to rising
out MCUCR, @0
.ENDMACRO
.MACRO Clear_Int_Flag
clr @0
sbr @0, (1<<INTF0) ; Clear ext0int flag
out GIFR, @0
.ENDMACRO
.MACRO ApFET_on
sbi PORTD,5
.ENDMACRO
.MACRO ApFET_off
cbi PORTD,5
.ENDMACRO
.MACRO CpFET_on
sbi PORTD,4
.ENDMACRO
.MACRO CpFET_off
cbi PORTD,4
.ENDMACRO
.MACRO BpFET_on
sbi PORTD,3
.ENDMACRO
.MACRO BpFET_off
cbi PORTD,3
.ENDMACRO
.MACRO All_pFETs_Off
in @0, PORTD
cbr @0, (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
out PORTD, @0
.ENDMACRO
.MACRO All_pFETs_On
in @0, PORTD
sbr @0, (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
out PORTD, @0
.ENDMACRO
;*********************
; PORT C definitions *
;*********************
;.equ = 7 ; ADC7
;.equ = 6 ; ADC6
.equ Mux_A = 5 ; Phase A input
.equ Mux_C = 4 ; Phase C input
;.equ = 3 ; ADC3
.equ Mux_B = 2 ; Phase B input
;.equ = 1 ; ADC1
;.equ = 0 ; ADC0
.equ INIT_PC = 0
.equ DIR_PC = 0
.MACRO Comp_Init
in @0, SFIOR ; Set Analog Comparator Multiplexer Enable
sbr @0, (1<<ACME)
out SFIOR, @0
cbi ADCSRA, ADEN ; Disable ADC
.ENDMACRO
.MACRO Set_Comp_Phase_A
ldi @0, Mux_A ; Set comparator multiplexer to phase A
out ADMUX, @0
.ENDMACRO
.MACRO Set_Comp_Phase_B
ldi @0, Mux_B ; Set comparator multiplexer to phase B
out ADMUX, @0
.ENDMACRO
.MACRO Set_Comp_Phase_C
ldi @0, Mux_C ; Set comparator multiplexer to phase C
out ADMUX, @0
.ENDMACRO
.MACRO Read_Comp_Out
in @0, ACSR ; Read comparator output
.ENDMACRO
;*********************
; PORT B definitions *
;*********************
;.equ = 7
;.equ = 6
;.equ = 5 (sck stk200 interface)
.equ DebugPin = 4 ;(miso stk200 interface)
;.equ = 3 (mosi stk200 interface)
.equ AnFET = 2
.equ CnFET = 1
.equ BnFET = 0
.equ INIT_PB = 0
.equ DIR_PB = (1<<DebugPin)+(1<<AnFET)+(1<<BnFET)+(1<<CnFET)
.MACRO AnFET_on
sbi PORTB,2
.ENDMACRO
.MACRO AnFET_off
cbi PORTB,2
.ENDMACRO
.MACRO CnFET_on
sbi PORTB,1
.ENDMACRO
.MACRO CnFET_off
cbi PORTB,1
.ENDMACRO
.MACRO BnFET_on
sbi PORTB,0
.ENDMACRO
.MACRO BnFET_off
cbi PORTB,0
.ENDMACRO
.MACRO All_nFETs_Off
in @0, PORTB
cbr @0, (1<<AnFET)+(1<<BnFET)+(1<<CnFET)
out PORTB, @0
.ENDMACRO
;**********************
; MCU specific macros *
;**********************
.MACRO Disable_Watchdog
cli ; Disable interrupts
wdr ; Reset watchdog timer
in @0, WDTCR ; Write logical one to WDCE and WDE
ori @0, (1<<WDCE)|(1<<WDE)
out WDTCR, @0
ldi @0, (0<<WDE) ; Turn off WDT
out WDTCR, @0
.ENDMACRO
.MACRO Enable_Watchdog
ldi @0, (1<<WDE) ; Turn on WDT
sts WDTCR, @0
.ENDMACRO
.MACRO Initialize_MCU
.ENDMACRO
.MACRO Interrupt_Table_Definition
rjmp reset
rjmp ext_int0 ; ext_int0
nop ; ext_int1
nop ; t2oc_int
rjmp t2ovfl_int; t2ovfl_int
nop ; icp1_int
rjmp t1oca_int ; t1oca_int
nop ; t1ocb_int
rjmp t1ovfl_int; t1ovfl_int
rjmp t0ovfl_int; t0ovfl_int
nop ; spi_int
nop ; urxc
nop ; udre
nop ; utxc
; nop ; adc_int
; nop ; eep_int
; nop ; aci_int
; nop ; wire2_int
; nop ; spmc_int
.ENDMACRO
.MACRO Initialize_Interrupts
ldi Temp1, (1<<TOIE0)+(1<<TOIE1)+(1<<OCIE1A)+(1<<TOIE2)
out TIFR, Temp1 ; Clear interrupts
out TIMSK, Temp1 ; Enable interrupts
.ENDMACRO
.MACRO Initialize_Adc
in Temp1, ADCSRA ; Set ADCSRA register (1MHz clock)
sbr Temp1, (1<<ADPS1)
sbr Temp1, (1<<ADPS0)
out ADCSRA, Temp1
.ENDMACRO
.MACRO Start_Adc
ldi Temp1, (1<<REFS1)+(1<<REFS0)
out ADMUX, Temp1 ; Set ADMUX register (2.56V reference, left adj result, input 0)
in @0, ADCSRA
sbr @0, (1<<ADEN) ; Enable ADC
sbr @0, (1<<ADSC) ; Start ADC conversion
out ADCSRA, @0
.ENDMACRO
.MACRO Get_Adc_Status
in @0, ADCSRA
.ENDMACRO
.MACRO Read_Adc_Result
in @0, ADCL
in @1, ADCH
.ENDMACRO
.MACRO Stop_Adc
in @0, ADCSRA
cbr @0, (1<<ADEN) ; Disable ADC
out ADCSRA, @0
.ENDMACRO
.MACRO Set_Timer0_CS0
out TCCR0, @0
.ENDMACRO
.MACRO Set_Timer1_CS1
out TCCR1B, @0
.ENDMACRO
.MACRO Set_Timer2_CS2
out TCCR2, @0
.ENDMACRO
.MACRO Read_TCNT1L
in @0, TCNT1L
.ENDMACRO
.MACRO Read_TCNT1H
in @0, TCNT1H
.ENDMACRO
.MACRO Set_OCR1AL
out OCR1AL, @0
.ENDMACRO
.MACRO Set_OCR1AH
out OCR1AH, @0
.ENDMACRO
.MACRO Set_TCNT2
out TCNT2, @0
.ENDMACRO
.MACRO Check_Eeprom_Ready
sbic EECR, EEWE
.ENDMACRO
.MACRO Set_Eeprom_Address
out EEARL, @0
out EEARH, @1
.ENDMACRO
.MACRO Start_Eeprom_Write
sbi EECR, EEMWE
sbi EECR, EEWE
.ENDMACRO

350
Atmel/HC5A1SA48V.inc

@ -0,0 +1,350 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;*********************
; Device Atmega48V
;*********************
.include "m48def.inc"
;**** **** **** **** ****
; Fuses must be set to internal calibrated oscillator = 8Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
.equ ADC_LIMIT_L = 254 ; Power supply measurement ADC value for which main motor power is limited (low byte)
.equ ADC_LIMIT_H = 0 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT D definitions *
;*********************
.equ Mux_A = 7 ;i Phase A input
.equ Comp_Com = 6 ;i Comparator common input (AIN0)
;.equ = 5
;.equ = 4
.equ ApFET = 3 ;o
.equ Rcp_In = 2 ;i RC pulse input
.equ BpFET = 1 ;o
.equ CpFET = 0 ;o
.equ INIT_PD = 0
.equ DIR_PD = (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
.MACRO Read_Rcp_Int
in @0, PIND
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
com @0 ; Yes - invert
.ENDMACRO
.MACRO Read_Rcp_Icp_Int
in @0, PINB
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
com @0 ; Yes - invert
.ENDMACRO
.MACRO Rcp_Int_Enable
ldi @0, (1<<INT0) ; Enable ext0int
out EIMSK, @0
.ENDMACRO
.MACRO Rcp_Int_Disable
ldi @0, 0 ; Disable ext0int
out EIMSK, @0
.ENDMACRO
.MACRO Rcp_Int_First
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
ldi @0, (1<<ISC01)+(1<<ISC00) ; Yes - set next int0 to rising
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
ldi @0, (1<<ISC01) ; Yes - set next int0 to falling
sts EICRA, @0
.ENDMACRO
.MACRO Rcp_Int_Second
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
ldi @0, (1<<ISC01) ; Yes - set next int0 to falling
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
ldi @0, (1<<ISC01)+(1<<ISC00) ; Yes - set next int0 to rising
sts EICRA, @0
.ENDMACRO
.MACRO Clear_Int_Flag
clr @0
sbr @0, (1<<INTF0) ; Clear ext0int flag
out EIFR, @0
.ENDMACRO
.MACRO ApFET_on
sbi PORTD,3
.ENDMACRO
.MACRO ApFET_off
cbi PORTD,3
.ENDMACRO
.MACRO BpFET_on
sbi PORTD,1
.ENDMACRO
.MACRO BpFET_off
cbi PORTD,1
.ENDMACRO
.MACRO CpFET_on
sbi PORTD,0
.ENDMACRO
.MACRO CpFET_off
cbi PORTD,0
.ENDMACRO
.MACRO All_pFETs_Off
in @0, PORTD
cbr @0, (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
out PORTD, @0
.ENDMACRO
.MACRO All_pFETs_On
in @0, PORTD
sbr @0, (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
out PORTD, @0
.ENDMACRO
;*********************
; PORT C definitions *
;*********************
;.equ = 7 ; ADC7
;.equ = 6 ; ADC6
;.equ = 5 ; ADC5
;.equ = 4 ; ADC4
.equ Mux_B = 3 ; Phase B input
.equ Mux_C = 2 ; Phase C input
;.equ = 1 ; ADC1
;.equ = 0 ; ADC0
.equ INIT_PC = 0
.equ DIR_PC = 0
.MACRO Comp_Init
lds @0, ADCSRA ; Disable ADC
cbr @0, (1<<ADEN)
sts ADCSRA, @0
lds @0, ADCSRB ; Set Analog Comparator Multiplexer Enable
sbr @0, (1<<ACME)
sts ADCSRB, @0
.ENDMACRO
.MACRO Set_Comp_Phase_A
lds @0, ADCSRB ; Set Analog Comparator Multiplexer Disable
cbr @0, (1<<ACME)
sts ADCSRB, @0
.ENDMACRO
.MACRO Set_Comp_Phase_B
lds @0, ADCSRB ; Set Analog Comparator Multiplexer Enable
sbr @0, (1<<ACME)
sts ADCSRB, @0
ldi @0, Mux_B ; Set comparator multiplexer to phase B
sts ADMUX, @0
.ENDMACRO
.MACRO Set_Comp_Phase_C
lds @0, ADCSRB ; Set Analog Comparator Multiplexer Enable
sbr @0, (1<<ACME)
sts ADCSRB, @0
ldi @0, Mux_C ; Set comparator multiplexer to phase C
sts ADMUX, @0
.ENDMACRO
.MACRO Read_Comp_Out
in @0, ACSR ; Read comparator output
.ENDMACRO
;*********************
; PORT B definitions *
;*********************
;.equ = 7
;.equ = 6
;.equ = 5 (sck stk200 interface)
.equ DebugPin = 4 ;(miso stk200 interface)
;.equ = 3 (mosi stk200 interface)
.equ CnFET = 2 ;o
.equ BnFET = 1 ;o
.equ AnFET = 0 ;o
.equ INIT_PB = 0
.equ DIR_PB = (1<<AnFET)+(1<<BnFET)+(1<<CnFET)+(1<<DebugPin)
.MACRO AnFET_on
sbi PORTB,0
.ENDMACRO
.MACRO AnFET_off
cbi PORTB,0
.ENDMACRO
.MACRO BnFET_on
sbi PORTB,1
.ENDMACRO
.MACRO BnFET_off
cbi PORTB,1
.ENDMACRO
.MACRO CnFET_on
sbi PORTB,2
.ENDMACRO
.MACRO CnFET_off
cbi PORTB,2
.ENDMACRO
.MACRO All_nFETs_Off
in @0, PORTB
cbr @0, (1<<AnFET)+(1<<BnFET)+(1<<CnFET)
out PORTB, @0
.ENDMACRO
;**********************
; MCU specific macros *
;**********************
.MACRO Disable_Watchdog
cli ; Disable interrupts
wdr ; Reset watchdog timer
in @0, MCUSR ; Clear WDRF in MCUSR
andi @0, (0xff & (0<<WDRF))
out MCUSR, @0
lds @0, WDTCSR ; Write logical one to WDCE and WDE
ori @0, (1<<WDCE) | (1<<WDE)
sts WDTCSR, @0
ldi @0, (0<<WDE) ; Turn off WDT
sts WDTCSR, @0
.ENDMACRO
.MACRO Enable_Watchdog
ldi @0, (1<<WDE) ; Turn on WDT
sts WDTCSR, @0
.ENDMACRO
.MACRO Initialize_MCU
ldi @0, (1<<CLKPCE) ; Set clock prescaler change enable
sts CLKPR, @0
ldi @0, 0 ; Change clock prescaler (to divide by 1)
sts CLKPR, @0
.ENDMACRO
.MACRO Interrupt_Table_Definition
rjmp reset
rjmp ext_int0 ; ext_int0
nop ; ext_int1
nop ; pci0_int
nop ; pci1_int
nop ; pci2_int
nop ; wdt_int
nop ; t2oca_int
nop ; t2ocb_int
rjmp t2ovfl_int; t2ovfl_int
rjmp icp1_int ; icp1_int
rjmp t1oca_int ; t1oca_int
nop ; t1ocb_int
rjmp t1ovfl_int; t1ovfl_int
nop ; t0oca_int
nop ; t0ocb_int
rjmp t0ovfl_int; t0ovfl_int
nop ; spi_int
nop ; urxc
nop ; udre
nop ; utxc
; nop ; adc_int
; nop ; eep_int
; nop ; aci_int
; nop ; wire2_int
; nop ; spmc_int
.ENDMACRO
.MACRO Initialize_Interrupts
ldi Temp1, (1<<TOIE0)
out TIFR0, Temp1 ; Clear interrupts
sts TIMSK0, Temp1 ; Enable interrupts
ldi Temp1, (1<<TOIE1)+(1<<OCIE1A)
out TIFR1, Temp1 ; Clear interrupts
sts TIMSK1, Temp1 ; Enable interrupts
ldi Temp1, (1<<TOIE2)
out TIFR2, Temp1 ; Clear interrupts
sts TIMSK2, Temp1 ; Enable interrupts
.ENDMACRO
.MACRO Initialize_Adc
lds Temp1, ADCSRA ; Set ADCSRA register (1MHz clock)
sbr Temp1, (1<<ADPS1)
sbr Temp1, (1<<ADPS0)
sts ADCSRA, Temp1
.ENDMACRO
.MACRO Start_Adc
ldi Temp1, (1<<REFS1)+(1<<REFS0)+(1<<MUX2)+(1<<MUX1)+(1<<MUX0)
sts ADMUX, Temp1 ; Set ADMUX register (1.1V reference, left adj result, input 7)
lds @0, ADCSRA
sbr @0, (1<<ADEN) ; Enable ADC
sbr @0, (1<<ADSC) ; Start ADC conversion
sts ADCSRA, @0
.ENDMACRO
.MACRO Get_Adc_Status
lds @0, ADCSRA
.ENDMACRO
.MACRO Read_Adc_Result
lds @0, ADCL
lds @1, ADCH
.ENDMACRO
.MACRO Stop_Adc
lds @0, ADCSRA
cbr @0, (1<<ADEN) ; Disable ADC
sts ADCSRA, @0
.ENDMACRO
.MACRO Set_Timer0_CS0
out TCCR0B, @0
.ENDMACRO
.MACRO Set_Timer1_CS1
sts TCCR1B, @0
.ENDMACRO
.MACRO Set_Timer2_CS2
sts TCCR2B, @0
.ENDMACRO
.MACRO Read_TCNT1L
lds @0, TCNT1L
.ENDMACRO
.MACRO Read_TCNT1H
lds @0, TCNT1H
.ENDMACRO
.MACRO Read_ICR1L
lds @0, ICR1L
.ENDMACRO
.MACRO Read_ICR1H
lds @0, ICR1H
.ENDMACRO
.MACRO Set_OCR1AL
sts OCR1AL, @0
.ENDMACRO
.MACRO Set_OCR1AH
sts OCR1AH, @0
.ENDMACRO
.MACRO Set_TCNT2
sts TCNT2, @0
.ENDMACRO
.MACRO Check_Eeprom_Ready
sbic EECR, EEPE
.ENDMACRO
.MACRO Set_Eeprom_Address
out EEARL, @0
.ENDMACRO
.MACRO Start_Eeprom_Write
sbi EECR, EEMPE
sbi EECR, EEPE
.ENDMACRO

355
Atmel/HC5A1SA8.inc

@ -0,0 +1,355 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;*********************
; Device Atmega8
;*********************
.include "m8def.inc"
;**** **** **** **** ****
; Fuses must be set to internal calibrated oscillator = 8Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
.equ ADC_LIMIT_L = 45 ; Power supply measurement ADC value for which main motor power is limited (low byte)
.equ ADC_LIMIT_H = 0 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT D definitions *
;*********************
.equ BpFET = 7 ;o
.equ Comp_Com = 6 ;i Comparator common input (AIN0)
.equ CpFET = 5 ;o
.equ ApFET = 4 ;o
.equ AnFET = 3 ;o
.equ Rcp_In = 2 ;i RC pulse input
.equ BnFET = 1 ;o
.equ CnFET = 0 ;o
.equ INIT_PD = 0
.equ DIR_PD = (1<<AnFET)+(1<<BnFET)+(1<<CnFET)+(1<<ApFET)+(1<<BpFET)+(1<<CpFET)
.MACRO Read_Rcp_Int
in @0, PIND
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
com @0 ; Yes - invert
.ENDMACRO
.MACRO Read_Rcp_Icp_Int
in @0, PINB
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
com @0 ; Yes - invert
.ENDMACRO
.MACRO Rcp_Int_Enable
ldi @0, (1<<INT0) ; Enable ext0int
out GICR, @0
.ENDMACRO
.MACRO Rcp_Int_Disable
ldi @0, 0 ; Disable ext0int
out GICR, @0
.ENDMACRO
.MACRO Rcp_Int_First
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
ldi @0, (1<<ISC01)+(1<<ISC00) ; Yes - set next int0 to rising
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
ldi @0, (1<<ISC01) ; Yes - set next int0 to falling
out MCUCR, @0
.ENDMACRO
.MACRO Rcp_Int_Second
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
ldi @0, (1<<ISC01) ; Yes - set next int0 to falling
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
ldi @0, (1<<ISC01)+(1<<ISC00) ; Yes - set next int0 to rising
out MCUCR, @0
.ENDMACRO
.MACRO Clear_Int_Flag
clr @0
sbr @0, (1<<INTF0) ; Clear ext0int flag
out GIFR, @0
.ENDMACRO
.MACRO Rcp_Icp_Int_Enable
in @0, TIMSK
sbr @0, (1<<TICIE1) ; Enable icp1int
out TIMSK, @0
.ENDMACRO
.MACRO Rcp_Icp_Int_Disable
in @0, TIMSK
cbr @0, (1<<TICIE1) ; Disable icp1int
out TIMSK, @0
.ENDMACRO
.MACRO Rcp_Icp_Int_First
in @0, TCCR1B
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
sbr @0, (1<<ICES1) ; Yes - set icp1int to trig on rising edge
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
cbr @0, (1<<ICES1) ; Yes - set icp1int to trig on falling edge
out TCCR1B, @0
.ENDMACRO
.MACRO Rcp_Icp_Int_Second
in @0, TCCR1B
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
cbr @0, (1<<ICES1) ; Yes - set icp1int to trig on falling edge
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
sbr @0, (1<<ICES1) ; Yes - set icp1int to trig on rising edge
out TCCR1B, @0
.ENDMACRO
.MACRO Clear_Icp_Int_Flag
clr @0
sbr @0, (1<<ICF1) ; Clear icp1int flag
out TIFR, @0
.ENDMACRO
.MACRO AnFET_on
sbi PORTD,3
.ENDMACRO
.MACRO AnFET_off
cbi PORTD,3
.ENDMACRO
.MACRO BnFET_on
sbi PORTD,1
.ENDMACRO
.MACRO BnFET_off
cbi PORTD,1
.ENDMACRO
.MACRO CnFET_on
sbi PORTD,0
.ENDMACRO
.MACRO CnFET_off
cbi PORTD,0
.ENDMACRO
.MACRO All_nFETs_Off
in @0, PORTD
cbr @0, (1<<AnFET)+(1<<BnFET)+(1<<CnFET)
out PORTD, @0
.ENDMACRO
.MACRO ApFET_on
sbi PORTD,4
.ENDMACRO
.MACRO ApFET_off
cbi PORTD,4
.ENDMACRO
.MACRO BpFET_on
sbi PORTD,7
.ENDMACRO
.MACRO BpFET_off
cbi PORTD,7
.ENDMACRO
.MACRO CpFET_on
sbi PORTD,5
.ENDMACRO
.MACRO CpFET_off
cbi PORTD,5
.ENDMACRO
.MACRO All_pFETs_Off
in @0, PORTD
cbr @0, (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
out PORTD, @0
.ENDMACRO
.MACRO All_pFETs_On
in @0, PORTD
sbr @0, (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
out PORTD, @0
.ENDMACRO
;*********************
; PORT C definitions *
;*********************
;.equ = 7 ; ADC7
;.equ = 6 ; ADC6
;.equ = 5 ; ADC5
.equ Mux_A = 4 ; Phase A input
.equ Mux_B = 3 ; Phase B input
.equ Mux_C = 2 ; Phase C input
;.equ = 1 ; ADC1
;.equ = 0 ; ADC0
.equ INIT_PC = 0
.equ DIR_PC = 0
.MACRO Comp_Init
in @0, SFIOR ; Set Analog Comparator Multiplexer Enable
sbr @0, (1<<ACME)
out SFIOR, @0
cbi ADCSRA, ADEN ; Disable ADC
.ENDMACRO
.MACRO Set_Comp_Phase_A
ldi @0, Mux_A ; Set comparator multiplexer to phase A
out ADMUX, @0
.ENDMACRO
.MACRO Set_Comp_Phase_B
ldi @0, Mux_B ; Set comparator multiplexer to phase B
out ADMUX, @0
.ENDMACRO
.MACRO Set_Comp_Phase_C
ldi @0, Mux_C ; Set comparator multiplexer to phase C
out ADMUX, @0
.ENDMACRO
.MACRO Read_Comp_Out
in @0, ACSR ; Read comparator output
.ENDMACRO
;*********************
; PORT B definitions *
;*********************
;.equ = 7
;.equ = 6
;.equ = 5 (sck stk200 interface)
.equ DebugPin = 4 ;(miso stk200 interface)
;.equ = 3 (mosi stk200 interface)
;.equ = 2
;.equ = 1
.equ Rcp_Icp_In = 0
.equ INIT_PB = 0
.equ DIR_PB = (1<<DebugPin)
;**********************
; MCU specific macros *
;**********************
.MACRO Disable_Watchdog
cli ; Disable interrupts
wdr ; Reset watchdog timer
in @0, WDTCR ; Write logical one to WDCE and WDE
ori @0, (1<<WDCE)|(1<<WDE)
out WDTCR, @0
ldi @0, (0<<WDE) ; Turn off WDT
out WDTCR, @0
.ENDMACRO
.MACRO Enable_Watchdog
ldi @0, (1<<WDE) ; Turn on WDT
sts WDTCR, @0
.ENDMACRO
.MACRO Initialize_MCU
.ENDMACRO
.MACRO Interrupt_Table_Definition
rjmp reset
rjmp ext_int0 ; ext_int0
nop ; ext_int1
nop ; t2oc_int
rjmp t2ovfl_int; t2ovfl_int
rjmp icp1_int ; icp1_int
rjmp t1oca_int ; t1oca_int
nop ; t1ocb_int
rjmp t1ovfl_int; t1ovfl_int
rjmp t0ovfl_int; t0ovfl_int
nop ; spi_int
nop ; urxc
nop ; udre
nop ; utxc
; nop ; adc_int
; nop ; eep_int
; nop ; aci_int
; nop ; wire2_int
; nop ; spmc_int
.ENDMACRO
.MACRO Initialize_Interrupts
ldi Temp1, (1<<TOIE0)+(1<<TOIE1)+(1<<OCIE1A)+(1<<TOIE2)
out TIFR, Temp1 ; Clear interrupts
out TIMSK, Temp1 ; Enable interrupts
.ENDMACRO
.MACRO Initialize_Adc
in Temp1, ADCSRA ; Set ADCSRA register (1MHz clock)
sbr Temp1, (1<<ADPS1)
sbr Temp1, (1<<ADPS0)
out ADCSRA, Temp1
.ENDMACRO
.MACRO Start_Adc
ldi Temp1, (1<<REFS1)+(1<<REFS0)+(1<<MUX2)+(1<<MUX1)+(1<<MUX0)
out ADMUX, Temp1 ; Set ADMUX register (2.56V reference, left adj result, input 7)
in @0, ADCSRA
sbr @0, (1<<ADEN) ; Enable ADC
sbr @0, (1<<ADSC) ; Start ADC conversion
out ADCSRA, @0
.ENDMACRO
.MACRO Get_Adc_Status
in @0, ADCSRA
.ENDMACRO
.MACRO Read_Adc_Result
in @0, ADCL
in @1, ADCH
.ENDMACRO
.MACRO Stop_Adc
in @0, ADCSRA
cbr @0, (1<<ADEN) ; Disable ADC
out ADCSRA, @0
.ENDMACRO
.MACRO Set_Timer0_CS0
out TCCR0, @0
.ENDMACRO
.MACRO Set_Timer1_CS1
out TCCR1B, @0
.ENDMACRO
.MACRO Set_Timer2_CS2
out TCCR2, @0
.ENDMACRO
.MACRO Read_TCNT1L
in @0, TCNT1L
.ENDMACRO
.MACRO Read_TCNT1H
in @0, TCNT1H
.ENDMACRO
.MACRO Read_ICR1L
in @0, ICR1L
.ENDMACRO
.MACRO Read_ICR1H
in @0, ICR1H
.ENDMACRO
.MACRO Set_OCR1AL
out OCR1AL, @0
.ENDMACRO
.MACRO Set_OCR1AH
out OCR1AH, @0
.ENDMACRO
.MACRO Set_TCNT2
out TCNT2, @0
.ENDMACRO
.MACRO Check_Eeprom_Ready
sbic EECR, EEWE
.ENDMACRO
.MACRO Set_Eeprom_Address
out EEARL, @0
out EEARH, @1
.ENDMACRO
.MACRO Start_Eeprom_Write
sbi EECR, EEMWE
sbi EECR, EEWE
.ENDMACRO

26
Atmel/README

@ -0,0 +1,26 @@
This tree contains the BLHeli assembly code for sensorless brushless motor electronic speed control (ESC) boards.
It is designed specifically for use with Eflite mCP X, but may also be used on other copters/planes.
This tree contains AVR assembly code for Atmel MCU based ESCs.
Features and Changes
--------------------
- Can be configured for main motor or tail motor operation
- Main motor operation has governor functionality
- Many parmeters can be programmed from the TX
- Supports 1kHz, 2kHz, 4kHz or 8kHz positive or negative pwm as input signal
Supported Hardware
------------------
- HC 5A
- Walkera WK-WST-10A-LT
- Feigao 6A
Installation and use
--------------------
The software is written, compiled and debugged in the AVR Studio 4 IDE.
For more information, check out this thread:
http://www.helifreak.com/showthread.php?t=357151

387
Atmel/WalkeraWST10LT.inc

@ -0,0 +1,387 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;*********************
; Device Atmega88P(A)
;*********************
.include "m88Pdef.inc"
;**** **** **** **** ****
; Fuses must be set to external oscillator 8.0- MHz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
.equ ADC_LIMIT_L = 180 ; Power supply measurement ADC value for which main motor power is limited (low byte)
.equ ADC_LIMIT_H = 1 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT D definitions *
;*********************
.equ Mux_B = 7 ;i Phase B input
.equ Comp_Com = 6 ;i Comparator common input (AIN0)
.equ BnFET = 5 ;o
.equ BpFET = 4 ;o
.equ CpFET = 3 ;o
.equ Rcp_In = 2 ;i RC pulse input
.equ ApFET = 1 ;o
;.equ = 0 ;i
.equ INIT_PD = 0
.equ DIR_PD = (1<<ApFET)+(1<<BpFET)+(1<<CpFET)+(1<<BnFET)
.MACRO Read_Rcp_Int
in @0, PIND
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
com @0 ; Yes - invert
.ENDMACRO
.MACRO Read_Rcp_Icp_Int
in @0, PINB
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
com @0 ; Yes - invert
.ENDMACRO
.MACRO Rcp_Int_Enable
ldi @0, (1<<INT0) ; Enable ext0int
out EIMSK, @0
.ENDMACRO
.MACRO Rcp_Int_Disable
ldi @0, 0 ; Disable ext0int
out EIMSK, @0
.ENDMACRO
.MACRO Rcp_Int_First
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
ldi @0, (1<<ISC01)+(1<<ISC00) ; Yes - set next int0 to rising
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
ldi @0, (1<<ISC01) ; Yes - set next int0 to falling
sts EICRA, @0
.ENDMACRO
.MACRO Rcp_Int_Second
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive?
ldi @0, (1<<ISC01) ; Yes - set next int0 to falling
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative?
ldi @0, (1<<ISC01)+(1<<ISC00) ; Yes - set next int0 to rising
sts EICRA, @0
.ENDMACRO
.MACRO Clear_Int_Flag
clr @0
sbr @0, (1<<INTF0) ; Clear ext0int flag
out EIFR, @0
.ENDMACRO
.MACRO Rcp_Icp_Int_Enable
lds @0, TIMSK1
sbr @0, (1<<ICIE1) ; Enable icp1int
sts TIMSK1, @0
.ENDMACRO
.MACRO Rcp_Icp_Int_Disable
lds @0, TIMSK1
cbr @0, (1<<ICIE1) ; Disable icp1int
sts TIMSK1, @0
.ENDMACRO
.MACRO Rcp_Icp_Int_First
lds @0, TCCR1B
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive
sbr @0, (1<<ICES1) ; Yes - set icp1int to trig on rising edge
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative
cbr @0, (1<<ICES1) ; Yes - set icp1int to trig on falling edge
sts TCCR1B, @0
.ENDMACRO
.MACRO Rcp_Icp_Int_Second
lds @0, TCCR1B
sbrs Flags2, PGM_RCP_PWM_POL ; Is pwm polarity positive
cbr @0, (1<<ICES1) ; Yes - set icp1int to trig on falling edge
sbrc Flags2, PGM_RCP_PWM_POL ; Is pwm polarity negative
sbr @0, (1<<ICES1) ; Yes - set icp1int to trig on rising edge
sts TCCR1B, @0
.ENDMACRO
.MACRO Clear_Icp_Int_Flag
clr @0
sbr @0, (1<<ICF1) ; Clear icp1int flag
out TIFR1, @0
.ENDMACRO
.MACRO ApFET_on
sbi PORTD,1
.ENDMACRO
.MACRO ApFET_off
cbi PORTD,1
.ENDMACRO
.MACRO CpFET_on
sbi PORTD,3
.ENDMACRO
.MACRO CpFET_off
cbi PORTD,3
.ENDMACRO
.MACRO BpFET_on
sbi PORTD,4
.ENDMACRO
.MACRO BpFET_off
cbi PORTD,4
.ENDMACRO
.MACRO All_pFETs_Off
in @0, PORTD
cbr @0, (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
out PORTD, @0
.ENDMACRO
.MACRO All_pFETs_On
in @0, PORTD
sbr @0, (1<<ApFET)+(1<<BpFET)+(1<<CpFET)
out PORTD, @0
.ENDMACRO
;*********************
; PORT C definitions *
;*********************
;.equ = 7 ; ADC7
;.equ = 6 ; ADC6
;.equ = 5 ; ADC5
;.equ = 4 ; ADC4
.equ Mux_C = 3 ; Phase C input
.equ Mux_A = 2 ; Phase A input
;.equ = 1 ; ADC1
;.equ = 0 ; ADC0
.equ INIT_PC = 0
.equ DIR_PC = 0
.MACRO Comp_Init
lds @0, ADCSRA ; Disable ADC
cbr @0, (1<<ADEN)
sts ADCSRA, @0
lds @0, ADCSRB ; Set Analog Comparator Multiplexer Enable
sbr @0, (1<<ACME)
sts ADCSRB, @0
.ENDMACRO
.MACRO Set_Comp_Phase_A
lds @0, ADCSRB ; Set Analog Comparator Multiplexer Enable
sbr @0, (1<<ACME)
sts ADCSRB, @0
ldi @0, Mux_A ; Set comparator multiplexer to phase A
sts ADMUX, @0
.ENDMACRO
.MACRO Set_Comp_Phase_C
lds @0, ADCSRB ; Set Analog Comparator Multiplexer Enable
sbr @0, (1<<ACME)
sts ADCSRB, @0
ldi @0, Mux_C ; Set comparator multiplexer to phase C
sts ADMUX, @0
.ENDMACRO
.MACRO Set_Comp_Phase_B
lds @0, ADCSRB ; Set Analog Comparator Multiplexer Disable
cbr @0, (1<<ACME)
sts ADCSRB, @0
.ENDMACRO
.MACRO Read_Comp_Out
in @0, ACSR ; Read comparator output
.ENDMACRO
;*********************
; PORT B definitions *
;*********************
;.equ = 7
;.equ = 6
;.equ = 5 (sck stk200 interface)
.equ DebugPin = 4 ;(miso stk200 interface)
;.equ = 3 (mosi stk200 interface)
.equ AnFET = 2
.equ CnFET = 1
.equ Rcp_Icp_In = 0
.equ INIT_PB = 0
.equ DIR_PB = (1<<DebugPin)+(1<<AnFET)+(1<<CnFET)
.MACRO AnFET_on
sbi PORTB,2
.ENDMACRO
.MACRO AnFET_off
cbi PORTB,2
.ENDMACRO
.MACRO CnFET_on
sbi PORTB,1
.ENDMACRO
.MACRO CnFET_off
cbi PORTB,1
.ENDMACRO
.MACRO BnFET_on
sbi PORTD,5
.ENDMACRO
.MACRO BnFET_off
cbi PORTD,5
.ENDMACRO
.MACRO All_nFETs_Off
in @0, PORTB
cbr @0, (1<<AnFET)+(1<<CnFET)
out PORTB, @0
in @0, PORTD
cbr @0, (1<<BnFET)
out PORTD, @0
.ENDMACRO
;**********************
; MCU specific macros *
;**********************
.MACRO Disable_Watchdog
cli ; Disable interrupts
wdr ; Reset watchdog timer
in @0, MCUSR ; Clear WDRF in MCUSR
andi @0, (0xff & (0<<WDRF))
out MCUSR, @0
lds @0, WDTCSR ; Write logical one to WDCE and WDE
ori @0, (1<<WDCE) | (1<<WDE)
sts WDTCSR, @0
ldi @0, (0<<WDE) ; Turn off WDT
sts WDTCSR, @0
.ENDMACRO
.MACRO Enable_Watchdog
ldi @0, (1<<WDE) ; Turn on WDT
sts WDTCSR, @0
.ENDMACRO
.MACRO Initialize_MCU
ldi @0, (1<<CLKPCE) ; Set clock prescaler change enable
sts CLKPR, @0
ldi @0, (1<<CLKPS0) ; Change clock prescaler (to divide by 2)
sts CLKPR, @0
.ENDMACRO
.MACRO Interrupt_Table_Definition
rjmp reset
rjmp ext_int0 ; ext_int0
nop ; ext_int1
nop ; pci0_int
nop ; pci1_int
nop ; pci2_int
nop ; wdt_int
nop ; t2oca_int
nop ; t2ocb_int
rjmp t2ovfl_int; t2ovfl_int
rjmp icp1_int ; icp1_int
rjmp t1oca_int ; t1oca_int
nop ; t1ocb_int
rjmp t1ovfl_int; t1ovfl_int
nop ; t0oca_int
nop ; t0ocb_int
rjmp t0ovfl_int; t0ovfl_int
nop ; spi_int
nop ; urxc
nop ; udre
nop ; utxc
; nop ; adc_int
; nop ; eep_int
; nop ; aci_int
; nop ; wire2_int
; nop ; spmc_int
.ENDMACRO
.MACRO Initialize_Interrupts
ldi Temp1, (1<<TOIE0)
out TIFR0, Temp1 ; Clear interrupts
sts TIMSK0, Temp1 ; Enable interrupts
ldi Temp1, (1<<TOIE1)+(1<<OCIE1A)
out TIFR1, Temp1 ; Clear interrupts
sts TIMSK1, Temp1 ; Enable interrupts
ldi Temp1, (1<<TOIE2)
out TIFR2, Temp1 ; Clear interrupts
sts TIMSK2, Temp1 ; Enable interrupts
.ENDMACRO
.MACRO Initialize_Adc
lds Temp1, ADCSRA ; Set ADCSRA register (1MHz clock)
sbr Temp1, (1<<ADPS1)
sbr Temp1, (1<<ADPS0)
sts ADCSRA, Temp1
.ENDMACRO
.MACRO Start_Adc
ldi Temp1, (1<<REFS1)+(1<<REFS0)+(1<<MUX2)+(1<<MUX1)+(1<<MUX0)
sts ADMUX, Temp1 ; Set ADMUX register (1.1V reference, left adj result, input 7)
lds @0, ADCSRA
sbr @0, (1<<ADEN) ; Enable ADC
sbr @0, (1<<ADSC) ; Start ADC conversion
sts ADCSRA, @0
.ENDMACRO
.MACRO Get_Adc_Status
lds @0, ADCSRA
.ENDMACRO
.MACRO Read_Adc_Result
lds @0, ADCL
lds @1, ADCH
.ENDMACRO
.MACRO Stop_Adc
lds @0, ADCSRA
cbr @0, (1<<ADEN) ; Disable ADC
sts ADCSRA, @0
.ENDMACRO
.MACRO Set_Timer0_CS0
out TCCR0B, @0
.ENDMACRO
.MACRO Set_Timer1_CS1
sts TCCR1B, @0
.ENDMACRO
.MACRO Set_Timer2_CS2
sts TCCR2B, @0
.ENDMACRO
.MACRO Read_TCNT1L
lds @0, TCNT1L
.ENDMACRO
.MACRO Read_TCNT1H
lds @0, TCNT1H
.ENDMACRO
.MACRO Read_ICR1L
lds @0, ICR1L
.ENDMACRO
.MACRO Read_ICR1H
lds @0, ICR1H
.ENDMACRO
.MACRO Set_OCR1AL
sts OCR1AL, @0
.ENDMACRO
.MACRO Set_OCR1AH
sts OCR1AH, @0
.ENDMACRO
.MACRO Set_TCNT2
sts TCNT2, @0
.ENDMACRO
.MACRO Check_Eeprom_Ready
sbic EECR, EEPE
.ENDMACRO
.MACRO Set_Eeprom_Address
out EEARL, @0
out EEARH, @1
.ENDMACRO
.MACRO Start_Eeprom_Write
sbi EECR, EEMPE
sbi EECR, EEPE
.ENDMACRO

958
Atmel/m48def.inc

@ -0,0 +1,958 @@
;***** THIS IS A MACHINE GENERATED FILE - DO NOT EDIT ********************
;***** Created: 2009-11-03 14:40 ******* Source: ATmega48.xml ************
;*************************************************************************
;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y
;*
;* Number : AVR000
;* File Name : "m48def.inc"
;* Title : Register/Bit Definitions for the ATmega48
;* Date : 2009-11-03
;* Version : 2.35
;* Support E-mail : avr@atmel.com
;* Target MCU : ATmega48
;*
;* DESCRIPTION
;* When including this file in the assembly program file, all I/O register
;* names and I/O register bit names appearing in the data book can be used.
;* In addition, the six registers forming the three data pointers X, Y and
;* Z have been assigned names XL - ZH. Highest RAM address for Internal
;* SRAM is also defined
;*
;* The Register names are represented by their hexadecimal address.
;*
;* The Register Bit names are represented by their bit number (0-7).
;*
;* Please observe the difference in using the bit names with instructions
;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc"
;* (skip if bit in register set/cleared). The following example illustrates
;* this:
;*
;* in r16,PORTB ;read PORTB latch
;* sbr r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)
;* out PORTB,r16 ;output to PORTB
;*
;* in r16,TIFR ;read the Timer Interrupt Flag Register
;* sbrc r16,TOV0 ;test the overflow flag (use bit#)
;* rjmp TOV0_is_set ;jump if set
;* ... ;otherwise do something else
;*************************************************************************
#ifndef _M48DEF_INC_
#define _M48DEF_INC_
#pragma partinc 0
; ***** SPECIFY DEVICE ***************************************************
.device ATmega48
#pragma AVRPART ADMIN PART_NAME ATmega48
.equ SIGNATURE_000 = 0x1e
.equ SIGNATURE_001 = 0x92
.equ SIGNATURE_002 = 0x05
#pragma AVRPART CORE CORE_VERSION V2E
; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
.equ UDR0 = 0xc6 ; MEMORY MAPPED
.equ UBRR0L = 0xc4 ; MEMORY MAPPED
.equ UBRR0H = 0xc5 ; MEMORY MAPPED
.equ UCSR0C = 0xc2 ; MEMORY MAPPED
.equ UCSR0B = 0xc1 ; MEMORY MAPPED
.equ UCSR0A = 0xc0 ; MEMORY MAPPED
.equ TWAMR = 0xbd ; MEMORY MAPPED
.equ TWCR = 0xbc ; MEMORY MAPPED
.equ TWDR = 0xbb ; MEMORY MAPPED
.equ TWAR = 0xba ; MEMORY MAPPED
.equ TWSR = 0xb9 ; MEMORY MAPPED
.equ TWBR = 0xb8 ; MEMORY MAPPED
.equ ASSR = 0xb6 ; MEMORY MAPPED
.equ OCR2B = 0xb4 ; MEMORY MAPPED
.equ OCR2A = 0xb3 ; MEMORY MAPPED
.equ TCNT2 = 0xb2 ; MEMORY MAPPED
.equ TCCR2B = 0xb1 ; MEMORY MAPPED
.equ TCCR2A = 0xb0 ; MEMORY MAPPED
.equ OCR1BL = 0x8a ; MEMORY MAPPED
.equ OCR1BH = 0x8b ; MEMORY MAPPED
.equ OCR1AL = 0x88 ; MEMORY MAPPED
.equ OCR1AH = 0x89 ; MEMORY MAPPED
.equ ICR1L = 0x86 ; MEMORY MAPPED
.equ ICR1H = 0x87 ; MEMORY MAPPED
.equ TCNT1L = 0x84 ; MEMORY MAPPED
.equ TCNT1H = 0x85 ; MEMORY MAPPED
.equ TCCR1C = 0x82 ; MEMORY MAPPED
.equ TCCR1B = 0x81 ; MEMORY MAPPED
.equ TCCR1A = 0x80 ; MEMORY MAPPED
.equ DIDR1 = 0x7f ; MEMORY MAPPED
.equ DIDR0 = 0x7e ; MEMORY MAPPED
.equ ADMUX = 0x7c ; MEMORY MAPPED
.equ ADCSRB = 0x7b ; MEMORY MAPPED
.equ ADCSRA = 0x7a ; MEMORY MAPPED
.equ ADCH = 0x79 ; MEMORY MAPPED
.equ ADCL = 0x78 ; MEMORY MAPPED
.equ TIMSK2 = 0x70 ; MEMORY MAPPED
.equ TIMSK1 = 0x6f ; MEMORY MAPPED
.equ TIMSK0 = 0x6e ; MEMORY MAPPED
.equ PCMSK1 = 0x6c ; MEMORY MAPPED
.equ PCMSK2 = 0x6d ; MEMORY MAPPED
.equ PCMSK0 = 0x6b ; MEMORY MAPPED
.equ EICRA = 0x69 ; MEMORY MAPPED
.equ PCICR = 0x68 ; MEMORY MAPPED
.equ OSCCAL = 0x66 ; MEMORY MAPPED
.equ PRR = 0x64 ; MEMORY MAPPED
.equ CLKPR = 0x61 ; MEMORY MAPPED
.equ WDTCSR = 0x60 ; MEMORY MAPPED
.equ SREG = 0x3f
.equ SPL = 0x3d
.equ SPH = 0x3e
.equ SPMCSR = 0x37
.equ MCUCR = 0x35
.equ MCUSR = 0x34
.equ SMCR = 0x33
.equ ACSR = 0x30
.equ SPDR = 0x2e
.equ SPSR = 0x2d
.equ SPCR = 0x2c
.equ GPIOR2 = 0x2b
.equ GPIOR1 = 0x2a
.equ OCR0B = 0x28
.equ OCR0A = 0x27
.equ TCNT0 = 0x26
.equ TCCR0B = 0x25
.equ TCCR0A = 0x24
.equ GTCCR = 0x23
.equ EEARL = 0x21
.equ EEDR = 0x20
.equ EECR = 0x1f
.equ GPIOR0 = 0x1e
.equ EIMSK = 0x1d
.equ EIFR = 0x1c
.equ PCIFR = 0x1b
.equ TIFR2 = 0x17
.equ TIFR1 = 0x16
.equ TIFR0 = 0x15
.equ PORTD = 0x0b
.equ DDRD = 0x0a
.equ PIND = 0x09
.equ PORTC = 0x08
.equ DDRC = 0x07
.equ PINC = 0x06
.equ PORTB = 0x05
.equ DDRB = 0x04
.equ PINB = 0x03
; ***** BIT DEFINITIONS **************************************************
; ***** USART0 ***********************
; UDR0 - USART I/O Data Register
.equ UDR0_0 = 0 ; USART I/O Data Register bit 0
.equ UDR0_1 = 1 ; USART I/O Data Register bit 1
.equ UDR0_2 = 2 ; USART I/O Data Register bit 2
.equ UDR0_3 = 3 ; USART I/O Data Register bit 3
.equ UDR0_4 = 4 ; USART I/O Data Register bit 4
.equ UDR0_5 = 5 ; USART I/O Data Register bit 5
.equ UDR0_6 = 6 ; USART I/O Data Register bit 6
.equ UDR0_7 = 7 ; USART I/O Data Register bit 7
; UCSR0A - USART Control and Status Register A
.equ MPCM0 = 0 ; Multi-processor Communication Mode
.equ U2X0 = 1 ; Double the USART transmission speed
.equ UPE0 = 2 ; Parity Error
.equ DOR0 = 3 ; Data overRun
.equ FE0 = 4 ; Framing Error
.equ UDRE0 = 5 ; USART Data Register Empty
.equ TXC0 = 6 ; USART Transmitt Complete
.equ RXC0 = 7 ; USART Receive Complete
; UCSR0B - USART Control and Status Register B
.equ TXB80 = 0 ; Transmit Data Bit 8
.equ RXB80 = 1 ; Receive Data Bit 8
.equ UCSZ02 = 2 ; Character Size
.equ TXEN0 = 3 ; Transmitter Enable
.equ RXEN0 = 4 ; Receiver Enable
.equ UDRIE0 = 5 ; USART Data register Empty Interrupt Enable
.equ TXCIE0 = 6 ; TX Complete Interrupt Enable
.equ RXCIE0 = 7 ; RX Complete Interrupt Enable
; UCSR0C - USART Control and Status Register C
.equ UCPOL0 = 0 ; Clock Polarity
.equ UCSZ00 = 1 ; Character Size
.equ UCPHA0 = UCSZ00 ; For compatibility
.equ UCSZ01 = 2 ; Character Size
.equ UDORD0 = UCSZ01 ; For compatibility
.equ USBS0 = 3 ; Stop Bit Select
.equ UPM00 = 4 ; Parity Mode Bit 0
.equ UPM01 = 5 ; Parity Mode Bit 1
.equ UMSEL00 = 6 ; USART Mode Select
.equ UMSEL0 = UMSEL00 ; For compatibility
.equ UMSEL01 = 7 ; USART Mode Select
.equ UMSEL1 = UMSEL01 ; For compatibility
; UBRR0H - USART Baud Rate Register High Byte
.equ UBRR8 = 0 ; USART Baud Rate Register bit 8
.equ UBRR9 = 1 ; USART Baud Rate Register bit 9
.equ UBRR10 = 2 ; USART Baud Rate Register bit 10
.equ UBRR11 = 3 ; USART Baud Rate Register bit 11
; UBRR0L - USART Baud Rate Register Low Byte
.equ _UBRR0 = 0 ; USART Baud Rate Register bit 0
.equ _UBRR1 = 1 ; USART Baud Rate Register bit 1
.equ UBRR2 = 2 ; USART Baud Rate Register bit 2
.equ UBRR3 = 3 ; USART Baud Rate Register bit 3
.equ UBRR4 = 4 ; USART Baud Rate Register bit 4
.equ UBRR5 = 5 ; USART Baud Rate Register bit 5
.equ UBRR6 = 6 ; USART Baud Rate Register bit 6
.equ UBRR7 = 7 ; USART Baud Rate Register bit 7
; ***** TWI **************************
; TWAMR - TWI (Slave) Address Mask Register
.equ TWAM0 = 1 ;
.equ TWAMR0 = TWAM0 ; For compatibility
.equ TWAM1 = 2 ;
.equ TWAMR1 = TWAM1 ; For compatibility
.equ TWAM2 = 3 ;
.equ TWAMR2 = TWAM2 ; For compatibility
.equ TWAM3 = 4 ;
.equ TWAMR3 = TWAM3 ; For compatibility
.equ TWAM4 = 5 ;
.equ TWAMR4 = TWAM4 ; For compatibility
.equ TWAM5 = 6 ;
.equ TWAMR5 = TWAM5 ; For compatibility
.equ TWAM6 = 7 ;
.equ TWAMR6 = TWAM6 ; For compatibility
; TWBR - TWI Bit Rate register
.equ TWBR0 = 0 ;
.equ TWBR1 = 1 ;
.equ TWBR2 = 2 ;
.equ TWBR3 = 3 ;
.equ TWBR4 = 4 ;
.equ TWBR5 = 5 ;
.equ TWBR6 = 6 ;
.equ TWBR7 = 7 ;
; TWCR - TWI Control Register
.equ TWIE = 0 ; TWI Interrupt Enable
.equ TWEN = 2 ; TWI Enable Bit
.equ TWWC = 3 ; TWI Write Collition Flag
.equ TWSTO = 4 ; TWI Stop Condition Bit
.equ TWSTA = 5 ; TWI Start Condition Bit
.equ TWEA = 6 ; TWI Enable Acknowledge Bit
.equ TWINT = 7 ; TWI Interrupt Flag
; TWSR - TWI Status Register
.equ TWPS0 = 0 ; TWI Prescaler
.equ TWPS1 = 1 ; TWI Prescaler
.equ TWS3 = 3 ; TWI Status
.equ TWS4 = 4 ; TWI Status
.equ TWS5 = 5 ; TWI Status
.equ TWS6 = 6 ; TWI Status
.equ TWS7 = 7 ; TWI Status
; TWDR - TWI Data register
.equ TWD0 = 0 ; TWI Data Register Bit 0
.equ TWD1 = 1 ; TWI Data Register Bit 1
.equ TWD2 = 2 ; TWI Data Register Bit 2
.equ TWD3 = 3 ; TWI Data Register Bit 3
.equ TWD4 = 4 ; TWI Data Register Bit 4
.equ TWD5 = 5 ; TWI Data Register Bit 5
.equ TWD6 = 6 ; TWI Data Register Bit 6
.equ TWD7 = 7 ; TWI Data Register Bit 7
; TWAR - TWI (Slave) Address register
.equ TWGCE = 0 ; TWI General Call Recognition Enable Bit
.equ TWA0 = 1 ; TWI (Slave) Address register Bit 0
.equ TWA1 = 2 ; TWI (Slave) Address register Bit 1
.equ TWA2 = 3 ; TWI (Slave) Address register Bit 2
.equ TWA3 = 4 ; TWI (Slave) Address register Bit 3
.equ TWA4 = 5 ; TWI (Slave) Address register Bit 4
.equ TWA5 = 6 ; TWI (Slave) Address register Bit 5
.equ TWA6 = 7 ; TWI (Slave) Address register Bit 6
; ***** TIMER_COUNTER_1 **************
; TIMSK1 - Timer/Counter Interrupt Mask Register
.equ TOIE1 = 0 ; Timer/Counter1 Overflow Interrupt Enable
.equ OCIE1A = 1 ; Timer/Counter1 Output CompareA Match Interrupt Enable
.equ OCIE1B = 2 ; Timer/Counter1 Output CompareB Match Interrupt Enable
.equ ICIE1 = 5 ; Timer/Counter1 Input Capture Interrupt Enable
; TIFR1 - Timer/Counter Interrupt Flag register
.equ TOV1 = 0 ; Timer/Counter1 Overflow Flag
.equ OCF1A = 1 ; Output Compare Flag 1A
.equ OCF1B = 2 ; Output Compare Flag 1B
.equ ICF1 = 5 ; Input Capture Flag 1
; TCCR1A - Timer/Counter1 Control Register A
.equ WGM10 = 0 ; Waveform Generation Mode
.equ WGM11 = 1 ; Waveform Generation Mode
.equ COM1B0 = 4 ; Compare Output Mode 1B, bit 0
.equ COM1B1 = 5 ; Compare Output Mode 1B, bit 1
.equ COM1A0 = 6 ; Comparet Ouput Mode 1A, bit 0
.equ COM1A1 = 7 ; Compare Output Mode 1A, bit 1
; TCCR1B - Timer/Counter1 Control Register B
.equ CS10 = 0 ; Prescaler source of Timer/Counter 1
.equ CS11 = 1 ; Prescaler source of Timer/Counter 1
.equ CS12 = 2 ; Prescaler source of Timer/Counter 1
.equ WGM12 = 3 ; Waveform Generation Mode
.equ WGM13 = 4 ; Waveform Generation Mode
.equ ICES1 = 6 ; Input Capture 1 Edge Select
.equ ICNC1 = 7 ; Input Capture 1 Noise Canceler
; TCCR1C - Timer/Counter1 Control Register C
.equ FOC1B = 6 ;
.equ FOC1A = 7 ;
; GTCCR - General Timer/Counter Control Register
.equ PSRSYNC = 0 ; Prescaler Reset Timer/Counter1 and Timer/Counter0
.equ TSM = 7 ; Timer/Counter Synchronization Mode
; ***** TIMER_COUNTER_2 **************
; TIMSK2 - Timer/Counter Interrupt Mask register
.equ TOIE2 = 0 ; Timer/Counter2 Overflow Interrupt Enable
.equ TOIE2A = TOIE2 ; For compatibility
.equ OCIE2A = 1 ; Timer/Counter2 Output Compare Match A Interrupt Enable
.equ OCIE2B = 2 ; Timer/Counter2 Output Compare Match B Interrupt Enable
; TIFR2 - Timer/Counter Interrupt Flag Register
.equ TOV2 = 0 ; Timer/Counter2 Overflow Flag
.equ OCF2A = 1 ; Output Compare Flag 2A
.equ OCF2B = 2 ; Output Compare Flag 2B
; TCCR2A - Timer/Counter2 Control Register A
.equ WGM20 = 0 ; Waveform Genration Mode
.equ WGM21 = 1 ; Waveform Genration Mode
.equ COM2B0 = 4 ; Compare Output Mode bit 0
.equ COM2B1 = 5 ; Compare Output Mode bit 1
.equ COM2A0 = 6 ; Compare Output Mode bit 1
.equ COM2A1 = 7 ; Compare Output Mode bit 1
; TCCR2B - Timer/Counter2 Control Register B
.equ CS20 = 0 ; Clock Select bit 0
.equ CS21 = 1 ; Clock Select bit 1
.equ CS22 = 2 ; Clock Select bit 2
.equ WGM22 = 3 ; Waveform Generation Mode
.equ FOC2B = 6 ; Force Output Compare B
.equ FOC2A = 7 ; Force Output Compare A
; TCNT2 - Timer/Counter2
.equ TCNT2_0 = 0 ; Timer/Counter 2 bit 0
.equ TCNT2_1 = 1 ; Timer/Counter 2 bit 1
.equ TCNT2_2 = 2 ; Timer/Counter 2 bit 2
.equ TCNT2_3 = 3 ; Timer/Counter 2 bit 3
.equ TCNT2_4 = 4 ; Timer/Counter 2 bit 4
.equ TCNT2_5 = 5 ; Timer/Counter 2 bit 5
.equ TCNT2_6 = 6 ; Timer/Counter 2 bit 6
.equ TCNT2_7 = 7 ; Timer/Counter 2 bit 7
; OCR2A - Timer/Counter2 Output Compare Register A
.equ OCR2A_0 = 0 ; Timer/Counter2 Output Compare Register Bit 0
.equ OCR2A_1 = 1 ; Timer/Counter2 Output Compare Register Bit 1
.equ OCR2A_2 = 2 ; Timer/Counter2 Output Compare Register Bit 2
.equ OCR2A_3 = 3 ; Timer/Counter2 Output Compare Register Bit 3
.equ OCR2A_4 = 4 ; Timer/Counter2 Output Compare Register Bit 4
.equ OCR2A_5 = 5 ; Timer/Counter2 Output Compare Register Bit 5
.equ OCR2A_6 = 6 ; Timer/Counter2 Output Compare Register Bit 6
.equ OCR2A_7 = 7 ; Timer/Counter2 Output Compare Register Bit 7
; OCR2B - Timer/Counter2 Output Compare Register B
.equ OCR2B_0 = 0 ; Timer/Counter2 Output Compare Register Bit 0
.equ OCR2B_1 = 1 ; Timer/Counter2 Output Compare Register Bit 1
.equ OCR2B_2 = 2 ; Timer/Counter2 Output Compare Register Bit 2
.equ OCR2B_3 = 3 ; Timer/Counter2 Output Compare Register Bit 3
.equ OCR2B_4 = 4 ; Timer/Counter2 Output Compare Register Bit 4
.equ OCR2B_5 = 5 ; Timer/Counter2 Output Compare Register Bit 5
.equ OCR2B_6 = 6 ; Timer/Counter2 Output Compare Register Bit 6
.equ OCR2B_7 = 7 ; Timer/Counter2 Output Compare Register Bit 7
; ASSR - Asynchronous Status Register
.equ TCR2BUB = 0 ; Timer/Counter Control Register2 Update Busy
.equ TCR2AUB = 1 ; Timer/Counter Control Register2 Update Busy
.equ OCR2BUB = 2 ; Output Compare Register 2 Update Busy
.equ OCR2AUB = 3 ; Output Compare Register2 Update Busy
.equ TCN2UB = 4 ; Timer/Counter2 Update Busy
.equ AS2 = 5 ; Asynchronous Timer/Counter2
.equ EXCLK = 6 ; Enable External Clock Input
; GTCCR - General Timer Counter Control register
.equ PSRASY = 1 ; Prescaler Reset Timer/Counter2
.equ PSR2 = PSRASY ; For compatibility
;.equ TSM = 7 ; Timer/Counter Synchronization Mode
; ***** AD_CONVERTER *****************
; ADMUX - The ADC multiplexer Selection Register
.equ MUX0 = 0 ; Analog Channel and Gain Selection Bits
.equ MUX1 = 1 ; Analog Channel and Gain Selection Bits
.equ MUX2 = 2 ; Analog Channel and Gain Selection Bits
.equ MUX3 = 3 ; Analog Channel and Gain Selection Bits
.equ ADLAR = 5 ; Left Adjust Result
.equ REFS0 = 6 ; Reference Selection Bit 0
.equ REFS1 = 7 ; Reference Selection Bit 1
; ADCSRA - The ADC Control and Status register A
.equ ADPS0 = 0 ; ADC Prescaler Select Bits
.equ ADPS1 = 1 ; ADC Prescaler Select Bits
.equ ADPS2 = 2 ; ADC Prescaler Select Bits
.equ ADIE = 3 ; ADC Interrupt Enable
.equ ADIF = 4 ; ADC Interrupt Flag
.equ ADATE = 5 ; ADC Auto Trigger Enable
.equ ADSC = 6 ; ADC Start Conversion
.equ ADEN = 7 ; ADC Enable
; ADCSRB - The ADC Control and Status register B
.equ ADTS0 = 0 ; ADC Auto Trigger Source bit 0
.equ ADTS1 = 1 ; ADC Auto Trigger Source bit 1
.equ ADTS2 = 2 ; ADC Auto Trigger Source bit 2
.equ ACME = 6 ;
; ADCH - ADC Data Register High Byte
.equ ADCH0 = 0 ; ADC Data Register High Byte Bit 0
.equ ADCH1 = 1 ; ADC Data Register High Byte Bit 1
.equ ADCH2 = 2 ; ADC Data Register High Byte Bit 2
.equ ADCH3 = 3 ; ADC Data Register High Byte Bit 3
.equ ADCH4 = 4 ; ADC Data Register High Byte Bit 4
.equ ADCH5 = 5 ; ADC Data Register High Byte Bit 5
.equ ADCH6 = 6 ; ADC Data Register High Byte Bit 6
.equ ADCH7 = 7 ; ADC Data Register High Byte Bit 7
; ADCL - ADC Data Register Low Byte
.equ ADCL0 = 0 ; ADC Data Register Low Byte Bit 0
.equ ADCL1 = 1 ; ADC Data Register Low Byte Bit 1
.equ ADCL2 = 2 ; ADC Data Register Low Byte Bit 2
.equ ADCL3 = 3 ; ADC Data Register Low Byte Bit 3
.equ ADCL4 = 4 ; ADC Data Register Low Byte Bit 4
.equ ADCL5 = 5 ; ADC Data Register Low Byte Bit 5
.equ ADCL6 = 6 ; ADC Data Register Low Byte Bit 6
.equ ADCL7 = 7 ; ADC Data Register Low Byte Bit 7
; DIDR0 - Digital Input Disable Register
.equ ADC0D = 0 ;
.equ ADC1D = 1 ;
.equ ADC2D = 2 ;
.equ ADC3D = 3 ;
.equ ADC4D = 4 ;
.equ ADC5D = 5 ;
; ***** ANALOG_COMPARATOR ************
; ACSR - Analog Comparator Control And Status Register
.equ ACIS0 = 0 ; Analog Comparator Interrupt Mode Select bit 0
.equ ACIS1 = 1 ; Analog Comparator Interrupt Mode Select bit 1
.equ ACIC = 2 ; Analog Comparator Input Capture Enable
.equ ACIE = 3 ; Analog Comparator Interrupt Enable
.equ ACI = 4 ; Analog Comparator Interrupt Flag
.equ ACO = 5 ; Analog Compare Output
.equ ACBG = 6 ; Analog Comparator Bandgap Select
.equ ACD = 7 ; Analog Comparator Disable
; DIDR1 - Digital Input Disable Register 1
.equ AIN0D = 0 ; AIN0 Digital Input Disable
.equ AIN1D = 1 ; AIN1 Digital Input Disable
; ***** PORTB ************************
; PORTB - Port B Data Register
.equ PORTB0 = 0 ; Port B Data Register bit 0
.equ PB0 = 0 ; For compatibility
.equ PORTB1 = 1 ; Port B Data Register bit 1
.equ PB1 = 1 ; For compatibility
.equ PORTB2 = 2 ; Port B Data Register bit 2
.equ PB2 = 2 ; For compatibility
.equ PORTB3 = 3 ; Port B Data Register bit 3
.equ PB3 = 3 ; For compatibility
.equ PORTB4 = 4 ; Port B Data Register bit 4
.equ PB4 = 4 ; For compatibility
.equ PORTB5 = 5 ; Port B Data Register bit 5
.equ PB5 = 5 ; For compatibility
.equ PORTB6 = 6 ; Port B Data Register bit 6
.equ PB6 = 6 ; For compatibility
.equ PORTB7 = 7 ; Port B Data Register bit 7
.equ PB7 = 7 ; For compatibility
; DDRB - Port B Data Direction Register
.equ DDB0 = 0 ; Port B Data Direction Register bit 0
.equ DDB1 = 1 ; Port B Data Direction Register bit 1
.equ DDB2 = 2 ; Port B Data Direction Register bit 2
.equ DDB3 = 3 ; Port B Data Direction Register bit 3
.equ DDB4 = 4 ; Port B Data Direction Register bit 4
.equ DDB5 = 5 ; Port B Data Direction Register bit 5
.equ DDB6 = 6 ; Port B Data Direction Register bit 6
.equ DDB7 = 7 ; Port B Data Direction Register bit 7
; PINB - Port B Input Pins
.equ PINB0 = 0 ; Port B Input Pins bit 0
.equ PINB1 = 1 ; Port B Input Pins bit 1
.equ PINB2 = 2 ; Port B Input Pins bit 2
.equ PINB3 = 3 ; Port B Input Pins bit 3
.equ PINB4 = 4 ; Port B Input Pins bit 4
.equ PINB5 = 5 ; Port B Input Pins bit 5
.equ PINB6 = 6 ; Port B Input Pins bit 6
.equ PINB7 = 7 ; Port B Input Pins bit 7
; ***** PORTC ************************
; PORTC - Port C Data Register
.equ PORTC0 = 0 ; Port C Data Register bit 0
.equ PC0 = 0 ; For compatibility
.equ PORTC1 = 1 ; Port C Data Register bit 1
.equ PC1 = 1 ; For compatibility
.equ PORTC2 = 2 ; Port C Data Register bit 2
.equ PC2 = 2 ; For compatibility
.equ PORTC3 = 3 ; Port C Data Register bit 3
.equ PC3 = 3 ; For compatibility
.equ PORTC4 = 4 ; Port C Data Register bit 4
.equ PC4 = 4 ; For compatibility
.equ PORTC5 = 5 ; Port C Data Register bit 5
.equ PC5 = 5 ; For compatibility
.equ PORTC6 = 6 ; Port C Data Register bit 6
.equ PC6 = 6 ; For compatibility
; DDRC - Port C Data Direction Register
.equ DDC0 = 0 ; Port C Data Direction Register bit 0
.equ DDC1 = 1 ; Port C Data Direction Register bit 1
.equ DDC2 = 2 ; Port C Data Direction Register bit 2
.equ DDC3 = 3 ; Port C Data Direction Register bit 3
.equ DDC4 = 4 ; Port C Data Direction Register bit 4
.equ DDC5 = 5 ; Port C Data Direction Register bit 5
.equ DDC6 = 6 ; Port C Data Direction Register bit 6
; PINC - Port C Input Pins
.equ PINC0 = 0 ; Port C Input Pins bit 0
.equ PINC1 = 1 ; Port C Input Pins bit 1
.equ PINC2 = 2 ; Port C Input Pins bit 2
.equ PINC3 = 3 ; Port C Input Pins bit 3
.equ PINC4 = 4 ; Port C Input Pins bit 4
.equ PINC5 = 5 ; Port C Input Pins bit 5
.equ PINC6 = 6 ; Port C Input Pins bit 6
; ***** PORTD ************************
; PORTD - Port D Data Register
.equ PORTD0 = 0 ; Port D Data Register bit 0
.equ PD0 = 0 ; For compatibility
.equ PORTD1 = 1 ; Port D Data Register bit 1
.equ PD1 = 1 ; For compatibility
.equ PORTD2 = 2 ; Port D Data Register bit 2
.equ PD2 = 2 ; For compatibility
.equ PORTD3 = 3 ; Port D Data Register bit 3
.equ PD3 = 3 ; For compatibility
.equ PORTD4 = 4 ; Port D Data Register bit 4
.equ PD4 = 4 ; For compatibility
.equ PORTD5 = 5 ; Port D Data Register bit 5
.equ PD5 = 5 ; For compatibility
.equ PORTD6 = 6 ; Port D Data Register bit 6
.equ PD6 = 6 ; For compatibility
.equ PORTD7 = 7 ; Port D Data Register bit 7
.equ PD7 = 7 ; For compatibility
; DDRD - Port D Data Direction Register
.equ DDD0 = 0 ; Port D Data Direction Register bit 0
.equ DDD1 = 1 ; Port D Data Direction Register bit 1
.equ DDD2 = 2 ; Port D Data Direction Register bit 2
.equ DDD3 = 3 ; Port D Data Direction Register bit 3
.equ DDD4 = 4 ; Port D Data Direction Register bit 4
.equ DDD5 = 5 ; Port D Data Direction Register bit 5
.equ DDD6 = 6 ; Port D Data Direction Register bit 6
.equ DDD7 = 7 ; Port D Data Direction Register bit 7
; PIND - Port D Input Pins
.equ PIND0 = 0 ; Port D Input Pins bit 0
.equ PIND1 = 1 ; Port D Input Pins bit 1
.equ PIND2 = 2 ; Port D Input Pins bit 2
.equ PIND3 = 3 ; Port D Input Pins bit 3
.equ PIND4 = 4 ; Port D Input Pins bit 4
.equ PIND5 = 5 ; Port D Input Pins bit 5
.equ PIND6 = 6 ; Port D Input Pins bit 6
.equ PIND7 = 7 ; Port D Input Pins bit 7
; ***** TIMER_COUNTER_0 **************
; TIMSK0 - Timer/Counter0 Interrupt Mask Register
.equ TOIE0 = 0 ; Timer/Counter0 Overflow Interrupt Enable
.equ OCIE0A = 1 ; Timer/Counter0 Output Compare Match A Interrupt Enable
.equ OCIE0B = 2 ; Timer/Counter0 Output Compare Match B Interrupt Enable
; TIFR0 - Timer/Counter0 Interrupt Flag register
.equ TOV0 = 0 ; Timer/Counter0 Overflow Flag
.equ OCF0A = 1 ; Timer/Counter0 Output Compare Flag 0A
.equ OCF0B = 2 ; Timer/Counter0 Output Compare Flag 0B
; TCCR0A - Timer/Counter Control Register A
.equ WGM00 = 0 ; Waveform Generation Mode
.equ WGM01 = 1 ; Waveform Generation Mode
.equ COM0B0 = 4 ; Compare Output Mode, Fast PWm
.equ COM0B1 = 5 ; Compare Output Mode, Fast PWm
.equ COM0A0 = 6 ; Compare Output Mode, Phase Correct PWM Mode
.equ COM0A1 = 7 ; Compare Output Mode, Phase Correct PWM Mode
; TCCR0B - Timer/Counter Control Register B
.equ CS00 = 0 ; Clock Select
.equ CS01 = 1 ; Clock Select
.equ CS02 = 2 ; Clock Select
.equ WGM02 = 3 ;
.equ FOC0B = 6 ; Force Output Compare B
.equ FOC0A = 7 ; Force Output Compare A
; TCNT0 - Timer/Counter0
.equ TCNT0_0 = 0 ;
.equ TCNT0_1 = 1 ;
.equ TCNT0_2 = 2 ;
.equ TCNT0_3 = 3 ;
.equ TCNT0_4 = 4 ;
.equ TCNT0_5 = 5 ;
.equ TCNT0_6 = 6 ;
.equ TCNT0_7 = 7 ;
; OCR0A - Timer/Counter0 Output Compare Register
.equ OCR0A_0 = 0 ;
.equ OCR0A_1 = 1 ;
.equ OCR0A_2 = 2 ;
.equ OCR0A_3 = 3 ;
.equ OCR0A_4 = 4 ;
.equ OCR0A_5 = 5 ;
.equ OCR0A_6 = 6 ;
.equ OCR0A_7 = 7 ;
; OCR0B - Timer/Counter0 Output Compare Register
.equ OCR0B_0 = 0 ;
.equ OCR0B_1 = 1 ;
.equ OCR0B_2 = 2 ;
.equ OCR0B_3 = 3 ;
.equ OCR0B_4 = 4 ;
.equ OCR0B_5 = 5 ;
.equ OCR0B_6 = 6 ;
.equ OCR0B_7 = 7 ;
; GTCCR - General Timer/Counter Control Register
;.equ PSRSYNC = 0 ; Prescaler Reset Timer/Counter1 and Timer/Counter0
.equ PSR10 = PSRSYNC ; For compatibility
;.equ TSM = 7 ; Timer/Counter Synchronization Mode
; ***** EXTERNAL_INTERRUPT ***********
; EICRA - External Interrupt Control Register
.equ ISC00 = 0 ; External Interrupt Sense Control 0 Bit 0
.equ ISC01 = 1 ; External Interrupt Sense Control 0 Bit 1
.equ ISC10 = 2 ; External Interrupt Sense Control 1 Bit 0
.equ ISC11 = 3 ; External Interrupt Sense Control 1 Bit 1
; EIMSK - External Interrupt Mask Register
.equ INT0 = 0 ; External Interrupt Request 0 Enable
.equ INT1 = 1 ; External Interrupt Request 1 Enable
; EIFR - External Interrupt Flag Register
.equ INTF0 = 0 ; External Interrupt Flag 0
.equ INTF1 = 1 ; External Interrupt Flag 1
; PCICR - Pin Change Interrupt Control Register
.equ PCIE0 = 0 ; Pin Change Interrupt Enable 0
.equ PCIE1 = 1 ; Pin Change Interrupt Enable 1
.equ PCIE2 = 2 ; Pin Change Interrupt Enable 2
; PCMSK2 - Pin Change Mask Register 2
.equ PCINT16 = 0 ; Pin Change Enable Mask 16
.equ PCINT17 = 1 ; Pin Change Enable Mask 17
.equ PCINT18 = 2 ; Pin Change Enable Mask 18
.equ PCINT19 = 3 ; Pin Change Enable Mask 19
.equ PCINT20 = 4 ; Pin Change Enable Mask 20
.equ PCINT21 = 5 ; Pin Change Enable Mask 21
.equ PCINT22 = 6 ; Pin Change Enable Mask 22
.equ PCINT23 = 7 ; Pin Change Enable Mask 23
; PCMSK1 - Pin Change Mask Register 1
.equ PCINT8 = 0 ; Pin Change Enable Mask 8
.equ PCINT9 = 1 ; Pin Change Enable Mask 9
.equ PCINT10 = 2 ; Pin Change Enable Mask 10
.equ PCINT11 = 3 ; Pin Change Enable Mask 11
.equ PCINT12 = 4 ; Pin Change Enable Mask 12
.equ PCINT13 = 5 ; Pin Change Enable Mask 13
.equ PCINT14 = 6 ; Pin Change Enable Mask 14
; PCMSK0 - Pin Change Mask Register 0
.equ PCINT0 = 0 ; Pin Change Enable Mask 0
.equ PCINT1 = 1 ; Pin Change Enable Mask 1
.equ PCINT2 = 2 ; Pin Change Enable Mask 2
.equ PCINT3 = 3 ; Pin Change Enable Mask 3
.equ PCINT4 = 4 ; Pin Change Enable Mask 4
.equ PCINT5 = 5 ; Pin Change Enable Mask 5
.equ PCINT6 = 6 ; Pin Change Enable Mask 6
.equ PCINT7 = 7 ; Pin Change Enable Mask 7
; PCIFR - Pin Change Interrupt Flag Register
.equ PCIF0 = 0 ; Pin Change Interrupt Flag 0
.equ PCIF1 = 1 ; Pin Change Interrupt Flag 1
.equ PCIF2 = 2 ; Pin Change Interrupt Flag 2
; ***** SPI **************************
; SPDR - SPI Data Register
.equ SPDR0 = 0 ; SPI Data Register bit 0
.equ SPDR1 = 1 ; SPI Data Register bit 1
.equ SPDR2 = 2 ; SPI Data Register bit 2
.equ SPDR3 = 3 ; SPI Data Register bit 3
.equ SPDR4 = 4 ; SPI Data Register bit 4
.equ SPDR5 = 5 ; SPI Data Register bit 5
.equ SPDR6 = 6 ; SPI Data Register bit 6
.equ SPDR7 = 7 ; SPI Data Register bit 7
; SPSR - SPI Status Register
.equ SPI2X = 0 ; Double SPI Speed Bit
.equ WCOL = 6 ; Write Collision Flag
.equ SPIF = 7 ; SPI Interrupt Flag
; SPCR - SPI Control Register
.equ SPR0 = 0 ; SPI Clock Rate Select 0
.equ SPR1 = 1 ; SPI Clock Rate Select 1
.equ CPHA = 2 ; Clock Phase
.equ CPOL = 3 ; Clock polarity
.equ MSTR = 4 ; Master/Slave Select
.equ DORD = 5 ; Data Order
.equ SPE = 6 ; SPI Enable
.equ SPIE = 7 ; SPI Interrupt Enable
; ***** CPU **************************
; SREG - Status Register
.equ SREG_C = 0 ; Carry Flag
.equ SREG_Z = 1 ; Zero Flag
.equ SREG_N = 2 ; Negative Flag
.equ SREG_V = 3 ; Two's Complement Overflow Flag
.equ SREG_S = 4 ; Sign Bit
.equ SREG_H = 5 ; Half Carry Flag
.equ SREG_T = 6 ; Bit Copy Storage
.equ SREG_I = 7 ; Global Interrupt Enable
; OSCCAL - Oscillator Calibration Value
.equ CAL0 = 0 ; Oscillator Calibration Value Bit0
.equ CAL1 = 1 ; Oscillator Calibration Value Bit1
.equ CAL2 = 2 ; Oscillator Calibration Value Bit2
.equ CAL3 = 3 ; Oscillator Calibration Value Bit3
.equ CAL4 = 4 ; Oscillator Calibration Value Bit4
.equ CAL5 = 5 ; Oscillator Calibration Value Bit5
.equ CAL6 = 6 ; Oscillator Calibration Value Bit6
.equ CAL7 = 7 ; Oscillator Calibration Value Bit7
; CLKPR - Clock Prescale Register
.equ CLKPS0 = 0 ; Clock Prescaler Select Bit 0
.equ CLKPS1 = 1 ; Clock Prescaler Select Bit 1
.equ CLKPS2 = 2 ; Clock Prescaler Select Bit 2
.equ CLKPS3 = 3 ; Clock Prescaler Select Bit 3
.equ CLKPCE = 7 ; Clock Prescaler Change Enable
; SPMCSR - Store Program Memory Control Register
.equ SELFPRGEN = 0 ; Self Programming Enable
.equ PGERS = 1 ; Page Erase
.equ PGWRT = 2 ; Page Write
.equ BLBSET = 3 ; Boot Lock Bit Set
.equ RWWSRE = 4 ; Read-While-Write section read enable
.equ RWWSB = 6 ; Read-While-Write Section Busy
.equ SPMIE = 7 ; SPM Interrupt Enable
; MCUCR - MCU Control Register
.equ PUD = 4 ;
; MCUSR - MCU Status Register
.equ PORF = 0 ; Power-on reset flag
.equ EXTRF = 1 ; External Reset Flag
.equ EXTREF = EXTRF ; For compatibility
.equ BORF = 2 ; Brown-out Reset Flag
.equ WDRF = 3 ; Watchdog Reset Flag
; SMCR -
.equ SE = 0 ;
.equ SM0 = 1 ;
.equ SM1 = 2 ;
.equ SM2 = 3 ;
; GPIOR2 - General Purpose I/O Register 2
.equ GPIOR20 = 0 ;
.equ GPIOR21 = 1 ;
.equ GPIOR22 = 2 ;
.equ GPIOR23 = 3 ;
.equ GPIOR24 = 4 ;
.equ GPIOR25 = 5 ;
.equ GPIOR26 = 6 ;
.equ GPIOR27 = 7 ;
; GPIOR1 - General Purpose I/O Register 1
.equ GPIOR10 = 0 ;
.equ GPIOR11 = 1 ;
.equ GPIOR12 = 2 ;
.equ GPIOR13 = 3 ;
.equ GPIOR14 = 4 ;
.equ GPIOR15 = 5 ;
.equ GPIOR16 = 6 ;
.equ GPIOR17 = 7 ;
; GPIOR0 - General Purpose I/O Register 0
.equ GPIOR00 = 0 ;
.equ GPIOR01 = 1 ;
.equ GPIOR02 = 2 ;
.equ GPIOR03 = 3 ;
.equ GPIOR04 = 4 ;
.equ GPIOR05 = 5 ;
.equ GPIOR06 = 6 ;
.equ GPIOR07 = 7 ;
; PRR - Power Reduction Register
.equ PRADC = 0 ; Power Reduction ADC
.equ PRUSART0 = 1 ; Power Reduction USART
.equ PRSPI = 2 ; Power Reduction Serial Peripheral Interface
.equ PRTIM1 = 3 ; Power Reduction Timer/Counter1
.equ PRTIM0 = 5 ; Power Reduction Timer/Counter0
.equ PRTIM2 = 6 ; Power Reduction Timer/Counter2
.equ PRTWI = 7 ; Power Reduction TWI
; ***** WATCHDOG *********************
; WDTCSR - Watchdog Timer Control Register
.equ WDP0 = 0 ; Watch Dog Timer Prescaler bit 0
.equ WDP1 = 1 ; Watch Dog Timer Prescaler bit 1
.equ WDP2 = 2 ; Watch Dog Timer Prescaler bit 2
.equ WDE = 3 ; Watch Dog Enable
.equ WDCE = 4 ; Watchdog Change Enable
.equ WDP3 = 5 ; Watchdog Timer Prescaler Bit 3
.equ WDIE = 6 ; Watchdog Timeout Interrupt Enable
.equ WDIF = 7 ; Watchdog Timeout Interrupt Flag
; ***** EEPROM ***********************
; EEARL - EEPROM Address Register Low Byte
.equ EEAR0 = 0 ; EEPROM Read/Write Access Bit 0
.equ EEAR1 = 1 ; EEPROM Read/Write Access Bit 1
.equ EEAR2 = 2 ; EEPROM Read/Write Access Bit 2
.equ EEAR3 = 3 ; EEPROM Read/Write Access Bit 3
.equ EEAR4 = 4 ; EEPROM Read/Write Access Bit 4
.equ EEAR5 = 5 ; EEPROM Read/Write Access Bit 5
.equ EEAR6 = 6 ; EEPROM Read/Write Access Bit 6
.equ EEAR7 = 7 ; EEPROM Read/Write Access Bit 7
; EEDR - EEPROM Data Register
.equ EEDR0 = 0 ; EEPROM Data Register bit 0
.equ EEDR1 = 1 ; EEPROM Data Register bit 1
.equ EEDR2 = 2 ; EEPROM Data Register bit 2
.equ EEDR3 = 3 ; EEPROM Data Register bit 3
.equ EEDR4 = 4 ; EEPROM Data Register bit 4
.equ EEDR5 = 5 ; EEPROM Data Register bit 5
.equ EEDR6 = 6 ; EEPROM Data Register bit 6
.equ EEDR7 = 7 ; EEPROM Data Register bit 7
; EECR - EEPROM Control Register
.equ EERE = 0 ; EEPROM Read Enable
.equ EEPE = 1 ; EEPROM Write Enable
.equ EEWE = EEPE ; For compatibility
.equ EEMPE = 2 ; EEPROM Master Write Enable
.equ EEMWE = EEMPE ; For compatibility
.equ EERIE = 3 ; EEPROM Ready Interrupt Enable
.equ EEPM0 = 4 ; EEPROM Programming Mode Bit 0
.equ EEPM1 = 5 ; EEPROM Programming Mode Bit 1
; ***** LOCKSBITS ********************************************************
.equ LB1 = 0 ; Lockbit
.equ LB2 = 1 ; Lockbit
; ***** FUSES ************************************************************
; LOW fuse bits
.equ CKSEL0 = 0 ; Select Clock Source
.equ CKSEL1 = 1 ; Select Clock Source
.equ CKSEL2 = 2 ; Select Clock Source
.equ CKSEL3 = 3 ; Select Clock Source
.equ SUT0 = 4 ; Select start-up time
.equ SUT1 = 5 ; Select start-up time
.equ CKOUT = 6 ; Clock output
.equ CKDIV8 = 7 ; Divide clock by 8
; HIGH fuse bits
.equ BODLEVEL0 = 0 ; Brown-out Detector trigger level
.equ BODLEVEL1 = 1 ; Brown-out Detector trigger level
.equ BODLEVEL2 = 2 ; Brown-out Detector trigger level
.equ EESAVE = 3 ; EEPROM memory is preserved through chip erase
.equ WDTON = 4 ; Watchdog Timer Always On
.equ SPIEN = 5 ; Enable Serial programming and Data Downloading
.equ DWEN = 6 ; debugWIRE Enable
.equ RSTDISBL = 7 ; External reset disable
; EXTENDED fuse bits
;.equ SELFPRGEN = 0 ; Self Programming Enable
; ***** CPU REGISTER DEFINITIONS *****************************************
.def XH = r27
.def XL = r26
.def YH = r29
.def YL = r28
.def ZH = r31
.def ZL = r30
; ***** DATA MEMORY DECLARATIONS *****************************************
.equ FLASHEND = 0x07ff ; Note: Word address
.equ IOEND = 0x00ff
.equ SRAM_START = 0x0100
.equ SRAM_SIZE = 512
.equ RAMEND = 0x02ff
.equ XRAMEND = 0x0000
.equ E2END = 0x00ff
.equ EEPROMEND = 0x00ff
.equ EEADRBITS = 8
#pragma AVRPART MEMORY PROG_FLASH 4096
#pragma AVRPART MEMORY EEPROM 256
#pragma AVRPART MEMORY INT_SRAM SIZE 512
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x100
; ***** BOOTLOADER DECLARATIONS ******************************************
.equ NRWW_START_ADDR = 0x0
.equ NRWW_STOP_ADDR = 0x7ff
.equ RWW_START_ADDR = 0x0
.equ RWW_STOP_ADDR = 0x0
.equ PAGESIZE = 32
; ***** INTERRUPT VECTORS ************************************************
.equ INT0addr = 0x0001 ; External Interrupt Request 0
.equ INT1addr = 0x0002 ; External Interrupt Request 1
.equ PCI0addr = 0x0003 ; Pin Change Interrupt Request 0
.equ PCI1addr = 0x0004 ; Pin Change Interrupt Request 0
.equ PCI2addr = 0x0005 ; Pin Change Interrupt Request 1
.equ WDTaddr = 0x0006 ; Watchdog Time-out Interrupt
.equ OC2Aaddr = 0x0007 ; Timer/Counter2 Compare Match A
.equ OC2Baddr = 0x0008 ; Timer/Counter2 Compare Match A
.equ OVF2addr = 0x0009 ; Timer/Counter2 Overflow
.equ ICP1addr = 0x000a ; Timer/Counter1 Capture Event
.equ OC1Aaddr = 0x000b ; Timer/Counter1 Compare Match A
.equ OC1Baddr = 0x000c ; Timer/Counter1 Compare Match B
.equ OVF1addr = 0x000d ; Timer/Counter1 Overflow
.equ OC0Aaddr = 0x000e ; TimerCounter0 Compare Match A
.equ OC0Baddr = 0x000f ; TimerCounter0 Compare Match B
.equ OVF0addr = 0x0010 ; Timer/Couner0 Overflow
.equ SPIaddr = 0x0011 ; SPI Serial Transfer Complete
.equ URXCaddr = 0x0012 ; USART Rx Complete
.equ UDREaddr = 0x0013 ; USART, Data Register Empty
.equ UTXCaddr = 0x0014 ; USART Tx Complete
.equ ADCCaddr = 0x0015 ; ADC Conversion Complete
.equ ERDYaddr = 0x0016 ; EEPROM Ready
.equ ACIaddr = 0x0017 ; Analog Comparator
.equ TWIaddr = 0x0018 ; Two-wire Serial Interface
.equ SPMRaddr = 0x0019 ; Store Program Memory Read
.equ INT_VECTORS_SIZE = 26 ; size in words
#endif /* _M48DEF_INC_ */
; ***** END OF FILE ******************************************************

976
Atmel/m88Pdef.inc

@ -0,0 +1,976 @@
;***** THIS IS A MACHINE GENERATED FILE - DO NOT EDIT ********************
;***** Created: 2009-11-03 14:40 ******* Source: ATmega88P.xml ***********
;*************************************************************************
;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y
;*
;* Number : AVR000
;* File Name : "m88Pdef.inc"
;* Title : Register/Bit Definitions for the ATmega88P
;* Date : 2009-11-03
;* Version : 2.35
;* Support E-mail : avr@atmel.com
;* Target MCU : ATmega88P
;*
;* DESCRIPTION
;* When including this file in the assembly program file, all I/O register
;* names and I/O register bit names appearing in the data book can be used.
;* In addition, the six registers forming the three data pointers X, Y and
;* Z have been assigned names XL - ZH. Highest RAM address for Internal
;* SRAM is also defined
;*
;* The Register names are represented by their hexadecimal address.
;*
;* The Register Bit names are represented by their bit number (0-7).
;*
;* Please observe the difference in using the bit names with instructions
;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc"
;* (skip if bit in register set/cleared). The following example illustrates
;* this:
;*
;* in r16,PORTB ;read PORTB latch
;* sbr r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)
;* out PORTB,r16 ;output to PORTB
;*
;* in r16,TIFR ;read the Timer Interrupt Flag Register
;* sbrc r16,TOV0 ;test the overflow flag (use bit#)
;* rjmp TOV0_is_set ;jump if set
;* ... ;otherwise do something else
;*************************************************************************
#ifndef _M88PDEF_INC_
#define _M88PDEF_INC_
#pragma partinc 0
; ***** SPECIFY DEVICE ***************************************************
.device ATmega88P
#pragma AVRPART ADMIN PART_NAME ATmega88P
.equ SIGNATURE_000 = 0x1e
.equ SIGNATURE_001 = 0x93
.equ SIGNATURE_002 = 0x0f
#pragma AVRPART CORE CORE_VERSION V2E
; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
.equ UDR0 = 0xc6 ; MEMORY MAPPED
.equ UBRR0L = 0xc4 ; MEMORY MAPPED
.equ UBRR0H = 0xc5 ; MEMORY MAPPED
.equ UCSR0C = 0xc2 ; MEMORY MAPPED
.equ UCSR0B = 0xc1 ; MEMORY MAPPED
.equ UCSR0A = 0xc0 ; MEMORY MAPPED
.equ TWAMR = 0xbd ; MEMORY MAPPED
.equ TWCR = 0xbc ; MEMORY MAPPED
.equ TWDR = 0xbb ; MEMORY MAPPED
.equ TWAR = 0xba ; MEMORY MAPPED
.equ TWSR = 0xb9 ; MEMORY MAPPED
.equ TWBR = 0xb8 ; MEMORY MAPPED
.equ ASSR = 0xb6 ; MEMORY MAPPED
.equ OCR2B = 0xb4 ; MEMORY MAPPED
.equ OCR2A = 0xb3 ; MEMORY MAPPED
.equ TCNT2 = 0xb2 ; MEMORY MAPPED
.equ TCCR2B = 0xb1 ; MEMORY MAPPED
.equ TCCR2A = 0xb0 ; MEMORY MAPPED
.equ OCR1BL = 0x8a ; MEMORY MAPPED
.equ OCR1BH = 0x8b ; MEMORY MAPPED
.equ OCR1AL = 0x88 ; MEMORY MAPPED
.equ OCR1AH = 0x89 ; MEMORY MAPPED
.equ ICR1L = 0x86 ; MEMORY MAPPED
.equ ICR1H = 0x87 ; MEMORY MAPPED
.equ TCNT1L = 0x84 ; MEMORY MAPPED
.equ TCNT1H = 0x85 ; MEMORY MAPPED
.equ TCCR1C = 0x82 ; MEMORY MAPPED
.equ TCCR1B = 0x81 ; MEMORY MAPPED
.equ TCCR1A = 0x80 ; MEMORY MAPPED
.equ DIDR1 = 0x7f ; MEMORY MAPPED
.equ DIDR0 = 0x7e ; MEMORY MAPPED
.equ ADMUX = 0x7c ; MEMORY MAPPED
.equ ADCSRB = 0x7b ; MEMORY MAPPED
.equ ADCSRA = 0x7a ; MEMORY MAPPED
.equ ADCH = 0x79 ; MEMORY MAPPED
.equ ADCL = 0x78 ; MEMORY MAPPED
.equ TIMSK2 = 0x70 ; MEMORY MAPPED
.equ TIMSK1 = 0x6f ; MEMORY MAPPED
.equ TIMSK0 = 0x6e ; MEMORY MAPPED
.equ PCMSK1 = 0x6c ; MEMORY MAPPED
.equ PCMSK2 = 0x6d ; MEMORY MAPPED
.equ PCMSK0 = 0x6b ; MEMORY MAPPED
.equ EICRA = 0x69 ; MEMORY MAPPED
.equ PCICR = 0x68 ; MEMORY MAPPED
.equ OSCCAL = 0x66 ; MEMORY MAPPED
.equ PRR = 0x64 ; MEMORY MAPPED
.equ CLKPR = 0x61 ; MEMORY MAPPED
.equ WDTCSR = 0x60 ; MEMORY MAPPED
.equ SREG = 0x3f
.equ SPL = 0x3d
.equ SPH = 0x3e
.equ SPMCSR = 0x37
.equ MCUCR = 0x35
.equ MCUSR = 0x34
.equ SMCR = 0x33
.equ ACSR = 0x30
.equ SPDR = 0x2e
.equ SPSR = 0x2d
.equ SPCR = 0x2c
.equ GPIOR2 = 0x2b
.equ GPIOR1 = 0x2a
.equ OCR0B = 0x28
.equ OCR0A = 0x27
.equ TCNT0 = 0x26
.equ TCCR0B = 0x25
.equ TCCR0A = 0x24
.equ GTCCR = 0x23
.equ EEARH = 0x22
.equ EEARL = 0x21
.equ EEDR = 0x20
.equ EECR = 0x1f
.equ GPIOR0 = 0x1e
.equ EIMSK = 0x1d
.equ EIFR = 0x1c
.equ PCIFR = 0x1b
.equ TIFR2 = 0x17
.equ TIFR1 = 0x16
.equ TIFR0 = 0x15
.equ PORTD = 0x0b
.equ DDRD = 0x0a
.equ PIND = 0x09
.equ PORTC = 0x08
.equ DDRC = 0x07
.equ PINC = 0x06
.equ PORTB = 0x05
.equ DDRB = 0x04
.equ PINB = 0x03
; ***** BIT DEFINITIONS **************************************************
; ***** USART0 ***********************
; UDR0 - USART I/O Data Register
.equ UDR0_0 = 0 ; USART I/O Data Register bit 0
.equ UDR0_1 = 1 ; USART I/O Data Register bit 1
.equ UDR0_2 = 2 ; USART I/O Data Register bit 2
.equ UDR0_3 = 3 ; USART I/O Data Register bit 3
.equ UDR0_4 = 4 ; USART I/O Data Register bit 4
.equ UDR0_5 = 5 ; USART I/O Data Register bit 5
.equ UDR0_6 = 6 ; USART I/O Data Register bit 6
.equ UDR0_7 = 7 ; USART I/O Data Register bit 7
; UCSR0A - USART Control and Status Register A
.equ MPCM0 = 0 ; Multi-processor Communication Mode
.equ U2X0 = 1 ; Double the USART transmission speed
.equ UPE0 = 2 ; Parity Error
.equ DOR0 = 3 ; Data overRun
.equ FE0 = 4 ; Framing Error
.equ UDRE0 = 5 ; USART Data Register Empty
.equ TXC0 = 6 ; USART Transmitt Complete
.equ RXC0 = 7 ; USART Receive Complete
; UCSR0B - USART Control and Status Register B
.equ TXB80 = 0 ; Transmit Data Bit 8
.equ RXB80 = 1 ; Receive Data Bit 8
.equ UCSZ02 = 2 ; Character Size
.equ TXEN0 = 3 ; Transmitter Enable
.equ RXEN0 = 4 ; Receiver Enable
.equ UDRIE0 = 5 ; USART Data register Empty Interrupt Enable
.equ TXCIE0 = 6 ; TX Complete Interrupt Enable
.equ RXCIE0 = 7 ; RX Complete Interrupt Enable
; UCSR0C - USART Control and Status Register C
.equ UCPOL0 = 0 ; Clock Polarity
.equ UCSZ00 = 1 ; Character Size
.equ UCPHA0 = UCSZ00 ; For compatibility
.equ UCSZ01 = 2 ; Character Size
.equ UDORD0 = UCSZ01 ; For compatibility
.equ USBS0 = 3 ; Stop Bit Select
.equ UPM00 = 4 ; Parity Mode Bit 0
.equ UPM01 = 5 ; Parity Mode Bit 1
.equ UMSEL00 = 6 ; USART Mode Select
.equ UMSEL0 = UMSEL00 ; For compatibility
.equ UMSEL01 = 7 ; USART Mode Select
.equ UMSEL1 = UMSEL01 ; For compatibility
; UBRR0H - USART Baud Rate Register High Byte
.equ UBRR8 = 0 ; USART Baud Rate Register bit 8
.equ UBRR9 = 1 ; USART Baud Rate Register bit 9
.equ UBRR10 = 2 ; USART Baud Rate Register bit 10
.equ UBRR11 = 3 ; USART Baud Rate Register bit 11
; UBRR0L - USART Baud Rate Register Low Byte
.equ _UBRR0 = 0 ; USART Baud Rate Register bit 0
.equ _UBRR1 = 1 ; USART Baud Rate Register bit 1
.equ UBRR2 = 2 ; USART Baud Rate Register bit 2
.equ UBRR3 = 3 ; USART Baud Rate Register bit 3
.equ UBRR4 = 4 ; USART Baud Rate Register bit 4
.equ UBRR5 = 5 ; USART Baud Rate Register bit 5
.equ UBRR6 = 6 ; USART Baud Rate Register bit 6
.equ UBRR7 = 7 ; USART Baud Rate Register bit 7
; ***** TWI **************************
; TWAMR - TWI (Slave) Address Mask Register
.equ TWAM0 = 1 ;
.equ TWAMR0 = TWAM0 ; For compatibility
.equ TWAM1 = 2 ;
.equ TWAMR1 = TWAM1 ; For compatibility
.equ TWAM2 = 3 ;
.equ TWAMR2 = TWAM2 ; For compatibility
.equ TWAM3 = 4 ;
.equ TWAMR3 = TWAM3 ; For compatibility
.equ TWAM4 = 5 ;
.equ TWAMR4 = TWAM4 ; For compatibility
.equ TWAM5 = 6 ;
.equ TWAMR5 = TWAM5 ; For compatibility
.equ TWAM6 = 7 ;
.equ TWAMR6 = TWAM6 ; For compatibility
; TWBR - TWI Bit Rate register
.equ TWBR0 = 0 ;
.equ TWBR1 = 1 ;
.equ TWBR2 = 2 ;
.equ TWBR3 = 3 ;
.equ TWBR4 = 4 ;
.equ TWBR5 = 5 ;
.equ TWBR6 = 6 ;
.equ TWBR7 = 7 ;
; TWCR - TWI Control Register
.equ TWIE = 0 ; TWI Interrupt Enable
.equ TWEN = 2 ; TWI Enable Bit
.equ TWWC = 3 ; TWI Write Collition Flag
.equ TWSTO = 4 ; TWI Stop Condition Bit
.equ TWSTA = 5 ; TWI Start Condition Bit
.equ TWEA = 6 ; TWI Enable Acknowledge Bit
.equ TWINT = 7 ; TWI Interrupt Flag
; TWSR - TWI Status Register
.equ TWPS0 = 0 ; TWI Prescaler
.equ TWPS1 = 1 ; TWI Prescaler
.equ TWS3 = 3 ; TWI Status
.equ TWS4 = 4 ; TWI Status
.equ TWS5 = 5 ; TWI Status
.equ TWS6 = 6 ; TWI Status
.equ TWS7 = 7 ; TWI Status
; TWDR - TWI Data register
.equ TWD0 = 0 ; TWI Data Register Bit 0
.equ TWD1 = 1 ; TWI Data Register Bit 1
.equ TWD2 = 2 ; TWI Data Register Bit 2
.equ TWD3 = 3 ; TWI Data Register Bit 3
.equ TWD4 = 4 ; TWI Data Register Bit 4
.equ TWD5 = 5 ; TWI Data Register Bit 5
.equ TWD6 = 6 ; TWI Data Register Bit 6
.equ TWD7 = 7 ; TWI Data Register Bit 7
; TWAR - TWI (Slave) Address register
.equ TWGCE = 0 ; TWI General Call Recognition Enable Bit
.equ TWA0 = 1 ; TWI (Slave) Address register Bit 0
.equ TWA1 = 2 ; TWI (Slave) Address register Bit 1
.equ TWA2 = 3 ; TWI (Slave) Address register Bit 2
.equ TWA3 = 4 ; TWI (Slave) Address register Bit 3
.equ TWA4 = 5 ; TWI (Slave) Address register Bit 4
.equ TWA5 = 6 ; TWI (Slave) Address register Bit 5
.equ TWA6 = 7 ; TWI (Slave) Address register Bit 6
; ***** TIMER_COUNTER_1 **************
; TIMSK1 - Timer/Counter Interrupt Mask Register
.equ TOIE1 = 0 ; Timer/Counter1 Overflow Interrupt Enable
.equ OCIE1A = 1 ; Timer/Counter1 Output CompareA Match Interrupt Enable
.equ OCIE1B = 2 ; Timer/Counter1 Output CompareB Match Interrupt Enable
.equ ICIE1 = 5 ; Timer/Counter1 Input Capture Interrupt Enable
; TIFR1 - Timer/Counter Interrupt Flag register
.equ TOV1 = 0 ; Timer/Counter1 Overflow Flag
.equ OCF1A = 1 ; Output Compare Flag 1A
.equ OCF1B = 2 ; Output Compare Flag 1B
.equ ICF1 = 5 ; Input Capture Flag 1
; TCCR1A - Timer/Counter1 Control Register A
.equ WGM10 = 0 ; Waveform Generation Mode
.equ WGM11 = 1 ; Waveform Generation Mode
.equ COM1B0 = 4 ; Compare Output Mode 1B, bit 0
.equ COM1B1 = 5 ; Compare Output Mode 1B, bit 1
.equ COM1A0 = 6 ; Comparet Ouput Mode 1A, bit 0
.equ COM1A1 = 7 ; Compare Output Mode 1A, bit 1
; TCCR1B - Timer/Counter1 Control Register B
.equ CS10 = 0 ; Prescaler source of Timer/Counter 1
.equ CS11 = 1 ; Prescaler source of Timer/Counter 1
.equ CS12 = 2 ; Prescaler source of Timer/Counter 1
.equ WGM12 = 3 ; Waveform Generation Mode
.equ WGM13 = 4 ; Waveform Generation Mode
.equ ICES1 = 6 ; Input Capture 1 Edge Select
.equ ICNC1 = 7 ; Input Capture 1 Noise Canceler
; TCCR1C - Timer/Counter1 Control Register C
.equ FOC1B = 6 ;
.equ FOC1A = 7 ;
; GTCCR - General Timer/Counter Control Register
.equ PSRSYNC = 0 ; Prescaler Reset Timer/Counter1 and Timer/Counter0
.equ TSM = 7 ; Timer/Counter Synchronization Mode
; ***** TIMER_COUNTER_2 **************
; TIMSK2 - Timer/Counter Interrupt Mask register
.equ TOIE2 = 0 ; Timer/Counter2 Overflow Interrupt Enable
.equ TOIE2A = TOIE2 ; For compatibility
.equ OCIE2A = 1 ; Timer/Counter2 Output Compare Match A Interrupt Enable
.equ OCIE2B = 2 ; Timer/Counter2 Output Compare Match B Interrupt Enable
; TIFR2 - Timer/Counter Interrupt Flag Register
.equ TOV2 = 0 ; Timer/Counter2 Overflow Flag
.equ OCF2A = 1 ; Output Compare Flag 2A
.equ OCF2B = 2 ; Output Compare Flag 2B
; TCCR2A - Timer/Counter2 Control Register A
.equ WGM20 = 0 ; Waveform Genration Mode
.equ WGM21 = 1 ; Waveform Genration Mode
.equ COM2B0 = 4 ; Compare Output Mode bit 0
.equ COM2B1 = 5 ; Compare Output Mode bit 1
.equ COM2A0 = 6 ; Compare Output Mode bit 1
.equ COM2A1 = 7 ; Compare Output Mode bit 1
; TCCR2B - Timer/Counter2 Control Register B
.equ CS20 = 0 ; Clock Select bit 0
.equ CS21 = 1 ; Clock Select bit 1
.equ CS22 = 2 ; Clock Select bit 2
.equ WGM22 = 3 ; Waveform Generation Mode
.equ FOC2B = 6 ; Force Output Compare B
.equ FOC2A = 7 ; Force Output Compare A
; TCNT2 - Timer/Counter2
.equ TCNT2_0 = 0 ; Timer/Counter 2 bit 0
.equ TCNT2_1 = 1 ; Timer/Counter 2 bit 1
.equ TCNT2_2 = 2 ; Timer/Counter 2 bit 2
.equ TCNT2_3 = 3 ; Timer/Counter 2 bit 3
.equ TCNT2_4 = 4 ; Timer/Counter 2 bit 4
.equ TCNT2_5 = 5 ; Timer/Counter 2 bit 5
.equ TCNT2_6 = 6 ; Timer/Counter 2 bit 6
.equ TCNT2_7 = 7 ; Timer/Counter 2 bit 7
; OCR2A - Timer/Counter2 Output Compare Register A
.equ OCR2A_0 = 0 ; Timer/Counter2 Output Compare Register Bit 0
.equ OCR2A_1 = 1 ; Timer/Counter2 Output Compare Register Bit 1
.equ OCR2A_2 = 2 ; Timer/Counter2 Output Compare Register Bit 2
.equ OCR2A_3 = 3 ; Timer/Counter2 Output Compare Register Bit 3
.equ OCR2A_4 = 4 ; Timer/Counter2 Output Compare Register Bit 4
.equ OCR2A_5 = 5 ; Timer/Counter2 Output Compare Register Bit 5
.equ OCR2A_6 = 6 ; Timer/Counter2 Output Compare Register Bit 6
.equ OCR2A_7 = 7 ; Timer/Counter2 Output Compare Register Bit 7
; OCR2B - Timer/Counter2 Output Compare Register B
.equ OCR2B_0 = 0 ; Timer/Counter2 Output Compare Register Bit 0
.equ OCR2B_1 = 1 ; Timer/Counter2 Output Compare Register Bit 1
.equ OCR2B_2 = 2 ; Timer/Counter2 Output Compare Register Bit 2
.equ OCR2B_3 = 3 ; Timer/Counter2 Output Compare Register Bit 3
.equ OCR2B_4 = 4 ; Timer/Counter2 Output Compare Register Bit 4
.equ OCR2B_5 = 5 ; Timer/Counter2 Output Compare Register Bit 5
.equ OCR2B_6 = 6 ; Timer/Counter2 Output Compare Register Bit 6
.equ OCR2B_7 = 7 ; Timer/Counter2 Output Compare Register Bit 7
; ASSR - Asynchronous Status Register
.equ TCR2BUB = 0 ; Timer/Counter Control Register2 Update Busy
.equ TCR2AUB = 1 ; Timer/Counter Control Register2 Update Busy
.equ OCR2BUB = 2 ; Output Compare Register 2 Update Busy
.equ OCR2AUB = 3 ; Output Compare Register2 Update Busy
.equ TCN2UB = 4 ; Timer/Counter2 Update Busy
.equ AS2 = 5 ; Asynchronous Timer/Counter2
.equ EXCLK = 6 ; Enable External Clock Input
; GTCCR - General Timer Counter Control register
.equ PSRASY = 1 ; Prescaler Reset Timer/Counter2
.equ PSR2 = PSRASY ; For compatibility
;.equ TSM = 7 ; Timer/Counter Synchronization Mode
; ***** AD_CONVERTER *****************
; ADMUX - The ADC multiplexer Selection Register
.equ MUX0 = 0 ; Analog Channel and Gain Selection Bits
.equ MUX1 = 1 ; Analog Channel and Gain Selection Bits
.equ MUX2 = 2 ; Analog Channel and Gain Selection Bits
.equ MUX3 = 3 ; Analog Channel and Gain Selection Bits
.equ ADLAR = 5 ; Left Adjust Result
.equ REFS0 = 6 ; Reference Selection Bit 0
.equ REFS1 = 7 ; Reference Selection Bit 1
; ADCSRA - The ADC Control and Status register A
.equ ADPS0 = 0 ; ADC Prescaler Select Bits
.equ ADPS1 = 1 ; ADC Prescaler Select Bits
.equ ADPS2 = 2 ; ADC Prescaler Select Bits
.equ ADIE = 3 ; ADC Interrupt Enable
.equ ADIF = 4 ; ADC Interrupt Flag
.equ ADATE = 5 ; ADC Auto Trigger Enable
.equ ADSC = 6 ; ADC Start Conversion
.equ ADEN = 7 ; ADC Enable
; ADCSRB - The ADC Control and Status register B
.equ ADTS0 = 0 ; ADC Auto Trigger Source bit 0
.equ ADTS1 = 1 ; ADC Auto Trigger Source bit 1
.equ ADTS2 = 2 ; ADC Auto Trigger Source bit 2
.equ ACME = 6 ;
; ADCH - ADC Data Register High Byte
.equ ADCH0 = 0 ; ADC Data Register High Byte Bit 0
.equ ADCH1 = 1 ; ADC Data Register High Byte Bit 1
.equ ADCH2 = 2 ; ADC Data Register High Byte Bit 2
.equ ADCH3 = 3 ; ADC Data Register High Byte Bit 3
.equ ADCH4 = 4 ; ADC Data Register High Byte Bit 4
.equ ADCH5 = 5 ; ADC Data Register High Byte Bit 5
.equ ADCH6 = 6 ; ADC Data Register High Byte Bit 6
.equ ADCH7 = 7 ; ADC Data Register High Byte Bit 7
; ADCL - ADC Data Register Low Byte
.equ ADCL0 = 0 ; ADC Data Register Low Byte Bit 0
.equ ADCL1 = 1 ; ADC Data Register Low Byte Bit 1
.equ ADCL2 = 2 ; ADC Data Register Low Byte Bit 2
.equ ADCL3 = 3 ; ADC Data Register Low Byte Bit 3
.equ ADCL4 = 4 ; ADC Data Register Low Byte Bit 4
.equ ADCL5 = 5 ; ADC Data Register Low Byte Bit 5
.equ ADCL6 = 6 ; ADC Data Register Low Byte Bit 6
.equ ADCL7 = 7 ; ADC Data Register Low Byte Bit 7
; DIDR0 - Digital Input Disable Register
.equ ADC0D = 0 ;
.equ ADC1D = 1 ;
.equ ADC2D = 2 ;
.equ ADC3D = 3 ;
.equ ADC4D = 4 ;
.equ ADC5D = 5 ;
; ***** ANALOG_COMPARATOR ************
; ACSR - Analog Comparator Control And Status Register
.equ ACIS0 = 0 ; Analog Comparator Interrupt Mode Select bit 0
.equ ACIS1 = 1 ; Analog Comparator Interrupt Mode Select bit 1
.equ ACIC = 2 ; Analog Comparator Input Capture Enable
.equ ACIE = 3 ; Analog Comparator Interrupt Enable
.equ ACI = 4 ; Analog Comparator Interrupt Flag
.equ ACO = 5 ; Analog Compare Output
.equ ACBG = 6 ; Analog Comparator Bandgap Select
.equ ACD = 7 ; Analog Comparator Disable
; DIDR1 - Digital Input Disable Register 1
.equ AIN0D = 0 ; AIN0 Digital Input Disable
.equ AIN1D = 1 ; AIN1 Digital Input Disable
; ***** PORTB ************************
; PORTB - Port B Data Register
.equ PORTB0 = 0 ; Port B Data Register bit 0
.equ PB0 = 0 ; For compatibility
.equ PORTB1 = 1 ; Port B Data Register bit 1
.equ PB1 = 1 ; For compatibility
.equ PORTB2 = 2 ; Port B Data Register bit 2
.equ PB2 = 2 ; For compatibility
.equ PORTB3 = 3 ; Port B Data Register bit 3
.equ PB3 = 3 ; For compatibility
.equ PORTB4 = 4 ; Port B Data Register bit 4
.equ PB4 = 4 ; For compatibility
.equ PORTB5 = 5 ; Port B Data Register bit 5
.equ PB5 = 5 ; For compatibility
.equ PORTB6 = 6 ; Port B Data Register bit 6
.equ PB6 = 6 ; For compatibility
.equ PORTB7 = 7 ; Port B Data Register bit 7
.equ PB7 = 7 ; For compatibility
; DDRB - Port B Data Direction Register
.equ DDB0 = 0 ; Port B Data Direction Register bit 0
.equ DDB1 = 1 ; Port B Data Direction Register bit 1
.equ DDB2 = 2 ; Port B Data Direction Register bit 2
.equ DDB3 = 3 ; Port B Data Direction Register bit 3
.equ DDB4 = 4 ; Port B Data Direction Register bit 4
.equ DDB5 = 5 ; Port B Data Direction Register bit 5
.equ DDB6 = 6 ; Port B Data Direction Register bit 6
.equ DDB7 = 7 ; Port B Data Direction Register bit 7
; PINB - Port B Input Pins
.equ PINB0 = 0 ; Port B Input Pins bit 0
.equ PINB1 = 1 ; Port B Input Pins bit 1
.equ PINB2 = 2 ; Port B Input Pins bit 2
.equ PINB3 = 3 ; Port B Input Pins bit 3
.equ PINB4 = 4 ; Port B Input Pins bit 4
.equ PINB5 = 5 ; Port B Input Pins bit 5
.equ PINB6 = 6 ; Port B Input Pins bit 6
.equ PINB7 = 7 ; Port B Input Pins bit 7
; ***** PORTC ************************
; PORTC - Port C Data Register
.equ PORTC0 = 0 ; Port C Data Register bit 0
.equ PC0 = 0 ; For compatibility
.equ PORTC1 = 1 ; Port C Data Register bit 1
.equ PC1 = 1 ; For compatibility
.equ PORTC2 = 2 ; Port C Data Register bit 2
.equ PC2 = 2 ; For compatibility
.equ PORTC3 = 3 ; Port C Data Register bit 3
.equ PC3 = 3 ; For compatibility
.equ PORTC4 = 4 ; Port C Data Register bit 4
.equ PC4 = 4 ; For compatibility
.equ PORTC5 = 5 ; Port C Data Register bit 5
.equ PC5 = 5 ; For compatibility
.equ PORTC6 = 6 ; Port C Data Register bit 6
.equ PC6 = 6 ; For compatibility
; DDRC - Port C Data Direction Register
.equ DDC0 = 0 ; Port C Data Direction Register bit 0
.equ DDC1 = 1 ; Port C Data Direction Register bit 1
.equ DDC2 = 2 ; Port C Data Direction Register bit 2
.equ DDC3 = 3 ; Port C Data Direction Register bit 3
.equ DDC4 = 4 ; Port C Data Direction Register bit 4
.equ DDC5 = 5 ; Port C Data Direction Register bit 5
.equ DDC6 = 6 ; Port C Data Direction Register bit 6
; PINC - Port C Input Pins
.equ PINC0 = 0 ; Port C Input Pins bit 0
.equ PINC1 = 1 ; Port C Input Pins bit 1
.equ PINC2 = 2 ; Port C Input Pins bit 2
.equ PINC3 = 3 ; Port C Input Pins bit 3
.equ PINC4 = 4 ; Port C Input Pins bit 4
.equ PINC5 = 5 ; Port C Input Pins bit 5
.equ PINC6 = 6 ; Port C Input Pins bit 6
; ***** PORTD ************************
; PORTD - Port D Data Register
.equ PORTD0 = 0 ; Port D Data Register bit 0
.equ PD0 = 0 ; For compatibility
.equ PORTD1 = 1 ; Port D Data Register bit 1
.equ PD1 = 1 ; For compatibility
.equ PORTD2 = 2 ; Port D Data Register bit 2
.equ PD2 = 2 ; For compatibility
.equ PORTD3 = 3 ; Port D Data Register bit 3
.equ PD3 = 3 ; For compatibility
.equ PORTD4 = 4 ; Port D Data Register bit 4
.equ PD4 = 4 ; For compatibility
.equ PORTD5 = 5 ; Port D Data Register bit 5
.equ PD5 = 5 ; For compatibility
.equ PORTD6 = 6 ; Port D Data Register bit 6
.equ PD6 = 6 ; For compatibility
.equ PORTD7 = 7 ; Port D Data Register bit 7
.equ PD7 = 7 ; For compatibility
; DDRD - Port D Data Direction Register
.equ DDD0 = 0 ; Port D Data Direction Register bit 0
.equ DDD1 = 1 ; Port D Data Direction Register bit 1
.equ DDD2 = 2 ; Port D Data Direction Register bit 2
.equ DDD3 = 3 ; Port D Data Direction Register bit 3
.equ DDD4 = 4 ; Port D Data Direction Register bit 4
.equ DDD5 = 5 ; Port D Data Direction Register bit 5
.equ DDD6 = 6 ; Port D Data Direction Register bit 6
.equ DDD7 = 7 ; Port D Data Direction Register bit 7
; PIND - Port D Input Pins
.equ PIND0 = 0 ; Port D Input Pins bit 0
.equ PIND1 = 1 ; Port D Input Pins bit 1
.equ PIND2 = 2 ; Port D Input Pins bit 2
.equ PIND3 = 3 ; Port D Input Pins bit 3
.equ PIND4 = 4 ; Port D Input Pins bit 4
.equ PIND5 = 5 ; Port D Input Pins bit 5
.equ PIND6 = 6 ; Port D Input Pins bit 6
.equ PIND7 = 7 ; Port D Input Pins bit 7
; ***** TIMER_COUNTER_0 **************
; TIMSK0 - Timer/Counter0 Interrupt Mask Register
.equ TOIE0 = 0 ; Timer/Counter0 Overflow Interrupt Enable
.equ OCIE0A = 1 ; Timer/Counter0 Output Compare Match A Interrupt Enable
.equ OCIE0B = 2 ; Timer/Counter0 Output Compare Match B Interrupt Enable
; TIFR0 - Timer/Counter0 Interrupt Flag register
.equ TOV0 = 0 ; Timer/Counter0 Overflow Flag
.equ OCF0A = 1 ; Timer/Counter0 Output Compare Flag 0A
.equ OCF0B = 2 ; Timer/Counter0 Output Compare Flag 0B
; TCCR0A - Timer/Counter Control Register A
.equ WGM00 = 0 ; Waveform Generation Mode
.equ WGM01 = 1 ; Waveform Generation Mode
.equ COM0B0 = 4 ; Compare Output Mode, Fast PWm
.equ COM0B1 = 5 ; Compare Output Mode, Fast PWm
.equ COM0A0 = 6 ; Compare Output Mode, Phase Correct PWM Mode
.equ COM0A1 = 7 ; Compare Output Mode, Phase Correct PWM Mode
; TCCR0B - Timer/Counter Control Register B
.equ CS00 = 0 ; Clock Select
.equ CS01 = 1 ; Clock Select
.equ CS02 = 2 ; Clock Select
.equ WGM02 = 3 ;
.equ FOC0B = 6 ; Force Output Compare B
.equ FOC0A = 7 ; Force Output Compare A
; TCNT0 - Timer/Counter0
.equ TCNT0_0 = 0 ;
.equ TCNT0_1 = 1 ;
.equ TCNT0_2 = 2 ;
.equ TCNT0_3 = 3 ;
.equ TCNT0_4 = 4 ;
.equ TCNT0_5 = 5 ;
.equ TCNT0_6 = 6 ;
.equ TCNT0_7 = 7 ;
; OCR0A - Timer/Counter0 Output Compare Register
.equ OCR0A_0 = 0 ;
.equ OCR0A_1 = 1 ;
.equ OCR0A_2 = 2 ;
.equ OCR0A_3 = 3 ;
.equ OCR0A_4 = 4 ;
.equ OCR0A_5 = 5 ;
.equ OCR0A_6 = 6 ;
.equ OCR0A_7 = 7 ;
; OCR0B - Timer/Counter0 Output Compare Register
.equ OCR0B_0 = 0 ;
.equ OCR0B_1 = 1 ;
.equ OCR0B_2 = 2 ;
.equ OCR0B_3 = 3 ;
.equ OCR0B_4 = 4 ;
.equ OCR0B_5 = 5 ;
.equ OCR0B_6 = 6 ;
.equ OCR0B_7 = 7 ;
; GTCCR - General Timer/Counter Control Register
;.equ PSRSYNC = 0 ; Prescaler Reset Timer/Counter1 and Timer/Counter0
.equ PSR10 = PSRSYNC ; For compatibility
;.equ TSM = 7 ; Timer/Counter Synchronization Mode
; ***** EXTERNAL_INTERRUPT ***********
; EICRA - External Interrupt Control Register
.equ ISC00 = 0 ; External Interrupt Sense Control 0 Bit 0
.equ ISC01 = 1 ; External Interrupt Sense Control 0 Bit 1
.equ ISC10 = 2 ; External Interrupt Sense Control 1 Bit 0
.equ ISC11 = 3 ; External Interrupt Sense Control 1 Bit 1
; EIMSK - External Interrupt Mask Register
.equ INT0 = 0 ; External Interrupt Request 0 Enable
.equ INT1 = 1 ; External Interrupt Request 1 Enable
; EIFR - External Interrupt Flag Register
.equ INTF0 = 0 ; External Interrupt Flag 0
.equ INTF1 = 1 ; External Interrupt Flag 1
; PCICR - Pin Change Interrupt Control Register
.equ PCIE0 = 0 ; Pin Change Interrupt Enable 0
.equ PCIE1 = 1 ; Pin Change Interrupt Enable 1
.equ PCIE2 = 2 ; Pin Change Interrupt Enable 2
; PCMSK2 - Pin Change Mask Register 2
.equ PCINT16 = 0 ; Pin Change Enable Mask 16
.equ PCINT17 = 1 ; Pin Change Enable Mask 17
.equ PCINT18 = 2 ; Pin Change Enable Mask 18
.equ PCINT19 = 3 ; Pin Change Enable Mask 19
.equ PCINT20 = 4 ; Pin Change Enable Mask 20
.equ PCINT21 = 5 ; Pin Change Enable Mask 21
.equ PCINT22 = 6 ; Pin Change Enable Mask 22
.equ PCINT23 = 7 ; Pin Change Enable Mask 23
; PCMSK1 - Pin Change Mask Register 1
.equ PCINT8 = 0 ; Pin Change Enable Mask 8
.equ PCINT9 = 1 ; Pin Change Enable Mask 9
.equ PCINT10 = 2 ; Pin Change Enable Mask 10
.equ PCINT11 = 3 ; Pin Change Enable Mask 11
.equ PCINT12 = 4 ; Pin Change Enable Mask 12
.equ PCINT13 = 5 ; Pin Change Enable Mask 13
.equ PCINT14 = 6 ; Pin Change Enable Mask 14
; PCMSK0 - Pin Change Mask Register 0
.equ PCINT0 = 0 ; Pin Change Enable Mask 0
.equ PCINT1 = 1 ; Pin Change Enable Mask 1
.equ PCINT2 = 2 ; Pin Change Enable Mask 2
.equ PCINT3 = 3 ; Pin Change Enable Mask 3
.equ PCINT4 = 4 ; Pin Change Enable Mask 4
.equ PCINT5 = 5 ; Pin Change Enable Mask 5
.equ PCINT6 = 6 ; Pin Change Enable Mask 6
.equ PCINT7 = 7 ; Pin Change Enable Mask 7
; PCIFR - Pin Change Interrupt Flag Register
.equ PCIF0 = 0 ; Pin Change Interrupt Flag 0
.equ PCIF1 = 1 ; Pin Change Interrupt Flag 1
.equ PCIF2 = 2 ; Pin Change Interrupt Flag 2
; ***** SPI **************************
; SPDR - SPI Data Register
.equ SPDR0 = 0 ; SPI Data Register bit 0
.equ SPDR1 = 1 ; SPI Data Register bit 1
.equ SPDR2 = 2 ; SPI Data Register bit 2
.equ SPDR3 = 3 ; SPI Data Register bit 3
.equ SPDR4 = 4 ; SPI Data Register bit 4
.equ SPDR5 = 5 ; SPI Data Register bit 5
.equ SPDR6 = 6 ; SPI Data Register bit 6
.equ SPDR7 = 7 ; SPI Data Register bit 7
; SPSR - SPI Status Register
.equ SPI2X = 0 ; Double SPI Speed Bit
.equ WCOL = 6 ; Write Collision Flag
.equ SPIF = 7 ; SPI Interrupt Flag
; SPCR - SPI Control Register
.equ SPR0 = 0 ; SPI Clock Rate Select 0
.equ SPR1 = 1 ; SPI Clock Rate Select 1
.equ CPHA = 2 ; Clock Phase
.equ CPOL = 3 ; Clock polarity
.equ MSTR = 4 ; Master/Slave Select
.equ DORD = 5 ; Data Order
.equ SPE = 6 ; SPI Enable
.equ SPIE = 7 ; SPI Interrupt Enable
; ***** WATCHDOG *********************
; WDTCSR - Watchdog Timer Control Register
.equ WDP0 = 0 ; Watch Dog Timer Prescaler bit 0
.equ WDP1 = 1 ; Watch Dog Timer Prescaler bit 1
.equ WDP2 = 2 ; Watch Dog Timer Prescaler bit 2
.equ WDE = 3 ; Watch Dog Enable
.equ WDCE = 4 ; Watchdog Change Enable
.equ WDP3 = 5 ; Watchdog Timer Prescaler Bit 3
.equ WDIE = 6 ; Watchdog Timeout Interrupt Enable
.equ WDIF = 7 ; Watchdog Timeout Interrupt Flag
; ***** EEPROM ***********************
; EEARL - EEPROM Address Register Low Byte
.equ EEAR0 = 0 ; EEPROM Read/Write Access Bit 0
.equ EEAR1 = 1 ; EEPROM Read/Write Access Bit 1
.equ EEAR2 = 2 ; EEPROM Read/Write Access Bit 2
.equ EEAR3 = 3 ; EEPROM Read/Write Access Bit 3
.equ EEAR4 = 4 ; EEPROM Read/Write Access Bit 4
.equ EEAR5 = 5 ; EEPROM Read/Write Access Bit 5
.equ EEAR6 = 6 ; EEPROM Read/Write Access Bit 6
.equ EEAR7 = 7 ; EEPROM Read/Write Access Bit 7
; EEARH - EEPROM Address Register High Byte
.equ EEAR8 = 0 ; EEPROM Read/Write Access Bit 0
; EEDR - EEPROM Data Register
.equ EEDR0 = 0 ; EEPROM Data Register bit 0
.equ EEDR1 = 1 ; EEPROM Data Register bit 1
.equ EEDR2 = 2 ; EEPROM Data Register bit 2
.equ EEDR3 = 3 ; EEPROM Data Register bit 3
.equ EEDR4 = 4 ; EEPROM Data Register bit 4
.equ EEDR5 = 5 ; EEPROM Data Register bit 5
.equ EEDR6 = 6 ; EEPROM Data Register bit 6
.equ EEDR7 = 7 ; EEPROM Data Register bit 7
; EECR - EEPROM Control Register
.equ EERE = 0 ; EEPROM Read Enable
.equ EEPE = 1 ; EEPROM Write Enable
.equ EEMPE = 2 ; EEPROM Master Write Enable
.equ EERIE = 3 ; EEPROM Ready Interrupt Enable
.equ EEPM0 = 4 ; EEPROM Programming Mode Bit 0
.equ EEPM1 = 5 ; EEPROM Programming Mode Bit 1
; ***** CPU **************************
; SREG - Status Register
.equ SREG_C = 0 ; Carry Flag
.equ SREG_Z = 1 ; Zero Flag
.equ SREG_N = 2 ; Negative Flag
.equ SREG_V = 3 ; Two's Complement Overflow Flag
.equ SREG_S = 4 ; Sign Bit
.equ SREG_H = 5 ; Half Carry Flag
.equ SREG_T = 6 ; Bit Copy Storage
.equ SREG_I = 7 ; Global Interrupt Enable
; OSCCAL - Oscillator Calibration Value
.equ CAL0 = 0 ; Oscillator Calibration Value Bit0
.equ CAL1 = 1 ; Oscillator Calibration Value Bit1
.equ CAL2 = 2 ; Oscillator Calibration Value Bit2
.equ CAL3 = 3 ; Oscillator Calibration Value Bit3
.equ CAL4 = 4 ; Oscillator Calibration Value Bit4
.equ CAL5 = 5 ; Oscillator Calibration Value Bit5
.equ CAL6 = 6 ; Oscillator Calibration Value Bit6
.equ CAL7 = 7 ; Oscillator Calibration Value Bit7
; CLKPR - Clock Prescale Register
.equ CLKPS0 = 0 ; Clock Prescaler Select Bit 0
.equ CLKPS1 = 1 ; Clock Prescaler Select Bit 1
.equ CLKPS2 = 2 ; Clock Prescaler Select Bit 2
.equ CLKPS3 = 3 ; Clock Prescaler Select Bit 3
.equ CLKPCE = 7 ; Clock Prescaler Change Enable
; SPMCSR - Store Program Memory Control and Status Register
.equ SELFPRGEN = 0 ; Self Programming Enable
.equ PGERS = 1 ; Page Erase
.equ PGWRT = 2 ; Page Write
.equ BLBSET = 3 ; Boot Lock Bit Set
.equ RWWSRE = 4 ; Read-While-Write section read enable
.equ RWWSB = 6 ; Read-While-Write Section Busy
.equ SPMIE = 7 ; SPM Interrupt Enable
; MCUCR - MCU Control Register
.equ IVCE = 0 ;
.equ IVSEL = 1 ;
.equ PUD = 4 ;
.equ BODSE = 5 ; BOD Sleep Enable
.equ BODS = 6 ; BOD Sleep
; MCUSR - MCU Status Register
.equ PORF = 0 ; Power-on reset flag
.equ EXTRF = 1 ; External Reset Flag
.equ EXTREF = EXTRF ; For compatibility
.equ BORF = 2 ; Brown-out Reset Flag
.equ WDRF = 3 ; Watchdog Reset Flag
; SMCR - Sleep Mode Control Register
.equ SE = 0 ; Sleep Enable
.equ SM0 = 1 ; Sleep Mode Select Bit 0
.equ SM1 = 2 ; Sleep Mode Select Bit 1
.equ SM2 = 3 ; Sleep Mode Select Bit 2
; GPIOR2 - General Purpose I/O Register 2
.equ GPIOR20 = 0 ;
.equ GPIOR21 = 1 ;
.equ GPIOR22 = 2 ;
.equ GPIOR23 = 3 ;
.equ GPIOR24 = 4 ;
.equ GPIOR25 = 5 ;
.equ GPIOR26 = 6 ;
.equ GPIOR27 = 7 ;
; GPIOR1 - General Purpose I/O Register 1
.equ GPIOR10 = 0 ;
.equ GPIOR11 = 1 ;
.equ GPIOR12 = 2 ;
.equ GPIOR13 = 3 ;
.equ GPIOR14 = 4 ;
.equ GPIOR15 = 5 ;
.equ GPIOR16 = 6 ;
.equ GPIOR17 = 7 ;
; GPIOR0 - General Purpose I/O Register 0
.equ GPIOR00 = 0 ;
.equ GPIOR01 = 1 ;
.equ GPIOR02 = 2 ;
.equ GPIOR03 = 3 ;
.equ GPIOR04 = 4 ;
.equ GPIOR05 = 5 ;
.equ GPIOR06 = 6 ;
.equ GPIOR07 = 7 ;
; PRR - Power Reduction Register
.equ PRADC = 0 ; Power Reduction ADC
.equ PRUSART0 = 1 ; Power Reduction USART
.equ PRSPI = 2 ; Power Reduction Serial Peripheral Interface
.equ PRTIM1 = 3 ; Power Reduction Timer/Counter1
.equ PRTIM0 = 5 ; Power Reduction Timer/Counter0
.equ PRTIM2 = 6 ; Power Reduction Timer/Counter2
.equ PRTWI = 7 ; Power Reduction TWI
; ***** LOCKSBITS ********************************************************
.equ LB1 = 0 ; Lock bit
.equ LB2 = 1 ; Lock bit
.equ BLB01 = 2 ; Boot Lock bit
.equ BLB02 = 3 ; Boot Lock bit
.equ BLB11 = 4 ; Boot lock bit
.equ BLB12 = 5 ; Boot lock bit
; ***** FUSES ************************************************************
; LOW fuse bits
.equ CKSEL0 = 0 ; Select Clock Source
.equ CKSEL1 = 1 ; Select Clock Source
.equ CKSEL2 = 2 ; Select Clock Source
.equ CKSEL3 = 3 ; Select Clock Source
.equ SUT0 = 4 ; Select start-up time
.equ SUT1 = 5 ; Select start-up time
.equ CKOUT = 6 ; Clock output
.equ CKDIV8 = 7 ; Divide clock by 8
; HIGH fuse bits
.equ BODLEVEL0 = 0 ; Brown-out Detector trigger level
.equ BODLEVEL1 = 1 ; Brown-out Detector trigger level
.equ BODLEVEL2 = 2 ; Brown-out Detector trigger level
.equ EESAVE = 3 ; EEPROM memory is preserved through chip erase
.equ WDTON = 4 ; Watchdog Timer Always On
.equ SPIEN = 5 ; Enable Serial programming and Data Downloading
.equ DWEN = 6 ; debugWIRE Enable
.equ RSTDISBL = 7 ; External reset disable
; EXTENDED fuse bits
.equ BOOTRST = 0 ; Select reset vector
.equ BOOTSZ0 = 1 ; Select boot size
.equ BOOTSZ1 = 2 ; Select boot size
; ***** CPU REGISTER DEFINITIONS *****************************************
.def XH = r27
.def XL = r26
.def YH = r29
.def YL = r28
.def ZH = r31
.def ZL = r30
; ***** DATA MEMORY DECLARATIONS *****************************************
.equ FLASHEND = 0x0fff ; Note: Word address
.equ IOEND = 0x00ff
.equ SRAM_START = 0x0100
.equ SRAM_SIZE = 1024
.equ RAMEND = 0x04ff
.equ XRAMEND = 0x0000
.equ E2END = 0x01ff
.equ EEPROMEND = 0x01ff
.equ EEADRBITS = 9
#pragma AVRPART MEMORY PROG_FLASH 8192
#pragma AVRPART MEMORY EEPROM 512
#pragma AVRPART MEMORY INT_SRAM SIZE 1024
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x100
; ***** BOOTLOADER DECLARATIONS ******************************************
.equ NRWW_START_ADDR = 0xc00
.equ NRWW_STOP_ADDR = 0xfff
.equ RWW_START_ADDR = 0x0
.equ RWW_STOP_ADDR = 0xbff
.equ PAGESIZE = 32
.equ FIRSTBOOTSTART = 0xf80
.equ SECONDBOOTSTART = 0xf00
.equ THIRDBOOTSTART = 0xe00
.equ FOURTHBOOTSTART = 0xc00
.equ SMALLBOOTSTART = FIRSTBOOTSTART
.equ LARGEBOOTSTART = FOURTHBOOTSTART
; ***** INTERRUPT VECTORS ************************************************
.equ INT0addr = 0x0001 ; External Interrupt Request 0
.equ INT1addr = 0x0002 ; External Interrupt Request 1
.equ PCI0addr = 0x0003 ; Pin Change Interrupt Request 0
.equ PCI1addr = 0x0004 ; Pin Change Interrupt Request 0
.equ PCI2addr = 0x0005 ; Pin Change Interrupt Request 1
.equ WDTaddr = 0x0006 ; Watchdog Time-out Interrupt
.equ OC2Aaddr = 0x0007 ; Timer/Counter2 Compare Match A
.equ OC2Baddr = 0x0008 ; Timer/Counter2 Compare Match A
.equ OVF2addr = 0x0009 ; Timer/Counter2 Overflow
.equ ICP1addr = 0x000a ; Timer/Counter1 Capture Event
.equ OC1Aaddr = 0x000b ; Timer/Counter1 Compare Match A
.equ OC1Baddr = 0x000c ; Timer/Counter1 Compare Match B
.equ OVF1addr = 0x000d ; Timer/Counter1 Overflow
.equ OC0Aaddr = 0x000e ; TimerCounter0 Compare Match A
.equ OC0Baddr = 0x000f ; TimerCounter0 Compare Match B
.equ OVF0addr = 0x0010 ; Timer/Couner0 Overflow
.equ SPIaddr = 0x0011 ; SPI Serial Transfer Complete
.equ URXCaddr = 0x0012 ; USART Rx Complete
.equ UDREaddr = 0x0013 ; USART, Data Register Empty
.equ UTXCaddr = 0x0014 ; USART Tx Complete
.equ ADCCaddr = 0x0015 ; ADC Conversion Complete
.equ ERDYaddr = 0x0016 ; EEPROM Ready
.equ ACIaddr = 0x0017 ; Analog Comparator
.equ TWIaddr = 0x0018 ; Two-wire Serial Interface
.equ SPMRaddr = 0x0019 ; Store Program Memory Read
.equ INT_VECTORS_SIZE = 26 ; size in words
#endif /* _M88PDEF_INC_ */
; ***** END OF FILE ******************************************************

738
Atmel/m8def.inc

@ -0,0 +1,738 @@
;***** THIS IS A MACHINE GENERATED FILE - DO NOT EDIT ********************
;***** Created: 2005-01-11 10:31 ******* Source: ATmega8.xml *************
;*************************************************************************
;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y
;*
;* Number : AVR000
;* File Name : "m8def.inc"
;* Title : Register/Bit Definitions for the ATmega8
;* Date : 2005-01-11
;* Version : 2.14
;* Support E-mail : avr@atmel.com
;* Target MCU : ATmega8
;*
;* DESCRIPTION
;* When including this file in the assembly program file, all I/O register
;* names and I/O register bit names appearing in the data book can be used.
;* In addition, the six registers forming the three data pointers X, Y and
;* Z have been assigned names XL - ZH. Highest RAM address for Internal
;* SRAM is also defined
;*
;* The Register names are represented by their hexadecimal address.
;*
;* The Register Bit names are represented by their bit number (0-7).
;*
;* Please observe the difference in using the bit names with instructions
;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc"
;* (skip if bit in register set/cleared). The following example illustrates
;* this:
;*
;* in r16,PORTB ;read PORTB latch
;* sbr r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)
;* out PORTB,r16 ;output to PORTB
;*
;* in r16,TIFR ;read the Timer Interrupt Flag Register
;* sbrc r16,TOV0 ;test the overflow flag (use bit#)
;* rjmp TOV0_is_set ;jump if set
;* ... ;otherwise do something else
;*************************************************************************
;.ifndef _M8DEF_INC_
;.define _M8DEF_INC_
;.pragma partinc 0
; ***** SPECIFY DEVICE ***************************************************
.device ATmega8
;.pragma AVRPART ADMIN PART_NAME ATmega8
.equ SIGNATURE_000 = 0x1e
.equ SIGNATURE_001 = 0x93
.equ SIGNATURE_002 = 0x07
;.pragma AVRPART CORE CORE_VERSION V2E
; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
.equ SREG = 0x3f
.equ SPH = 0x3e
.equ SPL = 0x3d
.equ GICR = 0x3b
.equ GIFR = 0x3a
.equ TIMSK = 0x39
.equ TIFR = 0x38
.equ SPMCR = 0x37
.equ TWCR = 0x36
.equ MCUCR = 0x35
.equ MCUCSR = 0x34
.equ TCCR0 = 0x33
.equ TCNT0 = 0x32
.equ OSCCAL = 0x31
.equ SFIOR = 0x30
.equ TCCR1A = 0x2f
.equ TCCR1B = 0x2e
.equ TCNT1H = 0x2d
.equ TCNT1L = 0x2c
.equ OCR1AH = 0x2b
.equ OCR1AL = 0x2a
.equ OCR1BH = 0x29
.equ OCR1BL = 0x28
.equ ICR1H = 0x27
.equ ICR1L = 0x26
.equ TCCR2 = 0x25
.equ TCNT2 = 0x24
.equ OCR2 = 0x23
.equ ASSR = 0x22
.equ WDTCR = 0x21
.equ UBRRH = 0x20
.equ UCSRC = 0x20
.equ EEARH = 0x1f
.equ EEARL = 0x1e
.equ EEDR = 0x1d
.equ EECR = 0x1c
.equ PORTB = 0x18
.equ DDRB = 0x17
.equ PINB = 0x16
.equ PORTC = 0x15
.equ DDRC = 0x14
.equ PINC = 0x13
.equ PORTD = 0x12
.equ DDRD = 0x11
.equ PIND = 0x10
.equ SPDR = 0x0f
.equ SPSR = 0x0e
.equ SPCR = 0x0d
.equ UDR = 0x0c
.equ UCSRA = 0x0b
.equ UCSRB = 0x0a
.equ UBRRL = 0x09
.equ ACSR = 0x08
.equ ADMUX = 0x07
.equ ADCSRA = 0x06
.equ ADCH = 0x05
.equ ADCL = 0x04
.equ TWDR = 0x03
.equ TWAR = 0x02
.equ TWSR = 0x01
.equ TWBR = 0x00
; ***** BIT DEFINITIONS **************************************************
; ***** ANALOG_COMPARATOR ************
; SFIOR - Special Function IO Register
.equ ACME = 3 ; Analog Comparator Multiplexer Enable
; ACSR - Analog Comparator Control And Status Register
.equ ACIS0 = 0 ; Analog Comparator Interrupt Mode Select bit 0
.equ ACIS1 = 1 ; Analog Comparator Interrupt Mode Select bit 1
.equ ACIC = 2 ; Analog Comparator Input Capture Enable
.equ ACIE = 3 ; Analog Comparator Interrupt Enable
.equ ACI = 4 ; Analog Comparator Interrupt Flag
.equ ACO = 5 ; Analog Compare Output
.equ ACBG = 6 ; Analog Comparator Bandgap Select
.equ ACD = 7 ; Analog Comparator Disable
; ***** SPI **************************
; SPDR - SPI Data Register
.equ SPDR0 = 0 ; SPI Data Register bit 0
.equ SPDR1 = 1 ; SPI Data Register bit 1
.equ SPDR2 = 2 ; SPI Data Register bit 2
.equ SPDR3 = 3 ; SPI Data Register bit 3
.equ SPDR4 = 4 ; SPI Data Register bit 4
.equ SPDR5 = 5 ; SPI Data Register bit 5
.equ SPDR6 = 6 ; SPI Data Register bit 6
.equ SPDR7 = 7 ; SPI Data Register bit 7
; SPSR - SPI Status Register
.equ SPI2X = 0 ; Double SPI Speed Bit
.equ WCOL = 6 ; Write Collision Flag
.equ SPIF = 7 ; SPI Interrupt Flag
; SPCR - SPI Control Register
.equ SPR0 = 0 ; SPI Clock Rate Select 0
.equ SPR1 = 1 ; SPI Clock Rate Select 1
.equ CPHA = 2 ; Clock Phase
.equ CPOL = 3 ; Clock polarity
.equ MSTR = 4 ; Master/Slave Select
.equ DORD = 5 ; Data Order
.equ SPE = 6 ; SPI Enable
.equ SPIE = 7 ; SPI Interrupt Enable
; ***** EXTERNAL_INTERRUPT ***********
; GICR - General Interrupt Control Register
.equ GIMSK = GICR ; For compatibility
.equ IVCE = 0 ; Interrupt Vector Change Enable
.equ IVSEL = 1 ; Interrupt Vector Select
.equ INT0 = 6 ; External Interrupt Request 0 Enable
.equ INT1 = 7 ; External Interrupt Request 1 Enable
; GIFR - General Interrupt Flag Register
.equ INTF0 = 6 ; External Interrupt Flag 0
.equ INTF1 = 7 ; External Interrupt Flag 1
; MCUCR - MCU Control Register
.equ ISC00 = 0 ; Interrupt Sense Control 0 Bit 0
.equ ISC01 = 1 ; Interrupt Sense Control 0 Bit 1
.equ ISC10 = 2 ; Interrupt Sense Control 1 Bit 0
.equ ISC11 = 3 ; Interrupt Sense Control 1 Bit 1
; ***** TIMER_COUNTER_0 **************
; TIMSK - Timer/Counter Interrupt Mask Register
.equ TOIE0 = 0 ; Timer/Counter0 Overflow Interrupt Enable
; TIFR - Timer/Counter Interrupt Flag register
.equ TOV0 = 0 ; Timer/Counter0 Overflow Flag
; TCCR0 - Timer/Counter0 Control Register
.equ CS00 = 0 ; Clock Select0 bit 0
.equ CS01 = 1 ; Clock Select0 bit 1
.equ CS02 = 2 ; Clock Select0 bit 2
; TCNT0 - Timer Counter 0
.equ TCNT00 = 0 ; Timer Counter 0 bit 0
.equ TCNT01 = 1 ; Timer Counter 0 bit 1
.equ TCNT02 = 2 ; Timer Counter 0 bit 2
.equ TCNT03 = 3 ; Timer Counter 0 bit 3
.equ TCNT04 = 4 ; Timer Counter 0 bit 4
.equ TCNT05 = 5 ; Timer Counter 0 bit 5
.equ TCNT06 = 6 ; Timer Counter 0 bit 6
.equ TCNT07 = 7 ; Timer Counter 0 bit 7
; ***** TIMER_COUNTER_1 **************
; TIMSK - Timer/Counter Interrupt Mask Register
.equ TOIE1 = 2 ; Timer/Counter1 Overflow Interrupt Enable
.equ OCIE1B = 3 ; Timer/Counter1 Output CompareB Match Interrupt Enable
.equ OCIE1A = 4 ; Timer/Counter1 Output CompareA Match Interrupt Enable
.equ TICIE1 = 5 ; Timer/Counter1 Input Capture Interrupt Enable
; TIFR - Timer/Counter Interrupt Flag register
.equ TOV1 = 2 ; Timer/Counter1 Overflow Flag
.equ OCF1B = 3 ; Output Compare Flag 1B
.equ OCF1A = 4 ; Output Compare Flag 1A
.equ ICF1 = 5 ; Input Capture Flag 1
; TCCR1A - Timer/Counter1 Control Register A
.equ WGM10 = 0 ; Waveform Generation Mode
.equ PWM10 = WGM10 ; For compatibility
.equ WGM11 = 1 ; Waveform Generation Mode
.equ PWM11 = WGM11 ; For compatibility
.equ FOC1B = 2 ; Force Output Compare 1B
.equ FOC1A = 3 ; Force Output Compare 1A
.equ COM1B0 = 4 ; Compare Output Mode 1B, bit 0
.equ COM1B1 = 5 ; Compare Output Mode 1B, bit 1
.equ COM1A0 = 6 ; Comparet Ouput Mode 1A, bit 0
.equ COM1A1 = 7 ; Compare Output Mode 1A, bit 1
; TCCR1B - Timer/Counter1 Control Register B
.equ CS10 = 0 ; Prescaler source of Timer/Counter 1
.equ CS11 = 1 ; Prescaler source of Timer/Counter 1
.equ CS12 = 2 ; Prescaler source of Timer/Counter 1
.equ WGM12 = 3 ; Waveform Generation Mode
.equ CTC10 = WGM12 ; For compatibility
.equ CTC1 = WGM12 ; For compatibility
.equ WGM13 = 4 ; Waveform Generation Mode
.equ CTC11 = WGM13 ; For compatibility
.equ ICES1 = 6 ; Input Capture 1 Edge Select
.equ ICNC1 = 7 ; Input Capture 1 Noise Canceler
; ***** TIMER_COUNTER_2 **************
; TIMSK - Timer/Counter Interrupt Mask register
.equ TOIE2 = 6 ; Timer/Counter2 Overflow Interrupt Enable
.equ OCIE2 = 7 ; Timer/Counter2 Output Compare Match Interrupt Enable
; TIFR - Timer/Counter Interrupt Flag Register
.equ TOV2 = 6 ; Timer/Counter2 Overflow Flag
.equ OCF2 = 7 ; Output Compare Flag 2
; TCCR2 - Timer/Counter2 Control Register
.equ CS20 = 0 ; Clock Select bit 0
.equ CS21 = 1 ; Clock Select bit 1
.equ CS22 = 2 ; Clock Select bit 2
.equ WGM21 = 3 ; Waveform Generation Mode
.equ CTC2 = WGM21 ; For compatibility
.equ COM20 = 4 ; Compare Output Mode bit 0
.equ COM21 = 5 ; Compare Output Mode bit 1
.equ WGM20 = 6 ; Waveform Genration Mode
.equ PWM2 = WGM20 ; For compatibility
.equ FOC2 = 7 ; Force Output Compare
; TCNT2 - Timer/Counter2
.equ TCNT2_0 = 0 ; Timer/Counter 2 bit 0
.equ TCNT2_1 = 1 ; Timer/Counter 2 bit 1
.equ TCNT2_2 = 2 ; Timer/Counter 2 bit 2
.equ TCNT2_3 = 3 ; Timer/Counter 2 bit 3
.equ TCNT2_4 = 4 ; Timer/Counter 2 bit 4
.equ TCNT2_5 = 5 ; Timer/Counter 2 bit 5
.equ TCNT2_6 = 6 ; Timer/Counter 2 bit 6
.equ TCNT2_7 = 7 ; Timer/Counter 2 bit 7
; OCR2 - Timer/Counter2 Output Compare Register
.equ OCR2_0 = 0 ; Timer/Counter2 Output Compare Register Bit 0
.equ OCR2_1 = 1 ; Timer/Counter2 Output Compare Register Bit 1
.equ OCR2_2 = 2 ; Timer/Counter2 Output Compare Register Bit 2
.equ OCR2_3 = 3 ; Timer/Counter2 Output Compare Register Bit 3
.equ OCR2_4 = 4 ; Timer/Counter2 Output Compare Register Bit 4
.equ OCR2_5 = 5 ; Timer/Counter2 Output Compare Register Bit 5
.equ OCR2_6 = 6 ; Timer/Counter2 Output Compare Register Bit 6
.equ OCR2_7 = 7 ; Timer/Counter2 Output Compare Register Bit 7
; ASSR - Asynchronous Status Register
.equ TCR2UB = 0 ; Timer/counter Control Register2 Update Busy
.equ OCR2UB = 1 ; Output Compare Register2 Update Busy
.equ TCN2UB = 2 ; Timer/Counter2 Update Busy
.equ AS2 = 3 ; Asynchronous Timer/counter2
; SFIOR - Special Function IO Register
.equ PSR2 = 1 ; Prescaler Reset Timer/Counter2
; ***** USART ************************
; UDR - USART I/O Data Register
.equ UDR0 = 0 ; USART I/O Data Register bit 0
.equ UDR1 = 1 ; USART I/O Data Register bit 1
.equ UDR2 = 2 ; USART I/O Data Register bit 2
.equ UDR3 = 3 ; USART I/O Data Register bit 3
.equ UDR4 = 4 ; USART I/O Data Register bit 4
.equ UDR5 = 5 ; USART I/O Data Register bit 5
.equ UDR6 = 6 ; USART I/O Data Register bit 6
.equ UDR7 = 7 ; USART I/O Data Register bit 7
; UCSRA - USART Control and Status Register A
.equ USR = UCSRA ; For compatibility
.equ MPCM = 0 ; Multi-processor Communication Mode
.equ U2X = 1 ; Double the USART transmission speed
.equ UPE = 2 ; Parity Error
.equ PE = UPE ; For compatibility
.equ DOR = 3 ; Data overRun
.equ FE = 4 ; Framing Error
.equ UDRE = 5 ; USART Data Register Empty
.equ TXC = 6 ; USART Transmitt Complete
.equ RXC = 7 ; USART Receive Complete
; UCSRB - USART Control and Status Register B
.equ UCR = UCSRB ; For compatibility
.equ TXB8 = 0 ; Transmit Data Bit 8
.equ RXB8 = 1 ; Receive Data Bit 8
.equ UCSZ2 = 2 ; Character Size
.equ CHR9 = UCSZ2 ; For compatibility
.equ TXEN = 3 ; Transmitter Enable
.equ RXEN = 4 ; Receiver Enable
.equ UDRIE = 5 ; USART Data register Empty Interrupt Enable
.equ TXCIE = 6 ; TX Complete Interrupt Enable
.equ RXCIE = 7 ; RX Complete Interrupt Enable
; UCSRC - USART Control and Status Register C
.equ UCPOL = 0 ; Clock Polarity
.equ UCSZ0 = 1 ; Character Size
.equ UCSZ1 = 2 ; Character Size
.equ USBS = 3 ; Stop Bit Select
.equ UPM0 = 4 ; Parity Mode Bit 0
.equ UPM1 = 5 ; Parity Mode Bit 1
.equ UMSEL = 6 ; USART Mode Select
.equ URSEL = 7 ; Register Select
.equ UBRRHI = UBRRH ; For compatibility
; ***** TWI **************************
; TWBR - TWI Bit Rate register
.equ I2BR = TWBR ; For compatibility
.equ TWBR0 = 0 ;
.equ TWBR1 = 1 ;
.equ TWBR2 = 2 ;
.equ TWBR3 = 3 ;
.equ TWBR4 = 4 ;
.equ TWBR5 = 5 ;
.equ TWBR6 = 6 ;
.equ TWBR7 = 7 ;
; TWCR - TWI Control Register
.equ I2CR = TWCR ; For compatibility
.equ TWIE = 0 ; TWI Interrupt Enable
.equ I2IE = TWIE ; For compatibility
.equ TWEN = 2 ; TWI Enable Bit
.equ I2EN = TWEN ; For compatibility
.equ ENI2C = TWEN ; For compatibility
.equ TWWC = 3 ; TWI Write Collition Flag
.equ I2WC = TWWC ; For compatibility
.equ TWSTO = 4 ; TWI Stop Condition Bit
.equ I2STO = TWSTO ; For compatibility
.equ TWSTA = 5 ; TWI Start Condition Bit
.equ I2STA = TWSTA ; For compatibility
.equ TWEA = 6 ; TWI Enable Acknowledge Bit
.equ I2EA = TWEA ; For compatibility
.equ TWINT = 7 ; TWI Interrupt Flag
.equ I2INT = TWINT ; For compatibility
; TWSR - TWI Status Register
.equ I2SR = TWSR ; For compatibility
.equ TWPS0 = 0 ; TWI Prescaler
.equ TWS0 = TWPS0 ; For compatibility
.equ I2GCE = TWPS0 ; For compatibility
.equ TWPS1 = 1 ; TWI Prescaler
.equ TWS1 = TWPS1 ; For compatibility
.equ TWS3 = 3 ; TWI Status
.equ I2S3 = TWS3 ; For compatibility
.equ TWS4 = 4 ; TWI Status
.equ I2S4 = TWS4 ; For compatibility
.equ TWS5 = 5 ; TWI Status
.equ I2S5 = TWS5 ; For compatibility
.equ TWS6 = 6 ; TWI Status
.equ I2S6 = TWS6 ; For compatibility
.equ TWS7 = 7 ; TWI Status
.equ I2S7 = TWS7 ; For compatibility
; TWDR - TWI Data register
.equ I2DR = TWDR ; For compatibility
.equ TWD0 = 0 ; TWI Data Register Bit 0
.equ TWD1 = 1 ; TWI Data Register Bit 1
.equ TWD2 = 2 ; TWI Data Register Bit 2
.equ TWD3 = 3 ; TWI Data Register Bit 3
.equ TWD4 = 4 ; TWI Data Register Bit 4
.equ TWD5 = 5 ; TWI Data Register Bit 5
.equ TWD6 = 6 ; TWI Data Register Bit 6
.equ TWD7 = 7 ; TWI Data Register Bit 7
; TWAR - TWI (Slave) Address register
.equ I2AR = TWAR ; For compatibility
.equ TWGCE = 0 ; TWI General Call Recognition Enable Bit
.equ TWA0 = 1 ; TWI (Slave) Address register Bit 0
.equ TWA1 = 2 ; TWI (Slave) Address register Bit 1
.equ TWA2 = 3 ; TWI (Slave) Address register Bit 2
.equ TWA3 = 4 ; TWI (Slave) Address register Bit 3
.equ TWA4 = 5 ; TWI (Slave) Address register Bit 4
.equ TWA5 = 6 ; TWI (Slave) Address register Bit 5
.equ TWA6 = 7 ; TWI (Slave) Address register Bit 6
; ***** WATCHDOG *********************
; WDTCR - Watchdog Timer Control Register
.equ WDTCSR = WDTCR ; For compatibility
.equ WDP0 = 0 ; Watch Dog Timer Prescaler bit 0
.equ WDP1 = 1 ; Watch Dog Timer Prescaler bit 1
.equ WDP2 = 2 ; Watch Dog Timer Prescaler bit 2
.equ WDE = 3 ; Watch Dog Enable
.equ WDCE = 4 ; Watchdog Change Enable
.equ WDTOE = WDCE ; For compatibility
; ***** PORTB ************************
; PORTB - Port B Data Register
.equ PORTB0 = 0 ; Port B Data Register bit 0
.equ PB0 = 0 ; For compatibility
.equ PORTB1 = 1 ; Port B Data Register bit 1
.equ PB1 = 1 ; For compatibility
.equ PORTB2 = 2 ; Port B Data Register bit 2
.equ PB2 = 2 ; For compatibility
.equ PORTB3 = 3 ; Port B Data Register bit 3
.equ PB3 = 3 ; For compatibility
.equ PORTB4 = 4 ; Port B Data Register bit 4
.equ PB4 = 4 ; For compatibility
.equ PORTB5 = 5 ; Port B Data Register bit 5
.equ PB5 = 5 ; For compatibility
.equ PORTB6 = 6 ; Port B Data Register bit 6
.equ PB6 = 6 ; For compatibility
.equ PORTB7 = 7 ; Port B Data Register bit 7
.equ PB7 = 7 ; For compatibility
; DDRB - Port B Data Direction Register
.equ DDB0 = 0 ; Port B Data Direction Register bit 0
.equ DDB1 = 1 ; Port B Data Direction Register bit 1
.equ DDB2 = 2 ; Port B Data Direction Register bit 2
.equ DDB3 = 3 ; Port B Data Direction Register bit 3
.equ DDB4 = 4 ; Port B Data Direction Register bit 4
.equ DDB5 = 5 ; Port B Data Direction Register bit 5
.equ DDB6 = 6 ; Port B Data Direction Register bit 6
.equ DDB7 = 7 ; Port B Data Direction Register bit 7
; PINB - Port B Input Pins
.equ PINB0 = 0 ; Port B Input Pins bit 0
.equ PINB1 = 1 ; Port B Input Pins bit 1
.equ PINB2 = 2 ; Port B Input Pins bit 2
.equ PINB3 = 3 ; Port B Input Pins bit 3
.equ PINB4 = 4 ; Port B Input Pins bit 4
.equ PINB5 = 5 ; Port B Input Pins bit 5
.equ PINB6 = 6 ; Port B Input Pins bit 6
.equ PINB7 = 7 ; Port B Input Pins bit 7
; ***** PORTC ************************
; PORTC - Port C Data Register
.equ PORTC0 = 0 ; Port C Data Register bit 0
.equ PC0 = 0 ; For compatibility
.equ PORTC1 = 1 ; Port C Data Register bit 1
.equ PC1 = 1 ; For compatibility
.equ PORTC2 = 2 ; Port C Data Register bit 2
.equ PC2 = 2 ; For compatibility
.equ PORTC3 = 3 ; Port C Data Register bit 3
.equ PC3 = 3 ; For compatibility
.equ PORTC4 = 4 ; Port C Data Register bit 4
.equ PC4 = 4 ; For compatibility
.equ PORTC5 = 5 ; Port C Data Register bit 5
.equ PC5 = 5 ; For compatibility
.equ PORTC6 = 6 ; Port C Data Register bit 6
.equ PC6 = 6 ; For compatibility
; DDRC - Port C Data Direction Register
.equ DDC0 = 0 ; Port C Data Direction Register bit 0
.equ DDC1 = 1 ; Port C Data Direction Register bit 1
.equ DDC2 = 2 ; Port C Data Direction Register bit 2
.equ DDC3 = 3 ; Port C Data Direction Register bit 3
.equ DDC4 = 4 ; Port C Data Direction Register bit 4
.equ DDC5 = 5 ; Port C Data Direction Register bit 5
.equ DDC6 = 6 ; Port C Data Direction Register bit 6
; PINC - Port C Input Pins
.equ PINC0 = 0 ; Port C Input Pins bit 0
.equ PINC1 = 1 ; Port C Input Pins bit 1
.equ PINC2 = 2 ; Port C Input Pins bit 2
.equ PINC3 = 3 ; Port C Input Pins bit 3
.equ PINC4 = 4 ; Port C Input Pins bit 4
.equ PINC5 = 5 ; Port C Input Pins bit 5
.equ PINC6 = 6 ; Port C Input Pins bit 6
; ***** PORTD ************************
; PORTD - Port D Data Register
.equ PORTD0 = 0 ; Port D Data Register bit 0
.equ PD0 = 0 ; For compatibility
.equ PORTD1 = 1 ; Port D Data Register bit 1
.equ PD1 = 1 ; For compatibility
.equ PORTD2 = 2 ; Port D Data Register bit 2
.equ PD2 = 2 ; For compatibility
.equ PORTD3 = 3 ; Port D Data Register bit 3
.equ PD3 = 3 ; For compatibility
.equ PORTD4 = 4 ; Port D Data Register bit 4
.equ PD4 = 4 ; For compatibility
.equ PORTD5 = 5 ; Port D Data Register bit 5
.equ PD5 = 5 ; For compatibility
.equ PORTD6 = 6 ; Port D Data Register bit 6
.equ PD6 = 6 ; For compatibility
.equ PORTD7 = 7 ; Port D Data Register bit 7
.equ PD7 = 7 ; For compatibility
; DDRD - Port D Data Direction Register
.equ DDD0 = 0 ; Port D Data Direction Register bit 0
.equ DDD1 = 1 ; Port D Data Direction Register bit 1
.equ DDD2 = 2 ; Port D Data Direction Register bit 2
.equ DDD3 = 3 ; Port D Data Direction Register bit 3
.equ DDD4 = 4 ; Port D Data Direction Register bit 4
.equ DDD5 = 5 ; Port D Data Direction Register bit 5
.equ DDD6 = 6 ; Port D Data Direction Register bit 6
.equ DDD7 = 7 ; Port D Data Direction Register bit 7
; PIND - Port D Input Pins
.equ PIND0 = 0 ; Port D Input Pins bit 0
.equ PIND1 = 1 ; Port D Input Pins bit 1
.equ PIND2 = 2 ; Port D Input Pins bit 2
.equ PIND3 = 3 ; Port D Input Pins bit 3
.equ PIND4 = 4 ; Port D Input Pins bit 4
.equ PIND5 = 5 ; Port D Input Pins bit 5
.equ PIND6 = 6 ; Port D Input Pins bit 6
.equ PIND7 = 7 ; Port D Input Pins bit 7
; ***** EEPROM ***********************
; EEDR - EEPROM Data Register
.equ EEDR0 = 0 ; EEPROM Data Register bit 0
.equ EEDR1 = 1 ; EEPROM Data Register bit 1
.equ EEDR2 = 2 ; EEPROM Data Register bit 2
.equ EEDR3 = 3 ; EEPROM Data Register bit 3
.equ EEDR4 = 4 ; EEPROM Data Register bit 4
.equ EEDR5 = 5 ; EEPROM Data Register bit 5
.equ EEDR6 = 6 ; EEPROM Data Register bit 6
.equ EEDR7 = 7 ; EEPROM Data Register bit 7
; EECR - EEPROM Control Register
.equ EERE = 0 ; EEPROM Read Enable
.equ EEWE = 1 ; EEPROM Write Enable
.equ EEMWE = 2 ; EEPROM Master Write Enable
.equ EEWEE = EEMWE ; For compatibility
.equ EERIE = 3 ; EEPROM Ready Interrupt Enable
; ***** CPU **************************
; SREG - Status Register
.equ SREG_C = 0 ; Carry Flag
.equ SREG_Z = 1 ; Zero Flag
.equ SREG_N = 2 ; Negative Flag
.equ SREG_V = 3 ; Two's Complement Overflow Flag
.equ SREG_S = 4 ; Sign Bit
.equ SREG_H = 5 ; Half Carry Flag
.equ SREG_T = 6 ; Bit Copy Storage
.equ SREG_I = 7 ; Global Interrupt Enable
; MCUCR - MCU Control Register
;.equ ISC00 = 0 ; Interrupt Sense Control 0 Bit 0
;.equ ISC01 = 1 ; Interrupt Sense Control 0 Bit 1
;.equ ISC10 = 2 ; Interrupt Sense Control 1 Bit 0
;.equ ISC11 = 3 ; Interrupt Sense Control 1 Bit 1
.equ SM0 = 4 ; Sleep Mode Select
.equ SM1 = 5 ; Sleep Mode Select
.equ SM2 = 6 ; Sleep Mode Select
.equ SE = 7 ; Sleep Enable
; MCUCSR - MCU Control And Status Register
.equ MCUSR = MCUCSR ; For compatibility
.equ PORF = 0 ; Power-on reset flag
.equ EXTRF = 1 ; External Reset Flag
.equ BORF = 2 ; Brown-out Reset Flag
.equ WDRF = 3 ; Watchdog Reset Flag
; OSCCAL - Oscillator Calibration Value
.equ CAL0 = 0 ; Oscillator Calibration Value Bit0
.equ CAL1 = 1 ; Oscillator Calibration Value Bit1
.equ CAL2 = 2 ; Oscillator Calibration Value Bit2
.equ CAL3 = 3 ; Oscillator Calibration Value Bit3
.equ CAL4 = 4 ; Oscillator Calibration Value Bit4
.equ CAL5 = 5 ; Oscillator Calibration Value Bit5
.equ CAL6 = 6 ; Oscillator Calibration Value Bit6
.equ CAL7 = 7 ; Oscillator Calibration Value Bit7
; SPMCR - Store Program Memory Control Register
.equ SPMEN = 0 ; Store Program Memory Enable
.equ PGERS = 1 ; Page Erase
.equ PGWRT = 2 ; Page Write
.equ BLBSET = 3 ; Boot Lock Bit Set
.equ RWWSRE = 4 ; Read-While-Write Section Read Enable
.equ RWWSB = 6 ; Read-While-Write Section Busy
.equ SPMIE = 7 ; SPM Interrupt Enable
; SFIOR - Special Function IO Register
.equ PSR10 = 0 ; Prescaler Reset Timer/Counter1 and Timer/Counter0
.equ PUD = 2 ; Pull-up Disable
.equ ADHSM = 4 ; ADC High Speed Mode
; ***** AD_CONVERTER *****************
; ADMUX - The ADC multiplexer Selection Register
.equ MUX0 = 0 ; Analog Channel and Gain Selection Bits
.equ MUX1 = 1 ; Analog Channel and Gain Selection Bits
.equ MUX2 = 2 ; Analog Channel and Gain Selection Bits
.equ MUX3 = 3 ; Analog Channel and Gain Selection Bits
.equ ADLAR = 5 ; Left Adjust Result
.equ REFS0 = 6 ; Reference Selection Bit 0
.equ REFS1 = 7 ; Reference Selection Bit 1
; ADCSRA - The ADC Control and Status register
.equ ADCSR = ADCSRA ; For compatibility
.equ ADPS0 = 0 ; ADC Prescaler Select Bits
.equ ADPS1 = 1 ; ADC Prescaler Select Bits
.equ ADPS2 = 2 ; ADC Prescaler Select Bits
.equ ADIE = 3 ; ADC Interrupt Enable
.equ ADIF = 4 ; ADC Interrupt Flag
.equ ADFR = 5 ; ADC Free Running Select
.equ ADSC = 6 ; ADC Start Conversion
.equ ADEN = 7 ; ADC Enable
; ***** LOCKSBITS ********************************************************
.equ LB1 = 0 ; Lock bit
.equ LB2 = 1 ; Lock bit
.equ BLB01 = 2 ; Boot Lock bit
.equ BLB02 = 3 ; Boot Lock bit
.equ BLB11 = 4 ; Boot lock bit
.equ BLB12 = 5 ; Boot lock bit
; ***** FUSES ************************************************************
; LOW fuse bits
.equ CKSEL0 = 0 ; Select Clock Source
.equ CKSEL1 = 1 ; Select Clock Source
.equ CKSEL2 = 2 ; Select Clock Source
.equ CKSEL3 = 3 ; Select Clock Source
.equ SUT0 = 4 ; Select start-up time
.equ SUT1 = 5 ; Select start-up time
.equ BODEN = 6 ; Brown out detector enable
.equ BODLEVEL = 7 ; Brown out detector trigger level
; HIGH fuse bits
.equ BOOTRST = 0 ; Select Reset Vector
.equ BOOTSZ0 = 1 ; Select Boot Size
.equ BOOTSZ1 = 2 ; Select Boot Size
.equ EESAVE = 3 ; EEPROM memory is preserved through chip erase
.equ CKOPT = 4 ; Oscillator Options
.equ SPIEN = 5 ; Enable Serial programming and Data Downloading
.equ WTDON = 6 ; Enable watchdog
.equ RSTDISBL = 7 ; Disable reset
; ***** CPU REGISTER DEFINITIONS *****************************************
.def XH = r27
.def XL = r26
.def YH = r29
.def YL = r28
.def ZH = r31
.def ZL = r30
; ***** DATA MEMORY DECLARATIONS *****************************************
.equ FLASHEND = 0x0fff ; Note: Word address
.equ IOEND = 0x003f
.equ SRAM_START = 0x0060
.equ SRAM_SIZE = 1024
.equ RAMEND = 0x045f
.equ XRAMEND = 0x0000
.equ E2END = 0x01ff
.equ EEPROMEND = 0x01ff
.equ EEADRBITS = 9
;.pragma AVRPART MEMORY PROG_FLASH 8192
;.pragma AVRPART MEMORY EEPROM 512
;.pragma AVRPART MEMORY INT_SRAM SIZE 1024
;.pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60
; ***** BOOTLOADER DECLARATIONS ******************************************
.equ NRWW_START_ADDR = 0xc00
.equ NRWW_STOP_ADDR = 0xfff
.equ RWW_START_ADDR = 0x0
.equ RWW_STOP_ADDR = 0xbff
.equ PAGESIZE = 32
.equ FIRSTBOOTSTART = 0xf80
.equ SECONDBOOTSTART = 0xf00
.equ THIRDBOOTSTART = 0xe00
.equ FOURTHBOOTSTART = 0xc00
.equ SMALLBOOTSTART = FIRSTBOOTSTART
.equ LARGEBOOTSTART = FOURTHBOOTSTART
; ***** INTERRUPT VECTORS ************************************************
.equ INT0addr = 0x0001 ; External Interrupt Request 0
.equ INT1addr = 0x0002 ; External Interrupt Request 1
.equ OC2addr = 0x0003 ; Timer/Counter2 Compare Match
.equ OVF2addr = 0x0004 ; Timer/Counter2 Overflow
.equ ICP1addr = 0x0005 ; Timer/Counter1 Capture Event
.equ OC1Aaddr = 0x0006 ; Timer/Counter1 Compare Match A
.equ OC1Baddr = 0x0007 ; Timer/Counter1 Compare Match B
.equ OVF1addr = 0x0008 ; Timer/Counter1 Overflow
.equ OVF0addr = 0x0009 ; Timer/Counter0 Overflow
.equ SPIaddr = 0x000a ; Serial Transfer Complete
.equ URXCaddr = 0x000b ; USART, Rx Complete
.equ UDREaddr = 0x000c ; USART Data Register Empty
.equ UTXCaddr = 0x000d ; USART, Tx Complete
.equ ADCCaddr = 0x000e ; ADC Conversion Complete
.equ ERDYaddr = 0x000f ; EEPROM Ready
.equ ACIaddr = 0x0010 ; Analog Comparator
.equ TWIaddr = 0x0011 ; 2-wire Serial Interface
.equ SPMRaddr = 0x0012 ; Store Program Memory Ready
.equ INT_VECTORS_SIZE = 19 ; size in words
;.pragma AVRPART CORE INSTRUCTIONS_NOT_SUPPORTED break
;.endif /* _M8DEF_INC_ */
; ***** END OF FILE ******************************************************

674
COPYING

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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, either version 3 of the License, or
(at your option) any later version.
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, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

12
README

@ -0,0 +1,12 @@
This tree contains the BLHeli assembly code for sensorless brushless motor electronic speed control (ESC) boards.
It is designed specifically for use with Eflite mCP X, but may also be used on other copters/planes.
There is one version of the software for Silabs MCU based ESCs, and another for Atmel MCU based ESCs.
For more information, check out these threads on Helifreak:
http://www.helifreak.com/showthread.php?t=390517 (for SiLabs MCU based ESCs)
http://www.helifreak.com/showthread.php?t=357151 (for Atmel MCU based ESCs)
April 2012,
Steffen Skaug

2995
SiLabs/BLHeli.asm
File diff suppressed because it is too large
View File

743
SiLabs/BLHeliTxPgm.inc

@ -0,0 +1,743 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;
; BLHeliTxPgm SiLabs
;
; EEPROM is not available in SiLabs MCUs
; Therefore a segment of the flash is used as "EEPROM"
;
;**** **** **** **** ****
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Read eeprom byte routine
;
; Assumes data in Temp1 and address in DPTR
; Also assumes address high byte to be zero
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
read_eeprom_byte:
clr A
movc A, @A+DPTR ; Read from flash
mov Temp1, A ; Load read value
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Write eeprom byte routine
;
; Assumes data in Temp1 and address in DPTR
; Also assumes address high byte to be zero
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
write_eeprom_byte:
orl PSCTL, #01h ; Set the PSWE bit
anl PSCTL, #0FDh ; Clear the PSEE bit
mov FLKEY, #0A5h ; First key code
mov FLKEY, #0F1h ; Second key code
mov A, Temp1 ; Load value to be written
movx @DPTR, A ; Write to flash
anl PSCTL, #0FEh ; Clear the PSWE bit
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Clear eeprom signature routine (erases the flash segment used for "eeprom" variables)
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
clear_eeprom_signature:
; Erase flash
orl PSCTL, #02h ; Set the PSEE bit
orl PSCTL, #01h ; Set the PSWE bit
mov FLKEY, #0A5h ; First key code
mov FLKEY, #0F1h ; Second key code
mov DPTR, #Eep_Initialized_L
movx @DPTR, A
anl PSCTL, #0FCh ; Clear the PSEE and PSWE bits
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Write eeprom signature routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
write_eeprom_signature:
IF TAIL == 0
mov DPTR, #Eep_Initialized_L
mov Temp1, #0A5h
call write_eeprom_byte
mov DPTR, #Eep_Initialized_H
mov Temp1, #05Ah
call write_eeprom_byte
ELSE
mov DPTR, #Eep_Initialized_L
mov Temp1, #05Ah
call write_eeprom_byte
mov DPTR, #Eep_Initialized_H
mov Temp1, #0A5h
call write_eeprom_byte
ENDIF
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Read eeprom perameters routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
read_eeprom_parameters:
IF TAIL == 0
; Check initialized signature
mov DPTR, #Eep_Initialized_L
call read_eeprom_byte
clr C
mov A, Temp1
subb A, #0A5h
jnz read_eeprom_store_defaults
mov DPTR, #Eep_Initialized_H
call read_eeprom_byte
clr C
mov A, Temp1
subb A, #05Ah
jnz read_eeprom_store_defaults
; Read eeprom
mov DPTR, #Eep_Pgm_Gov_P_Gain
call read_eeprom_byte
mov Pgm_Gov_P_Gain, Temp1
mov DPTR, #Eep_Pgm_Gov_I_Gain
call read_eeprom_byte
mov Pgm_Gov_I_Gain, Temp1
mov DPTR, #Eep_Pgm_Gov_Mode
call read_eeprom_byte
mov Pgm_Gov_Mode, Temp1
mov DPTR, #Eep_Pgm_Low_Voltage_Lim
call read_eeprom_byte
mov Pgm_Low_Voltage_Lim, Temp1
mov DPTR, #Eep_Pgm_Startup_Pwr
call read_eeprom_byte
mov Pgm_Startup_Pwr, Temp1
mov DPTR, #Eep_Pgm_Pwm_Freq
call read_eeprom_byte
setb Flags2.PGM_PWM_HIGH_FREQ
mov A, Temp1
jnb ACC.1, ($+5)
clr Flags2.PGM_PWM_HIGH_FREQ
mov DPTR, #Eep_Pgm_Direction_Rev
call read_eeprom_byte
clr Flags2.PGM_DIRECTION_REV
mov A, Temp1
jnb ACC.1, ($+5)
setb Flags2.PGM_DIRECTION_REV
mov DPTR, #Eep_Pgm_Input_Pol
call read_eeprom_byte
clr Flags2.PGM_RCP_PWM_POL
mov A, Temp1
jnb ACC.1, ($+5)
setb Flags2.PGM_RCP_PWM_POL
ELSE
; Check initialized signature
mov DPTR, #Eep_Initialized_L
call read_eeprom_byte
clr C
mov A, Temp1
subb A, #05Ah
jnz read_eeprom_store_defaults
mov DPTR, #Eep_Initialized_H
call read_eeprom_byte
clr C
mov A, Temp1
subb A, #0A5h
jnz read_eeprom_store_defaults
; Read eeprom
mov DPTR, #Eep_Pgm_Tail_Gain
call read_eeprom_byte
mov Pgm_Tail_Gain, Temp1
mov DPTR, #Eep_Pgm_Tail_Idle
call read_eeprom_byte
mov Pgm_Tail_Idle, Temp1
mov DPTR, #Eep_Pgm_Startup_Pwr
call read_eeprom_byte
mov Pgm_Startup_Pwr, Temp1
mov DPTR, #Eep_Pgm_Pwm_Freq
call read_eeprom_byte
clr Flags2.PGM_PWM_HIGH_FREQ
mov A, Temp1
jnb ACC.0, ($+5)
setb Flags2.PGM_PWM_HIGH_FREQ
clr Flags2.PGM_PWM_OFF_DAMPED
clr C
mov A, Temp1
subb A, #3
jc ($+4)
setb Flags2.PGM_PWM_OFF_DAMPED
mov DPTR, #Eep_Pgm_Direction_Rev
call read_eeprom_byte
clr Flags2.PGM_DIRECTION_REV
mov A, Temp1
jnb ACC.1, ($+5)
setb Flags2.PGM_DIRECTION_REV
mov DPTR, #Eep_Pgm_Input_Pol
call read_eeprom_byte
clr Flags2.PGM_RCP_PWM_POL
mov A, Temp1
jnb ACC.1, ($+5)
setb Flags2.PGM_RCP_PWM_POL
mov Pgm_Gov_Mode, #3
ENDIF
jmp read_eeprom_exit
read_eeprom_store_defaults:
call set_default_parameters
call store_all_in_eeprom
read_eeprom_exit:
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Read all tags from flash and store in temporary storage
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
read_tags:
mov Temp3, #48 ; Number of tags
mov Temp2, #Tag_Temporary_Storage ; Set RAM address
mov DPTR, #Eep_ESC_Layout ; Set flash address
read_tag:
call read_eeprom_byte
mov A, Temp1
mov @Temp2, A ; Write to RAM
inc Temp2
inc DPTR
djnz Temp3, read_tag
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Write all tags from temporary storage and store in flash
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
write_tags:
mov Temp3, #48 ; Number of tags
mov Temp2, #Tag_Temporary_Storage ; Set RAM address
mov DPTR, #Eep_ESC_Layout ; Set flash address
write_tag:
mov A, @Temp2 ; Read from RAM
mov Temp1, A
call write_eeprom_byte
inc Temp2
inc DPTR
djnz Temp3, write_tag
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Store all parameter value in EEPROM routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
store_all_in_eeprom:
clr EA ; Disable interrupts
call read_tags
call clear_eeprom_signature ; Erase flash
mov DPTR, #Eep_FW_Main_Revision ; Store firmware main revision
mov Temp1, #EEPROM_FW_MAIN_REVISION
call write_eeprom_byte
mov DPTR, #Eep_FW_Sub_Revision ; Store firmware sub revision
mov Temp1, #EEPROM_FW_SUB_REVISION
call write_eeprom_byte
mov DPTR, #Eep_Layout_Revision ; Store EEPROM layout revision
mov Temp1, #EEPROM_LAYOUT_REVISION
call write_eeprom_byte
IF TAIL == 0
mov DPTR, #Eep_Pgm_Gov_P_Gain
mov Temp1, Pgm_Gov_P_Gain
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Gov_I_Gain
mov Temp1, Pgm_Gov_I_Gain
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Gov_Mode
mov Temp1, Pgm_Gov_Mode
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Low_Voltage_Lim
mov Temp1, Pgm_Low_Voltage_Lim
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Startup_Pwr
mov Temp1, Pgm_Startup_Pwr
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Pwm_Freq
mov Temp1, #1
jb Flags2.PGM_PWM_HIGH_FREQ, ($+5)
mov Temp1, #2
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Direction_Rev
mov Temp1, #1
jnb Flags2.PGM_DIRECTION_REV, ($+5)
mov Temp1, #2
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Input_Pol
mov Temp1, #1
jnb Flags2.PGM_RCP_PWM_POL, ($+5)
mov Temp1, #2
call write_eeprom_byte
ELSE
mov DPTR, #Eep_Pgm_Tail_Gain
mov Temp1, Pgm_Tail_Gain
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Tail_Idle
mov Temp1, Pgm_Tail_Idle
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Startup_Pwr
mov Temp1, Pgm_Startup_Pwr
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Pwm_Freq
mov Temp1, #1
jb Flags2.PGM_PWM_HIGH_FREQ, ($+5)
mov Temp1, #2
jnb Flags2.PGM_PWM_OFF_DAMPED, ($+5)
mov Temp1, #3
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Direction_Rev
mov Temp1, #1
jnb Flags2.PGM_DIRECTION_REV, ($+5)
mov Temp1, #2
call write_eeprom_byte
mov DPTR, #Eep_Pgm_Input_Pol
mov Temp1, #1
jnb Flags2.PGM_RCP_PWM_POL, ($+5)
mov Temp1, #2
call write_eeprom_byte
ENDIF
call write_tags
call write_eeprom_signature
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Store new parameter value in ram routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
store_in_ram:
mov Temp4, Tx_Pgm_Func_No ; Function no
mov Temp1, Tx_Pgm_Paraval_No ; Parameter value no
IF TAIL == 0
mov A, Temp4
clr C
subb A, #1
jz store_main_func_1
mov A, Temp4
clr C
subb A, #2
jz store_main_func_2
mov A, Temp4
clr C
subb A, #3
jz store_main_func_3
mov A, Temp4
clr C
subb A, #4
jz store_main_func_4
mov A, Temp4
clr C
subb A, #5
jz store_main_func_5
mov A, Temp4
clr C
subb A, #6
jz store_main_func_6
mov A, Temp4
clr C
subb A, #7
jz store_main_func_7
mov A, Temp4
clr C
subb A, #8
jz store_main_func_8
store_main_func_1:
mov Pgm_Gov_P_Gain, Temp1
jmp store_in_ram_exit
store_main_func_2:
mov Pgm_Gov_I_Gain, Temp1
jmp store_in_ram_exit
store_main_func_3:
mov Pgm_Gov_Mode, Temp1
jmp store_in_ram_exit
store_main_func_4:
mov Pgm_Low_Voltage_Lim, Temp1
jmp store_in_ram_exit
store_main_func_5:
mov Pgm_Startup_Pwr, Temp1
jmp store_in_ram_exit
store_main_func_6:
setb Flags2.PGM_PWM_HIGH_FREQ
mov A, Temp1
jnb ACC.1, ($+5)
clr Flags2.PGM_PWM_HIGH_FREQ
jmp store_in_ram_exit
store_main_func_7:
clr Flags2.PGM_DIRECTION_REV
mov A, Temp1
jnb ACC.1, ($+5)
setb Flags2.PGM_DIRECTION_REV
jmp store_in_ram_exit
store_main_func_8:
clr Flags2.PGM_RCP_PWM_POL
mov A, Temp1
jnb ACC.1, ($+5)
setb Flags2.PGM_RCP_PWM_POL
jmp store_in_ram_exit
ELSE
mov A, Temp4
clr C
subb A, #1
jz store_tail_func_1
mov A, Temp4
clr C
subb A, #2
jz store_tail_func_2
mov A, Temp4
clr C
subb A, #3
jz store_tail_func_3
mov A, Temp4
clr C
subb A, #4
jz store_tail_func_4
mov A, Temp4
clr C
subb A, #5
jz store_tail_func_5
mov A, Temp4
clr C
subb A, #6
jz store_tail_func_6
store_tail_func_1:
mov Pgm_Tail_Gain, Temp1
jmp store_in_ram_exit
store_tail_func_2:
mov Pgm_Tail_Idle, Temp1
jmp store_in_ram_exit
store_tail_func_3:
mov Pgm_Startup_Pwr, Temp1
jmp store_in_ram_exit
store_tail_func_4:
clr Flags2.PGM_PWM_HIGH_FREQ
mov A, Temp1
jnb ACC.0, ($+5)
setb Flags2.PGM_PWM_HIGH_FREQ
clr Flags2.PGM_PWM_OFF_DAMPED
clr C
mov A, Temp1
subb A, #3
jc ($+4)
setb Flags2.PGM_PWM_OFF_DAMPED
jmp store_in_ram_exit
store_tail_func_5:
clr Flags2.PGM_DIRECTION_REV
mov A, Temp1
jnb ACC.1, ($+5)
setb Flags2.PGM_DIRECTION_REV
jmp store_in_ram_exit
store_tail_func_6:
clr Flags2.PGM_RCP_PWM_POL
mov A, Temp1
jnb ACC.1, ($+5)
setb Flags2.PGM_RCP_PWM_POL
jmp store_in_ram_exit
ENDIF
store_in_ram_exit:
ret
;**;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Wait 1 second routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
wait1s:
mov Temp5, #5
wait1s_loop:
call wait200ms
djnz Temp5, wait1s_loop
ret
;**;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Success beep routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
success_beep:
clr EA ; Disable all interrupts
call beep_f1
call beep_f2
call beep_f3
call beep_f4
call wait10ms
call beep_f1
call beep_f2
call beep_f3
call beep_f4
call wait10ms
call beep_f1
call beep_f2
call beep_f3
call beep_f4
setb EA ; Enable all interrupts
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Function and parameter value beep routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
function_paraval_beep:
mov Temp5, Tx_Pgm_Func_No ; Function no
mov Temp6, Tx_Pgm_Paraval_No ; Parameter value no
clr EA ; Disable all interrupts
function_beep:
call beep_f1
call beep_f1
call beep_f1
call wait10ms
djnz Temp5, function_beep
paraval_beep:
call beep_f4
call wait10ms
djnz Temp6, paraval_beep
setb EA ; Enable all interrupts
ret
;**** **** **** **** **** **** **** **** **** **** **** **** ****
;
; Program by TX routine
;
; No assumptions
;
;**** **** **** **** **** **** **** **** **** **** **** **** ****
program_by_tx:
; Start programming mode entry sequence by waiting for low RC pulse
clr EA ; Disable all interrupts
call beep_f4
setb EA ; Enable all interrupts
call wait100ms
clr C
mov A, New_Rcp ; Load new RC pulse value
subb A, #RCP_STOP ; Below stop?
jnc program_by_tx ; No - start over
; Continue programming mode entry sequence by waiting for high RC pulse
wait_for_rc_pulse_max:
clr EA ; Disable all interrupts
call beep_f1
call wait10ms
call beep_f1
setb EA ; Enable all interrupts
call wait100ms
clr C
mov A, New_Rcp ; Load new RC pulse value
subb A, #RCP_MAX ; Above max?
jc wait_for_rc_pulse_max ; No - start over
; Programming mode entry beeps
call success_beep
call wait1s
call wait1s
; Start at function 1, parameter value 1
mov Tx_Pgm_Func_No, #1
paraval_no_entry:
mov Tx_Pgm_Paraval_No, #1
beep_no_entry:
mov Tx_Pgm_Beep_No, #0
func_paraval:
call function_paraval_beep
mov Temp5, #5 ; Wait is 5x 200ms
func_paraval_wait:
call wait200ms
clr C
mov A, New_Rcp ; Load new RC pulse value
subb A, #RCP_STOP ; Below stop?
jnc func_paraval_cont_wait ; No - branch
call store_in_ram ; Yes - store new value in RAM
call store_all_in_eeprom ; Store all values in EEPROM
call success_beep ; Beep success
clr EA ; Disable all interrupts
orl RSTSRC, #10h ; Generate hardware reset
call wait1s
func_paraval_cont_wait:
djnz Temp5, func_paraval_wait
inc Tx_Pgm_Beep_No ; Check number of beeps
clr C
mov A, Tx_Pgm_Beep_No
subb A, #3 ; Three beeps done?
jnc paraval_next ; Yes - Next parameter value
jmp func_paraval ; No - go back
paraval_next:
call wait1s
inc Tx_Pgm_Paraval_No ; Parameter value no
mov Temp1, #5 ; Default 5 parameter values
IF TAIL == 0
clr C
mov A, Tx_Pgm_Func_No
subb A, #3 ; Function 3?
jnz paraval_end_a ; No - branch
mov Temp1, #3 ; Yes - set max parameter values
paraval_end_a:
clr C
mov A, Tx_Pgm_Func_No
subb A, #4 ; Function 4?
jnz paraval_end_b ; No - branch
mov Temp1, #3 ; Yes - set max parameter values
paraval_end_b:
clr C
mov A, Tx_Pgm_Func_No
subb A, #5 ; Function below 5?
jc paraval_end_c ; Yes - branch
mov Temp1, #2 ; No - set max parameter values
paraval_end_c:
ELSE
clr C
mov A, Tx_Pgm_Func_No
subb A, #4 ; Function below 4?
jc paraval_end_a ; Yes - branch
mov Temp1, #3 ; No - set max parameter values
paraval_end_a:
clr C
mov A, Tx_Pgm_Func_No
subb A, #(4+DAMPED_TAIL_ENABLE) ; Function below 5 (damped tail enabled)?
jc paraval_end_b ; Yes - branch
mov Temp1, #2 ; No - set max parameter values
paraval_end_b:
ENDIF
inc Temp1
clr C
mov A, Tx_Pgm_Paraval_No
subb A, Temp1
jnc function_next ; Last parameter value?
jmp beep_no_entry ; No - go back
function_next: ; Yes - Next function value
call wait1s
call wait1s
inc Tx_Pgm_Func_No ; Function value no
IF TAIL == 0
clr C
mov A, Tx_Pgm_Func_No
subb A, #9 ; Main has 8 functions
ELSE
clr C
mov A, Tx_Pgm_Func_No
subb A, #7 ; Tail has 6 functions
ENDIF
jnc program_by_tx_exit ; Last function value?
jmp paraval_no_entry ; No - go back
program_by_tx_exit:
clr EA ; Disable all interrupts
orl RSTSRC, #10h ; Generate hardware reset
call wait1s

204
SiLabs/C8051F330.INC

@ -0,0 +1,204 @@
;---------------------------------------------------------------------------
;
;
;
;
; FILE NAME: C8051F330.INC
; TARGET MCUs: C8051F330, F331
; DESCRIPTION: Register/bit definitions for the C8051F330 product family.
;
; REVISION 1.0
;
;---------------------------------------------------------------------------
;REGISTER DEFINITIONS
;
P0 DATA 080H ; PORT 0 LATCH
SP DATA 081H ; STACK POINTER
DPL DATA 082H ; DATA POINTER LOW
DPH DATA 083H ; DATA POINTER HIGH
PCON DATA 087H ; POWER CONTROL
TCON DATA 088H ; TIMER/COUNTER CONTROL
TMOD DATA 089H ; TIMER/COUNTER MODE
TL0 DATA 08AH ; TIMER/COUNTER 0 LOW
TL1 DATA 08BH ; TIMER/COUNTER 1 LOW
TH0 DATA 08CH ; TIMER/COUNTER 0 HIGH
TH1 DATA 08DH ; TIMER/COUNTER 1 HIGH
CKCON DATA 08EH ; CLOCK CONTROL
PSCTL DATA 08FH ; PROGRAM STORE R/W CONTROL
P1 DATA 090H ; PORT 1 LATCH
TMR3CN DATA 091H ; TIMER/COUNTER 3 CONTROL
TMR3RLL DATA 092H ; TIMER/COUNTER 3 RELOAD LOW
TMR3RLH DATA 093H ; TIMER/COUNTER 3 RELOAD HIGH
TMR3L DATA 094H ; TIMER/COUNTER 3 LOW
TMR3H DATA 095H ; TIMER/COUNTER 3 HIGH
IDA0L DATA 096H ; CURRENT MODE DAC0 LOW
IDA0H DATA 097H ; CURRENT MODE DAC0 HIGH
SCON0 DATA 098H ; UART0 CONTROL
SBUF0 DATA 099H ; UART0 DATA BUFFER
CPT0CN DATA 09BH ; COMPARATOR0 CONTROL
CPT0MD DATA 09DH ; COMPARATOR0 MODE SELECTION
CPT0MX DATA 09FH ; COMPARATOR0 MUX SELECTION
P2 DATA 0A0H ; PORT 2 LATCH
SPI0CFG DATA 0A1H ; SPI CONFIGURATION
SPI0CKR DATA 0A2H ; SPI CLOCK RATE CONTROL
SPI0DAT DATA 0A3H ; SPI DATA
P0MDOUT DATA 0A4H ; PORT 0 OUTPUT MODE CONFIGURATION
P1MDOUT DATA 0A5H ; PORT 1 OUTPUT MODE CONFIGURATION
P2MDOUT DATA 0A6H ; PORT 2 OUTPUT MODE CONFIGURATION
IE DATA 0A8H ; INTERRUPT ENABLE
CLKSEL DATA 0A9H ; CLOCK SELECT
EMI0CN DATA 0AAH ; EXTERNAL MEMORY INTERFACE CONTROL
OSCXCN DATA 0B1H ; EXTERNAL OSCILLATOR CONTROL
OSCICN DATA 0B2H ; INTERNAL OSCILLATOR CONTROL
OSCICL DATA 0B3H ; INTERNAL OSCILLATOR CALIBRATION
FLSCL DATA 0B6H ; FLASH SCALE
FLKEY DATA 0B7H ; FLASH LOCK AND KEY
IP DATA 0B8H ; INTERRUPT PRIORITY
IDA0CN DATA 0B9H ; CURRENT MODE DAC0 CONTROL
AMX0N DATA 0BAH ; AMUX0 NEGATIVE CHANNEL SELECT
AMX0P DATA 0BBH ; AMUX0 POSITIVE CHANNEL SELECT
ADC0CF DATA 0BCH ; ADC0 CONFIGURATION
ADC0L DATA 0BDH ; ADC0 LOW
ADC0H DATA 0BEH ; ADC0 HIGH
SMB0CN DATA 0C0H ; SMBUS CONTROL
SMB0CF DATA 0C1H ; SMBUS CONFIGURATION
SMB0DAT DATA 0C2H ; SMBUS DATA
ADC0GTL DATA 0C3H ; ADC0 GREATER-THAN COMPARE LOW
ADC0GTH DATA 0C4H ; ADC0 GREATER-THAN COMPARE HIGH
ADC0LTL DATA 0C5H ; ADC0 LESS-THAN COMPARE WORD LOW
ADC0LTH DATA 0C6H ; ADC0 LESS-THAN COMPARE WORD HIGH
TMR2CN DATA 0C8H ; TIMER/COUNTER 2 CONTROL
TMR2RLL DATA 0CAH ; TIMER/COUNTER 2 RELOAD LOW
TMR2RLH DATA 0CBH ; TIMER/COUNTER 2 RELOAD HIGH
TMR2L DATA 0CCH ; TIMER/COUNTER 2 LOW
TMR2H DATA 0CDH ; TIMER/COUNTER 2 HIGH
PSW DATA 0D0H ; PROGRAM STATUS WORD
REF0CN DATA 0D1H ; VOLTAGE REFERENCE CONTROL
P0SKIP DATA 0D4H ; PORT 0 SKIP
P1SKIP DATA 0D5H ; PORT 1 SKIP
PCA0CN DATA 0D8H ; PCA CONTROL
PCA0MD DATA 0D9H ; PCA MODE
PCA0CPM0 DATA 0DAH ; PCA MODULE 0 MODE REGISTER
PCA0CPM1 DATA 0DBH ; PCA MODULE 1 MODE REGISTER
PCA0CPM2 DATA 0DCH ; PCA MODULE 2 MODE REGISTER
ACC DATA 0E0H ; ACCUMULATOR
XBR0 DATA 0E1H ; PORT I/O CROSSBAR CONTROL 0
XBR1 DATA 0E2H ; PORT I/O CROSSBAR CONTROL 1
OSCLCN DATA 0E3H ; LOW-FREQUENCY OSCILLATOR CONTROL
IT01CF DATA 0E4H ; INT0/INT1 CONFIGURATION
EIE1 DATA 0E6H ; EXTENDED INTERRUPT ENABLE 1
ADC0CN DATA 0E8H ; ADC0 CONTROL
PCA0CPL1 DATA 0E9H ; PCA CAPTURE 1 LOW
PCA0CPH1 DATA 0EAH ; PCA CAPTURE 1 HIGH
PCA0CPL2 DATA 0EBH ; PCA CAPTURE 2 LOW
PCA0CPH2 DATA 0ECH ; PCA CAPTURE 2 HIGH
RSTSRC DATA 0EFH ; RESET SOURCE CONFIGURATION/STATUS
B DATA 0F0H ; B REGISTER
P0MDIN DATA 0F1H ; PORT 0 INPUT MODE CONFIGURATION
P1MDIN DATA 0F2H ; PORT 1 INPUT MODE CONFIGURATION
EIP1 DATA 0F6H ; EXTENDED INTERRUPT PRIORITY 1
SPI0CN DATA 0F8H ; SPI CONTROL
PCA0L DATA 0F9H ; PCA COUNTER LOW
PCA0H DATA 0FAH ; PCA COUNTER HIGH
PCA0CPL0 DATA 0FBH ; PCA CAPTURE 0 LOW
PCA0CPH0 DATA 0FCH ; PCA CAPTURE 0 HIGH
VDM0CN DATA 0FFH ; VDD MONITOR CONTROL
;
;------------------------------------------------------------------------------
;BIT DEFINITIONS
;
; TCON 088H
TF1 BIT 08FH ; TIMER 1 OVERFLOW FLAG
TR1 BIT 08EH ; TIMER 1 ON/OFF CONTROL
TF0 BIT 08DH ; TIMER 0 OVERFLOW FLAG
TR0 BIT 08CH ; TIMER 0 ON/OFF CONTROL
IE1 BIT 08BH ; EXT. INTERRUPT 1 EDGE FLAG
IT1 BIT 08AH ; EXT. INTERRUPT 1 TYPE
IE0 BIT 089H ; EXT. INTERRUPT 0 EDGE FLAG
IT0 BIT 088H ; EXT. INTERRUPT 0 TYPE
; SCON0 098H
S0MODE BIT 09FH ; UART 0 MODE
MCE0 BIT 09DH ; UART 0 MCE
REN0 BIT 09CH ; UART 0 RX ENABLE
TB80 BIT 09BH ; UART 0 TX BIT 8
RB80 BIT 09AH ; UART 0 RX BIT 8
TI0 BIT 099H ; UART 0 TX INTERRUPT FLAG
RI0 BIT 098H ; UART 0 RX INTERRUPT FLAG
; IE 0A8H
EA BIT 0AFH ; GLOBAL INTERRUPT ENABLE
ESPI0 BIT 0AEH ; SPI0 INTERRUPT ENABLE
ET2 BIT 0ADH ; TIMER 2 INTERRUPT ENABLE
ES0 BIT 0ACH ; UART0 INTERRUPT ENABLE
ET1 BIT 0ABH ; TIMER 1 INTERRUPT ENABLE
EX1 BIT 0AAH ; EXTERNAL INTERRUPT 1 ENABLE
ET0 BIT 0A9H ; TIMER 0 INTERRUPT ENABLE
EX0 BIT 0A8H ; EXTERNAL INTERRUPT 0 ENABLE
; IP 0B8H
PSPI0 BIT 0BEH ; SPI0 PRIORITY
PT2 BIT 0BDH ; TIMER 2 PRIORITY
PS0 BIT 0BCH ; UART0 PRIORITY
PT1 BIT 0BBH ; TIMER 1 PRIORITY
PX1 BIT 0BAH ; EXTERNAL INTERRUPT 1 PRIORITY
PT0 BIT 0B9H ; TIMER 0 PRIORITY
PX0 BIT 0B8H ; EXTERNAL INTERRUPT 0 PRIORITY
; SMB0CN 0C0H
MASTER BIT 0C7H ; SMBUS 0 MASTER/SLAVE
TXMODE BIT 0C6H ; SMBUS 0 TRANSMIT MODE
STA BIT 0C5H ; SMBUS 0 START FLAG
STO BIT 0C4H ; SMBUS 0 STOP FLAG
ACKRQ BIT 0C3H ; SMBUS 0 ACKNOWLEDGE REQUEST
ARBLOST BIT 0C2H ; SMBUS 0 ARBITRATION LOST
ACK BIT 0C1H ; SMBUS 0 ACKNOWLEDGE FLAG
SI BIT 0C0H ; SMBUS 0 INTERRUPT PENDING FLAG
; TMR2CN 0C8H
TF2H BIT 0CFH ; TIMER 2 HIGH BYTE OVERFLOW FLAG
TF2L BIT 0CEH ; TIMER 2 LOW BYTE OVERFLOW FLAG
TF2LEN BIT 0CDH ; TIMER 2 LOW BYTE INTERRUPT ENABLE
TF2CEN BIT 0CCH ; TIMER 2 LFO CAPTURE ENABLE
T2SPLIT BIT 0CBH ; TIMER 2 SPLIT MODE ENABLE
TR2 BIT 0CAH ; TIMER 2 ON/OFF CONTROL
T2XCLK BIT 0C8H ; TIMER 2 EXTERNAL CLOCK SELECT
; PSW 0D0H
CY BIT 0D7H ; CARRY FLAG
AC BIT 0D6H ; AUXILIARY CARRY FLAG
F0 BIT 0D5H ; USER FLAG 0
RS1 BIT 0D4H ; REGISTER BANK SELECT 1
RS0 BIT 0D3H ; REGISTER BANK SELECT 0
OV BIT 0D2H ; OVERFLOW FLAG
F1 BIT 0D1H ; USER FLAG 1
P BIT 0D0H ; ACCUMULATOR PARITY FLAG
; PCA0CN 0D8H
CF BIT 0DFH ; PCA 0 COUNTER OVERFLOW FLAG
CR BIT 0DEH ; PCA 0 COUNTER RUN CONTROL BIT
CCF2 BIT 0DAH ; PCA 0 MODULE 2 INTERRUPT FLAG
CCF1 BIT 0D9H ; PCA 0 MODULE 1 INTERRUPT FLAG
CCF0 BIT 0D8H ; PCA 0 MODULE 0 INTERRUPT FLAG
; ADC 0 WINDOW INTERRUPT FLAG
; ADC0CN 0E8H
AD0EN BIT 0EFH ; ADC 0 ENABLE
AD0TM BIT 0EEH ; ADC 0 TRACK MODE
AD0INT BIT 0EDH ; ADC 0 EOC INTERRUPT FLAG
AD0BUSY BIT 0ECH ; ADC 0 BUSY FLAG
AD0WINT BIT 0EBH ; ADC 0 WINDOW INTERRUPT FLAG
AD0CM2 BIT 0EAH ; ADC 0 CONVERT START MODE BIT 2
AD0CM1 BIT 0E9H ; ADC 0 CONVERT START MODE BIT 1
AD0CM0 BIT 0E8H ; ADC 0 CONVERT START MODE BIT 0
; SPI0CN 0F8H
SPIF BIT 0FFH ; SPI 0 INTERRUPT FLAG
WCOL BIT 0FEH ; SPI 0 WRITE COLLISION FLAG
MODF BIT 0FDH ; SPI 0 MODE FAULT FLAG
RXOVRN BIT 0FCH ; SPI 0 RX OVERRUN FLAG
NSSMD1 BIT 0FBH ; SPI 0 SLAVE SELECT MODE 1
NSSMD0 BIT 0FAH ; SPI 0 SLAVE SELECT MODE 0
TXBMT BIT 0F9H ; SPI 0 TX BUFFER EMPTY FLAG
SPIEN BIT 0F8H ; SPI 0 SPI ENABLE

256
SiLabs/DP_3A.inc

@ -0,0 +1,256 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;
; DP 3A hardware definition file
;
;**** **** **** **** ****
;*********************
; Device SiLabs F330
;*********************
$include (c8051f330.inc)
;**** **** **** **** ****
; Uses internal calibrated oscillator set to 24Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
CSEG AT 1A40h
Eep_ESC_Layout: DB "#DP3A# " ; ESC layout tag
DAMPED_TAIL_ENABLE EQU 1 ; Damped tail mode enabled
NFETON_DELAY EQU 2 ; Wait delay from pfets off to nfets on
PFETON_DELAY EQU 1 ; Wait delay from nfets off to pfets on
ADC_LIMIT_L EQU 128 ; Power supply measurement ADC value for which main motor power is limited (low byte)
ADC_LIMIT_H EQU 2 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT 0 definitions *
;*********************
; EQU 7 ;i
Rcp_In EQU 6 ;i
Mux_A EQU 5 ;i
; EQU 4 ;i
Mux_B EQU 3 ;i
Comp_Com EQU 2 ;i
Mux_C EQU 1 ;i
; EQU 0 ;i
P0_DIGITAL EQU NOT((1 SHL Mux_A)+(1 SHL Mux_B)+(1 SHL Mux_C)+(1 SHL Comp_Com))
P0_INIT EQU 0FFh
P0_PUSHPULL EQU 0
P0_SKIP EQU NOT(1 SHL Rcp_In) AND 0FFh
MACRO Read_Rcp_Int
mov A, P0
jnb Flags2.PGM_RCP_PWM_POL, ($+4) ; Is pwm polarity negative?
cpl A ; Yes - invert
ENDM
MACRO Rcp_Int_Enable
orl PCA0CPM0, #01h ; Interrupt enabled
ENDM
MACRO Rcp_Int_Disable
anl PCA0CPM0, #0FEh ; Interrupt disabled
ENDM
MACRO Rcp_Int_First
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #20h ; Capture rising edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #10h ; Capture falling edge
ENDM
MACRO Rcp_Int_Second
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #10h ; Capture falling edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #20h ; Capture rising edge
ENDM
MACRO Rcp_Clear_Int_Flag
clr CCF0 ; Clear interrupt flag
ENDM
;*********************
; PORT 1 definitions *
;*********************
Ref_Gnd EQU 7 ;o
Adc_Ip EQU 6 ;i
CpFET EQU 5 ;o
BpFET EQU 4 ;o
ApFET EQU 3 ;o
CnFET EQU 2 ;o
BnFET EQU 1 ;i
AnFET EQU 0 ;i
P1_DIGITAL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)+(1 SHL Ref_Gnd)
P1_INIT EQU (1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)+(1 SHL Adc_Ip) ; Setting pFET outputs turn them off
P1_PUSHPULL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_SKIP EQU 0
MACRO AnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
ENDM
MACRO AnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
ENDM
MACRO BnFET_on
setb P1.BnFET
ENDM
MACRO BnFET_off
clr P1.BnFET
ENDM
MACRO CnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
ENDM
MACRO CnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
ENDM
MACRO All_nFETs_Off
clr P1.AnFET
clr P1.BnFET
clr P1.CnFET
ENDM
MACRO ApFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
ENDM
MACRO ApFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
ENDM
MACRO BpFET_on
clr P1.BpFET
ENDM
MACRO BpFET_off
setb P1.BpFET
ENDM
MACRO CpFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
ENDM
MACRO CpFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
ENDM
MACRO All_pFETs_Off
setb P1.ApFET
setb P1.BpFET
setb P1.CpFET
ENDM
MACRO All_pFETs_On
clr P1.ApFET
clr P1.BpFET
clr P1.CpFET
ENDM
MACRO Set_Comp_Phase_A
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h ; Set comparator multiplexer to phase A
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h
ENDM
MACRO Set_Comp_Phase_B
mov CPT0MX, #11h ; Set comparator multiplexer to phase B
ENDM
MACRO Set_Comp_Phase_C
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h ; Set comparator multiplexer to phase C
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h
ENDM
MACRO Read_Comp_Out
mov A, CPT0CN ; Read comparator output
cpl A ; Invert output
ENDM
;*********************
; PORT B definitions *
;*********************
DebugPin EQU 0 ;o
P2_PUSHPULL EQU (1 SHL DebugPin)
;**********************
; MCU specific macros *
;**********************
MACRO Interrupt_Table_Definition
CSEG AT 0 ; Code segment start
jmp reset
CSEG AT 0Bh ; Timer0 interrupt
jmp t0_int
CSEG AT 2Bh ; Timer2 interrupt
jmp t2_int
CSEG AT 5Bh ; PCA interrupt
jmp pca_int
CSEG AT 73h ; Timer3 interrupt
jmp t3_int
ENDM
MACRO Initialize_Adc
mov REF0CN, #01h ; Enable reference buffer
mov ADC0CF, #0B8h ; ADC clock 1MHz
mov AMX0P, #(8+Adc_Ip) ; Select positive input
mov AMX0N, #11h ; Select negative input as ground
mov ADC0CN, #80h ; ADC enabled
ENDM
MACRO Start_Adc
mov ADC0CN, #90h ; ADC start
ENDM
MACRO Get_Adc_Status
mov A, ADC0CN
ENDM
MACRO Read_Adc_Result
mov Temp1, ADC0L
mov Temp2, ADC0H
ENDM
MACRO Stop_Adc
ENDM

267
SiLabs/Hex files/DP 3A Main.hex

@ -0,0 +1,267 @@
:03000000020CD21D
:03000B0002008070
:03002B000201D9F6
:03005B000202A5F9
:0300730002029BEB
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C290C291AC
:1000A000C29220620201B27401D5E0FDC293C294F3
:1000B000C295D0E0D0D0C2D3D2AF3221C9C29120F4
:1000C0006E02D290306E02D29221C9206E02C2928C
:1000D000306E02C290D29121C9206E02C290306E61
:1000E00002C292206E02D292306E02D29021C97466
:1000F00002206E02D293306E02D295206E02D2950B
:10010000306E02D293D5E0E9C291206E02D29030D7
:100110006E02D29221C97402206E02D293306E0216
:10012000D295D294D5E0F1C291206E02D290306E79
:1001300002D29221C97402D294206E02D293306E00
:1001400002D295D5E0F1206E02C292306E02C290CA
:10015000D29121C97402D294206E02D295306E02DF
:10016000D293D5E0F1206E02C292306E02C290D2DC
:100170009121C97402206E02D295306E02D293D2C0
:1001800094D5E0F1206E02C290306E02C292206ED1
:1001900002D292306E02D29021C97402206E02D235
:1001A00095306E02D293206E02D293306E02D295B9
:1001B000D5E0E9206E02C290306E02C292206E023B
:1001C000D292306E02D29021C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E60278FA53DACF206F03D3
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E60279FAC3E89970CE75274091
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024156E54BF8C260C3E8955050A3
:1002400005E550C333F8E52B54F0700A8821A8590E
:10025000B8030385212320CF09D0E0D0D0C2D3D268
:10026000AF32C2CF7801E54BC394014005754E0013
:100270004179E54E046002054EE559B40203853D1F
:1002800021C3E5229521600A4004152241900522F0
:10029000D8E7D0E0D0D0C2D3D2AF32C2AF53917F33
:1002A000C258D2AF32C2AFC0D0C0E0D2D3A8FBA9EF
:1002B000FCC2D830610241FE53DACF206F0343DA2B
:1002C00010306F0343DA20D261E580306F01F420F3
:1002D000E60241DA8825892661CE53DACF206F0302
:1002E00043DA20306F0343DA10C2D8C2617800E5E8
:1002F00080306F01F430E60261C1884B61C153DA8E
:10030000CF206F0343DA20306F0343DA10C261203D
:100310005902617853DACF206F0343DA10306F034C
:1003200043DA20C2D8D2618849894AC3E89547F8A0
:10033000E99548F9E4FBC3E89468E994015006E4C0
:10034000D2E3FB6170C3E894D0E994025006E4D292
:10035000E2FB6170C3E894A0E994055006E4D2E1A1
:10036000FB6170C3E89440E9940B5004E4D2E0FBD5
:10037000A849A94A88478948C3E89525F8E99526F8
:10038000F9306B0261A5306A02619EE9C313F9E896
:1003900013F8306902619EE9C313F9E813F8E9C361
:1003A00013F9E813F8C3E894FAE99400400278FAE4
:1003B000A94B884B20590261C1740FF4552D4BF5A0
:1003C0002D752740D26030590261CE53DAFE75296F
:1003D00020D0E0D0D0C2D3D2AF32790161F279031C
:1003E00061F2790A61F2791E61F2796461F279C889
:1003F00061F27817E4D5E0FDD8FAD9F6227A187BB5
:100400007881157A157B8C81157A127BB481157AE7
:100410000F7BC881157902B26EE4C294D5E0FD204D
:100420006E02D290306E02D292E540D5E0FD206E91
:1004300002C290306E02C292E540D5E0FDD9D8EA02
:10044000F8D5E0FDD8FBDBCDD29422E559B4030208
:10045000818EC3E5339400E5349405401285212351
:10046000E4F535F536F537F538F539F53E818EE5A5
:0F04700022F43333F913F8E9540104F9E854FE88
:10047F00C39440F8E99400F988358936753E012216
:10048F00E53E6039C3E53413F9E53313F8C3E535B9
:10049F0098F8E53699F930E70BC3E89480E994FFB3
:1004AF00401381C8C3E8947FE99400500281C87853
:1004BF007F790081C8788079FF883A893B22E53EB1
:1004CF006052E537253AF8E538353BF9E539353BE4
:1004DF00FA30E708C3EA94F04012A101C3EA940F7F
:1004EF005002A10178FF79FF7A0FA10178007900FE
:1004FF007AF0C3E523954F5009C3E52394014009D2
:10050F00A11DE53A20E70DA11DE53A30E706883732
:10051F0089388A3922E53E70030205CE853A20E4F8
:10052F00300701F4F9C3E53A33F8E933F9E5573009
:10053F00E002A154C3E5579404603AE9A2E713F926
:10054F00E813F8A184E9FBE8FAEBA2E713FBEA133F
:10055F00FAE82AF8E93BF9E557C394056017E9A2D1
:10056F00E713F9E813F8E557C394036008E9A2E726
:10057F0013F9E813F8E930E70BC3E89480E994FF27
:10058F004013A1A8C3E8947FE994005002A1A87872
:10059F007F7900A1A8788079FFE820E713C3E522CF
:1005AF0098F84008C3E894014002A1CC7801A1CC8F
:1005BF00E8F424012522F84002A1CC78FF883C22E0
:1005CF00E53E700302066FA838A939E55830E002FE
:1005DF00A1F2C3E5589404603AE9A2E713F9E813CE
:1005EF00F8C122E9FBE8FAEBA2E713FBEA13FAE8FA
:1005FF002AF8E93BF9E558C394056017E9A2E71318
:10060F00F9E813F8E558C394036008E9A2E713F972
:10061F00E813F8E930E70BC3E89400E994FF4013BF
:10062F00C146C3E894FFE994005002C14678FF79B0
:10063F0000C146780079FFE920E713C3E53C98F83D
:10064F004008C3E894014002C16D7801C16DE8F420
:10065F002401253CF8E934004002C16D78FF88235E
:10066F002275E890E5E820ECF8A8BDA9BE75528088
:10067F00755302755101C3748033FA740233FBC38F
:10068F00E89AE99B401D8A528B53755102EA2480E8
:10069F00FAEB3402FBC3E89AE99B40078A528B536B
:1006AF00755103AA52AB53C3E55313F9E55213F82F
:1006BF00C3E913F9E813F8C3E913F9E813F8C3E929
:1006CF0013F9E813F8C3E913FDE813FCE82CF8E974
:1006DF003DF9C3E55A94016009C3E55A9403600FCD
:1006EF00E108C3EA98FAEB99FB8A528B53E108EAC7
:1006FF0028FAEB39FB8A528B532275E89022E5E8F2
:10070F0020ECFBA8BDA9BEC3E894FFE994035011E8
:10071F00C3E89552E995535008E54F600B154FE12B
:10072F0037E54FF46002054FA84FC3E523985002F9
:10073F00A823882422305C027832305D0278503052
:10074F005E027850305F027828E52B54F06027A9BD
:10075F005DB90302E17FC313855D28204002C313F7
:10076F00204206C8C398F8E17F28F8500374FFF8B9
:10077F00882188238824227545707546177AFF7B58
:10078F003F8A438B448A3F8B407B1F8A418B428A2F
:10079F00348A3322A845A946E1ADA83FA9407591F7
:1007AF0000C3E498F594E499F595759104D25875C2
:1007BF00C820A8CCA9CD75C824AA31AB32883189FD
:1007CF0032C3E89AF8E99BF9AA33AB34C3EB13FDB4
:1007DF00EA13FCC3ED13FDEC13FCC3EA9CFAEB9D8B
:1007EF00FBEA28FAEB39FB8A338B3440012275344C
:1007FF00FF7533FF223058020104759100C3E49551
:10080F0041F594E49542F595759104D25822A93497
:10081F00A8337A04C3E913F9E813F8DAF7C3E894B5
:10082F000AF8E99400F94009C3E8940AE9940050E2
:10083F0004780AE4F988438944883F8940C3E9135F
:10084F00F9E813F88841894222305802015875910E
:10085F0000C3E49533F594E49534F595759104D27E
:0E086F005822D2AF20580122E524F4C4C3134E
:10087D00540704F9D2AF0000C2AF306203305AF40E
:10088D00780D206D027804C3E58B9840F3E59BF459
:10089D00F520300603020871D9F3D2AF22D2AF2072
:1008AD00580122E524F4C4C313540704F9D2AF0050
:1008BD0000C2AF306203305AF4780D206D02780417
:1008CD00C3E58B9840F3E59BF4F520200603020861
:1008DD00AAD9F3D2AF22759100C3E49543F594E400
:1008ED009544F595759104D2582230580201F7229E
:1008FD00C2AF306203900173D294206E02C2933066
:10090D006E02C295759F11D2AF22C2AF30620390B5
:10091D0001542062039000CB206E02C292306E0211
:10092D00C290305A02D291206E03759F01306E0332
:10093D00759F21D2AF22C2AF306203900135206E78
:10094D0002D293306E02D295206E02C295306E02A5
:10095D00C293206E03759F21306E03759F01D2AF38
:10096D0022C2AF3062039001162062039000BDC217
:10097D0091305A0A206E02D290306E02D292759F3B
:10098D0011D2AF22C2AF3062039000EF206E02D2BF
:10099D0095306E02D293C294206E03759F01306E16
:1009AD0003759F21D2AF22C2AF30620390019A200E
:1009BD0062039000D9206E02C290306E02C2923056
:1009CD005A0A206E02D292306E02D290206E0375BA
:1009DD009F21306E03759F01D2AF229000BBC29054
:1009ED00C291C292D293D294D29522C3E54594D0AE
:1009FD00E5469407500122C3E545940AF8E546946F
:100A0D0000F9884589462230580241142275570451
:100A1D00755804755901755A02755D03D26D7402CE
:100A2D0030E102C26DC26E740130E102D26EC26F4E
:100A3D00740130E102D26F22E493F822438F015307
:100A4D008FFD75B7A575B7F1E8F0538FFE22438F73
:100A5D0002438F0175B7A575B7F1901A0DF0538F3D
:100A6D00FC22901A0D78A55149901A0E785A5149C9
:100A7D0022901A0D5145C3E894A57058901A0E5145
:100A8D0045C3E8945A704D901A0351458857901AF2
:100A9D000451458858901A0551458859901A0651A8
:100AAD0045885A901A095145885D901A0A5145D2C8
:100ABD006DE830E102C26D901A0B5145C26EE830FF
:100ACD00E102D26E901A0C5145C26FE830E102D2AC
:100ADD006F020AE6511A120B07227A307980901AAA
:100AED00405145E8F709A3DAF8227A307980901A57
:100AFD0040E7F8514909A3DAF822C2AF51E7515B3B
:100B0D00901A0078025149901A0178005149901AB3
:100B1D000278075149901A03A8575149901A04A811
:100B2D00585149901A05A8595149901A06A85A5179
:100B3D0049901A09A85D5149901A0A7801206D0251
:100B4D0078025149901A0B7801306E0278025149A2
:100B5D00901A0C7801306F027802514951F7516F9C
:100B6D0022AB54A855EBC39401602AEBC3940260E9
:100B7D0029EBC394036028EBC394046027EBC39463
:100B8D00056026EBC394066025EBC39407602AEB42
:100B9D00C39408602F8857020BDC8858020BDC8841
:100BAD0059020BDC885A020BDC885D020BDCD26D1E
:100BBD00E830E102C26D020BDCC26EE830E102D218
:100BCD006E020BDCC26FE830E102D26F020BDC2249
:100BDD007C051203EEDCFB22C2AF1203FD120403EF
:100BED0012040912040F1203E21203FD1204031280
:100BFD00040912040F1203E21203FD12040312047E
:100C0D000912040FD2AF22AC54AD55C2AF1203FD81
:100C1D001203FD1203FD1203E2DCF212040F1203A4
:100C2D00E2DDF8D2AF22C2AF12040FD2AF1203EA47
:100C3D00C3E54B940150EFC2AF1203FD1203E21254
:100C4D0003FDD2AF1203EAC3E54B94FA40E971E517
:100C5D0071DD71DD75540175550175560091147C6A
:0F0C6D00051203EEC3E54B9401500D716E710734
:100C7C0071E5C2AF43EF1071DDDCE70556C3E556F5
:100C8C009403500280D871DD05557805C3E5549462
:100C9C000370027803C3E554940470027803C3E52F
:100CAC005494054002780208C3E55598500280AB75
:100CBC0071DD71DD0554C3E554940950028099C26D
:100CCC00AF43EF1071DDC2D353D9BF7581C043B2AE
:100CDC0003E5B324044002F5B37580FF7590787575
:100CEC00A40075A53F75A60175F1D175F2BF75D439
:100CFC00BF75D50075E24131E8E4F8F6D8FD511A1C
:100D0C00517E31E8758E01206D03758E007588500B
:100D1C0075890275C82475910475D8401203EE12BA
:100D2C0003FD1203E61204031203E6120409120374
:100D3C00E675A82275B80275E69075F610759B805D
:100D4C0075D10175BCB875BB0E75BA1175E880D23A
:100D5C00AF12067043DA01C2D8C2611203EED25947
:100D6C007A051203DE3060FDE54BC3940240F1E5D9
:100D7C002D540F854D4CF54DB54CE5DAE5C2595364
:100D8C00DACF206F0343DA20306F0343DA10C2D876
:100D9C00C261C2AF1203FD1203FD1203FDD2AF12EA
:100DAC0003EE753D001203DEC3E54B94FA4002815D
:100DBC0033C3E54B953D4003854B3DC3E54B940157
:100DCC0050E3C2AF12040F12040F12040FD2AF1271
:100DDC0003EE1203DEC3E54B940140F631E8E4F573
:100DEC0021F522F523F524754FFF855C50306E02FA
:100DFC00F535F536F537F538F539F53EF52BF54E75
:100E0C00120786D262D25C12074431B41203DA1193
:100E1C00FD1203DA1203DA31171203DE3143120327
:100E2C00DE1203DE316E1203E231911203DE120385
:100E3C00DAC25CD25D12074431B41207A3111D3122
:100E4C00F8511411FD1207A3111D31F8511431176B
:100E5C001207A3111D31F8511431431207A3111DB0
:100E6C0031F85114316E1207A3111D31F8511431A0
:100E7C00911207A3111D31F8C3E54594D0E54694B2
:100E8C00074004511480B1C25DD25E120744753024
:100E9C0002511431B41207A3111D31F8511411FD74
:100EAC001207A3111D31F8511431171207A3111D8C
:100EBC0031F8511431431207A3111D31F85114317B
:100ECC006E1207A3111D31F8511431911207A311A1
:100EDC001D31F8E530146006F530511480B5C25E52
:100EEC00D25F120744511431B41207A91104111D19
:100EFC00115875300111AA20580302106E11E3111C
:100F0C00F711FD1207A91104111D11581171205868
:100F1C000302106E11E311F731171207A911041116
:100F2C001D115811AA20580302106E11E311F7314C
:100F3C00431207A91104111D1158117120580302F5
:100F4C00106E11E311F7316E1207A91104111D1166
:100F5C005811AA20580302106E11E311F7319112A7
:100F6C0007A91104111D1158117120580302106E9C
:100F7C0011E311F731B41207A91104111D1158E531
:100F8C0030146004F530E101206C11C2AFC262D2A2
:100F9C0093D294D295C2949000D9D2AF11AA205872
:100FAC000302106E11E312044B11F711FD1207A985
:100FBC001104111D1158117120580302106E11E308
:100FCC0012048F11F731171207A91104111D1158B2
:100FDC0011AA20580302106E11E31204CD11F7313F
:100FEC00431207A91104111D115811712058030245
:100FFC00106E1208E31205241208F712096E12077C
:10100C00A912080412081D1208581208AA20580325
:10101C0002106E1208E31205CF1208F71209911292
:10102C0007A912080412081D120858120871120799
:10103C000920580302106E1208E312070D1208F76C
:10104C001209B41207A912080412081D120858C27A
:10105C005FC3E54E9401500AC3E53494F05003028B
:0E106C000FA81209E8E4F521F522F523F5247A
:03107A00020D6CF8
:0F1A000002000704040102030303020101A55AB7
:101A40002344503341232020202020202020202008
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

256
SiLabs/Hex files/DP 3A Tail.hex

@ -0,0 +1,256 @@
:03000000020C04EB
:03000B0002008070
:03002B000201D9F6
:03005B000202BFDF
:030073000202B5D1
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C290C291AC
:1000A000C29220620201B27401D5E0FDC293C294F3
:1000B000C295D0E0D0D0C2D3D2AF3221C9C29120F4
:1000C0006E02D290306E02D29221C9206E02C2928C
:1000D000306E02C290D29121C9206E02C290306E61
:1000E00002C292206E02D292306E02D29021C97466
:1000F00002206E02D293306E02D295206E02D2950B
:10010000306E02D293D5E0E9C291206E02D29030D7
:100110006E02D29221C97402206E02D293306E0216
:10012000D295D294D5E0F1C291206E02D290306E79
:1001300002D29221C97402D294206E02D293306E00
:1001400002D295D5E0F1206E02C292306E02C290CA
:10015000D29121C97402D294206E02D295306E02DF
:10016000D293D5E0F1206E02C292306E02C290D2DC
:100170009121C97402206E02D295306E02D293D2C0
:1001800094D5E0F1206E02C290306E02C292206ED1
:1001900002D292306E02D29021C97402206E02D235
:1001A00095306E02D293206E02D293306E02D295B9
:1001B000D5E0E9206E02C290306E02C292206E023B
:1001C000D292306E02D29021C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E60278FA53DACF206F03D3
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E60279FAC3E89970CE752718B9
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024189E54BF8C260C394F04003C6
:1002400074F0F8C4540F28F8A95BB90302416BC3DA
:1002500013C313855B28204002C313204206C8C382
:1002600098F8416B28F8500374FFF8C3E895505094
:1002700005E550C333F8E52B54F0700D8821A859DB
:10028000B8030685212385212420CF09D0E0D0D0D2
:10029000C2D3D2AF32C2CF7801E54BC3940140053F
:1002A000754E0041ACE54E046002054ED0E0D0D062
:1002B000C2D3D2AF32C2AF53917FC258D2AF32C293
:1002C000AFC0D0C0E0D2D3A8FBA9FCC2D830610235
:1002D000611853DACF206F0343DA10306F0343DA2B
:1002E00020D261E580306F01F420E60241F48825D8
:1002F000892661E853DACF206F0343DA20306F0399
:1003000043DA10C2D8C2617800E580306F01F43062
:10031000E60261DB884B61DB53DACF206F0343DAFF
:1003200020306F0343DA10C261205902619253DA20
:10033000CF206F0343DA10306F0343DA20C2D8D2E4
:10034000618849894AC3E89547F8E99548F9E4FB8B
:10035000C3E89468E994015006E4D2E3FB618AC3E0
:10036000E894D0E994025006E4D2E2FB618AC3E843
:1003700094A0E994055006E4D2E1FB618AC3E894B5
:1003800040E9940B5004E4D2E0FBA849A94A88470D
:100390008948C3E89525F8E99526F9306B0261BFD5
:1003A000306A0261B8E9C313F9E813F830690261F1
:1003B000B8E9C313F9E813F8E9C313F9E813F8C36C
:1003C000E894FAE99400400278FAA94B884B205946
:1003D0000261DB740FF4552D4BF52D752718D26093
:1003E00030590261E853DAFE752906D0E0D0D0C258
:1003F000D3D2AF327901810C7903810C790A810C57
:10040000791E810C7964810C79C8810C7817E4D548
:10041000E0FDD8FAD9F6227A187B78812F7A157BFD
:100420008C812F7A127BB4812F7A0F7BC8812F7930
:1004300002B26EE4C294D5E0FD206E02D290306E1E
:1004400002D292E540D5E0FD206E02C290306E02ED
:10045000C292E540D5E0FDD9D8EAF8D5E0FDD8FB59
:10046000DBCDD29422E559B4030281A8C3E53394CD
:0F04700000E53494054012852123E4F535F53677
:10047F00F537F538F539F53E81A8E522F43333F930
:10048F0013F8E9540104F9E854FEC39440F8E994D1
:10049F0000F988358936753E0122E53E6039C3E59E
:1004AF003413F9E53313F8C3E53598F8E53699F9C0
:1004BF0030E70BC3E89480E994FF401381E2C3E86F
:1004CF00947FE99400500281E2787F790081E2788D
:1004DF008079FF883A893B22E53E6052E537253A1D
:1004EF00F8E538353BF9E539353BFA30E708C3EA2B
:1004FF0094F04012A11BC3EA940F5002A11B78FF86
:10050F0079FF7A0FA11B780079007AF0C3E5239564
:10051F004F5009C3E52394014009A137E53A20E77D
:10052F000DA137E53A30E706883789388A3922E551
:10053F003E70030205E8853A20E4300701F4F9C361
:10054F00E53A33F8E933F9E55730E002A16EC3E538
:10055F00579404603AE9A2E713F9E813F8A19EE96A
:10056F00FBE8FAEBA2E713FBEA13FAE82AF8E93BF8
:10057F00F9E557C394056017E9A2E713F9E813F8F3
:10058F00E557C394036008E9A2E713F9E813F8E904
:10059F0030E70BC3E89480E994FF4013A1C2C3E88E
:1005AF00947FE994005002A1C2787F7900A1C278AC
:1005BF008079FFE820E713C3E52298F84008C3E8E5
:1005CF0094014002A1E67801A1E6E8F42401252276
:1005DF00F84002A1E678FF883C22E53E7003020650
:1005EF0089A838A939E55830E002C10CC3E5589401
:1005FF0004603AE9A2E713F9E813F8C13CE9FBE814
:10060F00FAEBA2E713FBEA13FAE82AF8E93BF9E55C
:10061F0058C394056017E9A2E713F9E813F8E558F2
:10062F00C394036008E9A2E713F9E813F8E930E788
:10063F000BC3E89400E994FF4013C160C3E894FF33
:10064F00E994005002C16078FF7900C160780079A9
:10065F00FFE920E713C3E53C98F84008C3E894018D
:10066F004002C1877801C187E8F42401253CF8E9ED
:10067F0034004002C18778FF882322222222305C77
:10068F00027832305D027878305E027850305F0247
:10069F007828E52B54F06027A95DB90302C1C8C3C0
:1006AF0013855D28204002C313204206C8C398F863
:1006BF00C1C828F8500374FFF888218823882422A2
:1006CF007545707546177AFF7B3F8A438B448A3F87
:1006DF008B407B1F8A418B428A348A3322A845A9DB
:1006EF0046C1F6A83FA940759100C3E498F594E47C
:1006FF0099F595759104D25875C820A8CCA9CD75D8
:10070F00C824AA31AB3288318932C3E89AF8E99B01
:10071F00F9AA33AB34C3EB13FDEA13FCC3ED13FD9E
:10072F00EC13FCC3EA9CFAEB9DFBEA28FAEB39FBCE
:10073F008A338B344001227534FF7533FF223058D2
:10074F0002E14D759100C3E49541F594E49542F5AE
:10075F0095759104D25822A934A8337A04C3E913AA
:10076F00F9E813F8DAF7C3E8940AF8E99400F940C6
:10077F0009C3E8940AE994005004780AE4F988431D
:10078F008944883F8940C3E913F9E813F888418900
:10079F004222305802E1A1759100C3E49533F594DC
:1007AF00E49534F595759104D25822D2AF205801B3
:1007BF0022E524F4C4C313540704F9D2AF0000C2D6
:1007CF00AF306203305AF4780D206D027804C3E520
:1007DF008B9840F3E59BF4F5203006030207BAD956
:1007EF00F3D2AF22D2AF20580122E524F4C4C313B1
:1007FF00540704F9D2AF0000C2AF306203305AF48D
:10080F00780D206D027804C3E58B9840F3E59BF4D7
:10081F00F5202006030207F3D9F3D2AF227591001A
:10082F00C3E49543F594E49544F595759104D25836
:10083F0022305802014022C2AF306203900173D2BE
:10084F0094206E02C293306E02C295759F11D2AF83
:10085F0022C2AF3062039001542062039000CB207C
:0E086F006E02C292306E02C290305A02D291D6
:10087D00206E03759F01306E03759F21D2AF22C28A
:10088D00AF306203900135206E02D293306E02D2EA
:10089D0095206E02C295306E02C293206E03759F35
:1008AD0021306E03759F01D2AF22C2AF306203902B
:1008BD0001162062039000BDC291305A0A206E02CB
:1008CD00D290306E02D292759F11D2AF22C2AF304C
:1008DD0062039000EF206E02D295306E02D293C269
:1008ED0094206E03759F01306E03759F21D2AF2248
:1008FD00C2AF30620390019A2062039000D9206E3E
:10090D0002C290306E02C292305A0A206E02D2920A
:10091D00306E02D290206E03759F21306E03759F4D
:10092D0001D2AF229000BBC290C291C292D293D29B
:10093D0094D29522C3E54594D0E546940750012203
:10094D00C3E545943CF8E5469400F988458946226F
:10095D00305802215D22755B03755C03755D03C222
:10096D006D740330E002D26DC26CC3740394034006
:10097D0002D26CC26E740130E102D266C26F740194
:10098D0030E102D26F75590322E493F822438F01AF
:10099D00538FFD75B7A575B7F1E8F0538FFE224360
:1009AD008F02438F0175B7A575B7F1901A0DF053EE
:1009BD008FFC22901A0D785A319A901A0E78A53123
:1009CD009A22901A0D3196C3E8945A7057901A0EC8
:1009DD003196C3E894A5704C901A073196885B90B8
:1009ED001A083196885C901A093196885D901A0A1A
:1009FD003196C26DE830E002D26DC26CC3E894034B
:100A0D004002D26C901A0B3196C26EE830E102D2E0
:100A1D006E901A0C3196C26FE830E102D26F7559A3
:100A2D0003020A363163120A57227A307980901AFE
:100A3D00403196E8F709A3DAF8227A307980901AD6
:100A4D0040E7F8319A09A3DAF822C2AF513731AC39
:100A5D00901A007802319A901A017800319A901A02
:100A6D00027807319A901A07A85B319A901A08A854
:100A7D005C319A901A09A85D319A901A0A78012072
:100A8D006D027802306C027803319A901A0B78015E
:100A9D00306E027802319A901A0C7801306F02781C
:100AAD0002319A514731C022AB54A855EBC3940182
:100ABD00601EEBC39402601DEBC39403601CEBC37B
:100ACD009404601BEBC39405602AEBC39406602F5E
:100ADD00885B020B17885C020B17885D020B17C22F
:100AED006DE830E002D26DC26CC3E894034002D2CF
:100AFD006C020B17C26EE830E102D26E020B17C208
:100B0D006FE830E102D26F020B17227C0512040848
:100B1D00DCFB22C2AF12041712041D1204231204AF
:100B2D00291203FC12041712041D120423120429A6
:100B3D001203FC12041712041D120423120429D2ED
:100B4D00AF22AC54AD55C2AF1204171204171204E4
:100B5D00171203FCDCF21204291203FCDDF8D2AFEC
:100B6D0022C2AF120429D2AF120404C3E54B940183
:100B7D0050EFC2AF1204171203FC120417D2AF12BA
:100B8D000404C3E54B94FA40E9712071187118758E
:100B9D005401755501755600714F7C05120408C33B
:100BAD00E54B9401500D51B551577120C2AF43EF34
:100BBD00107118DCE70556C3E5569403500280D832
:100BCD00711805557805C3E554940440027803C3A4
:100BDD00E55494054002780208C3E555985002800B
:100BED00B4711871180554C3E5549407500280A2CE
:100BFD00C2AF43EF107118C2D353D9BF7581C04333
:100C0D00B203E5B324044002F5B37580FF75907807
:100C1D0075A40075A53F75A60175F1D175F2BF7567
:100C2D00D4BF75D50075E2413131E4F8F6D8FD3108
:100C3D006331CF3131758E01206D03758E0075884E
:100C4D005075890275C82475910475D84012040831
:100C5D0012041712040012041D12040012042312B0
:0E0C6D00040075A82275B80275E69075F610A1
:100C7B00759B8075D10175BCB875BB0E75BA1175B6
:100C8B00E880D2AF12068A43DA01C2D8C2611204DD
:100C9B0008D2597A051203F83060FDE54BC3940274
:100CAB0040F1E52D540F854D4CF54DB54CE5DAE58E
:100CBB00C25953DACF206F0343DA20306F0343DA84
:100CCB0010C2D8C261C2AF12041712041712041754
:100CDB00D2AF120408753D001203F8C3E54B94FA2A
:100CEB004002616EC3E54B953D4003854B3DC3E52B
:100CFB004B940150E3C2AF120429120429120429A8
:100D0B00D2AF1204081203F8C3E54B940140F6313D
:100D1B0031E4F521F522F523F524754FFF855C5061
:100D2B00306E02F535F536F537F538F539F53EF514
:100D3B002BF54E1206CFD262D25C12068D11FD122C
:100D4B0003F411461203F41203F411601203F811A9
:100D5B008C1203F81203F811B71203FC11DA120309
:100D6B00F81203F4C25CD25D12068D11FD1206EC73
:100D7B001207663141315D11461206EC12076631DE
:100D8B0041315D11601206EC1207663141315D1184
:100D9B008C1206EC1207663141315D11B71206EC6D
:100DAB001207663141315D11DA1206EC120766311A
:100DBB0041C3E54594D0E54694074004315D80ABD3
:100DCB00C25DD25E12068D753002315D11FD1206C9
:100DDB00EC1207663141315D11461206EC120766C3
:100DEB003141315D11601206EC1207663141315D04
:100DFB00118C1206EC1207663141315D11B71206E8
:100E0B00EC1207663141315D11DA1206EC120766FE
:100E1B003141E530146006F530315D80AFC25ED2F2
:100E2B005F12068D315D11FD1206F212074D12078E
:100E3B00661207A17530011207F3205803020FCA7F
:100E4B00112C114011461206F212074D12076612B1
:100E5B0007A11207BA205803020FCA112C11401117
:100E6B00601206F212074D1207661207A11207F362
:100E7B00205803020FCA112C1140118C1206F212CA
:100E8B00074D1207661207A11207BA205803020F6B
:100E9B00CA112C114011B71206F212074D12076638
:100EAB001207A11207F3205803020FCA112C11408D
:100EBB0011DA1206F212074D1207661207A112077A
:100ECB00BA205803020FCA112C114011FD1206F261
:100EDB0012074D1207661207A1E530146004F530B6
:100EEB00C142206C11C2AFC262D293D294D295C2CE
:100EFB00949000D9D2AF1207F3205803020FCA11F6
:100F0B002C120465114011461206F212074D1207FE
:100F1B00661207A11207BA205803020FCA112C122E
:100F2B0004A9114011601206F212074D1207661246
:100F3B0007A11207F3205803020FCA112C1204E762
:100F4B001140118C1206F212074D1207661207A1FF
:100F5B001207BA205803020FCA112C12053E11407A
:100F6B0011B71206F212074D1207661207A11207EC
:100F7B00F3205803020FCA112C1205E9114011DAA4
:100F8B001206F212074D1207661207A11207BA12C8
:100F9B00068B205803020FCA112C12068C1140111C
:100FAB00FD1206F212074D1207661207A1C25FC3AC
:100FBB00E54E94645009C3E53494F05002E10131DD
:0C0FCB0031E4F521F522F523F524A110F6
:0F1A0000020007040401020303030301015AA5B6
:101A40002344503341232020202020202020202008
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

267
SiLabs/Hex files/Supermicro_3p5A Main.hex

@ -0,0 +1,267 @@
:03000000020CD21D
:03000B0002008070
:03002B000201D9F6
:03005B000202A5F9
:0300730002029BEB
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C290C291AC
:1000A000C29220620201B27401D5E0FDC293C294F3
:1000B000C295D0E0D0D0C2D3D2AF3221C9C29120F4
:1000C0006E02D290306E02D29221C9206E02C2928C
:1000D000306E02C290D29121C9206E02C290306E61
:1000E00002C292206E02D292306E02D29021C97466
:1000F00002206E02D293306E02D295206E02D2950B
:10010000306E02D293D5E0E9C291206E02D29030D7
:100110006E02D29221C97402206E02D293306E0216
:10012000D295D294D5E0F1C291206E02D290306E79
:1001300002D29221C97402D294206E02D293306E00
:1001400002D295D5E0F1206E02C292306E02C290CA
:10015000D29121C97402D294206E02D295306E02DF
:10016000D293D5E0F1206E02C292306E02C290D2DC
:100170009121C97402206E02D295306E02D293D2C0
:1001800094D5E0F1206E02C290306E02C292206ED1
:1001900002D292306E02D29021C97402206E02D235
:1001A00095306E02D293206E02D293306E02D295B9
:1001B000D5E0E9206E02C290306E02C292206E023B
:1001C000D292306E02D29021C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E60278FA53DACF206F03D3
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E60279FAC3E89970CE75274091
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024156E54BF8C260C3E8955050A3
:1002400005E550C333F8E52B54F0700A8821A8590E
:10025000B8030385212320CF09D0E0D0D0C2D3D268
:10026000AF32C2CF7801E54BC394014005754E0013
:100270004179E54E046002054EE559B40203853D1F
:1002800021C3E5229521600A4004152241900522F0
:10029000D8E7D0E0D0D0C2D3D2AF32C2AF53917F33
:1002A000C258D2AF32C2AFC0D0C0E0D2D3A8FBA9EF
:1002B000FCC2D830610241FE53DACF206F0343DA2B
:1002C00010306F0343DA20D261E580306F01F420F3
:1002D000E60241DA8825892661CE53DACF206F0302
:1002E00043DA20306F0343DA10C2D8C2617800E5E8
:1002F00080306F01F430E60261C1884B61C153DA8E
:10030000CF206F0343DA20306F0343DA10C261203D
:100310005902617853DACF206F0343DA10306F034C
:1003200043DA20C2D8D2618849894AC3E89547F8A0
:10033000E99548F9E4FBC3E89468E994015006E4C0
:10034000D2E3FB6170C3E894D0E994025006E4D292
:10035000E2FB6170C3E894A0E994055006E4D2E1A1
:10036000FB6170C3E89440E9940B5004E4D2E0FBD5
:10037000A849A94A88478948C3E89525F8E99526F8
:10038000F9306B0261A5306A02619EE9C313F9E896
:1003900013F8306902619EE9C313F9E813F8E9C361
:1003A00013F9E813F8C3E894FAE99400400278FAE4
:1003B000A94B884B20590261C1740FF4552D4BF5A0
:1003C0002D752740D26030590261CE53DAFE75296F
:1003D00020D0E0D0D0C2D3D2AF32790161F279031C
:1003E00061F2790A61F2791E61F2796461F279C889
:1003F00061F27817E4D5E0FDD8FAD9F6227A187BB5
:100400007881157A157B8C81157A127BB481157AE7
:100410000F7BC881157902B26EE4C294D5E0FD204D
:100420006E02D290306E02D292E540D5E0FD206E91
:1004300002C290306E02C292E540D5E0FDD9D8EA02
:10044000F8D5E0FDD8FBDBCDD29422E559B4030208
:10045000818EC3E5339400E5349405401285212351
:10046000E4F535F536F537F538F539F53E818EE5A5
:0F04700022F43333F913F8E9540104F9E854FE88
:10047F00C39440F8E99400F988358936753E012216
:10048F00E53E6039C3E53413F9E53313F8C3E535B9
:10049F0098F8E53699F930E70BC3E89480E994FFB3
:1004AF00401381C8C3E8947FE99400500281C87853
:1004BF007F790081C8788079FF883A893B22E53EB1
:1004CF006052E537253AF8E538353BF9E539353BE4
:1004DF00FA30E708C3EA94F04012A101C3EA940F7F
:1004EF005002A10178FF79FF7A0FA10178007900FE
:1004FF007AF0C3E523954F5009C3E52394014009D2
:10050F00A11DE53A20E70DA11DE53A30E706883732
:10051F0089388A3922E53E70030205CE853A20E4F8
:10052F00300701F4F9C3E53A33F8E933F9E5573009
:10053F00E002A154C3E5579404603AE9A2E713F926
:10054F00E813F8A184E9FBE8FAEBA2E713FBEA133F
:10055F00FAE82AF8E93BF9E557C394056017E9A2D1
:10056F00E713F9E813F8E557C394036008E9A2E726
:10057F0013F9E813F8E930E70BC3E89480E994FF27
:10058F004013A1A8C3E8947FE994005002A1A87872
:10059F007F7900A1A8788079FFE820E713C3E522CF
:1005AF0098F84008C3E894014002A1CC7801A1CC8F
:1005BF00E8F424012522F84002A1CC78FF883C22E0
:1005CF00E53E700302066FA838A939E55830E002FE
:1005DF00A1F2C3E5589404603AE9A2E713F9E813CE
:1005EF00F8C122E9FBE8FAEBA2E713FBEA13FAE8FA
:1005FF002AF8E93BF9E558C394056017E9A2E71318
:10060F00F9E813F8E558C394036008E9A2E713F972
:10061F00E813F8E930E70BC3E89400E994FF4013BF
:10062F00C146C3E894FFE994005002C14678FF79B0
:10063F0000C146780079FFE920E713C3E53C98F83D
:10064F004008C3E894014002C16D7801C16DE8F420
:10065F002401253CF8E934004002C16D78FF88235E
:10066F002275E890E5E820ECF8A8BDA9BE75528088
:10067F00755302755101C3748033FA740233FBC38F
:10068F00E89AE99B401D8A528B53755102EA2480E8
:10069F00FAEB3402FBC3E89AE99B40078A528B536B
:1006AF00755103AA52AB53C3E55313F9E55213F82F
:1006BF00C3E913F9E813F8C3E913F9E813F8C3E929
:1006CF0013F9E813F8C3E913FDE813FCE82CF8E974
:1006DF003DF9C3E55A94016009C3E55A9403600FCD
:1006EF00E108C3EA98FAEB99FB8A528B53E108EAC7
:1006FF0028FAEB39FB8A528B532275E89022E5E8F2
:10070F0020ECFBA8BDA9BEC3E894FFE994035011E8
:10071F00C3E89552E995535008E54F600B154FE12B
:10072F0037E54FF46002054FA84FC3E523985002F9
:10073F00A823882422305C027832305D0278503052
:10074F005E027850305F027828E52B54F06027A9BD
:10075F005DB90302E17FC313855D28204002C313F7
:10076F00204206C8C398F8E17F28F8500374FFF8B9
:10077F00882188238824227545707546177AFF7B58
:10078F003F8A438B448A3F8B407B1F8A418B428A2F
:10079F00348A3322A845A946E1ADA83FA9407591F7
:1007AF0000C3E498F594E499F595759104D25875C2
:1007BF00C820A8CCA9CD75C824AA31AB32883189FD
:1007CF0032C3E89AF8E99BF9AA33AB34C3EB13FDB4
:1007DF00EA13FCC3ED13FDEC13FCC3EA9CFAEB9D8B
:1007EF00FBEA28FAEB39FB8A338B3440012275344C
:1007FF00FF7533FF223058020104759100C3E49551
:10080F0041F594E49542F595759104D25822A93497
:10081F00A8337A04C3E913F9E813F8DAF7C3E894B5
:10082F000AF8E99400F94009C3E8940AE9940050E2
:10083F0004780AE4F988438944883F8940C3E9135F
:10084F00F9E813F88841894222305802015875910E
:10085F0000C3E49533F594E49534F595759104D27E
:0E086F005822D2AF20580122E524F4C4C3134E
:10087D00540704F9D2AF0000C2AF306203305AF40E
:10088D00780D206D027804C3E58B9840F3E59BF459
:10089D00F520300603020871D9F3D2AF22D2AF2072
:1008AD00580122E524F4C4C313540704F9D2AF0050
:1008BD0000C2AF306203305AF4780D206D02780417
:1008CD00C3E58B9840F3E59BF4F520200603020861
:1008DD00AAD9F3D2AF22759100C3E49543F594E400
:1008ED009544F595759104D2582230580201F7229E
:1008FD00C2AF306203900173D294206E02C2933066
:10090D006E02C295759F11D2AF22C2AF30620390B5
:10091D0001542062039000CB206E02C292306E0211
:10092D00C290305A02D291206E03759F01306E0332
:10093D00759F21D2AF22C2AF306203900135206E78
:10094D0002D293306E02D295206E02C295306E02A5
:10095D00C293206E03759F21306E03759F01D2AF38
:10096D0022C2AF3062039001162062039000BDC217
:10097D0091305A0A206E02D290306E02D292759F3B
:10098D0011D2AF22C2AF3062039000EF206E02D2BF
:10099D0095306E02D293C294206E03759F01306E16
:1009AD0003759F21D2AF22C2AF30620390019A200E
:1009BD0062039000D9206E02C290306E02C2923056
:1009CD005A0A206E02D292306E02D290206E0375BA
:1009DD009F21306E03759F01D2AF229000BBC29054
:1009ED00C291C292D293D294D29522C3E54594D0AE
:1009FD00E5469407500122C3E545940AF8E546946F
:100A0D0000F9884589462230580241142275570451
:100A1D00755804755901755A02755D03D26D7402CE
:100A2D0030E102C26DC26E740130E102D26EC26F4E
:100A3D00740130E102D26F22E493F822438F015307
:100A4D008FFD75B7A575B7F1E8F0538FFE22438F73
:100A5D0002438F0175B7A575B7F1901A0DF0538F3D
:100A6D00FC22901A0D78A55149901A0E785A5149C9
:100A7D0022901A0D5145C3E894A57058901A0E5145
:100A8D0045C3E8945A704D901A0351458857901AF2
:100A9D000451458858901A0551458859901A0651A8
:100AAD0045885A901A095145885D901A0A5145D2C8
:100ABD006DE830E102C26D901A0B5145C26EE830FF
:100ACD00E102D26E901A0C5145C26FE830E102D2AC
:100ADD006F020AE6511A120B07227A307980901AAA
:100AED00405145E8F709A3DAF8227A307980901A57
:100AFD0040E7F8514909A3DAF822C2AF51E7515B3B
:100B0D00901A0078025149901A0178005149901AB3
:100B1D000278075149901A03A8575149901A04A811
:100B2D00585149901A05A8595149901A06A85A5179
:100B3D0049901A09A85D5149901A0A7801206D0251
:100B4D0078025149901A0B7801306E0278025149A2
:100B5D00901A0C7801306F027802514951F7516F9C
:100B6D0022AB54A855EBC39401602AEBC3940260E9
:100B7D0029EBC394036028EBC394046027EBC39463
:100B8D00056026EBC394066025EBC39407602AEB42
:100B9D00C39408602F8857020BDC8858020BDC8841
:100BAD0059020BDC885A020BDC885D020BDCD26D1E
:100BBD00E830E102C26D020BDCC26EE830E102D218
:100BCD006E020BDCC26FE830E102D26F020BDC2249
:100BDD007C051203EEDCFB22C2AF1203FD120403EF
:100BED0012040912040F1203E21203FD1204031280
:100BFD00040912040F1203E21203FD12040312047E
:100C0D000912040FD2AF22AC54AD55C2AF1203FD81
:100C1D001203FD1203FD1203E2DCF212040F1203A4
:100C2D00E2DDF8D2AF22C2AF12040FD2AF1203EA47
:100C3D00C3E54B940150EFC2AF1203FD1203E21254
:100C4D0003FDD2AF1203EAC3E54B94FA40E971E517
:100C5D0071DD71DD75540175550175560091147C6A
:0F0C6D00051203EEC3E54B9401500D716E710734
:100C7C0071E5C2AF43EF1071DDDCE70556C3E556F5
:100C8C009403500280D871DD05557805C3E5549462
:100C9C000370027803C3E554940470027803C3E52F
:100CAC005494054002780208C3E55598500280AB75
:100CBC0071DD71DD0554C3E554940950028099C26D
:100CCC00AF43EF1071DDC2D353D9BF7581C043B2AE
:100CDC0003E5B324044002F5B37580FF7590787575
:100CEC00A40075A53F75A60175F1D175F2BF75D439
:100CFC00BF75D50075E24131E8E4F8F6D8FD511A1C
:100D0C00517E31E8758E01206D03758E007588500B
:100D1C0075890275C82475910475D8401203EE12BA
:100D2C0003FD1203E61204031203E6120409120374
:100D3C00E675A82275B80275E69075F610759B805D
:100D4C0075D10175BCB875BB0E75BA1175E880D23A
:100D5C00AF12067043DA01C2D8C2611203EED25947
:100D6C007A051203DE3060FDE54BC3940240F1E5D9
:100D7C002D540F854D4CF54DB54CE5DAE5C2595364
:100D8C00DACF206F0343DA20306F0343DA10C2D876
:100D9C00C261C2AF1203FD1203FD1203FDD2AF12EA
:100DAC0003EE753D001203DEC3E54B94FA4002815D
:100DBC0033C3E54B953D4003854B3DC3E54B940157
:100DCC0050E3C2AF12040F12040F12040FD2AF1271
:100DDC0003EE1203DEC3E54B940140F631E8E4F573
:100DEC0021F522F523F524754FFF855C50306E02FA
:100DFC00F535F536F537F538F539F53EF52BF54E75
:100E0C00120786D262D25C12074431B41203DA1193
:100E1C00FD1203DA1203DA31171203DE3143120327
:100E2C00DE1203DE316E1203E231911203DE120385
:100E3C00DAC25CD25D12074431B41207A3111D3122
:100E4C00F8511411FD1207A3111D31F8511431176B
:100E5C001207A3111D31F8511431431207A3111DB0
:100E6C0031F85114316E1207A3111D31F8511431A0
:100E7C00911207A3111D31F8C3E54594D0E54694B2
:100E8C00074004511480B1C25DD25E120744753024
:100E9C0002511431B41207A3111D31F8511411FD74
:100EAC001207A3111D31F8511431171207A3111D8C
:100EBC0031F8511431431207A3111D31F85114317B
:100ECC006E1207A3111D31F8511431911207A311A1
:100EDC001D31F8E530146006F530511480B5C25E52
:100EEC00D25F120744511431B41207A91104111D19
:100EFC00115875300111AA20580302106E11E3111C
:100F0C00F711FD1207A91104111D11581171205868
:100F1C000302106E11E311F731171207A911041116
:100F2C001D115811AA20580302106E11E311F7314C
:100F3C00431207A91104111D1158117120580302F5
:100F4C00106E11E311F7316E1207A91104111D1166
:100F5C005811AA20580302106E11E311F7319112A7
:100F6C0007A91104111D1158117120580302106E9C
:100F7C0011E311F731B41207A91104111D1158E531
:100F8C0030146004F530E101206C11C2AFC262D2A2
:100F9C0093D294D295C2949000D9D2AF11AA205872
:100FAC000302106E11E312044B11F711FD1207A985
:100FBC001104111D1158117120580302106E11E308
:100FCC0012048F11F731171207A91104111D1158B2
:100FDC0011AA20580302106E11E31204CD11F7313F
:100FEC00431207A91104111D115811712058030245
:100FFC00106E1208E31205241208F712096E12077C
:10100C00A912080412081D1208581208AA20580325
:10101C0002106E1208E31205CF1208F71209911292
:10102C0007A912080412081D120858120871120799
:10103C000920580302106E1208E312070D1208F76C
:10104C001209B41207A912080412081D120858C27A
:10105C005FC3E54E9401500AC3E53494F05003028B
:0E106C000FA81209E8E4F521F522F523F5247A
:03107A00020D6CF8
:0F1A000002000704040102030303020101A55AB7
:101A40002353757065726D6963726F33703541230E
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

256
SiLabs/Hex files/Supermicro_3p5A Tail.hex

@ -0,0 +1,256 @@
:03000000020C04EB
:03000B0002008070
:03002B000201D9F6
:03005B000202BFDF
:030073000202B5D1
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C290C291AC
:1000A000C29220620201B27401D5E0FDC293C294F3
:1000B000C295D0E0D0D0C2D3D2AF3221C9C29120F4
:1000C0006E02D290306E02D29221C9206E02C2928C
:1000D000306E02C290D29121C9206E02C290306E61
:1000E00002C292206E02D292306E02D29021C97466
:1000F00002206E02D293306E02D295206E02D2950B
:10010000306E02D293D5E0E9C291206E02D29030D7
:100110006E02D29221C97402206E02D293306E0216
:10012000D295D294D5E0F1C291206E02D290306E79
:1001300002D29221C97402D294206E02D293306E00
:1001400002D295D5E0F1206E02C292306E02C290CA
:10015000D29121C97402D294206E02D295306E02DF
:10016000D293D5E0F1206E02C292306E02C290D2DC
:100170009121C97402206E02D295306E02D293D2C0
:1001800094D5E0F1206E02C290306E02C292206ED1
:1001900002D292306E02D29021C97402206E02D235
:1001A00095306E02D293206E02D293306E02D295B9
:1001B000D5E0E9206E02C290306E02C292206E023B
:1001C000D292306E02D29021C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E60278FA53DACF206F03D3
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E60279FAC3E89970CE752718B9
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024189E54BF8C260C394F04003C6
:1002400074F0F8C4540F28F8A95BB90302416BC3DA
:1002500013C313855B28204002C313204206C8C382
:1002600098F8416B28F8500374FFF8C3E895505094
:1002700005E550C333F8E52B54F0700D8821A859DB
:10028000B8030685212385212420CF09D0E0D0D0D2
:10029000C2D3D2AF32C2CF7801E54BC3940140053F
:1002A000754E0041ACE54E046002054ED0E0D0D062
:1002B000C2D3D2AF32C2AF53917FC258D2AF32C293
:1002C000AFC0D0C0E0D2D3A8FBA9FCC2D830610235
:1002D000611853DACF206F0343DA10306F0343DA2B
:1002E00020D261E580306F01F420E60241F48825D8
:1002F000892661E853DACF206F0343DA20306F0399
:1003000043DA10C2D8C2617800E580306F01F43062
:10031000E60261DB884B61DB53DACF206F0343DAFF
:1003200020306F0343DA10C261205902619253DA20
:10033000CF206F0343DA10306F0343DA20C2D8D2E4
:10034000618849894AC3E89547F8E99548F9E4FB8B
:10035000C3E89468E994015006E4D2E3FB618AC3E0
:10036000E894D0E994025006E4D2E2FB618AC3E843
:1003700094A0E994055006E4D2E1FB618AC3E894B5
:1003800040E9940B5004E4D2E0FBA849A94A88470D
:100390008948C3E89525F8E99526F9306B0261BFD5
:1003A000306A0261B8E9C313F9E813F830690261F1
:1003B000B8E9C313F9E813F8E9C313F9E813F8C36C
:1003C000E894FAE99400400278FAA94B884B205946
:1003D0000261DB740FF4552D4BF52D752718D26093
:1003E00030590261E853DAFE752906D0E0D0D0C258
:1003F000D3D2AF327901810C7903810C790A810C57
:10040000791E810C7964810C79C8810C7817E4D548
:10041000E0FDD8FAD9F6227A187B78812F7A157BFD
:100420008C812F7A127BB4812F7A0F7BC8812F7930
:1004300002B26EE4C294D5E0FD206E02D290306E1E
:1004400002D292E540D5E0FD206E02C290306E02ED
:10045000C292E540D5E0FDD9D8EAF8D5E0FDD8FB59
:10046000DBCDD29422E559B4030281A8C3E53394CD
:0F04700000E53494054012852123E4F535F53677
:10047F00F537F538F539F53E81A8E522F43333F930
:10048F0013F8E9540104F9E854FEC39440F8E994D1
:10049F0000F988358936753E0122E53E6039C3E59E
:1004AF003413F9E53313F8C3E53598F8E53699F9C0
:1004BF0030E70BC3E89480E994FF401381E2C3E86F
:1004CF00947FE99400500281E2787F790081E2788D
:1004DF008079FF883A893B22E53E6052E537253A1D
:1004EF00F8E538353BF9E539353BFA30E708C3EA2B
:1004FF0094F04012A11BC3EA940F5002A11B78FF86
:10050F0079FF7A0FA11B780079007AF0C3E5239564
:10051F004F5009C3E52394014009A137E53A20E77D
:10052F000DA137E53A30E706883789388A3922E551
:10053F003E70030205E8853A20E4300701F4F9C361
:10054F00E53A33F8E933F9E55730E002A16EC3E538
:10055F00579404603AE9A2E713F9E813F8A19EE96A
:10056F00FBE8FAEBA2E713FBEA13FAE82AF8E93BF8
:10057F00F9E557C394056017E9A2E713F9E813F8F3
:10058F00E557C394036008E9A2E713F9E813F8E904
:10059F0030E70BC3E89480E994FF4013A1C2C3E88E
:1005AF00947FE994005002A1C2787F7900A1C278AC
:1005BF008079FFE820E713C3E52298F84008C3E8E5
:1005CF0094014002A1E67801A1E6E8F42401252276
:1005DF00F84002A1E678FF883C22E53E7003020650
:1005EF0089A838A939E55830E002C10CC3E5589401
:1005FF0004603AE9A2E713F9E813F8C13CE9FBE814
:10060F00FAEBA2E713FBEA13FAE82AF8E93BF9E55C
:10061F0058C394056017E9A2E713F9E813F8E558F2
:10062F00C394036008E9A2E713F9E813F8E930E788
:10063F000BC3E89400E994FF4013C160C3E894FF33
:10064F00E994005002C16078FF7900C160780079A9
:10065F00FFE920E713C3E53C98F84008C3E894018D
:10066F004002C1877801C187E8F42401253CF8E9ED
:10067F0034004002C18778FF882322222222305C77
:10068F00027832305D027878305E027850305F0247
:10069F007828E52B54F06027A95DB90302C1C8C3C0
:1006AF0013855D28204002C313204206C8C398F863
:1006BF00C1C828F8500374FFF888218823882422A2
:1006CF007545707546177AFF7B3F8A438B448A3F87
:1006DF008B407B1F8A418B428A348A3322A845A9DB
:1006EF0046C1F6A83FA940759100C3E498F594E47C
:1006FF0099F595759104D25875C820A8CCA9CD75D8
:10070F00C824AA31AB3288318932C3E89AF8E99B01
:10071F00F9AA33AB34C3EB13FDEA13FCC3ED13FD9E
:10072F00EC13FCC3EA9CFAEB9DFBEA28FAEB39FBCE
:10073F008A338B344001227534FF7533FF223058D2
:10074F0002E14D759100C3E49541F594E49542F5AE
:10075F0095759104D25822A934A8337A04C3E913AA
:10076F00F9E813F8DAF7C3E8940AF8E99400F940C6
:10077F0009C3E8940AE994005004780AE4F988431D
:10078F008944883F8940C3E913F9E813F888418900
:10079F004222305802E1A1759100C3E49533F594DC
:1007AF00E49534F595759104D25822D2AF205801B3
:1007BF0022E524F4C4C313540704F9D2AF0000C2D6
:1007CF00AF306203305AF4780D206D027804C3E520
:1007DF008B9840F3E59BF4F5203006030207BAD956
:1007EF00F3D2AF22D2AF20580122E524F4C4C313B1
:1007FF00540704F9D2AF0000C2AF306203305AF48D
:10080F00780D206D027804C3E58B9840F3E59BF4D7
:10081F00F5202006030207F3D9F3D2AF227591001A
:10082F00C3E49543F594E49544F595759104D25836
:10083F0022305802014022C2AF306203900173D2BE
:10084F0094206E02C293306E02C295759F11D2AF83
:10085F0022C2AF3062039001542062039000CB207C
:0E086F006E02C292306E02C290305A02D291D6
:10087D00206E03759F01306E03759F21D2AF22C28A
:10088D00AF306203900135206E02D293306E02D2EA
:10089D0095206E02C295306E02C293206E03759F35
:1008AD0021306E03759F01D2AF22C2AF306203902B
:1008BD0001162062039000BDC291305A0A206E02CB
:1008CD00D290306E02D292759F11D2AF22C2AF304C
:1008DD0062039000EF206E02D295306E02D293C269
:1008ED0094206E03759F01306E03759F21D2AF2248
:1008FD00C2AF30620390019A2062039000D9206E3E
:10090D0002C290306E02C292305A0A206E02D2920A
:10091D00306E02D290206E03759F21306E03759F4D
:10092D0001D2AF229000BBC290C291C292D293D29B
:10093D0094D29522C3E54594D0E546940750012203
:10094D00C3E545943CF8E5469400F988458946226F
:10095D00305802215D22755B03755C03755D03C222
:10096D006D740330E002D26DC26CC3740394034006
:10097D0002D26CC26E740130E102D266C26F740194
:10098D0030E102D26F75590322E493F822438F01AF
:10099D00538FFD75B7A575B7F1E8F0538FFE224360
:1009AD008F02438F0175B7A575B7F1901A0DF053EE
:1009BD008FFC22901A0D785A319A901A0E78A53123
:1009CD009A22901A0D3196C3E8945A7057901A0EC8
:1009DD003196C3E894A5704C901A073196885B90B8
:1009ED001A083196885C901A093196885D901A0A1A
:1009FD003196C26DE830E002D26DC26CC3E894034B
:100A0D004002D26C901A0B3196C26EE830E102D2E0
:100A1D006E901A0C3196C26FE830E102D26F7559A3
:100A2D0003020A363163120A57227A307980901AFE
:100A3D00403196E8F709A3DAF8227A307980901AD6
:100A4D0040E7F8319A09A3DAF822C2AF513731AC39
:100A5D00901A007802319A901A017800319A901A02
:100A6D00027807319A901A07A85B319A901A08A854
:100A7D005C319A901A09A85D319A901A0A78012072
:100A8D006D027802306C027803319A901A0B78015E
:100A9D00306E027802319A901A0C7801306F02781C
:100AAD0002319A514731C022AB54A855EBC3940182
:100ABD00601EEBC39402601DEBC39403601CEBC37B
:100ACD009404601BEBC39405602AEBC39406602F5E
:100ADD00885B020B17885C020B17885D020B17C22F
:100AED006DE830E002D26DC26CC3E894034002D2CF
:100AFD006C020B17C26EE830E102D26E020B17C208
:100B0D006FE830E102D26F020B17227C0512040848
:100B1D00DCFB22C2AF12041712041D1204231204AF
:100B2D00291203FC12041712041D120423120429A6
:100B3D001203FC12041712041D120423120429D2ED
:100B4D00AF22AC54AD55C2AF1204171204171204E4
:100B5D00171203FCDCF21204291203FCDDF8D2AFEC
:100B6D0022C2AF120429D2AF120404C3E54B940183
:100B7D0050EFC2AF1204171203FC120417D2AF12BA
:100B8D000404C3E54B94FA40E9712071187118758E
:100B9D005401755501755600714F7C05120408C33B
:100BAD00E54B9401500D51B551577120C2AF43EF34
:100BBD00107118DCE70556C3E5569403500280D832
:100BCD00711805557805C3E554940440027803C3A4
:100BDD00E55494054002780208C3E555985002800B
:100BED00B4711871180554C3E5549407500280A2CE
:100BFD00C2AF43EF107118C2D353D9BF7581C04333
:100C0D00B203E5B324044002F5B37580FF75907807
:100C1D0075A40075A53F75A60175F1D175F2BF7567
:100C2D00D4BF75D50075E2413131E4F8F6D8FD3108
:100C3D006331CF3131758E01206D03758E0075884E
:100C4D005075890275C82475910475D84012040831
:100C5D0012041712040012041D12040012042312B0
:0E0C6D00040075A82275B80275E69075F610A1
:100C7B00759B8075D10175BCB875BB0E75BA1175B6
:100C8B00E880D2AF12068A43DA01C2D8C2611204DD
:100C9B0008D2597A051203F83060FDE54BC3940274
:100CAB0040F1E52D540F854D4CF54DB54CE5DAE58E
:100CBB00C25953DACF206F0343DA20306F0343DA84
:100CCB0010C2D8C261C2AF12041712041712041754
:100CDB00D2AF120408753D001203F8C3E54B94FA2A
:100CEB004002616EC3E54B953D4003854B3DC3E52B
:100CFB004B940150E3C2AF120429120429120429A8
:100D0B00D2AF1204081203F8C3E54B940140F6313D
:100D1B0031E4F521F522F523F524754FFF855C5061
:100D2B00306E02F535F536F537F538F539F53EF514
:100D3B002BF54E1206CFD262D25C12068D11FD122C
:100D4B0003F411461203F41203F411601203F811A9
:100D5B008C1203F81203F811B71203FC11DA120309
:100D6B00F81203F4C25CD25D12068D11FD1206EC73
:100D7B001207663141315D11461206EC12076631DE
:100D8B0041315D11601206EC1207663141315D1184
:100D9B008C1206EC1207663141315D11B71206EC6D
:100DAB001207663141315D11DA1206EC120766311A
:100DBB0041C3E54594D0E54694074004315D80ABD3
:100DCB00C25DD25E12068D753002315D11FD1206C9
:100DDB00EC1207663141315D11461206EC120766C3
:100DEB003141315D11601206EC1207663141315D04
:100DFB00118C1206EC1207663141315D11B71206E8
:100E0B00EC1207663141315D11DA1206EC120766FE
:100E1B003141E530146006F530315D80AFC25ED2F2
:100E2B005F12068D315D11FD1206F212074D12078E
:100E3B00661207A17530011207F3205803020FCA7F
:100E4B00112C114011461206F212074D12076612B1
:100E5B0007A11207BA205803020FCA112C11401117
:100E6B00601206F212074D1207661207A11207F362
:100E7B00205803020FCA112C1140118C1206F212CA
:100E8B00074D1207661207A11207BA205803020F6B
:100E9B00CA112C114011B71206F212074D12076638
:100EAB001207A11207F3205803020FCA112C11408D
:100EBB0011DA1206F212074D1207661207A112077A
:100ECB00BA205803020FCA112C114011FD1206F261
:100EDB0012074D1207661207A1E530146004F530B6
:100EEB00C142206C11C2AFC262D293D294D295C2CE
:100EFB00949000D9D2AF1207F3205803020FCA11F6
:100F0B002C120465114011461206F212074D1207FE
:100F1B00661207A11207BA205803020FCA112C122E
:100F2B0004A9114011601206F212074D1207661246
:100F3B0007A11207F3205803020FCA112C1204E762
:100F4B001140118C1206F212074D1207661207A1FF
:100F5B001207BA205803020FCA112C12053E11407A
:100F6B0011B71206F212074D1207661207A11207EC
:100F7B00F3205803020FCA112C1205E9114011DAA4
:100F8B001206F212074D1207661207A11207BA12C8
:100F9B00068B205803020FCA112C12068C1140111C
:100FAB00FD1206F212074D1207661207A1C25FC3AC
:100FBB00E54E94645009C3E53494F05002E10131DD
:0C0FCB0031E4F521F522F523F524A110F6
:0F1A0000020007040401020303030301015AA5B6
:101A40002353757065726D6963726F33703541230E
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

266
SiLabs/Hex files/Turnigy6A Main.hex

@ -0,0 +1,266 @@
:03000000020CD01F
:03000B0002008070
:03002B000201D9F6
:03005B000202A5F9
:0300730002029BEB
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016D297D29581
:1000A000D29320620201B2740CD5E0FDD296D294B4
:1000B000D292D0E0D0D0C2D3D2AF3221C9D29320D5
:1000C0006E02C297306E02C29521C9206E02D2958F
:1000D000306E02D297C29321C9206E02D297306E41
:1000E00002D295206E02C295306E02C29721C97469
:1000F00016206E02C296306E02C294206E02C29426
:10010000306E02C296D5E0E9D293206E02C29730DB
:100110006E02C29521C97416206E02C296306E021C
:10012000C294C292D5E0F1D293206E02C297306E93
:1001300002C29521C97416C292206E02C296306E18
:1001400002C294D5E0F1206E02D295306E02D297B1
:10015000C29321C97416C292206E02C294306E02FC
:10016000C296D5E0F1206E02D295306E02D297C2CF
:100170009321C97416206E02C294306E02C296C2D8
:1001800092D5E0F1206E02D297306E02D295206EA9
:1001900002C295306E02C29721C97416206E02C247
:1001A00094306E02C296206E02C296306E02C294E5
:1001B000D5E0E9206E02D297306E02D295206E0211
:1001C000C295306E02C29721C9D25AE524F4F58A4D
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E50278FA53DACF206F03D4
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E50279FAC3E89970CE75274092
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024156E54BF8C260C3E8955050A3
:1002400005E550C333F8E52B54F0700A8821A8590E
:10025000B8030385212320CF09D0E0D0D0C2D3D268
:10026000AF32C2CF7801E54BC394014005754E0013
:100270004179E54E046002054EE559B40203853D1F
:1002800021C3E5229521600A4004152241900522F0
:10029000D8E7D0E0D0D0C2D3D2AF32C2AF53917F33
:1002A000C258D2AF32C2AFC0D0C0E0D2D3A8FBA9EF
:1002B000FCC2D830610241FE53DACF206F0343DA2B
:1002C00010306F0343DA20D261E580306F01F420F3
:1002D000E50241DA8825892661CE53DACF206F0303
:1002E00043DA20306F0343DA10C2D8C2617800E5E8
:1002F00080306F01F430E50261C1884B61C153DA8F
:10030000CF206F0343DA20306F0343DA10C261203D
:100310005902617853DACF206F0343DA10306F034C
:1003200043DA20C2D8D2618849894AC3E89547F8A0
:10033000E99548F9E4FBC3E89468E994015006E4C0
:10034000D2E3FB6170C3E894D0E994025006E4D292
:10035000E2FB6170C3E894A0E994055006E4D2E1A1
:10036000FB6170C3E89440E9940B5004E4D2E0FBD5
:10037000A849A94A88478948C3E89525F8E99526F8
:10038000F9306B0261A5306A02619EE9C313F9E896
:1003900013F8306902619EE9C313F9E813F8E9C361
:1003A00013F9E813F8C3E894FAE99400400278FAE4
:1003B000A94B884B20590261C1740FF4552D4BF5A0
:1003C0002D752740D26030590261CE53DAFE75296F
:1003D00020D0E0D0D0C2D3D2AF32790161F279031C
:1003E00061F2790A61F2791E61F2796461F279C889
:1003F00061F27817E4D5E0FDD8FAD9F6227A187BB5
:100400007881157A157B8C81157A127BB481157AE7
:100410000F7BC881157902B26EE4D292D5E0FD203F
:100420006E02C297306E02C295E540D5E0FD206EA7
:1004300002D297306E02D295E540D5E0FDD9D8EAD8
:10044000F8D5E0FDD8FBDBCDC29222E559B403021A
:10045000818EC3E5339400E5349405401285212351
:10046000E4F535F536F537F538F539F53E818EE5A5
:0F04700022F43333F913F8E9540104F9E854FE88
:10047F00C39440F8E99400F988358936753E012216
:10048F00E53E6039C3E53413F9E53313F8C3E535B9
:10049F0098F8E53699F930E70BC3E89480E994FFB3
:1004AF00401381C8C3E8947FE99400500281C87853
:1004BF007F790081C8788079FF883A893B22E53EB1
:1004CF006052E537253AF8E538353BF9E539353BE4
:1004DF00FA30E708C3EA94F04012A101C3EA940F7F
:1004EF005002A10178FF79FF7A0FA10178007900FE
:1004FF007AF0C3E523954F5009C3E52394014009D2
:10050F00A11DE53A20E70DA11DE53A30E706883732
:10051F0089388A3922E53E70030205CE853A20E4F8
:10052F00300701F4F9C3E53A33F8E933F9E5573009
:10053F00E002A154C3E5579404603AE9A2E713F926
:10054F00E813F8A184E9FBE8FAEBA2E713FBEA133F
:10055F00FAE82AF8E93BF9E557C394056017E9A2D1
:10056F00E713F9E813F8E557C394036008E9A2E726
:10057F0013F9E813F8E930E70BC3E89480E994FF27
:10058F004013A1A8C3E8947FE994005002A1A87872
:10059F007F7900A1A8788079FFE820E713C3E522CF
:1005AF0098F84008C3E894014002A1CC7801A1CC8F
:1005BF00E8F424012522F84002A1CC78FF883C22E0
:1005CF00E53E700302066FA838A939E55830E002FE
:1005DF00A1F2C3E5589404603AE9A2E713F9E813CE
:1005EF00F8C122E9FBE8FAEBA2E713FBEA13FAE8FA
:1005FF002AF8E93BF9E558C394056017E9A2E71318
:10060F00F9E813F8E558C394036008E9A2E713F972
:10061F00E813F8E930E70BC3E89400E994FF4013BF
:10062F00C146C3E894FFE994005002C14678FF79B0
:10063F0000C146780079FFE920E713C3E53C98F83D
:10064F004008C3E894014002C16D7801C16DE8F420
:10065F002401253CF8E934004002C16D78FF88235E
:10066F002275E890E5E820ECF8A8BDA9BE75528880
:10067F00755301755101C3748833FA740133FBC389
:10068F00E89AE99B401D8A528B53755102EA2488E0
:10069F00FAEB3401FBC3E89AE99B40078A528B536C
:1006AF00755103AA52AB53C3E55313F9E55213F82F
:1006BF00C3E913F9E813F8C3E913F9E813F8C3E929
:1006CF0013F9E813F8C3E913FDE813FCE82CF8E974
:1006DF003DF9C3E55A94016009C3E55A9403600FCD
:1006EF00E108C3EA98FAEB99FB8A528B53E108EAC7
:1006FF0028FAEB39FB8A528B532275E89022E5E8F2
:10070F0020ECFBA8BDA9BEC3E894FFE994035011E8
:10071F00C3E89552E995535008E54F600B154FE12B
:10072F0037E54FF46002054FA84FC3E523985002F9
:10073F00A823882422305C027832305D0278503052
:10074F005E027850305F027828E52B54F06027A9BD
:10075F005DB90302E17FC313855D28204002C313F7
:10076F00204206C8C398F8E17F28F8500374FFF8B9
:10077F00882188238824227545707546177AFF7B58
:10078F003F8A438B448A3F8B407B1F8A418B428A2F
:10079F00348A3322A845A946E1ADA83FA9407591F7
:1007AF0000C3E498F594E499F595759104D25875C2
:1007BF00C820A8CCA9CD75C824AA31AB32883189FD
:1007CF0032C3E89AF8E99BF9AA33AB34C3EB13FDB4
:1007DF00EA13FCC3ED13FDEC13FCC3EA9CFAEB9D8B
:1007EF00FBEA28FAEB39FB8A338B3440012275344C
:1007FF00FF7533FF223058020104759100C3E49551
:10080F0041F594E49542F595759104D25822A93497
:10081F00A8337A04C3E913F9E813F8DAF7C3E894B5
:10082F000AF8E99400F94009C3E8940AE9940050E2
:10083F0004780AE4F988438944883F8940C3E9135F
:10084F00F9E813F88841894222305802015875910E
:10085F0000C3E49533F594E49534F595759104D27E
:0E086F005822D2AF20580122E524F4C4C3134E
:10087D00540704F9D2AF0000C2AF306203305AF40E
:10088D00780D206D027804C3E58B9840F3E59BF558
:10089D0020300603020871D9F4D2AF22D2AF20580E
:1008AD000122E524F4C4C313540704F9D2AF0000A8
:1008BD00C2AF306203305AF4780D206D027804C354
:1008CD00E58B9840F3E59BF5202006030208A9D996
:1008DD00F4D2AF22759100C3E49543F594E49544A9
:1008ED00F595759104D2582230580201F522C2AF08
:1008FD00306203900173C292206E02D296306E0266
:10090D00D294759F13D2AF22C2AF306203900154BF
:10091D002062039000CB206E02D295306E02D297EA
:10092D00305A02C293206E03759F10306E03759F6F
:10093D0011D2AF22C2AF306203900135206E02C2D8
:10094D0096306E02C294206E02D294306E02D29610
:10095D00206E03759F11306E03759F10D2AF22C2AA
:10096D00AF3062039001162062039000BDD2933028
:10097D005A0A206E02C297306E02C295759F13D22D
:10098D00AF22C2AF3062039000EF206E02C29430EE
:10099D006E02C296D292206E03759F10306E037553
:1009AD009F11D2AF22C2AF30620390019A20620331
:1009BD009000D9206E02D297306E02D295305A0A2D
:1009CD00206E02C295306E02C297206E03759F1184
:1009DD00306E03759F10D2AF229000BBD297D29587
:1009ED00D293C296C294C29222C3E54594D0E546F5
:1009FD009407500122C3E545940AF8E5469400F9A1
:100A0D00884589462230580241122275570475587F
:100A1D0004755901755A02755D03D26D740230E18A
:100A2D0002C26DC26E740130E102D26EC26F7401EA
:100A3D0030E102D26F22E493F822438F01538FFDF0
:100A4D0075B7A575B7F1E8F0538FFE22438F0243BA
:100A5D008F0175B7A575B7F1901A0DF0538FFC2264
:100A6D00901A0D78A55147901A0E785A5147229039
:100A7D001A0D5143C3E894A57058901A0E5143C3F3
:100A8D00E8945A704D901A0351438857901A0451A7
:100A9D00438858901A0551438859901A0651438836
:100AAD005A901A095143885D901A0A5143D26DE844
:100ABD0030E102C26D901A0B5143C26EE830E10273
:100ACD00D26E901A0C5143C26FE830E102D26F0220
:100ADD000AE45118120B05227A307980901A405190
:100AED0043E8F709A3DAF8227A307980901A40E7C3
:100AFD00F8514709A3DAF822C2AF51E55159901ABE
:100B0D000078025147901A0178005147901A0278E7
:100B1D00075147901A03A8575147901A04A85851E6
:100B2D0047901A05A8595147901A06A85A5147904F
:100B3D001A09A85D5147901A0A7801206D027802B2
:100B4D005147901A0B7801306E0278025147901A76
:100B5D000C7801306F027802514751F5516D22AB7F
:100B6D0054A855EBC39401602AEBC394026029EBA2
:100B7D00C394036028EBC394046027EBC394056012
:100B8D0026EBC394066025EBC39407602AEBC39450
:100B9D0008602F8857020BDA8858020BDA88590241
:100BAD000BDA885A020BDA885D020BDAD26DE83067
:100BBD00E102C26D020BDAC26EE830E102D26E02C2
:100BCD000BDAC26FE830E102D26F020BDA227C053C
:100BDD001203EEDCFB22C2AF1203FD12040312045A
:100BED000912040F1203E21203FD12040312040989
:100BFD0012040F1203E21203FD1204031204091270
:100C0D00040FD2AF22AC54AD55C2AF1203FD120387
:100C1D00FD1203FD1203E2DCF212040F1203E2DDFA
:100C2D00F8D2AF22C2AF12040FD2AF1203EAC3E55E
:100C3D004B940150EFC2AF1203FD1203E21203FDFC
:100C4D00D2AF1203EAC3E54B94FA40E971E371DBCD
:100C5D0071DB75540175550175560091127C0512A5
:0F0C6D0003EEC3E54B9401500D716C710571E3FB
:100C7C00C2AF43EF1071DBDCE70556C3E5569403B6
:100C8C00500280D871DB05557805C3E55494037088
:100C9C00027803C3E554940470027803C3E55494BA
:100CAC00054002780208C3E55598500280AB71DB11
:100CBC0071DB0554C3E554940950028099C2AF43CB
:100CCC00EF1071DBC2D353D9BF7581C043B203E5BA
:100CDC00B324044002F5B37580FF7590A975A40088
:100CEC0075A5FC75A60175F1B275F2FE75D4DF75AC
:100CFC00D50175E24131E6E4F8F6D8FD5118517C86
:100D0C0031E6758E01206D03758E007588507589DE
:100D1C000275C82475910475D8401203EE1203FDB8
:100D2C001203E61204031203E61204091203E67519
:100D3C00A82275B80275E69075F610759B8075D172
:100D4C000475BCB875BB0075BA1175E880D2AF12CA
:100D5C00067043DA01C2D8C2611203EED2597A0589
:100D6C001203DE3060FDE54BC3940240F1E52D54D7
:100D7C000F854D4CF54DB54CE5DAE5C25953DACF3C
:100D8C00206F0343DA20306F0343DA10C2D8C261FC
:100D9C00C2AF1203FD1203FD1203FDD2AF1203EE1C
:100DAC00753D001203DEC3E54B94FA40028131C35A
:100DBC00E54B953D4003854B3DC3E54B940150E31A
:100DCC00C2AF12040F12040F12040FD2AF1203EEB3
:100DDC001203DEC3E54B940140F631E6E4F521F550
:100DEC0022F523F524754FFF855C50306E02F535E6
:100DFC00F536F537F538F539F53EF52BF54E120786
:100E0C0086D262D25C12074431B21203DA11FB12A1
:100E1C0003DA1203DA31151203DE31411203DE124A
:100E2C0003DE316C1203E2318F1203DE1203DAC2DD
:100E3C005CD25D12074431B21207A3111D31F65179
:100E4C001211FB1207A3111D31F6511231151207A5
:100E5C00A3111D31F6511231411207A3111D31F6A8
:100E6C005112316C1207A3111D31F65112318F1230
:100E7C0007A3111D31F6C3E54594D0E54694074010
:100E8C0004511280B1C25DD25E120744753002511A
:100E9C001231B21207A3111D31F6511211FB1207B8
:100EAC00A3111D31F6511231151207A3111D31F684
:100EBC00511231411207A3111D31F65112316C122E
:100ECC0007A3111D31F65112318F1207A3111D31D9
:100EDC00F6E530146006F530511280B5C25ED25F73
:100EEC00120744511231B21207A91104111D1158E5
:100EFC0075300111A920580302106B11E111F51185
:100F0C00FB1207A91104111D11581171205803026D
:100F1C00106B11E111F531151207A91104111D11F6
:100F2C005811A920580302106B11E111F53141122F
:100F3C0007A91104111D1158117120580302106BCF
:100F4C0011E111F5316C1207A91104111D11581181
:100F5C00A920580302106B11E111F5318F1207A96A
:100F6C001104111D1158117120580302106B11E15D
:100F7C0011F531B21207A91104111D1158E53014E5
:100F8C006004F530C1FF206C11C2AFC262C296C2C0
:100F9C0094C292D2929000D9D2AF11A920580302D8
:100FAC00106B11E112044B11F511FB1207A911047E
:100FBC00111D1158117120580302106B11E112040C
:100FCC008F11F531151207A91104111D115811A912
:100FDC0020580302106B11E11204CD11F5314112AE
:100FEC0007A91104111D1158117120580302106B1F
:100FFC0011E11205241208F512096C1207A9120846
:10100C000412081D1208581208A920580302106B6C
:10101C001208E11205CF1208F512098F1207A91256
:10102C00080412081D1208581208711207092058DA
:10103C000302106B1208E112070D1208F51209B227
:10104C001207A912080412081D120858C25FC3E542
:10105C004E9401500AC3E53494F05003020FA612CB
:0E106C0009E6E4F521F522F523F524020D6ACC
:0F1A000002000704040102030303020101A55AB7
:101A4000235475726E696779364123202020202047
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

256
SiLabs/Hex files/Turnigy6A Tail.hex

@ -0,0 +1,256 @@
:03000000020C02ED
:03000B0002008070
:03002B000201D9F6
:03005B000202BFDF
:030073000202B5D1
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016D297D29581
:1000A000D29320620201B2740CD5E0FDD296D294B4
:1000B000D292D0E0D0D0C2D3D2AF3221C9D29320D5
:1000C0006E02C297306E02C29521C9206E02D2958F
:1000D000306E02D297C29321C9206E02D297306E41
:1000E00002D295206E02C295306E02C29721C97469
:1000F00016206E02C296306E02C294206E02C29426
:10010000306E02C296D5E0E9D293206E02C29730DB
:100110006E02C29521C97416206E02C296306E021C
:10012000C294C292D5E0F1D293206E02C297306E93
:1001300002C29521C97416C292206E02C296306E18
:1001400002C294D5E0F1206E02D295306E02D297B1
:10015000C29321C97416C292206E02C294306E02FC
:10016000C296D5E0F1206E02D295306E02D297C2CF
:100170009321C97416206E02C294306E02C296C2D8
:1001800092D5E0F1206E02D297306E02D295206EA9
:1001900002C295306E02C29721C97416206E02C247
:1001A00094306E02C296206E02C296306E02C294E5
:1001B000D5E0E9206E02D297306E02D295206E0211
:1001C000C295306E02C29721C9D25AE524F4F58A4D
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E50278FA53DACF206F03D4
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E50279FAC3E89970CE752718BA
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024189E54BF8C260C394F04003C6
:1002400074F0F8C4540F28F8A95BB90302416BC3DA
:1002500013C313855B28204002C313204206C8C382
:1002600098F8416B28F8500374FFF8C3E895505094
:1002700005E550C333F8E52B54F0700D8821A859DB
:10028000B8030685212385212420CF09D0E0D0D0D2
:10029000C2D3D2AF32C2CF7801E54BC3940140053F
:1002A000754E0041ACE54E046002054ED0E0D0D062
:1002B000C2D3D2AF32C2AF53917FC258D2AF32C293
:1002C000AFC0D0C0E0D2D3A8FBA9FCC2D830610235
:1002D000611853DACF206F0343DA10306F0343DA2B
:1002E00020D261E580306F01F420E50241F48825D9
:1002F000892661E853DACF206F0343DA20306F0399
:1003000043DA10C2D8C2617800E580306F01F43062
:10031000E50261DB884B61DB53DACF206F0343DA00
:1003200020306F0343DA10C261205902619253DA20
:10033000CF206F0343DA10306F0343DA20C2D8D2E4
:10034000618849894AC3E89547F8E99548F9E4FB8B
:10035000C3E89468E994015006E4D2E3FB618AC3E0
:10036000E894D0E994025006E4D2E2FB618AC3E843
:1003700094A0E994055006E4D2E1FB618AC3E894B5
:1003800040E9940B5004E4D2E0FBA849A94A88470D
:100390008948C3E89525F8E99526F9306B0261BFD5
:1003A000306A0261B8E9C313F9E813F830690261F1
:1003B000B8E9C313F9E813F8E9C313F9E813F8C36C
:1003C000E894FAE99400400278FAA94B884B205946
:1003D0000261DB740FF4552D4BF52D752718D26093
:1003E00030590261E853DAFE752906D0E0D0D0C258
:1003F000D3D2AF327901810C7903810C790A810C57
:10040000791E810C7964810C79C8810C7817E4D548
:10041000E0FDD8FAD9F6227A187B78812F7A157BFD
:100420008C812F7A127BB4812F7A0F7BC8812F7930
:1004300002B26EE4D292D5E0FD206E02C297306E19
:1004400002C295E540D5E0FD206E02D297306E02E3
:10045000D295E540D5E0FDD9D8EAF8D5E0FDD8FB46
:10046000DBCDC29222E559B4030281A8C3E53394DF
:0F04700000E53494054012852123E4F535F53677
:10047F00F537F538F539F53E81A8E522F43333F930
:10048F0013F8E9540104F9E854FEC39440F8E994D1
:10049F0000F988358936753E0122E53E6039C3E59E
:1004AF003413F9E53313F8C3E53598F8E53699F9C0
:1004BF0030E70BC3E89480E994FF401381E2C3E86F
:1004CF00947FE99400500281E2787F790081E2788D
:1004DF008079FF883A893B22E53E6052E537253A1D
:1004EF00F8E538353BF9E539353BFA30E708C3EA2B
:1004FF0094F04012A11BC3EA940F5002A11B78FF86
:10050F0079FF7A0FA11B780079007AF0C3E5239564
:10051F004F5009C3E52394014009A137E53A20E77D
:10052F000DA137E53A30E706883789388A3922E551
:10053F003E70030205E8853A20E4300701F4F9C361
:10054F00E53A33F8E933F9E55730E002A16EC3E538
:10055F00579404603AE9A2E713F9E813F8A19EE96A
:10056F00FBE8FAEBA2E713FBEA13FAE82AF8E93BF8
:10057F00F9E557C394056017E9A2E713F9E813F8F3
:10058F00E557C394036008E9A2E713F9E813F8E904
:10059F0030E70BC3E89480E994FF4013A1C2C3E88E
:1005AF00947FE994005002A1C2787F7900A1C278AC
:1005BF008079FFE820E713C3E52298F84008C3E8E5
:1005CF0094014002A1E67801A1E6E8F42401252276
:1005DF00F84002A1E678FF883C22E53E7003020650
:1005EF0089A838A939E55830E002C10CC3E5589401
:1005FF0004603AE9A2E713F9E813F8C13CE9FBE814
:10060F00FAEBA2E713FBEA13FAE82AF8E93BF9E55C
:10061F0058C394056017E9A2E713F9E813F8E558F2
:10062F00C394036008E9A2E713F9E813F8E930E788
:10063F000BC3E89400E994FF4013C160C3E894FF33
:10064F00E994005002C16078FF7900C160780079A9
:10065F00FFE920E713C3E53C98F84008C3E894018D
:10066F004002C1877801C187E8F42401253CF8E9ED
:10067F0034004002C18778FF882322222222305C77
:10068F00027832305D027878305E027850305F0247
:10069F007828E52B54F06027A95DB90302C1C8C3C0
:1006AF0013855D28204002C313204206C8C398F863
:1006BF00C1C828F8500374FFF888218823882422A2
:1006CF007545707546177AFF7B3F8A438B448A3F87
:1006DF008B407B1F8A418B428A348A3322A845A9DB
:1006EF0046C1F6A83FA940759100C3E498F594E47C
:1006FF0099F595759104D25875C820A8CCA9CD75D8
:10070F00C824AA31AB3288318932C3E89AF8E99B01
:10071F00F9AA33AB34C3EB13FDEA13FCC3ED13FD9E
:10072F00EC13FCC3EA9CFAEB9DFBEA28FAEB39FBCE
:10073F008A338B344001227534FF7533FF223058D2
:10074F0002E14D759100C3E49541F594E49542F5AE
:10075F0095759104D25822A934A8337A04C3E913AA
:10076F00F9E813F8DAF7C3E8940AF8E99400F940C6
:10077F0009C3E8940AE994005004780AE4F988431D
:10078F008944883F8940C3E913F9E813F888418900
:10079F004222305802E1A1759100C3E49533F594DC
:1007AF00E49534F595759104D25822D2AF205801B3
:1007BF0022E524F4C4C313540704F9D2AF0000C2D6
:1007CF00AF306203305AF4780D206D027804C3E520
:1007DF008B9840F3E59BF5203006030207BAD9F456
:1007EF00D2AF22D2AF20580122E524F4C4C3135450
:1007FF000704F9D2AF0000C2AF306203305AF47869
:10080F000D206D027804C3E58B9840F3E59BF5202E
:10081F002006030207F2D9F4D2AF22759100C3E488
:10082F009543F594E49544F595759104D25822308B
:10083F005802013E22C2AF306203900173C2922070
:10084F006E02D296306E02D294759F13D2AF22C22F
:10085F00AF3062039001542062039000CB206E02F0
:0F086F00D295306E02D297305A02C293206E0398
:10087E00759F10306E03759F11D2AF22C2AF3062DA
:10088E0003900135206E02C296306E02C294206E25
:10089E0002D294306E02D296206E03759F11306E86
:1008AE0003759F10D2AF22C2AF30620390011620A3
:1008BE0062039000BDD293305A0A206E02C2973066
:1008CE006E02C295759F13D2AF22C2AF30620390F3
:1008DE0000EF206E02C294306E02C296D292206E4B
:1008EE0003759F10306E03759F11D2AF22C2AF30C9
:1008FE00620390019A2062039000D9206E02D29773
:10090E00306E02D295305A0A206E02C295306E02B7
:10091E00C297206E03759F11306E03759F10D2AF74
:10092E00229000BBD297D295D293C296C294C29215
:10093E0022C3E54594D0E5469407500122C3E54510
:10094E00943CF8E5469400F98845894622305802D1
:10095E00215B22755B03755C03755D03C26D7401CB
:10096E0030E002D26DC26CC3740194034002D26CAB
:10097E00C26E740130E102D266C26F740130E102C0
:10098E00D26F75590322E493F822438F01538FFDE2
:10099E0075B7A575B7F1E8F0538FFE22438F02436A
:1009AE008F0175B7A575B7F1901A0DF0538FFC2214
:1009BE00901A0D785A3198901A0E78A53198229087
:1009CE001A0D3194C3E8945A7057901A0E3194C38D
:1009DE00E894A5704C901A073194885B901A0831F0
:1009EE0094885C901A093194885D901A0A3194C2E9
:1009FE006DE830E002D26DC26CC3E894034002D2BF
:100A0E006C901A0B3194C26EE830E102D26E901ADD
:100A1E000C3194C26FE830E102D26F755903020AAD
:100A2E00343161120A55227A307980901A4031940D
:100A3E00E8F709A3DAF8227A307980901A40E7F8BD
:100A4E00319809A3DAF822C2AF513531AA901A00B3
:100A5E0078023198901A0178003198901A0278072E
:100A6E003198901A07A85B3198901A08A85C3198B3
:100A7E00901A09A85D3198901A0A7801206D0278B3
:100A8E0002306C0278033198901A0B7801306E02A6
:100A9E0078023198901A0C7801306F0278023198F2
:100AAE00514531BE22AB54A855EBC39401601EEBE9
:100ABE00C39402601DEBC39403601CEBC3940460EB
:100ACE001BEBC39405602AEBC39406602F885B0270
:100ADE000B15885C020B15885D020B15C26DE83094
:100AEE00E002D26DC26CC3E894034002D26C020BDA
:100AFE0015C26EE830E102D26E020B15C26FE830FD
:100B0E00E102D26F020B15227C05120408DCFB22D7
:100B1E00C2AF12041712041D120423120429120369
:100B2E00FC12041712041D1204231204291203FCD2
:100B3E0012041712041D120423120429D2AF22AC80
:100B4E0054AD55C2AF120417120417120417120334
:100B5E00FCDCF21204291203FCDDF8D2AF22C2AF84
:100B6E00120429D2AF120404C3E54B940150EFC214
:100B7E00AF1204171203FC120417D2AF120404C3EF
:100B8E00E54B94FA40E9711E711671167554017594
:100B9E005501755600714D7C05120408C3E54B9442
:100BAE0001500D51B35155711EC2AF43EF10711666
:100BBE00DCE70556C3E5569403500280D87116053E
:100BCE00557805C3E554940440027803C3E5549464
:100BDE00044002780208C3E55598500280B471169D
:100BEE0071160554C3E5549407500280A2C2AF4358
:100BFE00EF107116C2D353D9BF7581C043B203E54E
:100C0E00B324044002F5B37580FF7590A975A40056
:100C1E0075A5FC75A60175F1B275F2FE75D4DF757A
:100C2E00D50175E241312FE4F8F6D8FD316131CDB1
:100C3E00312F758E01206D03758E00758850758964
:100C4E000275C82475910475D84012040812041751
:100C5E0012040012041D1204001204231204007563
:0E0C6E00A82275B80275E69075F610759B8089
:100C7C0075D10475BCB875BB0075BA1175E880D216
:100C8C00AF12068A43DA01C2D8C261120408D259E3
:100C9C007A051203F83060FDE54BC3940240F1E590
:100CAC002D540F854D4CF54DB54CE5DAE5C2595335
:100CBC00DACF206F0343DA20306F0343DA10C2D847
:100CCC00C261C2AF120417120417120417D2AF126A
:100CDC000408753D001203F8C3E54B94FA40026119
:100CEC006CC3E54B953D4003854B3DC3E54B9401EF
:100CFC0050E3C2AF120429120429120429D2AF12F4
:100D0C0004081203F8C3E54B940140F6312FE4F5C7
:100D1C0021F522F523F524754FFF855C50306E02CA
:100D2C00F535F536F537F538F539F53EF52BF54E45
:100D3C001206CFD262D25C12068D11FB1203F41193
:100D4C00441203F41203F4115E1203F8118A120315
:100D5C00F81203F811B51203FC11D81203F81203A0
:100D6C00F4C25CD25D12068D11FB1206EC12076602
:100D7C00313F315B11441206EC120766313F315B97
:100D8C00115E1206EC120766313F315B118A1206B6
:100D9C00EC120766313F315B11B51206EC12076697
:100DAC00313F315B11D81206EC120766313FC3E5B7
:100DBC004594D0E54694074004315B80ABC25DD2CC
:100DCC005E12068D753002315B11FB1206EC1207B8
:100DDC0066313F315B11441206EC120766313F312C
:100DEC005B115E1206EC120766313F315B118A1201
:100DFC0006EC120766313F315B11B51206EC120797
:100E0C0066313F315B11D81206EC120766313FE5B3
:100E1C0030146006F530315B80AFC25ED25F1206D3
:100E2C008D315B11FB1206F212074D120766120789
:100E3C00A17530011207F2205803020FC8112A11B4
:100E4C003E11441206F212074D1207661207A11248
:100E5C0007BA205803020FC8112A113E115E120660
:100E6C00F212074D1207661207A11207F22058035F
:100E7C00020FC8112A113E118A1206F212074D12E6
:100E8C0007661207A11207BA205803020FC8112ACD
:100E9C00113E11B51206F212074D1207661207A188
:100EAC001207F2205803020FC8112A113E11D81252
:100EBC0006F212074D1207661207A11207BA205844
:100ECC0003020FC8112A113E11FB1206F212074D34
:100EDC001207661207A1E530146004F530C14020FA
:100EEC006C11C2AFC262C296C294C292D2929000EE
:100EFC00D9D2AF1207F2205803020FC8112A1204DC
:100F0C0065113E11441206F212074D1207661207C4
:100F1C00A11207BA205803020FC8112A1204A911F2
:100F2C003E115E1206F212074D1207661207A1124D
:100F3C0007F2205803020FC8112A1204E7113E11C0
:100F4C008A1206F212074D1207661207A11207BA8F
:100F5C00205803020FC8112A12053E113E11B5127A
:100F6C0006F212074D1207661207A11207F220585B
:100F7C0003020FC8112A1205E9113E11D81206F20C
:100F8C0012074D1207661207A11207BA12068B2020
:100F9C005803020FC8112A12068C113E11FB1206BF
:100FAC00F212074D1207661207A1C25FC3E54E94F9
:100FBC00645009C3E53494F05002C1FF312FE4F5BD
:090FCC0021F522F523F524A10E04
:0F1A0000020007040401020303030101015AA5B8
:101A4000235475726E696779364123202020202047
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

267
SiLabs/Hex files/XP 12A Main.hex

@ -0,0 +1,267 @@
:03000000020CD21D
:03000B0002008070
:03002B000201D9F6
:03005B000202A5F9
:0300730002029BEB
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C292C291AA
:1000A000C29020620201B27405D5E0FDD295D294CF
:1000B000D293D0E0D0D0C2D3D2AF3221C9C29120E6
:1000C0006E02D292306E02D29021C9206E02C2908E
:1000D000306E02C292D29121C9206E02C292306E5D
:1000E00002C290206E02D290306E02D29221C97468
:1000F00016206E02C295306E02C293206E02C29329
:10010000306E02C295D5E0E9C291206E02D29230E3
:100110006E02D29021C97416206E02C295306E0212
:10012000C293C294D5E0F1C291206E02D292306E99
:1001300002D29021C97416C294206E02C295306E0C
:1001400002C293D5E0F1206E02C290306E02C292DC
:10015000D29121C97416C294206E02C293306E02ED
:10016000C295D5E0F1206E02C290306E02C292D2EA
:100170009121C97416206E02C293306E02C295C2DC
:1001800094D5E0F1206E02C292306E02C290206ED1
:1001900002D290306E02D29221C97416206E02C231
:1001A00093306E02C295206E02C295306E02C293E9
:1001B000D5E0E9206E02C292306E02C290206E023B
:1001C000D290306E02D29221C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E70278FA53DACF206F03D2
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E70279FAC3E89970CE75274090
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024156E54BF8C260C3E8955050A3
:1002400005E550C333F8E52B54F0700A8821A8590E
:10025000B8030385212320CF09D0E0D0D0C2D3D268
:10026000AF32C2CF7801E54BC394014005754E0013
:100270004179E54E046002054EE559B40203853D1F
:1002800021C3E5229521600A4004152241900522F0
:10029000D8E7D0E0D0D0C2D3D2AF32C2AF53917F33
:1002A000C258D2AF32C2AFC0D0C0E0D2D3A8FBA9EF
:1002B000FCC2D830610241FE53DACF206F0343DA2B
:1002C00010306F0343DA20D261E580306F01F420F3
:1002D000E70241DA8825892661CE53DACF206F0301
:1002E00043DA20306F0343DA10C2D8C2617800E5E8
:1002F00080306F01F430E70261C1884B61C153DA8D
:10030000CF206F0343DA20306F0343DA10C261203D
:100310005902617853DACF206F0343DA10306F034C
:1003200043DA20C2D8D2618849894AC3E89547F8A0
:10033000E99548F9E4FBC3E89468E994015006E4C0
:10034000D2E3FB6170C3E894D0E994025006E4D292
:10035000E2FB6170C3E894A0E994055006E4D2E1A1
:10036000FB6170C3E89440E9940B5004E4D2E0FBD5
:10037000A849A94A88478948C3E89525F8E99526F8
:10038000F9306B0261A5306A02619EE9C313F9E896
:1003900013F8306902619EE9C313F9E813F8E9C361
:1003A00013F9E813F8C3E894FAE99400400278FAE4
:1003B000A94B884B20590261C1740FF4552D4BF5A0
:1003C0002D752740D26030590261CE53DAFE75296F
:1003D00020D0E0D0D0C2D3D2AF32790161F279031C
:1003E00061F2790A61F2791E61F2796461F279C889
:1003F00061F27817E4D5E0FDD8FAD9F6227A187BB5
:100400007881157A157B8C81157A127BB481157AE7
:100410000F7BC881157902B26EE4D294D5E0FD203D
:100420006E02D292306E02D290E540D5E0FD206E91
:1004300002C292306E02C290E540D5E0FDD9D8EA02
:10044000F8D5E0FDD8FBDBCDC29422E559B4030218
:10045000818EC3E5339400E5349405401285212351
:10046000E4F535F536F537F538F539F53E818EE5A5
:0F04700022F43333F913F8E9540104F9E854FE88
:10047F00C39440F8E99400F988358936753E012216
:10048F00E53E6039C3E53413F9E53313F8C3E535B9
:10049F0098F8E53699F930E70BC3E89480E994FFB3
:1004AF00401381C8C3E8947FE99400500281C87853
:1004BF007F790081C8788079FF883A893B22E53EB1
:1004CF006052E537253AF8E538353BF9E539353BE4
:1004DF00FA30E708C3EA94F04012A101C3EA940F7F
:1004EF005002A10178FF79FF7A0FA10178007900FE
:1004FF007AF0C3E523954F5009C3E52394014009D2
:10050F00A11DE53A20E70DA11DE53A30E706883732
:10051F0089388A3922E53E70030205CE853A20E4F8
:10052F00300701F4F9C3E53A33F8E933F9E5573009
:10053F00E002A154C3E5579404603AE9A2E713F926
:10054F00E813F8A184E9FBE8FAEBA2E713FBEA133F
:10055F00FAE82AF8E93BF9E557C394056017E9A2D1
:10056F00E713F9E813F8E557C394036008E9A2E726
:10057F0013F9E813F8E930E70BC3E89480E994FF27
:10058F004013A1A8C3E8947FE994005002A1A87872
:10059F007F7900A1A8788079FFE820E713C3E522CF
:1005AF0098F84008C3E894014002A1CC7801A1CC8F
:1005BF00E8F424012522F84002A1CC78FF883C22E0
:1005CF00E53E700302066FA838A939E55830E002FE
:1005DF00A1F2C3E5589404603AE9A2E713F9E813CE
:1005EF00F8C122E9FBE8FAEBA2E713FBEA13FAE8FA
:1005FF002AF8E93BF9E558C394056017E9A2E71318
:10060F00F9E813F8E558C394036008E9A2E713F972
:10061F00E813F8E930E70BC3E89400E994FF4013BF
:10062F00C146C3E894FFE994005002C14678FF79B0
:10063F0000C146780079FFE920E713C3E53C98F83D
:10064F004008C3E894014002C16D7801C16DE8F420
:10065F002401253CF8E934004002C16D78FF88235E
:10066F002275E890E5E820ECF8A8BDA9BE75527494
:10067F00755300755101C3747433FA740033FBC39F
:10068F00E89AE99B401D8A528B53755102EA2474F4
:10069F00FAEB3400FBC3E89AE99B40078A528B536D
:1006AF00755103AA52AB53C3E55313F9E55213F82F
:1006BF00C3E913F9E813F8C3E913F9E813F8C3E929
:1006CF0013F9E813F8C3E913FDE813FCE82CF8E974
:1006DF003DF9C3E55A94016009C3E55A9403600FCD
:1006EF00E108C3EA98FAEB99FB8A528B53E108EAC7
:1006FF0028FAEB39FB8A528B532275E89022E5E8F2
:10070F0020ECFBA8BDA9BEC3E894FFE994035011E8
:10071F00C3E89552E995535008E54F600B154FE12B
:10072F0037E54FF46002054FA84FC3E523985002F9
:10073F00A823882422305C027832305D0278503052
:10074F005E027850305F027828E52B54F06027A9BD
:10075F005DB90302E17FC313855D28204002C313F7
:10076F00204206C8C398F8E17F28F8500374FFF8B9
:10077F00882188238824227545707546177AFF7B58
:10078F003F8A438B448A3F8B407B1F8A418B428A2F
:10079F00348A3322A845A946E1ADA83FA9407591F7
:1007AF0000C3E498F594E499F595759104D25875C2
:1007BF00C820A8CCA9CD75C824AA31AB32883189FD
:1007CF0032C3E89AF8E99BF9AA33AB34C3EB13FDB4
:1007DF00EA13FCC3ED13FDEC13FCC3EA9CFAEB9D8B
:1007EF00FBEA28FAEB39FB8A338B3440012275344C
:1007FF00FF7533FF223058020104759100C3E49551
:10080F0041F594E49542F595759104D25822A93497
:10081F00A8337A04C3E913F9E813F8DAF7C3E894B5
:10082F000AF8E99400F94009C3E8940AE9940050E2
:10083F0004780AE4F988438944883F8940C3E9135F
:10084F00F9E813F88841894222305802015875910E
:10085F0000C3E49533F594E49534F595759104D27E
:0E086F005822D2AF20580122E524F4C4C3134E
:10087D00540704F9D2AF0000C2AF306203305AF40E
:10088D00780D206D027804C3E58B9840F3E59BF459
:10089D00F520300603020871D9F3D2AF22D2AF2072
:1008AD00580122E524F4C4C313540704F9D2AF0050
:1008BD0000C2AF306203305AF4780D206D02780417
:1008CD00C3E58B9840F3E59BF4F520200603020861
:1008DD00AAD9F3D2AF22759100C3E49543F594E400
:1008ED009544F595759104D2582230580201F7229E
:1008FD00C2AF306203900173C294206E02D2953064
:10090D006E02D293759F11D2AF22C2AF30620390A7
:10091D0001542062039000CB206E02C290306E0213
:10092D00C292305A02D291206E03759F01306E0330
:10093D00759F21D2AF22C2AF306203900135206E78
:10094D0002C295306E02C293206E02D293306E02B7
:10095D00D295206E03759F21306E03759F01D2AF26
:10096D0022C2AF3062039001162062039000BDC217
:10097D0091305A0A206E02D292306E02D290759F3B
:10098D0011D2AF22C2AF3062039000EF206E02C2CF
:10099D0093306E02C295D294206E03759F01306E16
:1009AD0003759F21D2AF22C2AF30620390019A200E
:1009BD0062039000D9206E02C292306E02C2903056
:1009CD005A0A206E02D290306E02D292206E0375BA
:1009DD009F21306E03759F01D2AF229000BBC29252
:1009ED00C291C290C295C294C29322C3E54594D0E0
:1009FD00E5469407500122C3E545940AF8E546946F
:100A0D0000F9884589462230580241142275570451
:100A1D00755804755901755A02755D03D26D7402CE
:100A2D0030E102C26DC26E740130E102D26EC26F4E
:100A3D00740130E102D26F22E493F822438F015307
:100A4D008FFD75B7A575B7F1E8F0538FFE22438F73
:100A5D0002438F0175B7A575B7F1901A0DF0538F3D
:100A6D00FC22901A0D78A55149901A0E785A5149C9
:100A7D0022901A0D5145C3E894A57058901A0E5145
:100A8D0045C3E8945A704D901A0351458857901AF2
:100A9D000451458858901A0551458859901A0651A8
:100AAD0045885A901A095145885D901A0A5145D2C8
:100ABD006DE830E102C26D901A0B5145C26EE830FF
:100ACD00E102D26E901A0C5145C26FE830E102D2AC
:100ADD006F020AE6511A120B07227A307980901AAA
:100AED00405145E8F709A3DAF8227A307980901A57
:100AFD0040E7F8514909A3DAF822C2AF51E7515B3B
:100B0D00901A0078025149901A0178005149901AB3
:100B1D000278075149901A03A8575149901A04A811
:100B2D00585149901A05A8595149901A06A85A5179
:100B3D0049901A09A85D5149901A0A7801206D0251
:100B4D0078025149901A0B7801306E0278025149A2
:100B5D00901A0C7801306F027802514951F7516F9C
:100B6D0022AB54A855EBC39401602AEBC3940260E9
:100B7D0029EBC394036028EBC394046027EBC39463
:100B8D00056026EBC394066025EBC39407602AEB42
:100B9D00C39408602F8857020BDC8858020BDC8841
:100BAD0059020BDC885A020BDC885D020BDCD26D1E
:100BBD00E830E102C26D020BDCC26EE830E102D218
:100BCD006E020BDCC26FE830E102D26F020BDC2249
:100BDD007C051203EEDCFB22C2AF1203FD120403EF
:100BED0012040912040F1203E21203FD1204031280
:100BFD00040912040F1203E21203FD12040312047E
:100C0D000912040FD2AF22AC54AD55C2AF1203FD81
:100C1D001203FD1203FD1203E2DCF212040F1203A4
:100C2D00E2DDF8D2AF22C2AF12040FD2AF1203EA47
:100C3D00C3E54B940150EFC2AF1203FD1203E21254
:100C4D0003FDD2AF1203EAC3E54B94FA40E971E517
:100C5D0071DD71DD75540175550175560091147C6A
:0F0C6D00051203EEC3E54B9401500D716E710734
:100C7C0071E5C2AF43EF1071DDDCE70556C3E556F5
:100C8C009403500280D871DD05557805C3E5549462
:100C9C000370027803C3E554940470027803C3E52F
:100CAC005494054002780208C3E55598500280AB75
:100CBC0071DD71DD0554C3E554940950028099C26D
:100CCC00AF43EF1071DDC2D353D9BF7581C043B2AE
:100CDC0003E5B324044002F5B37580FF75900075ED
:100CEC00A40075A53F75A60175F19175F23F75D4F9
:100CFC007F75D50075E24131E8E4F8F6D8FD511A5C
:100D0C00517E31E8758E01206D03758E007588500B
:100D1C0075890275C82475910475D8401203EE12BA
:100D2C0003FD1203E61204031203E6120409120374
:100D3C00E675A82275B80275E69075F610759B805D
:100D4C0075D10175BCB875BB0675BA1175E880D242
:100D5C00AF12067043DA01C2D8C2611203EED25947
:100D6C007A051203DE3060FDE54BC3940240F1E5D9
:100D7C002D540F854D4CF54DB54CE5DAE5C2595364
:100D8C00DACF206F0343DA20306F0343DA10C2D876
:100D9C00C261C2AF1203FD1203FD1203FDD2AF12EA
:100DAC0003EE753D001203DEC3E54B94FA4002815D
:100DBC0033C3E54B953D4003854B3DC3E54B940157
:100DCC0050E3C2AF12040F12040F12040FD2AF1271
:100DDC0003EE1203DEC3E54B940140F631E8E4F573
:100DEC0021F522F523F524754FFF855C50306E02FA
:100DFC00F535F536F537F538F539F53EF52BF54E75
:100E0C00120786D262D25C12074431B41203DA1193
:100E1C00FD1203DA1203DA31171203DE3143120327
:100E2C00DE1203DE316E1203E231911203DE120385
:100E3C00DAC25CD25D12074431B41207A3111D3122
:100E4C00F8511411FD1207A3111D31F8511431176B
:100E5C001207A3111D31F8511431431207A3111DB0
:100E6C0031F85114316E1207A3111D31F8511431A0
:100E7C00911207A3111D31F8C3E54594D0E54694B2
:100E8C00074004511480B1C25DD25E120744753024
:100E9C0002511431B41207A3111D31F8511411FD74
:100EAC001207A3111D31F8511431171207A3111D8C
:100EBC0031F8511431431207A3111D31F85114317B
:100ECC006E1207A3111D31F8511431911207A311A1
:100EDC001D31F8E530146006F530511480B5C25E52
:100EEC00D25F120744511431B41207A91104111D19
:100EFC00115875300111AA20580302106E11E3111C
:100F0C00F711FD1207A91104111D11581171205868
:100F1C000302106E11E311F731171207A911041116
:100F2C001D115811AA20580302106E11E311F7314C
:100F3C00431207A91104111D1158117120580302F5
:100F4C00106E11E311F7316E1207A91104111D1166
:100F5C005811AA20580302106E11E311F7319112A7
:100F6C0007A91104111D1158117120580302106E9C
:100F7C0011E311F731B41207A91104111D1158E531
:100F8C0030146004F530E101206C11C2AFC262C2B2
:100F9C0095C294C293D2949000D9D2AF11AA205882
:100FAC000302106E11E312044B11F711FD1207A985
:100FBC001104111D1158117120580302106E11E308
:100FCC0012048F11F731171207A91104111D1158B2
:100FDC0011AA20580302106E11E31204CD11F7313F
:100FEC00431207A91104111D115811712058030245
:100FFC00106E1208E31205241208F712096E12077C
:10100C00A912080412081D1208581208AA20580325
:10101C0002106E1208E31205CF1208F71209911292
:10102C0007A912080412081D120858120871120799
:10103C000920580302106E1208E312070D1208F76C
:10104C001209B41207A912080412081D120858C27A
:10105C005FC3E54E9401500AC3E53494F05003028B
:0E106C000FA81209E8E4F521F522F523F5247A
:03107A00020D6CF8
:0F1A000002000704040102030303020101A55AB7
:101A400023585031324123202020202020202020E4
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

256
SiLabs/Hex files/XP 12A Tail.hex

@ -0,0 +1,256 @@
:03000000020C04EB
:03000B0002008070
:03002B000201D9F6
:03005B000202BFDF
:030073000202B5D1
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C292C291AA
:1000A000C29020620201B27405D5E0FDD295D294CF
:1000B000D293D0E0D0D0C2D3D2AF3221C9C29120E6
:1000C0006E02D292306E02D29021C9206E02C2908E
:1000D000306E02C292D29121C9206E02C292306E5D
:1000E00002C290206E02D290306E02D29221C97468
:1000F00016206E02C295306E02C293206E02C29329
:10010000306E02C295D5E0E9C291206E02D29230E3
:100110006E02D29021C97416206E02C295306E0212
:10012000C293C294D5E0F1C291206E02D292306E99
:1001300002D29021C97416C294206E02C295306E0C
:1001400002C293D5E0F1206E02C290306E02C292DC
:10015000D29121C97416C294206E02C293306E02ED
:10016000C295D5E0F1206E02C290306E02C292D2EA
:100170009121C97416206E02C293306E02C295C2DC
:1001800094D5E0F1206E02C292306E02C290206ED1
:1001900002D290306E02D29221C97416206E02C231
:1001A00093306E02C295206E02C295306E02C293E9
:1001B000D5E0E9206E02C292306E02C290206E023B
:1001C000D290306E02D29221C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E70278FA53DACF206F03D2
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E70279FAC3E89970CE752718B8
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024189E54BF8C260C394F04003C6
:1002400074F0F8C4540F28F8A95BB90302416BC3DA
:1002500013C313855B28204002C313204206C8C382
:1002600098F8416B28F8500374FFF8C3E895505094
:1002700005E550C333F8E52B54F0700D8821A859DB
:10028000B8030685212385212420CF09D0E0D0D0D2
:10029000C2D3D2AF32C2CF7801E54BC3940140053F
:1002A000754E0041ACE54E046002054ED0E0D0D062
:1002B000C2D3D2AF32C2AF53917FC258D2AF32C293
:1002C000AFC0D0C0E0D2D3A8FBA9FCC2D830610235
:1002D000611853DACF206F0343DA10306F0343DA2B
:1002E00020D261E580306F01F420E70241F48825D7
:1002F000892661E853DACF206F0343DA20306F0399
:1003000043DA10C2D8C2617800E580306F01F43062
:10031000E70261DB884B61DB53DACF206F0343DAFE
:1003200020306F0343DA10C261205902619253DA20
:10033000CF206F0343DA10306F0343DA20C2D8D2E4
:10034000618849894AC3E89547F8E99548F9E4FB8B
:10035000C3E89468E994015006E4D2E3FB618AC3E0
:10036000E894D0E994025006E4D2E2FB618AC3E843
:1003700094A0E994055006E4D2E1FB618AC3E894B5
:1003800040E9940B5004E4D2E0FBA849A94A88470D
:100390008948C3E89525F8E99526F9306B0261BFD5
:1003A000306A0261B8E9C313F9E813F830690261F1
:1003B000B8E9C313F9E813F8E9C313F9E813F8C36C
:1003C000E894FAE99400400278FAA94B884B205946
:1003D0000261DB740FF4552D4BF52D752718D26093
:1003E00030590261E853DAFE752906D0E0D0D0C258
:1003F000D3D2AF327901810C7903810C790A810C57
:10040000791E810C7964810C79C8810C7817E4D548
:10041000E0FDD8FAD9F6227A187B78812F7A157BFD
:100420008C812F7A127BB4812F7A0F7BC8812F7930
:1004300002B26EE4D294D5E0FD206E02D292306E0C
:1004400002D290E540D5E0FD206E02C292306E02ED
:10045000C290E540D5E0FDD9D8EAF8D5E0FDD8FB5B
:10046000DBCDC29422E559B4030281A8C3E53394DD
:0F04700000E53494054012852123E4F535F53677
:10047F00F537F538F539F53E81A8E522F43333F930
:10048F0013F8E9540104F9E854FEC39440F8E994D1
:10049F0000F988358936753E0122E53E6039C3E59E
:1004AF003413F9E53313F8C3E53598F8E53699F9C0
:1004BF0030E70BC3E89480E994FF401381E2C3E86F
:1004CF00947FE99400500281E2787F790081E2788D
:1004DF008079FF883A893B22E53E6052E537253A1D
:1004EF00F8E538353BF9E539353BFA30E708C3EA2B
:1004FF0094F04012A11BC3EA940F5002A11B78FF86
:10050F0079FF7A0FA11B780079007AF0C3E5239564
:10051F004F5009C3E52394014009A137E53A20E77D
:10052F000DA137E53A30E706883789388A3922E551
:10053F003E70030205E8853A20E4300701F4F9C361
:10054F00E53A33F8E933F9E55730E002A16EC3E538
:10055F00579404603AE9A2E713F9E813F8A19EE96A
:10056F00FBE8FAEBA2E713FBEA13FAE82AF8E93BF8
:10057F00F9E557C394056017E9A2E713F9E813F8F3
:10058F00E557C394036008E9A2E713F9E813F8E904
:10059F0030E70BC3E89480E994FF4013A1C2C3E88E
:1005AF00947FE994005002A1C2787F7900A1C278AC
:1005BF008079FFE820E713C3E52298F84008C3E8E5
:1005CF0094014002A1E67801A1E6E8F42401252276
:1005DF00F84002A1E678FF883C22E53E7003020650
:1005EF0089A838A939E55830E002C10CC3E5589401
:1005FF0004603AE9A2E713F9E813F8C13CE9FBE814
:10060F00FAEBA2E713FBEA13FAE82AF8E93BF9E55C
:10061F0058C394056017E9A2E713F9E813F8E558F2
:10062F00C394036008E9A2E713F9E813F8E930E788
:10063F000BC3E89400E994FF4013C160C3E894FF33
:10064F00E994005002C16078FF7900C160780079A9
:10065F00FFE920E713C3E53C98F84008C3E894018D
:10066F004002C1877801C187E8F42401253CF8E9ED
:10067F0034004002C18778FF882322222222305C77
:10068F00027832305D027878305E027850305F0247
:10069F007828E52B54F06027A95DB90302C1C8C3C0
:1006AF0013855D28204002C313204206C8C398F863
:1006BF00C1C828F8500374FFF888218823882422A2
:1006CF007545707546177AFF7B3F8A438B448A3F87
:1006DF008B407B1F8A418B428A348A3322A845A9DB
:1006EF0046C1F6A83FA940759100C3E498F594E47C
:1006FF0099F595759104D25875C820A8CCA9CD75D8
:10070F00C824AA31AB3288318932C3E89AF8E99B01
:10071F00F9AA33AB34C3EB13FDEA13FCC3ED13FD9E
:10072F00EC13FCC3EA9CFAEB9DFBEA28FAEB39FBCE
:10073F008A338B344001227534FF7533FF223058D2
:10074F0002E14D759100C3E49541F594E49542F5AE
:10075F0095759104D25822A934A8337A04C3E913AA
:10076F00F9E813F8DAF7C3E8940AF8E99400F940C6
:10077F0009C3E8940AE994005004780AE4F988431D
:10078F008944883F8940C3E913F9E813F888418900
:10079F004222305802E1A1759100C3E49533F594DC
:1007AF00E49534F595759104D25822D2AF205801B3
:1007BF0022E524F4C4C313540704F9D2AF0000C2D6
:1007CF00AF306203305AF4780D206D027804C3E520
:1007DF008B9840F3E59BF4F5203006030207BAD956
:1007EF00F3D2AF22D2AF20580122E524F4C4C313B1
:1007FF00540704F9D2AF0000C2AF306203305AF48D
:10080F00780D206D027804C3E58B9840F3E59BF4D7
:10081F00F5202006030207F3D9F3D2AF227591001A
:10082F00C3E49543F594E49544F595759104D25836
:10083F0022305802014022C2AF306203900173C2CE
:10084F0094206E02D295306E02D293759F11D2AF63
:10085F0022C2AF3062039001542062039000CB207C
:0E086F006E02C290306E02C292305A02D291D6
:10087D00206E03759F01306E03759F21D2AF22C28A
:10088D00AF306203900135206E02C295306E02C208
:10089D0093206E02D293306E02D295206E03759F17
:1008AD0021306E03759F01D2AF22C2AF306203902B
:1008BD0001162062039000BDC291305A0A206E02CB
:1008CD00D292306E02D290759F11D2AF22C2AF304C
:1008DD0062039000EF206E02C293306E02C295D279
:1008ED0094206E03759F01306E03759F21D2AF2248
:1008FD00C2AF30620390019A2062039000D9206E3E
:10090D0002C292306E02C290305A0A206E02D2900C
:10091D00306E02D292206E03759F21306E03759F4B
:10092D0001D2AF229000BBC292C291C290C295C2B9
:10093D0094C29322C3E54594D0E546940750012215
:10094D00C3E545943CF8E5469400F988458946226F
:10095D00305802215D22755B03755C03755D03C222
:10096D006D740130E002D26DC26CC374019403400A
:10097D0002D26CC26E740130E102D266C26F740194
:10098D0030E102D26F75590322E493F822438F01AF
:10099D00538FFD75B7A575B7F1E8F0538FFE224360
:1009AD008F02438F0175B7A575B7F1901A0DF053EE
:1009BD008FFC22901A0D785A319A901A0E78A53123
:1009CD009A22901A0D3196C3E8945A7057901A0EC8
:1009DD003196C3E894A5704C901A073196885B90B8
:1009ED001A083196885C901A093196885D901A0A1A
:1009FD003196C26DE830E002D26DC26CC3E894034B
:100A0D004002D26C901A0B3196C26EE830E102D2E0
:100A1D006E901A0C3196C26FE830E102D26F7559A3
:100A2D0003020A363163120A57227A307980901AFE
:100A3D00403196E8F709A3DAF8227A307980901AD6
:100A4D0040E7F8319A09A3DAF822C2AF513731AC39
:100A5D00901A007802319A901A017800319A901A02
:100A6D00027807319A901A07A85B319A901A08A854
:100A7D005C319A901A09A85D319A901A0A78012072
:100A8D006D027802306C027803319A901A0B78015E
:100A9D00306E027802319A901A0C7801306F02781C
:100AAD0002319A514731C022AB54A855EBC3940182
:100ABD00601EEBC39402601DEBC39403601CEBC37B
:100ACD009404601BEBC39405602AEBC39406602F5E
:100ADD00885B020B17885C020B17885D020B17C22F
:100AED006DE830E002D26DC26CC3E894034002D2CF
:100AFD006C020B17C26EE830E102D26E020B17C208
:100B0D006FE830E102D26F020B17227C0512040848
:100B1D00DCFB22C2AF12041712041D1204231204AF
:100B2D00291203FC12041712041D120423120429A6
:100B3D001203FC12041712041D120423120429D2ED
:100B4D00AF22AC54AD55C2AF1204171204171204E4
:100B5D00171203FCDCF21204291203FCDDF8D2AFEC
:100B6D0022C2AF120429D2AF120404C3E54B940183
:100B7D0050EFC2AF1204171203FC120417D2AF12BA
:100B8D000404C3E54B94FA40E9712071187118758E
:100B9D005401755501755600714F7C05120408C33B
:100BAD00E54B9401500D51B551577120C2AF43EF34
:100BBD00107118DCE70556C3E5569403500280D832
:100BCD00711805557805C3E554940440027803C3A4
:100BDD00E55494044002780208C3E555985002800C
:100BED00B4711871180554C3E5549407500280A2CE
:100BFD00C2AF43EF107118C2D353D9BF7581C04333
:100C0D00B203E5B324044002F5B37580FF7590007F
:100C1D0075A40075A53F75A60175F19175F23F7527
:100C2D00D47F75D50075E2413131E4F8F6D8FD3148
:100C3D006331CF3131758E01206D03758E0075884E
:100C4D005075890275C82475910475D84012040831
:100C5D0012041712040012041D12040012042312B0
:0E0C6D00040075A82275B80275E69075F610A1
:100C7B00759B8075D10175BCB875BB0675BA1175BE
:100C8B00E880D2AF12068A43DA01C2D8C2611204DD
:100C9B0008D2597A051203F83060FDE54BC3940274
:100CAB0040F1E52D540F854D4CF54DB54CE5DAE58E
:100CBB00C25953DACF206F0343DA20306F0343DA84
:100CCB0010C2D8C261C2AF12041712041712041754
:100CDB00D2AF120408753D001203F8C3E54B94FA2A
:100CEB004002616EC3E54B953D4003854B3DC3E52B
:100CFB004B940150E3C2AF120429120429120429A8
:100D0B00D2AF1204081203F8C3E54B940140F6313D
:100D1B0031E4F521F522F523F524754FFF855C5061
:100D2B00306E02F535F536F537F538F539F53EF514
:100D3B002BF54E1206CFD262D25C12068D11FD122C
:100D4B0003F411461203F41203F411601203F811A9
:100D5B008C1203F81203F811B71203FC11DA120309
:100D6B00F81203F4C25CD25D12068D11FD1206EC73
:100D7B001207663141315D11461206EC12076631DE
:100D8B0041315D11601206EC1207663141315D1184
:100D9B008C1206EC1207663141315D11B71206EC6D
:100DAB001207663141315D11DA1206EC120766311A
:100DBB0041C3E54594D0E54694074004315D80ABD3
:100DCB00C25DD25E12068D753002315D11FD1206C9
:100DDB00EC1207663141315D11461206EC120766C3
:100DEB003141315D11601206EC1207663141315D04
:100DFB00118C1206EC1207663141315D11B71206E8
:100E0B00EC1207663141315D11DA1206EC120766FE
:100E1B003141E530146006F530315D80AFC25ED2F2
:100E2B005F12068D315D11FD1206F212074D12078E
:100E3B00661207A17530011207F3205803020FCA7F
:100E4B00112C114011461206F212074D12076612B1
:100E5B0007A11207BA205803020FCA112C11401117
:100E6B00601206F212074D1207661207A11207F362
:100E7B00205803020FCA112C1140118C1206F212CA
:100E8B00074D1207661207A11207BA205803020F6B
:100E9B00CA112C114011B71206F212074D12076638
:100EAB001207A11207F3205803020FCA112C11408D
:100EBB0011DA1206F212074D1207661207A112077A
:100ECB00BA205803020FCA112C114011FD1206F261
:100EDB0012074D1207661207A1E530146004F530B6
:100EEB00C142206C11C2AFC262C295C294C293D2EE
:100EFB00949000D9D2AF1207F3205803020FCA11F6
:100F0B002C120465114011461206F212074D1207FE
:100F1B00661207A11207BA205803020FCA112C122E
:100F2B0004A9114011601206F212074D1207661246
:100F3B0007A11207F3205803020FCA112C1204E762
:100F4B001140118C1206F212074D1207661207A1FF
:100F5B001207BA205803020FCA112C12053E11407A
:100F6B0011B71206F212074D1207661207A11207EC
:100F7B00F3205803020FCA112C1205E9114011DAA4
:100F8B001206F212074D1207661207A11207BA12C8
:100F9B00068B205803020FCA112C12068C1140111C
:100FAB00FD1206F212074D1207661207A1C25FC3AC
:100FBB00E54E94645009C3E53494F05002E10131DD
:0C0FCB0031E4F521F522F523F524A110F6
:0F1A0000020007040401020303030101015AA5B8
:101A400023585031324123202020202020202020E4
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

267
SiLabs/Hex files/XP 3A Main.hex

@ -0,0 +1,267 @@
:03000000020CD21D
:03000B0002008070
:03002B000201D9F6
:03005B000202A5F9
:0300730002029BEB
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C290C291AC
:1000A000C29220620201B27401D5E0FDC293C294F3
:1000B000C295D0E0D0D0C2D3D2AF3221C9C29120F4
:1000C0006E02D290306E02D29221C9206E02C2928C
:1000D000306E02C290D29121C9206E02C290306E61
:1000E00002C292206E02D292306E02D29021C97466
:1000F00002206E02D293306E02D295206E02D2950B
:10010000306E02D293D5E0E9C291206E02D29030D7
:100110006E02D29221C97402206E02D293306E0216
:10012000D295D294D5E0F1C291206E02D290306E79
:1001300002D29221C97402D294206E02D293306E00
:1001400002D295D5E0F1206E02C292306E02C290CA
:10015000D29121C97402D294206E02D295306E02DF
:10016000D293D5E0F1206E02C292306E02C290D2DC
:100170009121C97402206E02D295306E02D293D2C0
:1001800094D5E0F1206E02C290306E02C292206ED1
:1001900002D292306E02D29021C97402206E02D235
:1001A00095306E02D293206E02D293306E02D295B9
:1001B000D5E0E9206E02C290306E02C292206E023B
:1001C000D292306E02D29021C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E70278FA53DACF206F03D2
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E70279FAC3E89970CE75274090
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024156E54BF8C260C3E8955050A3
:1002400005E550C333F8E52B54F0700A8821A8590E
:10025000B8030385212320CF09D0E0D0D0C2D3D268
:10026000AF32C2CF7801E54BC394014005754E0013
:100270004179E54E046002054EE559B40203853D1F
:1002800021C3E5229521600A4004152241900522F0
:10029000D8E7D0E0D0D0C2D3D2AF32C2AF53917F33
:1002A000C258D2AF32C2AFC0D0C0E0D2D3A8FBA9EF
:1002B000FCC2D830610241FE53DACF206F0343DA2B
:1002C00010306F0343DA20D261E580306F01F420F3
:1002D000E70241DA8825892661CE53DACF206F0301
:1002E00043DA20306F0343DA10C2D8C2617800E5E8
:1002F00080306F01F430E70261C1884B61C153DA8D
:10030000CF206F0343DA20306F0343DA10C261203D
:100310005902617853DACF206F0343DA10306F034C
:1003200043DA20C2D8D2618849894AC3E89547F8A0
:10033000E99548F9E4FBC3E89468E994015006E4C0
:10034000D2E3FB6170C3E894D0E994025006E4D292
:10035000E2FB6170C3E894A0E994055006E4D2E1A1
:10036000FB6170C3E89440E9940B5004E4D2E0FBD5
:10037000A849A94A88478948C3E89525F8E99526F8
:10038000F9306B0261A5306A02619EE9C313F9E896
:1003900013F8306902619EE9C313F9E813F8E9C361
:1003A00013F9E813F8C3E894FAE99400400278FAE4
:1003B000A94B884B20590261C1740FF4552D4BF5A0
:1003C0002D752740D26030590261CE53DAFE75296F
:1003D00020D0E0D0D0C2D3D2AF32790161F279031C
:1003E00061F2790A61F2791E61F2796461F279C889
:1003F00061F27817E4D5E0FDD8FAD9F6227A187BB5
:100400007881157A157B8C81157A127BB481157AE7
:100410000F7BC881157902B26EE4C294D5E0FD204D
:100420006E02D290306E02D292E540D5E0FD206E91
:1004300002C290306E02C292E540D5E0FDD9D8EA02
:10044000F8D5E0FDD8FBDBCDD29422E559B4030208
:10045000818EC3E5339400E5349405401285212351
:10046000E4F535F536F537F538F539F53E818EE5A5
:0F04700022F43333F913F8E9540104F9E854FE88
:10047F00C39440F8E99400F988358936753E012216
:10048F00E53E6039C3E53413F9E53313F8C3E535B9
:10049F0098F8E53699F930E70BC3E89480E994FFB3
:1004AF00401381C8C3E8947FE99400500281C87853
:1004BF007F790081C8788079FF883A893B22E53EB1
:1004CF006052E537253AF8E538353BF9E539353BE4
:1004DF00FA30E708C3EA94F04012A101C3EA940F7F
:1004EF005002A10178FF79FF7A0FA10178007900FE
:1004FF007AF0C3E523954F5009C3E52394014009D2
:10050F00A11DE53A20E70DA11DE53A30E706883732
:10051F0089388A3922E53E70030205CE853A20E4F8
:10052F00300701F4F9C3E53A33F8E933F9E5573009
:10053F00E002A154C3E5579404603AE9A2E713F926
:10054F00E813F8A184E9FBE8FAEBA2E713FBEA133F
:10055F00FAE82AF8E93BF9E557C394056017E9A2D1
:10056F00E713F9E813F8E557C394036008E9A2E726
:10057F0013F9E813F8E930E70BC3E89480E994FF27
:10058F004013A1A8C3E8947FE994005002A1A87872
:10059F007F7900A1A8788079FFE820E713C3E522CF
:1005AF0098F84008C3E894014002A1CC7801A1CC8F
:1005BF00E8F424012522F84002A1CC78FF883C22E0
:1005CF00E53E700302066FA838A939E55830E002FE
:1005DF00A1F2C3E5589404603AE9A2E713F9E813CE
:1005EF00F8C122E9FBE8FAEBA2E713FBEA13FAE8FA
:1005FF002AF8E93BF9E558C394056017E9A2E71318
:10060F00F9E813F8E558C394036008E9A2E713F972
:10061F00E813F8E930E70BC3E89400E994FF4013BF
:10062F00C146C3E894FFE994005002C14678FF79B0
:10063F0000C146780079FFE920E713C3E53C98F83D
:10064F004008C3E894014002C16D7801C16DE8F420
:10065F002401253CF8E934004002C16D78FF88235E
:10066F002275E890E5E820ECF8A8BDA9BE7552AB5D
:10067F00755301755101C374AB33FA740133FBC366
:10068F00E89AE99B401D8A528B53755102EA24ABBD
:10069F00FAEB3401FBC3E89AE99B40078A528B536C
:1006AF00755103AA52AB53C3E55313F9E55213F82F
:1006BF00C3E913F9E813F8C3E913F9E813F8C3E929
:1006CF0013F9E813F8C3E913FDE813FCE82CF8E974
:1006DF003DF9C3E55A94016009C3E55A9403600FCD
:1006EF00E108C3EA98FAEB99FB8A528B53E108EAC7
:1006FF0028FAEB39FB8A528B532275E89022E5E8F2
:10070F0020ECFBA8BDA9BEC3E894FFE994035011E8
:10071F00C3E89552E995535008E54F600B154FE12B
:10072F0037E54FF46002054FA84FC3E523985002F9
:10073F00A823882422305C027832305D0278503052
:10074F005E027850305F027828E52B54F06027A9BD
:10075F005DB90302E17FC313855D28204002C313F7
:10076F00204206C8C398F8E17F28F8500374FFF8B9
:10077F00882188238824227545707546177AFF7B58
:10078F003F8A438B448A3F8B407B1F8A418B428A2F
:10079F00348A3322A845A946E1ADA83FA9407591F7
:1007AF0000C3E498F594E499F595759104D25875C2
:1007BF00C820A8CCA9CD75C824AA31AB32883189FD
:1007CF0032C3E89AF8E99BF9AA33AB34C3EB13FDB4
:1007DF00EA13FCC3ED13FDEC13FCC3EA9CFAEB9D8B
:1007EF00FBEA28FAEB39FB8A338B3440012275344C
:1007FF00FF7533FF223058020104759100C3E49551
:10080F0041F594E49542F595759104D25822A93497
:10081F00A8337A04C3E913F9E813F8DAF7C3E894B5
:10082F000AF8E99400F94009C3E8940AE9940050E2
:10083F0004780AE4F988438944883F8940C3E9135F
:10084F00F9E813F88841894222305802015875910E
:10085F0000C3E49533F594E49534F595759104D27E
:0E086F005822D2AF20580122E524F4C4C3134E
:10087D00540704F9D2AF0000C2AF306203305AF40E
:10088D00780D206D027804C3E58B9840F3E59BF459
:10089D00F520300603020871D9F3D2AF22D2AF2072
:1008AD00580122E524F4C4C313540704F9D2AF0050
:1008BD0000C2AF306203305AF4780D206D02780417
:1008CD00C3E58B9840F3E59BF4F520200603020861
:1008DD00AAD9F3D2AF22759100C3E49543F594E400
:1008ED009544F595759104D2582230580201F7229E
:1008FD00C2AF306203900173D294206E02C2933066
:10090D006E02C295759F11D2AF22C2AF30620390B5
:10091D0001542062039000CB206E02C292306E0211
:10092D00C290305A02D291206E03759F01306E0332
:10093D00759F21D2AF22C2AF306203900135206E78
:10094D0002D293306E02D295206E02C295306E02A5
:10095D00C293206E03759F21306E03759F01D2AF38
:10096D0022C2AF3062039001162062039000BDC217
:10097D0091305A0A206E02D290306E02D292759F3B
:10098D0011D2AF22C2AF3062039000EF206E02D2BF
:10099D0095306E02D293C294206E03759F01306E16
:1009AD0003759F21D2AF22C2AF30620390019A200E
:1009BD0062039000D9206E02C290306E02C2923056
:1009CD005A0A206E02D292306E02D290206E0375BA
:1009DD009F21306E03759F01D2AF229000BBC29054
:1009ED00C291C292D293D294D29522C3E54594D0AE
:1009FD00E5469407500122C3E545940AF8E546946F
:100A0D0000F9884589462230580241142275570451
:100A1D00755804755901755A02755D03D26D7402CE
:100A2D0030E102C26DC26E740130E102D26EC26F4E
:100A3D00740130E102D26F22E493F822438F015307
:100A4D008FFD75B7A575B7F1E8F0538FFE22438F73
:100A5D0002438F0175B7A575B7F1901A0DF0538F3D
:100A6D00FC22901A0D78A55149901A0E785A5149C9
:100A7D0022901A0D5145C3E894A57058901A0E5145
:100A8D0045C3E8945A704D901A0351458857901AF2
:100A9D000451458858901A0551458859901A0651A8
:100AAD0045885A901A095145885D901A0A5145D2C8
:100ABD006DE830E102C26D901A0B5145C26EE830FF
:100ACD00E102D26E901A0C5145C26FE830E102D2AC
:100ADD006F020AE6511A120B07227A307980901AAA
:100AED00405145E8F709A3DAF8227A307980901A57
:100AFD0040E7F8514909A3DAF822C2AF51E7515B3B
:100B0D00901A0078025149901A0178005149901AB3
:100B1D000278075149901A03A8575149901A04A811
:100B2D00585149901A05A8595149901A06A85A5179
:100B3D0049901A09A85D5149901A0A7801206D0251
:100B4D0078025149901A0B7801306E0278025149A2
:100B5D00901A0C7801306F027802514951F7516F9C
:100B6D0022AB54A855EBC39401602AEBC3940260E9
:100B7D0029EBC394036028EBC394046027EBC39463
:100B8D00056026EBC394066025EBC39407602AEB42
:100B9D00C39408602F8857020BDC8858020BDC8841
:100BAD0059020BDC885A020BDC885D020BDCD26D1E
:100BBD00E830E102C26D020BDCC26EE830E102D218
:100BCD006E020BDCC26FE830E102D26F020BDC2249
:100BDD007C051203EEDCFB22C2AF1203FD120403EF
:100BED0012040912040F1203E21203FD1204031280
:100BFD00040912040F1203E21203FD12040312047E
:100C0D000912040FD2AF22AC54AD55C2AF1203FD81
:100C1D001203FD1203FD1203E2DCF212040F1203A4
:100C2D00E2DDF8D2AF22C2AF12040FD2AF1203EA47
:100C3D00C3E54B940150EFC2AF1203FD1203E21254
:100C4D0003FDD2AF1203EAC3E54B94FA40E971E517
:100C5D0071DD71DD75540175550175560091147C6A
:0F0C6D00051203EEC3E54B9401500D716E710734
:100C7C0071E5C2AF43EF1071DDDCE70556C3E556F5
:100C8C009403500280D871DD05557805C3E5549462
:100C9C000370027803C3E554940470027803C3E52F
:100CAC005494054002780208C3E55598500280AB75
:100CBC0071DD71DD0554C3E554940950028099C26D
:100CCC00AF43EF1071DDC2D353D9BF7581C043B2AE
:100CDC0003E5B324044002F5B37580FF75903875B5
:100CEC00A40075A53F75A60175F19175F23F75D4F9
:100CFC007F75D50075E24131E8E4F8F6D8FD511A5C
:100D0C00517E31E8758E01206D03758E007588500B
:100D1C0075890275C82475910475D8401203EE12BA
:100D2C0003FD1203E61204031203E6120409120374
:100D3C00E675A82275B80275E69075F610759B805D
:100D4C0075D10175BCB875BB0675BA1175E880D242
:100D5C00AF12067043DA01C2D8C2611203EED25947
:100D6C007A051203DE3060FDE54BC3940240F1E5D9
:100D7C002D540F854D4CF54DB54CE5DAE5C2595364
:100D8C00DACF206F0343DA20306F0343DA10C2D876
:100D9C00C261C2AF1203FD1203FD1203FDD2AF12EA
:100DAC0003EE753D001203DEC3E54B94FA4002815D
:100DBC0033C3E54B953D4003854B3DC3E54B940157
:100DCC0050E3C2AF12040F12040F12040FD2AF1271
:100DDC0003EE1203DEC3E54B940140F631E8E4F573
:100DEC0021F522F523F524754FFF855C50306E02FA
:100DFC00F535F536F537F538F539F53EF52BF54E75
:100E0C00120786D262D25C12074431B41203DA1193
:100E1C00FD1203DA1203DA31171203DE3143120327
:100E2C00DE1203DE316E1203E231911203DE120385
:100E3C00DAC25CD25D12074431B41207A3111D3122
:100E4C00F8511411FD1207A3111D31F8511431176B
:100E5C001207A3111D31F8511431431207A3111DB0
:100E6C0031F85114316E1207A3111D31F8511431A0
:100E7C00911207A3111D31F8C3E54594D0E54694B2
:100E8C00074004511480B1C25DD25E120744753024
:100E9C0002511431B41207A3111D31F8511411FD74
:100EAC001207A3111D31F8511431171207A3111D8C
:100EBC0031F8511431431207A3111D31F85114317B
:100ECC006E1207A3111D31F8511431911207A311A1
:100EDC001D31F8E530146006F530511480B5C25E52
:100EEC00D25F120744511431B41207A91104111D19
:100EFC00115875300111AA20580302106E11E3111C
:100F0C00F711FD1207A91104111D11581171205868
:100F1C000302106E11E311F731171207A911041116
:100F2C001D115811AA20580302106E11E311F7314C
:100F3C00431207A91104111D1158117120580302F5
:100F4C00106E11E311F7316E1207A91104111D1166
:100F5C005811AA20580302106E11E311F7319112A7
:100F6C0007A91104111D1158117120580302106E9C
:100F7C0011E311F731B41207A91104111D1158E531
:100F8C0030146004F530E101206C11C2AFC262D2A2
:100F9C0093D294D295C2949000D9D2AF11AA205872
:100FAC000302106E11E312044B11F711FD1207A985
:100FBC001104111D1158117120580302106E11E308
:100FCC0012048F11F731171207A91104111D1158B2
:100FDC0011AA20580302106E11E31204CD11F7313F
:100FEC00431207A91104111D115811712058030245
:100FFC00106E1208E31205241208F712096E12077C
:10100C00A912080412081D1208581208AA20580325
:10101C0002106E1208E31205CF1208F71209911292
:10102C0007A912080412081D120858120871120799
:10103C000920580302106E1208E312070D1208F76C
:10104C001209B41207A912080412081D120858C27A
:10105C005FC3E54E9401500AC3E53494F05003028B
:0E106C000FA81209E8E4F521F522F523F5247A
:03107A00020D6CF8
:0F1A000002000704040102030303020101A55AB7
:101A400023585033412320202020202020202020F4
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

256
SiLabs/Hex files/XP 3A Tail.hex

@ -0,0 +1,256 @@
:03000000020C04EB
:03000B0002008070
:03002B000201D9F6
:03005B000202BFDF
:030073000202B5D1
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C290C291AC
:1000A000C29220620201B27401D5E0FDC293C294F3
:1000B000C295D0E0D0D0C2D3D2AF3221C9C29120F4
:1000C0006E02D290306E02D29221C9206E02C2928C
:1000D000306E02C290D29121C9206E02C290306E61
:1000E00002C292206E02D292306E02D29021C97466
:1000F00002206E02D293306E02D295206E02D2950B
:10010000306E02D293D5E0E9C291206E02D29030D7
:100110006E02D29221C97402206E02D293306E0216
:10012000D295D294D5E0F1C291206E02D290306E79
:1001300002D29221C97402D294206E02D293306E00
:1001400002D295D5E0F1206E02C292306E02C290CA
:10015000D29121C97402D294206E02D295306E02DF
:10016000D293D5E0F1206E02C292306E02C290D2DC
:100170009121C97402206E02D295306E02D293D2C0
:1001800094D5E0F1206E02C290306E02C292206ED1
:1001900002D292306E02D29021C97402206E02D235
:1001A00095306E02D293206E02D293306E02D295B9
:1001B000D5E0E9206E02C290306E02C292206E023B
:1001C000D292306E02D29021C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E70278FA53DACF206F03D2
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E70279FAC3E89970CE752718B8
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024189E54BF8C260C394F04003C6
:1002400074F0F8C4540F28F8A95BB90302416BC3DA
:1002500013C313855B28204002C313204206C8C382
:1002600098F8416B28F8500374FFF8C3E895505094
:1002700005E550C333F8E52B54F0700D8821A859DB
:10028000B8030685212385212420CF09D0E0D0D0D2
:10029000C2D3D2AF32C2CF7801E54BC3940140053F
:1002A000754E0041ACE54E046002054ED0E0D0D062
:1002B000C2D3D2AF32C2AF53917FC258D2AF32C293
:1002C000AFC0D0C0E0D2D3A8FBA9FCC2D830610235
:1002D000611853DACF206F0343DA10306F0343DA2B
:1002E00020D261E580306F01F420E70241F48825D7
:1002F000892661E853DACF206F0343DA20306F0399
:1003000043DA10C2D8C2617800E580306F01F43062
:10031000E70261DB884B61DB53DACF206F0343DAFE
:1003200020306F0343DA10C261205902619253DA20
:10033000CF206F0343DA10306F0343DA20C2D8D2E4
:10034000618849894AC3E89547F8E99548F9E4FB8B
:10035000C3E89468E994015006E4D2E3FB618AC3E0
:10036000E894D0E994025006E4D2E2FB618AC3E843
:1003700094A0E994055006E4D2E1FB618AC3E894B5
:1003800040E9940B5004E4D2E0FBA849A94A88470D
:100390008948C3E89525F8E99526F9306B0261BFD5
:1003A000306A0261B8E9C313F9E813F830690261F1
:1003B000B8E9C313F9E813F8E9C313F9E813F8C36C
:1003C000E894FAE99400400278FAA94B884B205946
:1003D0000261DB740FF4552D4BF52D752718D26093
:1003E00030590261E853DAFE752906D0E0D0D0C258
:1003F000D3D2AF327901810C7903810C790A810C57
:10040000791E810C7964810C79C8810C7817E4D548
:10041000E0FDD8FAD9F6227A187B78812F7A157BFD
:100420008C812F7A127BB4812F7A0F7BC8812F7930
:1004300002B26EE4C294D5E0FD206E02D290306E1E
:1004400002D292E540D5E0FD206E02C290306E02ED
:10045000C292E540D5E0FDD9D8EAF8D5E0FDD8FB59
:10046000DBCDD29422E559B4030281A8C3E53394CD
:0F04700000E53494054012852123E4F535F53677
:10047F00F537F538F539F53E81A8E522F43333F930
:10048F0013F8E9540104F9E854FEC39440F8E994D1
:10049F0000F988358936753E0122E53E6039C3E59E
:1004AF003413F9E53313F8C3E53598F8E53699F9C0
:1004BF0030E70BC3E89480E994FF401381E2C3E86F
:1004CF00947FE99400500281E2787F790081E2788D
:1004DF008079FF883A893B22E53E6052E537253A1D
:1004EF00F8E538353BF9E539353BFA30E708C3EA2B
:1004FF0094F04012A11BC3EA940F5002A11B78FF86
:10050F0079FF7A0FA11B780079007AF0C3E5239564
:10051F004F5009C3E52394014009A137E53A20E77D
:10052F000DA137E53A30E706883789388A3922E551
:10053F003E70030205E8853A20E4300701F4F9C361
:10054F00E53A33F8E933F9E55730E002A16EC3E538
:10055F00579404603AE9A2E713F9E813F8A19EE96A
:10056F00FBE8FAEBA2E713FBEA13FAE82AF8E93BF8
:10057F00F9E557C394056017E9A2E713F9E813F8F3
:10058F00E557C394036008E9A2E713F9E813F8E904
:10059F0030E70BC3E89480E994FF4013A1C2C3E88E
:1005AF00947FE994005002A1C2787F7900A1C278AC
:1005BF008079FFE820E713C3E52298F84008C3E8E5
:1005CF0094014002A1E67801A1E6E8F42401252276
:1005DF00F84002A1E678FF883C22E53E7003020650
:1005EF0089A838A939E55830E002C10CC3E5589401
:1005FF0004603AE9A2E713F9E813F8C13CE9FBE814
:10060F00FAEBA2E713FBEA13FAE82AF8E93BF9E55C
:10061F0058C394056017E9A2E713F9E813F8E558F2
:10062F00C394036008E9A2E713F9E813F8E930E788
:10063F000BC3E89400E994FF4013C160C3E894FF33
:10064F00E994005002C16078FF7900C160780079A9
:10065F00FFE920E713C3E53C98F84008C3E894018D
:10066F004002C1877801C187E8F42401253CF8E9ED
:10067F0034004002C18778FF882322222222305C77
:10068F00027832305D027878305E027850305F0247
:10069F007828E52B54F06027A95DB90302C1C8C3C0
:1006AF0013855D28204002C313204206C8C398F863
:1006BF00C1C828F8500374FFF888218823882422A2
:1006CF007545707546177AFF7B3F8A438B448A3F87
:1006DF008B407B1F8A418B428A348A3322A845A9DB
:1006EF0046C1F6A83FA940759100C3E498F594E47C
:1006FF0099F595759104D25875C820A8CCA9CD75D8
:10070F00C824AA31AB3288318932C3E89AF8E99B01
:10071F00F9AA33AB34C3EB13FDEA13FCC3ED13FD9E
:10072F00EC13FCC3EA9CFAEB9DFBEA28FAEB39FBCE
:10073F008A338B344001227534FF7533FF223058D2
:10074F0002E14D759100C3E49541F594E49542F5AE
:10075F0095759104D25822A934A8337A04C3E913AA
:10076F00F9E813F8DAF7C3E8940AF8E99400F940C6
:10077F0009C3E8940AE994005004780AE4F988431D
:10078F008944883F8940C3E913F9E813F888418900
:10079F004222305802E1A1759100C3E49533F594DC
:1007AF00E49534F595759104D25822D2AF205801B3
:1007BF0022E524F4C4C313540704F9D2AF0000C2D6
:1007CF00AF306203305AF4780D206D027804C3E520
:1007DF008B9840F3E59BF4F5203006030207BAD956
:1007EF00F3D2AF22D2AF20580122E524F4C4C313B1
:1007FF00540704F9D2AF0000C2AF306203305AF48D
:10080F00780D206D027804C3E58B9840F3E59BF4D7
:10081F00F5202006030207F3D9F3D2AF227591001A
:10082F00C3E49543F594E49544F595759104D25836
:10083F0022305802014022C2AF306203900173D2BE
:10084F0094206E02C293306E02C295759F11D2AF83
:10085F0022C2AF3062039001542062039000CB207C
:0E086F006E02C292306E02C290305A02D291D6
:10087D00206E03759F01306E03759F21D2AF22C28A
:10088D00AF306203900135206E02D293306E02D2EA
:10089D0095206E02C295306E02C293206E03759F35
:1008AD0021306E03759F01D2AF22C2AF306203902B
:1008BD0001162062039000BDC291305A0A206E02CB
:1008CD00D290306E02D292759F11D2AF22C2AF304C
:1008DD0062039000EF206E02D295306E02D293C269
:1008ED0094206E03759F01306E03759F21D2AF2248
:1008FD00C2AF30620390019A2062039000D9206E3E
:10090D0002C290306E02C292305A0A206E02D2920A
:10091D00306E02D290206E03759F21306E03759F4D
:10092D0001D2AF229000BBC290C291C292D293D29B
:10093D0094D29522C3E54594D0E546940750012203
:10094D00C3E545943CF8E5469400F988458946226F
:10095D00305802215D22755B03755C03755D03C222
:10096D006D740330E002D26DC26CC3740394034006
:10097D0002D26CC26E740130E102D266C26F740194
:10098D0030E102D26F75590322E493F822438F01AF
:10099D00538FFD75B7A575B7F1E8F0538FFE224360
:1009AD008F02438F0175B7A575B7F1901A0DF053EE
:1009BD008FFC22901A0D785A319A901A0E78A53123
:1009CD009A22901A0D3196C3E8945A7057901A0EC8
:1009DD003196C3E894A5704C901A073196885B90B8
:1009ED001A083196885C901A093196885D901A0A1A
:1009FD003196C26DE830E002D26DC26CC3E894034B
:100A0D004002D26C901A0B3196C26EE830E102D2E0
:100A1D006E901A0C3196C26FE830E102D26F7559A3
:100A2D0003020A363163120A57227A307980901AFE
:100A3D00403196E8F709A3DAF8227A307980901AD6
:100A4D0040E7F8319A09A3DAF822C2AF513731AC39
:100A5D00901A007802319A901A017800319A901A02
:100A6D00027807319A901A07A85B319A901A08A854
:100A7D005C319A901A09A85D319A901A0A78012072
:100A8D006D027802306C027803319A901A0B78015E
:100A9D00306E027802319A901A0C7801306F02781C
:100AAD0002319A514731C022AB54A855EBC3940182
:100ABD00601EEBC39402601DEBC39403601CEBC37B
:100ACD009404601BEBC39405602AEBC39406602F5E
:100ADD00885B020B17885C020B17885D020B17C22F
:100AED006DE830E002D26DC26CC3E894034002D2CF
:100AFD006C020B17C26EE830E102D26E020B17C208
:100B0D006FE830E102D26F020B17227C0512040848
:100B1D00DCFB22C2AF12041712041D1204231204AF
:100B2D00291203FC12041712041D120423120429A6
:100B3D001203FC12041712041D120423120429D2ED
:100B4D00AF22AC54AD55C2AF1204171204171204E4
:100B5D00171203FCDCF21204291203FCDDF8D2AFEC
:100B6D0022C2AF120429D2AF120404C3E54B940183
:100B7D0050EFC2AF1204171203FC120417D2AF12BA
:100B8D000404C3E54B94FA40E9712071187118758E
:100B9D005401755501755600714F7C05120408C33B
:100BAD00E54B9401500D51B551577120C2AF43EF34
:100BBD00107118DCE70556C3E5569403500280D832
:100BCD00711805557805C3E554940440027803C3A4
:100BDD00E55494054002780208C3E555985002800B
:100BED00B4711871180554C3E5549407500280A2CE
:100BFD00C2AF43EF107118C2D353D9BF7581C04333
:100C0D00B203E5B324044002F5B37580FF75903847
:100C1D0075A40075A53F75A60175F19175F23F7527
:100C2D00D47F75D50075E2413131E4F8F6D8FD3148
:100C3D006331CF3131758E01206D03758E0075884E
:100C4D005075890275C82475910475D84012040831
:100C5D0012041712040012041D12040012042312B0
:0E0C6D00040075A82275B80275E69075F610A1
:100C7B00759B8075D10175BCB875BB0675BA1175BE
:100C8B00E880D2AF12068A43DA01C2D8C2611204DD
:100C9B0008D2597A051203F83060FDE54BC3940274
:100CAB0040F1E52D540F854D4CF54DB54CE5DAE58E
:100CBB00C25953DACF206F0343DA20306F0343DA84
:100CCB0010C2D8C261C2AF12041712041712041754
:100CDB00D2AF120408753D001203F8C3E54B94FA2A
:100CEB004002616EC3E54B953D4003854B3DC3E52B
:100CFB004B940150E3C2AF120429120429120429A8
:100D0B00D2AF1204081203F8C3E54B940140F6313D
:100D1B0031E4F521F522F523F524754FFF855C5061
:100D2B00306E02F535F536F537F538F539F53EF514
:100D3B002BF54E1206CFD262D25C12068D11FD122C
:100D4B0003F411461203F41203F411601203F811A9
:100D5B008C1203F81203F811B71203FC11DA120309
:100D6B00F81203F4C25CD25D12068D11FD1206EC73
:100D7B001207663141315D11461206EC12076631DE
:100D8B0041315D11601206EC1207663141315D1184
:100D9B008C1206EC1207663141315D11B71206EC6D
:100DAB001207663141315D11DA1206EC120766311A
:100DBB0041C3E54594D0E54694074004315D80ABD3
:100DCB00C25DD25E12068D753002315D11FD1206C9
:100DDB00EC1207663141315D11461206EC120766C3
:100DEB003141315D11601206EC1207663141315D04
:100DFB00118C1206EC1207663141315D11B71206E8
:100E0B00EC1207663141315D11DA1206EC120766FE
:100E1B003141E530146006F530315D80AFC25ED2F2
:100E2B005F12068D315D11FD1206F212074D12078E
:100E3B00661207A17530011207F3205803020FCA7F
:100E4B00112C114011461206F212074D12076612B1
:100E5B0007A11207BA205803020FCA112C11401117
:100E6B00601206F212074D1207661207A11207F362
:100E7B00205803020FCA112C1140118C1206F212CA
:100E8B00074D1207661207A11207BA205803020F6B
:100E9B00CA112C114011B71206F212074D12076638
:100EAB001207A11207F3205803020FCA112C11408D
:100EBB0011DA1206F212074D1207661207A112077A
:100ECB00BA205803020FCA112C114011FD1206F261
:100EDB0012074D1207661207A1E530146004F530B6
:100EEB00C142206C11C2AFC262D293D294D295C2CE
:100EFB00949000D9D2AF1207F3205803020FCA11F6
:100F0B002C120465114011461206F212074D1207FE
:100F1B00661207A11207BA205803020FCA112C122E
:100F2B0004A9114011601206F212074D1207661246
:100F3B0007A11207F3205803020FCA112C1204E762
:100F4B001140118C1206F212074D1207661207A1FF
:100F5B001207BA205803020FCA112C12053E11407A
:100F6B0011B71206F212074D1207661207A11207EC
:100F7B00F3205803020FCA112C1205E9114011DAA4
:100F8B001206F212074D1207661207A11207BA12C8
:100F9B00068B205803020FCA112C12068C1140111C
:100FAB00FD1206F212074D1207661207A1C25FC3AC
:100FBB00E54E94645009C3E53494F05002E10131DD
:0C0FCB0031E4F521F522F523F524A110F6
:0F1A0000020007040401020303030301015AA5B6
:101A400023585033412320202020202020202020F4
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

267
SiLabs/Hex files/XP 7A Main.hex

@ -0,0 +1,267 @@
:03000000020CD21D
:03000B0002008070
:03002B000201D9F6
:03005B000202A5F9
:0300730002029BEB
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C292C291AA
:1000A000C29020620201B27405D5E0FDD295D294CF
:1000B000D293D0E0D0D0C2D3D2AF3221C9C29120E6
:1000C0006E02D292306E02D29021C9206E02C2908E
:1000D000306E02C292D29121C9206E02C292306E5D
:1000E00002C290206E02D290306E02D29221C97468
:1000F00016206E02C295306E02C293206E02C29329
:10010000306E02C295D5E0E9C291206E02D29230E3
:100110006E02D29021C97416206E02C295306E0212
:10012000C293C294D5E0F1C291206E02D292306E99
:1001300002D29021C97416C294206E02C295306E0C
:1001400002C293D5E0F1206E02C290306E02C292DC
:10015000D29121C97416C294206E02C293306E02ED
:10016000C295D5E0F1206E02C290306E02C292D2EA
:100170009121C97416206E02C293306E02C295C2DC
:1001800094D5E0F1206E02C292306E02C290206ED1
:1001900002D290306E02D29221C97416206E02C231
:1001A00093306E02C295206E02C295306E02C293E9
:1001B000D5E0E9206E02C292306E02C290206E023B
:1001C000D290306E02D29221C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E70278FA53DACF206F03D2
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E70279FAC3E89970CE75274090
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024156E54BF8C260C3E8955050A3
:1002400005E550C333F8E52B54F0700A8821A8590E
:10025000B8030385212320CF09D0E0D0D0C2D3D268
:10026000AF32C2CF7801E54BC394014005754E0013
:100270004179E54E046002054EE559B40203853D1F
:1002800021C3E5229521600A4004152241900522F0
:10029000D8E7D0E0D0D0C2D3D2AF32C2AF53917F33
:1002A000C258D2AF32C2AFC0D0C0E0D2D3A8FBA9EF
:1002B000FCC2D830610241FE53DACF206F0343DA2B
:1002C00010306F0343DA20D261E580306F01F420F3
:1002D000E70241DA8825892661CE53DACF206F0301
:1002E00043DA20306F0343DA10C2D8C2617800E5E8
:1002F00080306F01F430E70261C1884B61C153DA8D
:10030000CF206F0343DA20306F0343DA10C261203D
:100310005902617853DACF206F0343DA10306F034C
:1003200043DA20C2D8D2618849894AC3E89547F8A0
:10033000E99548F9E4FBC3E89468E994015006E4C0
:10034000D2E3FB6170C3E894D0E994025006E4D292
:10035000E2FB6170C3E894A0E994055006E4D2E1A1
:10036000FB6170C3E89440E9940B5004E4D2E0FBD5
:10037000A849A94A88478948C3E89525F8E99526F8
:10038000F9306B0261A5306A02619EE9C313F9E896
:1003900013F8306902619EE9C313F9E813F8E9C361
:1003A00013F9E813F8C3E894FAE99400400278FAE4
:1003B000A94B884B20590261C1740FF4552D4BF5A0
:1003C0002D752740D26030590261CE53DAFE75296F
:1003D00020D0E0D0D0C2D3D2AF32790161F279031C
:1003E00061F2790A61F2791E61F2796461F279C889
:1003F00061F27817E4D5E0FDD8FAD9F6227A187BB5
:100400007881157A157B8C81157A127BB481157AE7
:100410000F7BC881157902B26EE4D294D5E0FD203D
:100420006E02D292306E02D290E540D5E0FD206E91
:1004300002C292306E02C290E540D5E0FDD9D8EA02
:10044000F8D5E0FDD8FBDBCDC29422E559B4030218
:10045000818EC3E5339400E5349405401285212351
:10046000E4F535F536F537F538F539F53E818EE5A5
:0F04700022F43333F913F8E9540104F9E854FE88
:10047F00C39440F8E99400F988358936753E012216
:10048F00E53E6039C3E53413F9E53313F8C3E535B9
:10049F0098F8E53699F930E70BC3E89480E994FFB3
:1004AF00401381C8C3E8947FE99400500281C87853
:1004BF007F790081C8788079FF883A893B22E53EB1
:1004CF006052E537253AF8E538353BF9E539353BE4
:1004DF00FA30E708C3EA94F04012A101C3EA940F7F
:1004EF005002A10178FF79FF7A0FA10178007900FE
:1004FF007AF0C3E523954F5009C3E52394014009D2
:10050F00A11DE53A20E70DA11DE53A30E706883732
:10051F0089388A3922E53E70030205CE853A20E4F8
:10052F00300701F4F9C3E53A33F8E933F9E5573009
:10053F00E002A154C3E5579404603AE9A2E713F926
:10054F00E813F8A184E9FBE8FAEBA2E713FBEA133F
:10055F00FAE82AF8E93BF9E557C394056017E9A2D1
:10056F00E713F9E813F8E557C394036008E9A2E726
:10057F0013F9E813F8E930E70BC3E89480E994FF27
:10058F004013A1A8C3E8947FE994005002A1A87872
:10059F007F7900A1A8788079FFE820E713C3E522CF
:1005AF0098F84008C3E894014002A1CC7801A1CC8F
:1005BF00E8F424012522F84002A1CC78FF883C22E0
:1005CF00E53E700302066FA838A939E55830E002FE
:1005DF00A1F2C3E5589404603AE9A2E713F9E813CE
:1005EF00F8C122E9FBE8FAEBA2E713FBEA13FAE8FA
:1005FF002AF8E93BF9E558C394056017E9A2E71318
:10060F00F9E813F8E558C394036008E9A2E713F972
:10061F00E813F8E930E70BC3E89400E994FF4013BF
:10062F00C146C3E894FFE994005002C14678FF79B0
:10063F0000C146780079FFE920E713C3E53C98F83D
:10064F004008C3E894014002C16D7801C16DE8F420
:10065F002401253CF8E934004002C16D78FF88235E
:10066F002275E890E5E820ECF8A8BDA9BE75527494
:10067F00755300755101C3747433FA740033FBC39F
:10068F00E89AE99B401D8A528B53755102EA2474F4
:10069F00FAEB3400FBC3E89AE99B40078A528B536D
:1006AF00755103AA52AB53C3E55313F9E55213F82F
:1006BF00C3E913F9E813F8C3E913F9E813F8C3E929
:1006CF0013F9E813F8C3E913FDE813FCE82CF8E974
:1006DF003DF9C3E55A94016009C3E55A9403600FCD
:1006EF00E108C3EA98FAEB99FB8A528B53E108EAC7
:1006FF0028FAEB39FB8A528B532275E89022E5E8F2
:10070F0020ECFBA8BDA9BEC3E894FFE994035011E8
:10071F00C3E89552E995535008E54F600B154FE12B
:10072F0037E54FF46002054FA84FC3E523985002F9
:10073F00A823882422305C027832305D0278503052
:10074F005E027850305F027828E52B54F06027A9BD
:10075F005DB90302E17FC313855D28204002C313F7
:10076F00204206C8C398F8E17F28F8500374FFF8B9
:10077F00882188238824227545707546177AFF7B58
:10078F003F8A438B448A3F8B407B1F8A418B428A2F
:10079F00348A3322A845A946E1ADA83FA9407591F7
:1007AF0000C3E498F594E499F595759104D25875C2
:1007BF00C820A8CCA9CD75C824AA31AB32883189FD
:1007CF0032C3E89AF8E99BF9AA33AB34C3EB13FDB4
:1007DF00EA13FCC3ED13FDEC13FCC3EA9CFAEB9D8B
:1007EF00FBEA28FAEB39FB8A338B3440012275344C
:1007FF00FF7533FF223058020104759100C3E49551
:10080F0041F594E49542F595759104D25822A93497
:10081F00A8337A04C3E913F9E813F8DAF7C3E894B5
:10082F000AF8E99400F94009C3E8940AE9940050E2
:10083F0004780AE4F988438944883F8940C3E9135F
:10084F00F9E813F88841894222305802015875910E
:10085F0000C3E49533F594E49534F595759104D27E
:0E086F005822D2AF20580122E524F4C4C3134E
:10087D00540704F9D2AF0000C2AF306203305AF40E
:10088D00780D206D027804C3E58B9840F3E59BF459
:10089D00F520300603020871D9F3D2AF22D2AF2072
:1008AD00580122E524F4C4C313540704F9D2AF0050
:1008BD0000C2AF306203305AF4780D206D02780417
:1008CD00C3E58B9840F3E59BF4F520200603020861
:1008DD00AAD9F3D2AF22759100C3E49543F594E400
:1008ED009544F595759104D2582230580201F7229E
:1008FD00C2AF306203900173C294206E02D2953064
:10090D006E02D293759F11D2AF22C2AF30620390A7
:10091D0001542062039000CB206E02C290306E0213
:10092D00C292305A02D291206E03759F01306E0330
:10093D00759F21D2AF22C2AF306203900135206E78
:10094D0002C295306E02C293206E02D293306E02B7
:10095D00D295206E03759F21306E03759F01D2AF26
:10096D0022C2AF3062039001162062039000BDC217
:10097D0091305A0A206E02D292306E02D290759F3B
:10098D0011D2AF22C2AF3062039000EF206E02C2CF
:10099D0093306E02C295D294206E03759F01306E16
:1009AD0003759F21D2AF22C2AF30620390019A200E
:1009BD0062039000D9206E02C292306E02C2903056
:1009CD005A0A206E02D290306E02D292206E0375BA
:1009DD009F21306E03759F01D2AF229000BBC29252
:1009ED00C291C290C295C294C29322C3E54594D0E0
:1009FD00E5469407500122C3E545940AF8E546946F
:100A0D0000F9884589462230580241142275570451
:100A1D00755804755901755A02755D03D26D7402CE
:100A2D0030E102C26DC26E740130E102D26EC26F4E
:100A3D00740130E102D26F22E493F822438F015307
:100A4D008FFD75B7A575B7F1E8F0538FFE22438F73
:100A5D0002438F0175B7A575B7F1901A0DF0538F3D
:100A6D00FC22901A0D78A55149901A0E785A5149C9
:100A7D0022901A0D5145C3E894A57058901A0E5145
:100A8D0045C3E8945A704D901A0351458857901AF2
:100A9D000451458858901A0551458859901A0651A8
:100AAD0045885A901A095145885D901A0A5145D2C8
:100ABD006DE830E102C26D901A0B5145C26EE830FF
:100ACD00E102D26E901A0C5145C26FE830E102D2AC
:100ADD006F020AE6511A120B07227A307980901AAA
:100AED00405145E8F709A3DAF8227A307980901A57
:100AFD0040E7F8514909A3DAF822C2AF51E7515B3B
:100B0D00901A0078025149901A0178005149901AB3
:100B1D000278075149901A03A8575149901A04A811
:100B2D00585149901A05A8595149901A06A85A5179
:100B3D0049901A09A85D5149901A0A7801206D0251
:100B4D0078025149901A0B7801306E0278025149A2
:100B5D00901A0C7801306F027802514951F7516F9C
:100B6D0022AB54A855EBC39401602AEBC3940260E9
:100B7D0029EBC394036028EBC394046027EBC39463
:100B8D00056026EBC394066025EBC39407602AEB42
:100B9D00C39408602F8857020BDC8858020BDC8841
:100BAD0059020BDC885A020BDC885D020BDCD26D1E
:100BBD00E830E102C26D020BDCC26EE830E102D218
:100BCD006E020BDCC26FE830E102D26F020BDC2249
:100BDD007C051203EEDCFB22C2AF1203FD120403EF
:100BED0012040912040F1203E21203FD1204031280
:100BFD00040912040F1203E21203FD12040312047E
:100C0D000912040FD2AF22AC54AD55C2AF1203FD81
:100C1D001203FD1203FD1203E2DCF212040F1203A4
:100C2D00E2DDF8D2AF22C2AF12040FD2AF1203EA47
:100C3D00C3E54B940150EFC2AF1203FD1203E21254
:100C4D0003FDD2AF1203EAC3E54B94FA40E971E517
:100C5D0071DD71DD75540175550175560091147C6A
:0F0C6D00051203EEC3E54B9401500D716E710734
:100C7C0071E5C2AF43EF1071DDDCE70556C3E556F5
:100C8C009403500280D871DD05557805C3E5549462
:100C9C000370027803C3E554940470027803C3E52F
:100CAC005494054002780208C3E55598500280AB75
:100CBC0071DD71DD0554C3E554940950028099C26D
:100CCC00AF43EF1071DDC2D353D9BF7581C043B2AE
:100CDC0003E5B324044002F5B37580FF75900075ED
:100CEC00A40075A53F75A60175F19175F23F75D4F9
:100CFC007F75D50075E24131E8E4F8F6D8FD511A5C
:100D0C00517E31E8758E01206D03758E007588500B
:100D1C0075890275C82475910475D8401203EE12BA
:100D2C0003FD1203E61204031203E6120409120374
:100D3C00E675A82275B80275E69075F610759B805D
:100D4C0075D10175BCB875BB0675BA1175E880D242
:100D5C00AF12067043DA01C2D8C2611203EED25947
:100D6C007A051203DE3060FDE54BC3940240F1E5D9
:100D7C002D540F854D4CF54DB54CE5DAE5C2595364
:100D8C00DACF206F0343DA20306F0343DA10C2D876
:100D9C00C261C2AF1203FD1203FD1203FDD2AF12EA
:100DAC0003EE753D001203DEC3E54B94FA4002815D
:100DBC0033C3E54B953D4003854B3DC3E54B940157
:100DCC0050E3C2AF12040F12040F12040FD2AF1271
:100DDC0003EE1203DEC3E54B940140F631E8E4F573
:100DEC0021F522F523F524754FFF855C50306E02FA
:100DFC00F535F536F537F538F539F53EF52BF54E75
:100E0C00120786D262D25C12074431B41203DA1193
:100E1C00FD1203DA1203DA31171203DE3143120327
:100E2C00DE1203DE316E1203E231911203DE120385
:100E3C00DAC25CD25D12074431B41207A3111D3122
:100E4C00F8511411FD1207A3111D31F8511431176B
:100E5C001207A3111D31F8511431431207A3111DB0
:100E6C0031F85114316E1207A3111D31F8511431A0
:100E7C00911207A3111D31F8C3E54594D0E54694B2
:100E8C00074004511480B1C25DD25E120744753024
:100E9C0002511431B41207A3111D31F8511411FD74
:100EAC001207A3111D31F8511431171207A3111D8C
:100EBC0031F8511431431207A3111D31F85114317B
:100ECC006E1207A3111D31F8511431911207A311A1
:100EDC001D31F8E530146006F530511480B5C25E52
:100EEC00D25F120744511431B41207A91104111D19
:100EFC00115875300111AA20580302106E11E3111C
:100F0C00F711FD1207A91104111D11581171205868
:100F1C000302106E11E311F731171207A911041116
:100F2C001D115811AA20580302106E11E311F7314C
:100F3C00431207A91104111D1158117120580302F5
:100F4C00106E11E311F7316E1207A91104111D1166
:100F5C005811AA20580302106E11E311F7319112A7
:100F6C0007A91104111D1158117120580302106E9C
:100F7C0011E311F731B41207A91104111D1158E531
:100F8C0030146004F530E101206C11C2AFC262C2B2
:100F9C0095C294C293D2949000D9D2AF11AA205882
:100FAC000302106E11E312044B11F711FD1207A985
:100FBC001104111D1158117120580302106E11E308
:100FCC0012048F11F731171207A91104111D1158B2
:100FDC0011AA20580302106E11E31204CD11F7313F
:100FEC00431207A91104111D115811712058030245
:100FFC00106E1208E31205241208F712096E12077C
:10100C00A912080412081D1208581208AA20580325
:10101C0002106E1208E31205CF1208F71209911292
:10102C0007A912080412081D120858120871120799
:10103C000920580302106E1208E312070D1208F76C
:10104C001209B41207A912080412081D120858C27A
:10105C005FC3E54E9401500AC3E53494F05003028B
:0E106C000FA81209E8E4F521F522F523F5247A
:03107A00020D6CF8
:0F1A000002000704040102030303020101A55AB7
:101A400023585037412320202020202020202020F0
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

256
SiLabs/Hex files/XP 7A Tail.hex

@ -0,0 +1,256 @@
:03000000020C04EB
:03000B0002008070
:03002B000201D9F6
:03005B000202BFDF
:030073000202B5D1
:10008000C2AFC0D0C0E0D2D3758B00E4205A017358
:1000900085248AC25AC3E52494FA5016C292C291AA
:1000A000C29020620201B27405D5E0FDD295D294CF
:1000B000D293D0E0D0D0C2D3D2AF3221C9C29120E6
:1000C0006E02D292306E02D29021C9206E02C2908E
:1000D000306E02C292D29121C9206E02C292306E5D
:1000E00002C290206E02D290306E02D29221C97468
:1000F00016206E02C295306E02C293206E02C29329
:10010000306E02C295D5E0E9C291206E02D29230E3
:100110006E02D29021C97416206E02C295306E0212
:10012000C293C294D5E0F1C291206E02D292306E99
:1001300002D29021C97416C294206E02C295306E0C
:1001400002C293D5E0F1206E02C290306E02C292DC
:10015000D29121C97416C294206E02C293306E02ED
:10016000C295D5E0F1206E02C290306E02C292D2EA
:100170009121C97416206E02C293306E02C295C2DC
:1001800094D5E0F1206E02C292306E02C290206ED1
:1001900002D290306E02D29221C97416206E02C231
:1001A00093306E02C295206E02C295306E02C293E9
:1001B000D5E0E9206E02C292306E02C290206E023B
:1001C000D290306E02D29221C9D25AE524F4F58A37
:1001D000D0E0D0D0C2D3D2AF32C2AFC0D0C0E0D214
:1001E000D3C2CEE52760041527412478007900E5C5
:1001F00080306F01F430E70278FA53DACF206F03D2
:1002000043DA20306F0343DA10C2D8C261E5803090
:100210006F01F430E70279FAC3E89970CE752718B8
:10022000884BD260E52960041529413143DA01C2C7
:10023000D82060024189E54BF8C260C394F04003C6
:1002400074F0F8C4540F28F8A95BB90302416BC3DA
:1002500013C313855B28204002C313204206C8C382
:1002600098F8416B28F8500374FFF8C3E895505094
:1002700005E550C333F8E52B54F0700D8821A859DB
:10028000B8030685212385212420CF09D0E0D0D0D2
:10029000C2D3D2AF32C2CF7801E54BC3940140053F
:1002A000754E0041ACE54E046002054ED0E0D0D062
:1002B000C2D3D2AF32C2AF53917FC258D2AF32C293
:1002C000AFC0D0C0E0D2D3A8FBA9FCC2D830610235
:1002D000611853DACF206F0343DA10306F0343DA2B
:1002E00020D261E580306F01F420E70241F48825D7
:1002F000892661E853DACF206F0343DA20306F0399
:1003000043DA10C2D8C2617800E580306F01F43062
:10031000E70261DB884B61DB53DACF206F0343DAFE
:1003200020306F0343DA10C261205902619253DA20
:10033000CF206F0343DA10306F0343DA20C2D8D2E4
:10034000618849894AC3E89547F8E99548F9E4FB8B
:10035000C3E89468E994015006E4D2E3FB618AC3E0
:10036000E894D0E994025006E4D2E2FB618AC3E843
:1003700094A0E994055006E4D2E1FB618AC3E894B5
:1003800040E9940B5004E4D2E0FBA849A94A88470D
:100390008948C3E89525F8E99526F9306B0261BFD5
:1003A000306A0261B8E9C313F9E813F830690261F1
:1003B000B8E9C313F9E813F8E9C313F9E813F8C36C
:1003C000E894FAE99400400278FAA94B884B205946
:1003D0000261DB740FF4552D4BF52D752718D26093
:1003E00030590261E853DAFE752906D0E0D0D0C258
:1003F000D3D2AF327901810C7903810C790A810C57
:10040000791E810C7964810C79C8810C7817E4D548
:10041000E0FDD8FAD9F6227A187B78812F7A157BFD
:100420008C812F7A127BB4812F7A0F7BC8812F7930
:1004300002B26EE4D294D5E0FD206E02D292306E0C
:1004400002D290E540D5E0FD206E02C292306E02ED
:10045000C290E540D5E0FDD9D8EAF8D5E0FDD8FB5B
:10046000DBCDC29422E559B4030281A8C3E53394DD
:0F04700000E53494054012852123E4F535F53677
:10047F00F537F538F539F53E81A8E522F43333F930
:10048F0013F8E9540104F9E854FEC39440F8E994D1
:10049F0000F988358936753E0122E53E6039C3E59E
:1004AF003413F9E53313F8C3E53598F8E53699F9C0
:1004BF0030E70BC3E89480E994FF401381E2C3E86F
:1004CF00947FE99400500281E2787F790081E2788D
:1004DF008079FF883A893B22E53E6052E537253A1D
:1004EF00F8E538353BF9E539353BFA30E708C3EA2B
:1004FF0094F04012A11BC3EA940F5002A11B78FF86
:10050F0079FF7A0FA11B780079007AF0C3E5239564
:10051F004F5009C3E52394014009A137E53A20E77D
:10052F000DA137E53A30E706883789388A3922E551
:10053F003E70030205E8853A20E4300701F4F9C361
:10054F00E53A33F8E933F9E55730E002A16EC3E538
:10055F00579404603AE9A2E713F9E813F8A19EE96A
:10056F00FBE8FAEBA2E713FBEA13FAE82AF8E93BF8
:10057F00F9E557C394056017E9A2E713F9E813F8F3
:10058F00E557C394036008E9A2E713F9E813F8E904
:10059F0030E70BC3E89480E994FF4013A1C2C3E88E
:1005AF00947FE994005002A1C2787F7900A1C278AC
:1005BF008079FFE820E713C3E52298F84008C3E8E5
:1005CF0094014002A1E67801A1E6E8F42401252276
:1005DF00F84002A1E678FF883C22E53E7003020650
:1005EF0089A838A939E55830E002C10CC3E5589401
:1005FF0004603AE9A2E713F9E813F8C13CE9FBE814
:10060F00FAEBA2E713FBEA13FAE82AF8E93BF9E55C
:10061F0058C394056017E9A2E713F9E813F8E558F2
:10062F00C394036008E9A2E713F9E813F8E930E788
:10063F000BC3E89400E994FF4013C160C3E894FF33
:10064F00E994005002C16078FF7900C160780079A9
:10065F00FFE920E713C3E53C98F84008C3E894018D
:10066F004002C1877801C187E8F42401253CF8E9ED
:10067F0034004002C18778FF882322222222305C77
:10068F00027832305D027878305E027850305F0247
:10069F007828E52B54F06027A95DB90302C1C8C3C0
:1006AF0013855D28204002C313204206C8C398F863
:1006BF00C1C828F8500374FFF888218823882422A2
:1006CF007545707546177AFF7B3F8A438B448A3F87
:1006DF008B407B1F8A418B428A348A3322A845A9DB
:1006EF0046C1F6A83FA940759100C3E498F594E47C
:1006FF0099F595759104D25875C820A8CCA9CD75D8
:10070F00C824AA31AB3288318932C3E89AF8E99B01
:10071F00F9AA33AB34C3EB13FDEA13FCC3ED13FD9E
:10072F00EC13FCC3EA9CFAEB9DFBEA28FAEB39FBCE
:10073F008A338B344001227534FF7533FF223058D2
:10074F0002E14D759100C3E49541F594E49542F5AE
:10075F0095759104D25822A934A8337A04C3E913AA
:10076F00F9E813F8DAF7C3E8940AF8E99400F940C6
:10077F0009C3E8940AE994005004780AE4F988431D
:10078F008944883F8940C3E913F9E813F888418900
:10079F004222305802E1A1759100C3E49533F594DC
:1007AF00E49534F595759104D25822D2AF205801B3
:1007BF0022E524F4C4C313540704F9D2AF0000C2D6
:1007CF00AF306203305AF4780D206D027804C3E520
:1007DF008B9840F3E59BF4F5203006030207BAD956
:1007EF00F3D2AF22D2AF20580122E524F4C4C313B1
:1007FF00540704F9D2AF0000C2AF306203305AF48D
:10080F00780D206D027804C3E58B9840F3E59BF4D7
:10081F00F5202006030207F3D9F3D2AF227591001A
:10082F00C3E49543F594E49544F595759104D25836
:10083F0022305802014022C2AF306203900173C2CE
:10084F0094206E02D295306E02D293759F11D2AF63
:10085F0022C2AF3062039001542062039000CB207C
:0E086F006E02C290306E02C292305A02D291D6
:10087D00206E03759F01306E03759F21D2AF22C28A
:10088D00AF306203900135206E02C295306E02C208
:10089D0093206E02D293306E02D295206E03759F17
:1008AD0021306E03759F01D2AF22C2AF306203902B
:1008BD0001162062039000BDC291305A0A206E02CB
:1008CD00D292306E02D290759F11D2AF22C2AF304C
:1008DD0062039000EF206E02C293306E02C295D279
:1008ED0094206E03759F01306E03759F21D2AF2248
:1008FD00C2AF30620390019A2062039000D9206E3E
:10090D0002C292306E02C290305A0A206E02D2900C
:10091D00306E02D292206E03759F21306E03759F4B
:10092D0001D2AF229000BBC292C291C290C295C2B9
:10093D0094C29322C3E54594D0E546940750012215
:10094D00C3E545943CF8E5469400F988458946226F
:10095D00305802215D22755B03755C03755D03C222
:10096D006D740130E002D26DC26CC374019403400A
:10097D0002D26CC26E740130E102D266C26F740194
:10098D0030E102D26F75590322E493F822438F01AF
:10099D00538FFD75B7A575B7F1E8F0538FFE224360
:1009AD008F02438F0175B7A575B7F1901A0DF053EE
:1009BD008FFC22901A0D785A319A901A0E78A53123
:1009CD009A22901A0D3196C3E8945A7057901A0EC8
:1009DD003196C3E894A5704C901A073196885B90B8
:1009ED001A083196885C901A093196885D901A0A1A
:1009FD003196C26DE830E002D26DC26CC3E894034B
:100A0D004002D26C901A0B3196C26EE830E102D2E0
:100A1D006E901A0C3196C26FE830E102D26F7559A3
:100A2D0003020A363163120A57227A307980901AFE
:100A3D00403196E8F709A3DAF8227A307980901AD6
:100A4D0040E7F8319A09A3DAF822C2AF513731AC39
:100A5D00901A007802319A901A017800319A901A02
:100A6D00027807319A901A07A85B319A901A08A854
:100A7D005C319A901A09A85D319A901A0A78012072
:100A8D006D027802306C027803319A901A0B78015E
:100A9D00306E027802319A901A0C7801306F02781C
:100AAD0002319A514731C022AB54A855EBC3940182
:100ABD00601EEBC39402601DEBC39403601CEBC37B
:100ACD009404601BEBC39405602AEBC39406602F5E
:100ADD00885B020B17885C020B17885D020B17C22F
:100AED006DE830E002D26DC26CC3E894034002D2CF
:100AFD006C020B17C26EE830E102D26E020B17C208
:100B0D006FE830E102D26F020B17227C0512040848
:100B1D00DCFB22C2AF12041712041D1204231204AF
:100B2D00291203FC12041712041D120423120429A6
:100B3D001203FC12041712041D120423120429D2ED
:100B4D00AF22AC54AD55C2AF1204171204171204E4
:100B5D00171203FCDCF21204291203FCDDF8D2AFEC
:100B6D0022C2AF120429D2AF120404C3E54B940183
:100B7D0050EFC2AF1204171203FC120417D2AF12BA
:100B8D000404C3E54B94FA40E9712071187118758E
:100B9D005401755501755600714F7C05120408C33B
:100BAD00E54B9401500D51B551577120C2AF43EF34
:100BBD00107118DCE70556C3E5569403500280D832
:100BCD00711805557805C3E554940440027803C3A4
:100BDD00E55494044002780208C3E555985002800C
:100BED00B4711871180554C3E5549407500280A2CE
:100BFD00C2AF43EF107118C2D353D9BF7581C04333
:100C0D00B203E5B324044002F5B37580FF7590007F
:100C1D0075A40075A53F75A60175F19175F23F7527
:100C2D00D47F75D50075E2413131E4F8F6D8FD3148
:100C3D006331CF3131758E01206D03758E0075884E
:100C4D005075890275C82475910475D84012040831
:100C5D0012041712040012041D12040012042312B0
:0E0C6D00040075A82275B80275E69075F610A1
:100C7B00759B8075D10175BCB875BB0675BA1175BE
:100C8B00E880D2AF12068A43DA01C2D8C2611204DD
:100C9B0008D2597A051203F83060FDE54BC3940274
:100CAB0040F1E52D540F854D4CF54DB54CE5DAE58E
:100CBB00C25953DACF206F0343DA20306F0343DA84
:100CCB0010C2D8C261C2AF12041712041712041754
:100CDB00D2AF120408753D001203F8C3E54B94FA2A
:100CEB004002616EC3E54B953D4003854B3DC3E52B
:100CFB004B940150E3C2AF120429120429120429A8
:100D0B00D2AF1204081203F8C3E54B940140F6313D
:100D1B0031E4F521F522F523F524754FFF855C5061
:100D2B00306E02F535F536F537F538F539F53EF514
:100D3B002BF54E1206CFD262D25C12068D11FD122C
:100D4B0003F411461203F41203F411601203F811A9
:100D5B008C1203F81203F811B71203FC11DA120309
:100D6B00F81203F4C25CD25D12068D11FD1206EC73
:100D7B001207663141315D11461206EC12076631DE
:100D8B0041315D11601206EC1207663141315D1184
:100D9B008C1206EC1207663141315D11B71206EC6D
:100DAB001207663141315D11DA1206EC120766311A
:100DBB0041C3E54594D0E54694074004315D80ABD3
:100DCB00C25DD25E12068D753002315D11FD1206C9
:100DDB00EC1207663141315D11461206EC120766C3
:100DEB003141315D11601206EC1207663141315D04
:100DFB00118C1206EC1207663141315D11B71206E8
:100E0B00EC1207663141315D11DA1206EC120766FE
:100E1B003141E530146006F530315D80AFC25ED2F2
:100E2B005F12068D315D11FD1206F212074D12078E
:100E3B00661207A17530011207F3205803020FCA7F
:100E4B00112C114011461206F212074D12076612B1
:100E5B0007A11207BA205803020FCA112C11401117
:100E6B00601206F212074D1207661207A11207F362
:100E7B00205803020FCA112C1140118C1206F212CA
:100E8B00074D1207661207A11207BA205803020F6B
:100E9B00CA112C114011B71206F212074D12076638
:100EAB001207A11207F3205803020FCA112C11408D
:100EBB0011DA1206F212074D1207661207A112077A
:100ECB00BA205803020FCA112C114011FD1206F261
:100EDB0012074D1207661207A1E530146004F530B6
:100EEB00C142206C11C2AFC262C295C294C293D2EE
:100EFB00949000D9D2AF1207F3205803020FCA11F6
:100F0B002C120465114011461206F212074D1207FE
:100F1B00661207A11207BA205803020FCA112C122E
:100F2B0004A9114011601206F212074D1207661246
:100F3B0007A11207F3205803020FCA112C1204E762
:100F4B001140118C1206F212074D1207661207A1FF
:100F5B001207BA205803020FCA112C12053E11407A
:100F6B0011B71206F212074D1207661207A11207EC
:100F7B00F3205803020FCA112C1205E9114011DAA4
:100F8B001206F212074D1207661207A11207BA12C8
:100F9B00068B205803020FCA112C12068C1140111C
:100FAB00FD1206F212074D1207661207A1C25FC3AC
:100FBB00E54E94645009C3E53494F05002E10131DD
:0C0FCB0031E4F521F522F523F524A110F6
:0F1A0000020007040401020303030101015AA5B8
:101A400023585037412320202020202020202020F0
:101A500023424C48454C4923463333302320202031
:101A60002020202020202020202020202020202076
:00000001FF

31
SiLabs/README

@ -0,0 +1,31 @@
This tree contains the BLHeli assembly code for sensorless brushless motor electronic speed control (ESC) boards.
It is designed specifically for use with Eflite mCP X, but may also be used on other copters/planes.
This tree contains SiLabs assembly code for SiLabs MCU based ESCs.
Features and Changes
--------------------
- Can be configured for main motor or tail motor operation
- Main motor operation has governor functionality
- Tail motor operation can be damped for fast motor retardation
- Many parmeters can be programmed from the TX
- Supports 1kHz, 2kHz, 4kHz or 8kHz positive or negative pwm as input signal
Supported Hardware
------------------
- DP 3A
- Supermicro 3.5A
- XP 3A
- XP 7A
- XP 12A
- Turnigy 6A
Installation and use
--------------------
The software is written and debugged in the SiLabs IDE.
Compilation is done using Raisonance Ride7 and Rkit-51 toolchain.
For more information, check out this thread:
http://www.helifreak.com/showthread.php?t=390517

256
SiLabs/Supermicro_3p5A.inc

@ -0,0 +1,256 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;
; Supermicro 3.5A hardware definition file
;
;**** **** **** **** ****
;*********************
; Device SiLabs F330
;*********************
$include (c8051f330.inc)
;**** **** **** **** ****
; Uses internal calibrated oscillator set to 24Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
CSEG AT 1A40h
Eep_ESC_Layout: DB "#Supermicro3p5A#" ; ESC layout tag
DAMPED_TAIL_ENABLE EQU 1 ; Damped tail mode enabled
NFETON_DELAY EQU 2 ; Wait delay from pfets off to nfets on
PFETON_DELAY EQU 1 ; Wait delay from nfets off to pfets on
ADC_LIMIT_L EQU 128 ; Power supply measurement ADC value for which main motor power is limited (low byte)
ADC_LIMIT_H EQU 2 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT 0 definitions *
;*********************
; EQU 7 ;i
Rcp_In EQU 6 ;i
Mux_A EQU 5 ;i
; EQU 4 ;i
Mux_B EQU 3 ;i
Comp_Com EQU 2 ;i
Mux_C EQU 1 ;i
; EQU 0 ;i
P0_DIGITAL EQU NOT((1 SHL Mux_A)+(1 SHL Mux_B)+(1 SHL Mux_C)+(1 SHL Comp_Com))
P0_INIT EQU 0FFh
P0_PUSHPULL EQU 0
P0_SKIP EQU NOT(1 SHL Rcp_In) AND 0FFh
MACRO Read_Rcp_Int
mov A, P0
jnb Flags2.PGM_RCP_PWM_POL, ($+4) ; Is pwm polarity negative?
cpl A ; Yes - invert
ENDM
MACRO Rcp_Int_Enable
orl PCA0CPM0, #01h ; Interrupt enabled
ENDM
MACRO Rcp_Int_Disable
anl PCA0CPM0, #0FEh ; Interrupt disabled
ENDM
MACRO Rcp_Int_First
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #20h ; Capture rising edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #10h ; Capture falling edge
ENDM
MACRO Rcp_Int_Second
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #10h ; Capture falling edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #20h ; Capture rising edge
ENDM
MACRO Rcp_Clear_Int_Flag
clr CCF0 ; Clear interrupt flag
ENDM
;*********************
; PORT 1 definitions *
;*********************
Ref_Gnd EQU 7 ;o
Adc_Ip EQU 6 ;i
CpFET EQU 5 ;o
BpFET EQU 4 ;o
ApFET EQU 3 ;o
CnFET EQU 2 ;o
BnFET EQU 1 ;i
AnFET EQU 0 ;i
P1_DIGITAL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)+(1 SHL Ref_Gnd)
P1_INIT EQU (1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)+(1 SHL Adc_Ip) ; Setting pFET outputs turn them off
P1_PUSHPULL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_SKIP EQU 0
MACRO AnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
ENDM
MACRO AnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
ENDM
MACRO BnFET_on
setb P1.BnFET
ENDM
MACRO BnFET_off
clr P1.BnFET
ENDM
MACRO CnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
ENDM
MACRO CnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
ENDM
MACRO All_nFETs_Off
clr P1.AnFET
clr P1.BnFET
clr P1.CnFET
ENDM
MACRO ApFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
ENDM
MACRO ApFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
ENDM
MACRO BpFET_on
clr P1.BpFET
ENDM
MACRO BpFET_off
setb P1.BpFET
ENDM
MACRO CpFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
ENDM
MACRO CpFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
ENDM
MACRO All_pFETs_Off
setb P1.ApFET
setb P1.BpFET
setb P1.CpFET
ENDM
MACRO All_pFETs_On
clr P1.ApFET
clr P1.BpFET
clr P1.CpFET
ENDM
MACRO Set_Comp_Phase_A
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h ; Set comparator multiplexer to phase A
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h
ENDM
MACRO Set_Comp_Phase_B
mov CPT0MX, #11h ; Set comparator multiplexer to phase B
ENDM
MACRO Set_Comp_Phase_C
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h ; Set comparator multiplexer to phase C
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h
ENDM
MACRO Read_Comp_Out
mov A, CPT0CN ; Read comparator output
cpl A ; Invert output
ENDM
;*********************
; PORT B definitions *
;*********************
DebugPin EQU 0 ;o
P2_PUSHPULL EQU (1 SHL DebugPin)
;**********************
; MCU specific macros *
;**********************
MACRO Interrupt_Table_Definition
CSEG AT 0 ; Code segment start
jmp reset
CSEG AT 0Bh ; Timer0 interrupt
jmp t0_int
CSEG AT 2Bh ; Timer2 interrupt
jmp t2_int
CSEG AT 5Bh ; PCA interrupt
jmp pca_int
CSEG AT 73h ; Timer3 interrupt
jmp t3_int
ENDM
MACRO Initialize_Adc
mov REF0CN, #01h ; Enable reference buffer
mov ADC0CF, #0B8h ; ADC clock 1MHz
mov AMX0P, #(8+Adc_Ip) ; Select positive input
mov AMX0N, #11h ; Select negative input as ground
mov ADC0CN, #80h ; ADC enabled
ENDM
MACRO Start_Adc
mov ADC0CN, #90h ; ADC start
ENDM
MACRO Get_Adc_Status
mov A, ADC0CN
ENDM
MACRO Read_Adc_Result
mov Temp1, ADC0L
mov Temp2, ADC0H
ENDM
MACRO Stop_Adc
ENDM

255
SiLabs/Turnigy6A.inc

@ -0,0 +1,255 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;
; Turnigy 6A hardware definition file
;
;**** **** **** **** ****
;*********************
; Device SiLabs F330
;*********************
$include (c8051f330.inc)
;**** **** **** **** ****
; Uses internal calibrated oscillator set to 24Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
CSEG AT 1A40h
Eep_ESC_Layout: DB "#Turnigy6A# " ; ESC layout tag
DAMPED_TAIL_ENABLE EQU 0 ; Damped tail mode disabled
NFETON_DELAY EQU 22 ; Wait delay from pfets off to nfets on
PFETON_DELAY EQU 12 ; Wait delay from nfets off to pfets on
ADC_LIMIT_L EQU 136 ; Power supply measurement ADC value for which main motor power is limited (low byte)
ADC_LIMIT_H EQU 1 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT 0 definitions *
;*********************
; EQU 7 ;i
Mux_B EQU 6 ;i
Rcp_In EQU 5 ;i
; EQU 4 ;i
Comp_Com EQU 3 ;i
Mux_A EQU 2 ;i
; EQU 1 ;i
Mux_C EQU 0 ;i
P0_DIGITAL EQU NOT((1 SHL Mux_A)+(1 SHL Mux_B)+(1 SHL Mux_C)+(1 SHL Comp_Com))
P0_INIT EQU 0FFh
P0_PUSHPULL EQU 0
P0_SKIP EQU NOT(1 SHL Rcp_In)
MACRO Read_Rcp_Int
mov A, P0
jnb Flags2.PGM_RCP_PWM_POL, ($+4) ; Is pwm polarity negative?
cpl A ; Yes - invert
ENDM
MACRO Rcp_Int_Enable
orl PCA0CPM0, #01h ; Interrupt enabled
ENDM
MACRO Rcp_Int_Disable
anl PCA0CPM0, #0FEh ; Interrupt disabled
ENDM
MACRO Rcp_Int_First
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #20h ; Capture rising edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #10h ; Capture falling edge
ENDM
MACRO Rcp_Int_Second
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #10h ; Capture falling edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #20h ; Capture rising edge
ENDM
MACRO Rcp_Clear_Int_Flag
clr CCF0 ; Clear interrupt flag
ENDM
;*********************
; PORT 1 definitions *
;*********************
AnFET EQU 7 ;o
ApFET EQU 6 ;o
CnFET EQU 5 ;o
CpFET EQU 4 ;o
BnFET EQU 3 ;o
BpFET EQU 2 ;o
; EQU 1 ;i
Adc_Ip EQU 0 ;i
P1_DIGITAL EQU NOT(1 SHL Adc_Ip)
P1_INIT EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL Adc_Ip) ; Setting nFET outputs turn them off. Setting ADC ip sets it tristate
P1_PUSHPULL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_SKIP EQU (1 SHL Adc_Ip)
MACRO AnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
ENDM
MACRO AnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
ENDM
MACRO CnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
ENDM
MACRO CnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
ENDM
MACRO BnFET_on
clr P1.BnFET
ENDM
MACRO BnFET_off
setb P1.BnFET
ENDM
MACRO All_nFETs_Off
setb P1.AnFET
setb P1.CnFET
setb P1.BnFET
ENDM
MACRO ApFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
ENDM
MACRO ApFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
ENDM
MACRO CpFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
ENDM
MACRO CpFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
ENDM
MACRO BpFET_on
setb P1.BpFET
ENDM
MACRO BpFET_off
clr P1.BpFET
ENDM
MACRO All_pFETs_Off
clr P1.ApFET
clr P1.CpFET
clr P1.BpFET
ENDM
MACRO All_pFETs_On
setb P1.ApFET
setb P1.CpFET
setb P1.BpFET
ENDM
MACRO Set_Comp_Phase_A
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #11h ; Set comparator multiplexer to phase A
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #10h
ENDM
MACRO Set_Comp_Phase_C
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #10h ; Set comparator multiplexer to phase C
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #11h
ENDM
MACRO Set_Comp_Phase_B
mov CPT0MX, #13h ; Set comparator multiplexer to phase B
ENDM
MACRO Read_Comp_Out
mov A, CPT0CN ; Read comparator output
ENDM
;*********************
; PORT B definitions *
;*********************
DebugPin EQU 0 ;o
P2_PUSHPULL EQU (1 SHL DebugPin)
;**********************
; MCU specific macros *
;**********************
MACRO Interrupt_Table_Definition
CSEG AT 0 ; Code segment start
jmp reset
CSEG AT 0Bh ; Timer0 interrupt
jmp t0_int
CSEG AT 2Bh ; Timer2 interrupt
jmp t2_int
CSEG AT 5Bh ; PCA interrupt
jmp pca_int
CSEG AT 73h ; Timer3 interrupt
jmp t3_int
ENDM
MACRO Initialize_Adc
mov REF0CN, #04h ; Set vdd (3.3V) as reference
mov ADC0CF, #0B8h ; ADC clock 1MHz
mov AMX0P, #Adc_Ip ; Select positive input
mov AMX0N, #11h ; Select negative input as ground
mov ADC0CN, #80h ; ADC enabled
ENDM
MACRO Start_Adc
mov ADC0CN, #90h ; ADC start
ENDM
MACRO Get_Adc_Status
mov A, ADC0CN
ENDM
MACRO Read_Adc_Result
mov Temp1, ADC0L
mov Temp2, ADC0H
ENDM
MACRO Stop_Adc
ENDM

256
SiLabs/XP_12A.inc

@ -0,0 +1,256 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;
; XP 12A hardware definition file
;
;**** **** **** **** ****
;*********************
; Device SiLabs F330
;*********************
$include (c8051f330.inc)
;**** **** **** **** ****
; Uses internal calibrated oscillator set to 24Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
CSEG AT 1A40h
Eep_ESC_Layout: DB "#XP12A# " ; ESC layout tag
DAMPED_TAIL_ENABLE EQU 0 ; Damped tail mode disabled
NFETON_DELAY EQU 22 ; Wait delay from pfets off to nfets on
PFETON_DELAY EQU 5 ; Wait delay from nfets off to pfets on
ADC_LIMIT_L EQU 116 ; Power supply measurement ADC value for which main motor power is limited (low byte)
ADC_LIMIT_H EQU 0 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT 0 definitions *
;*********************
Rcp_In EQU 7 ;i
Adc_Ip EQU 6 ;i
Mux_A EQU 5 ;i
; EQU 4 ;i
Mux_B EQU 3 ;i
Comp_Com EQU 2 ;i
Mux_C EQU 1 ;i
; EQU 0 ;i
P0_DIGITAL EQU NOT((1 SHL Mux_A)+(1 SHL Mux_B)+(1 SHL Mux_C)+(1 SHL Comp_Com)+(1 SHL Adc_Ip))
P0_INIT EQU 0FFh
P0_PUSHPULL EQU 0
P0_SKIP EQU NOT(1 SHL Rcp_In) AND 0FFh
MACRO Read_Rcp_Int
mov A, P0
jnb Flags2.PGM_RCP_PWM_POL, ($+4) ; Is pwm polarity negative?
cpl A ; Yes - invert
ENDM
MACRO Rcp_Int_Enable
orl PCA0CPM0, #01h ; Interrupt enabled
ENDM
MACRO Rcp_Int_Disable
anl PCA0CPM0, #0FEh ; Interrupt disabled
ENDM
MACRO Rcp_Int_First
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #20h ; Capture rising edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #10h ; Capture falling edge
ENDM
MACRO Rcp_Int_Second
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #10h ; Capture falling edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #20h ; Capture rising edge
ENDM
MACRO Rcp_Clear_Int_Flag
clr CCF0 ; Clear interrupt flag
ENDM
;*********************
; PORT 1 definitions *
;*********************
; EQU 7 ;o
; EQU 6 ;o
ApFET EQU 5 ;o
BpFET EQU 4 ;o
CpFET EQU 3 ;o
AnFET EQU 2 ;o
BnFET EQU 1 ;i
CnFET EQU 0 ;i
P1_DIGITAL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_INIT EQU 0
P1_PUSHPULL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_SKIP EQU 0
MACRO AnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
ENDM
MACRO AnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
ENDM
MACRO BnFET_on
setb P1.BnFET
ENDM
MACRO BnFET_off
clr P1.BnFET
ENDM
MACRO CnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
ENDM
MACRO CnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
ENDM
MACRO All_nFETs_Off
clr P1.AnFET
clr P1.BnFET
clr P1.CnFET
ENDM
MACRO ApFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
ENDM
MACRO ApFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
ENDM
MACRO BpFET_on
setb P1.BpFET
ENDM
MACRO BpFET_off
clr P1.BpFET
ENDM
MACRO CpFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
ENDM
MACRO CpFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
ENDM
MACRO All_pFETs_Off
clr P1.ApFET
clr P1.BpFET
clr P1.CpFET
ENDM
MACRO All_pFETs_On
setb P1.ApFET
setb P1.BpFET
setb P1.CpFET
ENDM
MACRO Set_Comp_Phase_A
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h ; Set comparator multiplexer to phase A
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h
ENDM
MACRO Set_Comp_Phase_B
mov CPT0MX, #11h ; Set comparator multiplexer to phase B
ENDM
MACRO Set_Comp_Phase_C
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h ; Set comparator multiplexer to phase C
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h
ENDM
MACRO Read_Comp_Out
mov A, CPT0CN ; Read comparator output
cpl A ; Invert output
ENDM
;*********************
; PORT B definitions *
;*********************
DebugPin EQU 0 ;o
P2_PUSHPULL EQU (1 SHL DebugPin)
;**********************
; MCU specific macros *
;**********************
MACRO Interrupt_Table_Definition
CSEG AT 0 ; Code segment start
jmp reset
CSEG AT 0Bh ; Timer0 interrupt
jmp t0_int
CSEG AT 2Bh ; Timer2 interrupt
jmp t2_int
CSEG AT 5Bh ; PCA interrupt
jmp pca_int
CSEG AT 73h ; Timer3 interrupt
jmp t3_int
ENDM
MACRO Initialize_Adc
mov REF0CN, #01h ; Enable reference buffer
mov ADC0CF, #0B8h ; ADC clock 1MHz
mov AMX0P, #Adc_Ip ; Select positive input
mov AMX0N, #11h ; Select negative input as ground
mov ADC0CN, #80h ; ADC enabled
ENDM
MACRO Start_Adc
mov ADC0CN, #90h ; ADC start
ENDM
MACRO Get_Adc_Status
mov A, ADC0CN
ENDM
MACRO Read_Adc_Result
mov Temp1, ADC0L
mov Temp2, ADC0H
ENDM
MACRO Stop_Adc
ENDM

256
SiLabs/XP_3A.inc

@ -0,0 +1,256 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;
; XP 3A hardware definition file
;
;**** **** **** **** ****
;*********************
; Device SiLabs F330
;*********************
$include (c8051f330.inc)
;**** **** **** **** ****
; Uses internal calibrated oscillator set to 24Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
CSEG AT 1A40h
Eep_ESC_Layout: DB "#XP3A# " ; ESC layout tag
DAMPED_TAIL_ENABLE EQU 1 ; Damped tail mode enabled
NFETON_DELAY EQU 2 ; Wait delay from pfets off to nfets on
PFETON_DELAY EQU 1 ; Wait delay from nfets off to pfets on
ADC_LIMIT_L EQU 171 ; Power supply measurement ADC value for which main motor power is limited (low byte)
ADC_LIMIT_H EQU 1 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT 0 definitions *
;*********************
Rcp_In EQU 7 ;i
Adc_Ip EQU 6 ;i
Mux_A EQU 5 ;i
; EQU 4 ;i
Mux_B EQU 3 ;i
Comp_Com EQU 2 ;i
Mux_C EQU 1 ;i
; EQU 0 ;i
P0_DIGITAL EQU NOT((1 SHL Mux_A)+(1 SHL Mux_B)+(1 SHL Mux_C)+(1 SHL Comp_Com)+(1 SHL Adc_Ip))
P0_INIT EQU 0FFh
P0_PUSHPULL EQU 0
P0_SKIP EQU NOT(1 SHL Rcp_In) AND 0FFh
MACRO Read_Rcp_Int
mov A, P0
jnb Flags2.PGM_RCP_PWM_POL, ($+4) ; Is pwm polarity negative?
cpl A ; Yes - invert
ENDM
MACRO Rcp_Int_Enable
orl PCA0CPM0, #01h ; Interrupt enabled
ENDM
MACRO Rcp_Int_Disable
anl PCA0CPM0, #0FEh ; Interrupt disabled
ENDM
MACRO Rcp_Int_First
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #20h ; Capture rising edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #10h ; Capture falling edge
ENDM
MACRO Rcp_Int_Second
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #10h ; Capture falling edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #20h ; Capture rising edge
ENDM
MACRO Rcp_Clear_Int_Flag
clr CCF0 ; Clear interrupt flag
ENDM
;*********************
; PORT 1 definitions *
;*********************
; EQU 7 ;o
; EQU 6 ;o
CpFET EQU 5 ;o
BpFET EQU 4 ;o
ApFET EQU 3 ;o
CnFET EQU 2 ;o
BnFET EQU 1 ;i
AnFET EQU 0 ;i
P1_DIGITAL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_INIT EQU (1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET) ; Setting pFET outputs turn them off
P1_PUSHPULL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_SKIP EQU 0
MACRO AnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
ENDM
MACRO AnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
ENDM
MACRO BnFET_on
setb P1.BnFET
ENDM
MACRO BnFET_off
clr P1.BnFET
ENDM
MACRO CnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
ENDM
MACRO CnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
ENDM
MACRO All_nFETs_Off
clr P1.AnFET
clr P1.BnFET
clr P1.CnFET
ENDM
MACRO ApFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
ENDM
MACRO ApFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
ENDM
MACRO BpFET_on
clr P1.BpFET
ENDM
MACRO BpFET_off
setb P1.BpFET
ENDM
MACRO CpFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
ENDM
MACRO CpFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
ENDM
MACRO All_pFETs_Off
setb P1.ApFET
setb P1.BpFET
setb P1.CpFET
ENDM
MACRO All_pFETs_On
clr P1.ApFET
clr P1.BpFET
clr P1.CpFET
ENDM
MACRO Set_Comp_Phase_A
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h ; Set comparator multiplexer to phase A
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h
ENDM
MACRO Set_Comp_Phase_B
mov CPT0MX, #11h ; Set comparator multiplexer to phase B
ENDM
MACRO Set_Comp_Phase_C
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h ; Set comparator multiplexer to phase C
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h
ENDM
MACRO Read_Comp_Out
mov A, CPT0CN ; Read comparator output
cpl A ; Invert output
ENDM
;*********************
; PORT B definitions *
;*********************
DebugPin EQU 0 ;o
P2_PUSHPULL EQU (1 SHL DebugPin)
;**********************
; MCU specific macros *
;**********************
MACRO Interrupt_Table_Definition
CSEG AT 0 ; Code segment start
jmp reset
CSEG AT 0Bh ; Timer0 interrupt
jmp t0_int
CSEG AT 2Bh ; Timer2 interrupt
jmp t2_int
CSEG AT 5Bh ; PCA interrupt
jmp pca_int
CSEG AT 73h ; Timer3 interrupt
jmp t3_int
ENDM
MACRO Initialize_Adc
mov REF0CN, #01h ; Enable reference buffer
mov ADC0CF, #0B8h ; ADC clock 1MHz
mov AMX0P, #Adc_Ip ; Select positive input
mov AMX0N, #11h ; Select negative input as ground
mov ADC0CN, #80h ; ADC enabled
ENDM
MACRO Start_Adc
mov ADC0CN, #90h ; ADC start
ENDM
MACRO Get_Adc_Status
mov A, ADC0CN
ENDM
MACRO Read_Adc_Result
mov Temp1, ADC0L
mov Temp2, ADC0H
ENDM
MACRO Stop_Adc
ENDM

256
SiLabs/XP_7A.inc

@ -0,0 +1,256 @@
;**** **** **** **** ****
;
; BLHeli program for controlling brushless motors in helicopters
;
; Copyright 2011, 2012 Steffen Skaug
; This program is distributed under the terms of the GNU General Public License
;
; This file is part of BLHeli.
;
; BLHeli 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, either version 3 of the License, or
; (at your option) any later version.
;
; BLHeli 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 BLHeli. If not, see <http://www.gnu.org/licenses/>.
;
;**** **** **** **** ****
;
; XP 7A hardware definition file
;
;**** **** **** **** ****
;*********************
; Device SiLabs F330
;*********************
$include (c8051f330.inc)
;**** **** **** **** ****
; Uses internal calibrated oscillator set to 24Mhz
;**** **** **** **** ****
;**** **** **** **** ****
; Constant definitions
;**** **** **** **** ****
CSEG AT 1A40h
Eep_ESC_Layout: DB "#XP7A# " ; ESC layout tag
DAMPED_TAIL_ENABLE EQU 0 ; Damped tail mode disabled
NFETON_DELAY EQU 22 ; Wait delay from pfets off to nfets on
PFETON_DELAY EQU 5 ; Wait delay from nfets off to pfets on
ADC_LIMIT_L EQU 116 ; Power supply measurement ADC value for which main motor power is limited (low byte)
ADC_LIMIT_H EQU 0 ; Power supply measurement ADC value for which main motor power is limited (2 MSBs)
;*********************
; PORT 0 definitions *
;*********************
Rcp_In EQU 7 ;i
Adc_Ip EQU 6 ;i
Mux_A EQU 5 ;i
; EQU 4 ;i
Mux_B EQU 3 ;i
Comp_Com EQU 2 ;i
Mux_C EQU 1 ;i
; EQU 0 ;i
P0_DIGITAL EQU NOT((1 SHL Mux_A)+(1 SHL Mux_B)+(1 SHL Mux_C)+(1 SHL Comp_Com)+(1 SHL Adc_Ip))
P0_INIT EQU 0FFh
P0_PUSHPULL EQU 0
P0_SKIP EQU NOT(1 SHL Rcp_In) AND 0FFh
MACRO Read_Rcp_Int
mov A, P0
jnb Flags2.PGM_RCP_PWM_POL, ($+4) ; Is pwm polarity negative?
cpl A ; Yes - invert
ENDM
MACRO Rcp_Int_Enable
orl PCA0CPM0, #01h ; Interrupt enabled
ENDM
MACRO Rcp_Int_Disable
anl PCA0CPM0, #0FEh ; Interrupt disabled
ENDM
MACRO Rcp_Int_First
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #20h ; Capture rising edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #10h ; Capture falling edge
ENDM
MACRO Rcp_Int_Second
anl PCA0CPM0, #0CFh
jb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity positive?
orl PCA0CPM0, #10h ; Capture falling edge
jnb Flags2.PGM_RCP_PWM_POL, ($+6) ; Is pwm polarity negative?
orl PCA0CPM0, #20h ; Capture rising edge
ENDM
MACRO Rcp_Clear_Int_Flag
clr CCF0 ; Clear interrupt flag
ENDM
;*********************
; PORT 1 definitions *
;*********************
; EQU 7 ;o
; EQU 6 ;o
ApFET EQU 5 ;o
BpFET EQU 4 ;o
CpFET EQU 3 ;o
AnFET EQU 2 ;o
BnFET EQU 1 ;i
CnFET EQU 0 ;i
P1_DIGITAL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_INIT EQU 0
P1_PUSHPULL EQU (1 SHL AnFET)+(1 SHL BnFET)+(1 SHL CnFET)+(1 SHL ApFET)+(1 SHL BpFET)+(1 SHL CpFET)
P1_SKIP EQU 0
MACRO AnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
ENDM
MACRO AnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
ENDM
MACRO BnFET_on
setb P1.BnFET
ENDM
MACRO BnFET_off
clr P1.BnFET
ENDM
MACRO CnFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.AnFET
ENDM
MACRO CnFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CnFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.AnFET
ENDM
MACRO All_nFETs_Off
clr P1.AnFET
clr P1.BnFET
clr P1.CnFET
ENDM
MACRO ApFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
ENDM
MACRO ApFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
ENDM
MACRO BpFET_on
setb P1.BpFET
ENDM
MACRO BpFET_off
clr P1.BpFET
ENDM
MACRO CpFET_on
jb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
setb P1.ApFET
ENDM
MACRO CpFET_off
jb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.CpFET
jnb Flags2.PGM_DIRECTION_REV, ($+5)
clr P1.ApFET
ENDM
MACRO All_pFETs_Off
clr P1.ApFET
clr P1.BpFET
clr P1.CpFET
ENDM
MACRO All_pFETs_On
setb P1.ApFET
setb P1.BpFET
setb P1.CpFET
ENDM
MACRO Set_Comp_Phase_A
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h ; Set comparator multiplexer to phase A
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h
ENDM
MACRO Set_Comp_Phase_B
mov CPT0MX, #11h ; Set comparator multiplexer to phase B
ENDM
MACRO Set_Comp_Phase_C
jb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #01h ; Set comparator multiplexer to phase C
jnb Flags2.PGM_DIRECTION_REV, ($+6)
mov CPT0MX, #21h
ENDM
MACRO Read_Comp_Out
mov A, CPT0CN ; Read comparator output
cpl A ; Invert output
ENDM
;*********************
; PORT B definitions *
;*********************
DebugPin EQU 0 ;o
P2_PUSHPULL EQU (1 SHL DebugPin)
;**********************
; MCU specific macros *
;**********************
MACRO Interrupt_Table_Definition
CSEG AT 0 ; Code segment start
jmp reset
CSEG AT 0Bh ; Timer0 interrupt
jmp t0_int
CSEG AT 2Bh ; Timer2 interrupt
jmp t2_int
CSEG AT 5Bh ; PCA interrupt
jmp pca_int
CSEG AT 73h ; Timer3 interrupt
jmp t3_int
ENDM
MACRO Initialize_Adc
mov REF0CN, #01h ; Enable reference buffer
mov ADC0CF, #0B8h ; ADC clock 1MHz
mov AMX0P, #Adc_Ip ; Select positive input
mov AMX0N, #11h ; Select negative input as ground
mov ADC0CN, #80h ; ADC enabled
ENDM
MACRO Start_Adc
mov ADC0CN, #90h ; ADC start
ENDM
MACRO Get_Adc_Status
mov A, ADC0CN
ENDM
MACRO Read_Adc_Result
mov Temp1, ADC0L
mov Temp2, ADC0H
ENDM
MACRO Stop_Adc
ENDM
Loading…
Cancel
Save