From 80d00f333cee2bc1eed41903aed2392877646e75 Mon Sep 17 00:00:00 2001 From: Christian Lind Madsen Date: Mon, 25 Nov 2024 20:13:35 +0100 Subject: [PATCH] optimize for size and added feed back for getting xtal info from PC --- storno_cqp6xx_digital_xtal/Debug/Makefile | 16 +- .../Debug/avr_i2c_driver/avr_i2c.o | Bin 18620 -> 17172 bytes storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o | Bin 21424 -> 21484 bytes storno_cqp6xx_digital_xtal/Debug/main.o | Bin 12720 -> 12752 bytes .../Debug/si5351_driver/si5351_driver.o | Bin 41552 -> 36860 bytes .../Debug/storno_cqp6xx_digital_xtal.elf | Bin 69952 -> 66644 bytes .../Debug/storno_cqp6xx_digital_xtal.hex | 505 +- .../Debug/storno_cqp6xx_digital_xtal.lss | 4435 ++++++++--------- .../Debug/storno_cqp6xx_digital_xtal.map | 328 +- .../Debug/storno_cqp6xx_digital_xtal.srec | 505 +- storno_cqp6xx_digital_xtal/cqm6xx_app.c | 29 + storno_cqp6xx_digital_xtal/cqm6xx_app.h | 3 + storno_cqp6xx_digital_xtal/main.c | 6 +- .../storno_cqp6xx_digital_xtal.cproj | 2 +- 14 files changed, 2920 insertions(+), 2909 deletions(-) diff --git a/storno_cqp6xx_digital_xtal/Debug/Makefile b/storno_cqp6xx_digital_xtal/Debug/Makefile index 64661ba..798c562 100644 --- a/storno_cqp6xx_digital_xtal/Debug/Makefile +++ b/storno_cqp6xx_digital_xtal/Debug/Makefile @@ -117,56 +117,56 @@ LINKER_SCRIPT_DEP+= avr_eeprom_driver/avr_eeprom_driver.o: ../avr_eeprom_driver/avr_eeprom_driver.c @echo Building file: $< @echo Invoking: AVR/GNU C Compiler : 5.4.0 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< avr_gpio_driver/avr_gpio.o: ../avr_gpio_driver/avr_gpio.c @echo Building file: $< @echo Invoking: AVR/GNU C Compiler : 5.4.0 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< avr_i2c_driver/avr_i2c.o: ../avr_i2c_driver/avr_i2c.c @echo Building file: $< @echo Invoking: AVR/GNU C Compiler : 5.4.0 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< avr_uart_driver/avr_uart.o: ../avr_uart_driver/avr_uart.c @echo Building file: $< @echo Invoking: AVR/GNU C Compiler : 5.4.0 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< cm_msg/cm_msg.o: ../cm_msg/cm_msg.c @echo Building file: $< @echo Invoking: AVR/GNU C Compiler : 5.4.0 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< ./cqm6xx_app.o: .././cqm6xx_app.c @echo Building file: $< @echo Invoking: AVR/GNU C Compiler : 5.4.0 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< ./main.o: .././main.c @echo Building file: $< @echo Invoking: AVR/GNU C Compiler : 5.4.0 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< si5351_driver/si5351_driver.o: ../si5351_driver/si5351_driver.c @echo Building file: $< @echo Invoking: AVR/GNU C Compiler : 5.4.0 - $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O2 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" @echo Finished building: $< diff --git a/storno_cqp6xx_digital_xtal/Debug/avr_i2c_driver/avr_i2c.o b/storno_cqp6xx_digital_xtal/Debug/avr_i2c_driver/avr_i2c.o index 14170512cac3ba63cf7dc22bb764f4136da5542b..788535a2825ccc20fbe665c8c870e63eee2036fd 100644 GIT binary patch literal 17172 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 Gz5fL58puZg literal 18620 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 literal 21424 zcmds<33!y%xyR2plZ1qXurGlCBOse55l)t2WpAxL3Jecexs<)@rq2MQz=<|Nr^kGjnEymfENH>2uHXeDnRz zd*1V&_pIOhWd_z4ES~2$jxxznB`TUzYQ<8e-b3M3tuS7VQX|z3JMP}`>m4ubczehG z9fx-G?i|_qLg(9^A3B$3-?j14jW29`?c(=0ez7t2qRfl3T2E~)Y+ZiQmey-q)$Z1J zI=h`Kor6lOpV7Xky{tW$6|Xs`+m*e&{e|r#xA)$D zsAGS}+Z``-{JP`rjvG2u7hC?yX>09lZ9mRAFzHI?Kx=D9Yx`j5z<#H7l5?PKl5;TH zZf^IAZtB{;%;_%gW~*#Lb@4NKXSBwg!_>%)sbTv6l{2b!O6zENq2R@bPHQXLKd8Et z_ThO)?QU5^c-7s$!SpJ5=a9BboizW*!i9Sua$34OpcD0Bh4xSF-uuoc z-8p*v=oKwSb#%RbtQXaypVZ2e`<(6yu@tRm$zuG8^%t{tKy|f2!yWMtoo%fbkH%P| zhYR;U>V*933tM#S8Ex(eMx?qgM!LrtaK(hZUph`luN@P2Vsv)1ugN>j7?uxQm1xE< zqismrc^iJPVMTWXdc{xr6hBITadtVQ&z)VUy7mqJq=$20`}XZcyJo9{(UHw;+wjiy z-8XjM(|yT?T^sJ+@X+Q>`>)%_eEa5WHs87V;mup$z3QDC_o96BuFZFEerRjk-VUwb zzV(`|cW!-n>+mfjwv5~|Sukz^gwlJOww8lgvzlCoxzTRvu3e<~#|Byt!&^6 zH9mET`{}6UjD&%7DFp>8Velk;dPYkw<4m1%+_Ir=F44^mb8{(fZn&H4<>p4XxxQ|0 zq?;S)I-4+>E{Hp0r=n%s9oK37nJD^My`hslJmG|vh?hC67V&bjn-edmUZ{QcxNV=v zu6af$h^>=nBkQ)EIQbT^-L@&neI&j>k8R3Nkb|kT2e7-#1A4O-KyiZ+M~}V$a{LW;WO3A z!x&u$N~1|vA$ib$Xob5X3Xf5NqnSouR4=M}Zgad}BA4!Fh`lx59>t$%oJY{ez!yX`$jAr3A(FxGMzmuq=6!b56^GF3k5ZM&g0C4)wf7UJ zIwS4ePRHNrtmt&gI~~u3DkJTCozB^vPFbgO4g?n{rK{bIYL#v^&sr$`-C9H0nDYp# zxh+*?I8_|&VaIZWt>pB=5i@YINC$YVVrRsIXmVhGBZ}>L_5l`thasCZ0f*AjRm?Pw zKEWyxCu62=?3$xC7u$jH_a1e{;q>EKcQBnvGL(8^D0~ZcFv@O0jv7H_hXtQYL5^F) zofBh53v9y@8(Ax>y?(m1~+IdwOn z`oN(giXD$d|H+EqVM3RD@f|CkJ_V=JcWH51=sQ*{yY;9m>gjzQv-n$7$w*q+=>$6+ z%yCk6r&EKi*@8K*au&M#^Y_r}rXH7pE8?-`#b}$Vo^8=ZA}X|gyseV#JG^)7LpRy??4VeOUUkq`pqE z(+4N5XN*csJrzQnFN2gfeMagjsSB|@5=4$=n%EmEh))xoR1{IcfkKb*(9VQBxj*Da zn$jy`V>+g>C#%w2>Of~)+QR;6Puct&L0bX@ltq%OlPAo@!~pp<*8@sRtF}koc=5sl#21`hpjSr zsz`>kw>gmIXs7KUYu$w-@-t|>M@+}KcRgjI`0BeR`o zuVQ@m*(D3LyK{OoG&vaBQpulNL!{ zg+t5am~mG!B+MWva}zT#6wP47q8U7^q8Y51XeP3|X+ZY1YdYctOR#04b#$z51iU9H z_jze#Nh;Lo)OJRWwFHH|dV?u7cSltlq(b#!6snAZqt1$AOtq?SRZCL4Ff1*zO$BqO zymVPnfytYDg6f&n>tAGrV|Ns@XI%OAK-P6S_0fU++XI`V{t@k?Z8NI(?=!4_dmR29 zJwD2XK()hf<7lV;k-Zi_P+rxtF0#~Pw`IKQks6H3V>fwJ{_nI-{=fNhlD1-4 zCo~05oN{80zp62~I?(8f;FiCpAz1${VRLz7I7V1m>#uF9iPj1PFaotkMOChsTM0k9q$DxNhou)Mruj|*dtc1(n8ohc%ewPIT{@AXIkRzscWs)wR*xb+ir1a z5VbxuwJtZc{^Zt5rY7pLU0pZUr+pCLw_aP;6}>MitvWm<9VK4fnEu3H(VZl(qDx8M zURqwtjQ3n|keLmxWbAaZ?`GE$t@kI zTO6xfU!mFcFo6=|VH(CA^BW!as~z@)1JFa)N!ESy=z(d}^0cTVw(2XoDvV*C&^vDe zE5)kpg^EYKW*Z)DkyB50KRMBQro79wW&#(JXin6UN8Jv()g0ZH`{}l8BwSfqg28cz zkX_?6oTSYx zSL4$k{I)fkYp!bw*3<>6d=$$Q15@PJox|8PHW}N|5y?MuscV6Cn!@GbfWI!V1}LX@ zV6~F@#7fWu*SN+X-~vGp^zzA-373a> zl>6DL_FpSoQ(shEI3Fw2Usy6%HN(*%DRa7Fonisl*> zY$^#iHdltvC=Ugz?A26UQtB@)^yd{8mM$*L%`Yf+m-*s?GYS^_iwjB$N|o;ReC$Fz z`pkN^HlyAau0FM~AcB?WH~Fh7?JW_iFRzMh%OG|dN62+XFO`A_?+PbXjPp&>ve;oeUl9yf2Lquh)T@S8WjI)0 zm(_&X!ksd%8av-mUU@z&bG%XNwi~Exj+|Kw>u_Y1)HgR)#&>d3T&Hv5@{{B8Q{wVd zuZ$?-CGapBxWE~~~h`P@JC z`bf4mLSvx3N{%4x@VWJM;l}!qvBidQpt^>c$&2nzePG~x!`LYupz&D{!Zt^Q7zwpp zFKf%OXX*k<&7V7WhHrfC8O8qTeoUMn3&vk+B2fR7>}lDP{W&L{G<|}*gcvpV!F31; z590M>(tIBNS|OhWk{F5SrhD5xx#;;m3#YovxKWKE%4wR^$CiP^XDD=fuNE*-BnS$KR7Y$J)ba z*-BnFG>%BTD)JXwE%PdSMA?7+6_usWl@d)}rGH%!5qRD2ovi%82ot=DqZ3VDl@ZN= zylPlnUVq^dk$F|7s*mK{b=w-3zcw!aleqk^CC~NN599G_T>0;P<<**oESP`5NZV zEz)-cB>u)gjphpijrEd=4-TypBpMjtNgNk>xe_-9j18UK66-{>RihE9yb;D8Q}L%+ zBxtbCO8YT!_^=5L#>5)2fsoZf6IC85B84G5-2M51%KEARl>B*X!w9GCm=yCj4VO0) zA4uHu9(>2ab+7`LSC;BZkyqosh4K;jK;q8w;G2&k+_{SkbDbEbD)|iDM_KZT!sBt* zK8yq)X&<0ZAC}_sio6U=J3I^MkC8WsybkvkORoLFkFjWH04|Skrmzop`sRiF72KJp z&OF@52(vEz^P*j*$+*17Xw*I%o9vsHokKbo7v=O<`#G9YrL>=r)6WZVdF8t#eWpR) z0@b?%=o-U7XSB=#ebd&)c*kYKTr;4 zfB$4LPf`yCaxCuY!fcLX=sgx6NP0|!wGMvRmJB(^-^&jqy-skf7K17B2-D6G{X;l+ zE;59DkbB4D1Bt^igbx@b&P#?ci@jV#NYindamypa{%N=`z{R#W7e&JPxIc=^_|LJT z&f~bhVab!g4i^p*{daJz4^MD^ygWAv=Mv%BsM{%wo4QH3 z89v-2T#LFK6V`18KPUV{Fvo=Q=V9j$!Y_kA6W#+(gdTOq;hrhH3-VFIH$!*4@BrMi zg)89aiNfpQ&jR7?;4_5#!cLWNCb&^}6}VNn1$>q8Ox$+~Ukf|;3cm+_Q1~GDQQ_aA z?#sd-VSe8f{u;bjxEJ)_6CMu!NH`1piSR7&Uxk-|5qRn`IR~7CHaI@*7>D7)$*@0K z_)6$b6W$A*nZmTaNVo;^GU2Ph^}_2hhRwovgVzaTJFDx3cS8Of;c>X{79ItiH--7r z)ZYs~3jIF|b02*p?7(L)%Gj4u+y@B%40Xo}FNN+DOFmn82JFlu%Q<$M@HWVok|nHK zF8Z{|^+EY9(5Vr5I`+sak#lXX7I_!Oxkcn(Lf%eBThqap2ie7Kgc5a!yvL3DVA-7JhFPTeOuj>Fr+d`A66xDCv;&b{_D>JAg;z8EijEbb?ex!IAX z2p<5SM8=puiMqLD*kRp8BJYFwDHZ)>=r0!@0S@s0lram?uE{+md+iP&V8cuG<1F?%=Ptz=y3d>5$5>6E;^q>=PgTTpQZCh(dmt` zJSaR4d`NWG!4Cgf0>^C=xE~o~#WQ@c$f+~T(itN<%b=4bTnnBqIvvoTDSQohk?3rI zPLZWkYU!LKI($x53;ztfN_6gron~P^pErum)6i+RbS|-Ut`MEQ(78eQui)E6hjaA2 zFvoVUF#DT;g}^akU$TU60v8GY7~CXG-?j=r1-?;uBKQ}=Q^Efw%(MCf;dj9NH#J<7 z|ARHzgWQKg{OC@2Cb%~l^U@phmLd9F!=puhD&*rupKU`G(UKxZNf4hakU?3_CnapBA0H*k5l5)6O@-0qFGZ34PgjnZiGZ zd^DLxkj4q`0Ut+(4_wzLiau@57Wp{LRldj>3oRA-PRP$B!{$WTIa|0Ge4gk$37vXN zr^(V;CpvFKr&Z+nsC$v6vqN+SU=FVmIiKl|373JNAj_XaUKaiF(0@yGx}dX9_!;oW zqO%e@pIJIzSUP;~;h3~QCr$V&aDOuTOPi+%a|{E*qrjWUGVj|&J`wU;$e0%o#`boL z?-MS8{O1;T3BQ8%@VLd#3y*`%7cJf+%rm~*;`fE$#M$+c#h(ig!n}WJaYCBw=cAbG zWQ+R>KY?}!T0BDdQ^-eIjBF(CLerXIQvU-Z#v5b~6Pe{hE#|(W9Ih$$)9`V^mLpM?9n7QZh{ea5Lq z|B$7Vg!O0Y_7vWN^1c=i6y6HCe&<44WS_`spD`}&a89NP=Ybj58u?O7&KTFo`8PZ= z^%>WaE5Q6)9ytVNENkSKTXM#=M*b5^uHU&Nj(v=Bum^UYwfF^LuEW+Nfc9T=v4j(;zU`94YcQpokYnD8+oFM|9yi%$?f1M*WW=6f~mv_P)k(S!>{ z-Ud12Z0d0D1cd1)-(4vu>vuOW*E3^o%Ey2&5oS!zINQi?wd9Psjr~7@8S#rkfl&^zMt}xGg#^^?VmL+GrZse;h zIb(FnJ5YDC@HJq@!lVK3y*>PT#GA&$3o73Pf0uE2H_dtbr!b> zvt7o}ChodInDNC;7T+e!^~TuR=s#@fJZ157mOkTS6F=+sJ{+DLAN}4ZykB%UK7Xn7he8({Ijh3A68%BPeCFi=~zlvhQ_Ruj8c>pdS zVkE|3T;F^)F=gWNf!lb;#l6qOz2^h-OdgNR?AhZfhvAvHPoiAjWu{UNrtRsJqc2R< z^MTn%Cd$ij=N=%xh&$ZZ%yCN-roQ$QJ~L(FV*Ez`ePr>Uev;|G_EY?)pX>|$*M7oh zCi=;~%*0*$DgHChzOc0*=L zi;RSwp|Hu=l1yJ1Taxp@{5wCn0{nq+2z)>|4E{`b3-}9Rj!zo=8Hq9BTIeUtcbOr= zbYp}t$CZD7r#{DWk}zYulZEM9o^T#`f$(Wy{%xIg8M~GW7lF?aW}H?nyaHS=d>(j> zF#B?$@M`cz;dS6G!Y$xSh1`M72@Ce}!@HpXXz*)jK zf%%;U^?wYWDSSV;K$y?*MZ!;kPZxd;%$SySc}ATh%>7j<%y+>$;Sa!#!Uw>NZ%1Mc zbNy@;MpkVX9s#~m*av3ZOMQ;>&B9Z`cL+}d-zChk?IO#*;CB{e+J8=%^SE1>^Y}Y5 zgq-X5g}I*jy(8rVz@G{a0y74toOK->G~`Th58+YZUcy`t{e|xXG0F7qt75o~mBA#>u8ZpUSw z3lD>hP8V6``f=)j=`Yu)(b-MLSTVhXEAqU^ZdzL#F0WA8_>rS~Uuh`JU+HG+-_d4Q zG&QO0M*JIyY)Z4^e}EHPWPT(L#}Vp}bv5{Pxvg^;QHZ}(6ss6Gm0ek1Tg%^G+V!gO zo9=)f`=j|71|>Xd^w~gt?sGe_jOiF$WNby9j-)pZrQFwlPcH{L@$K?iXOe06cnA`3 z&5?o+vB778eYhy+m4<6EF56xg@@=?GGWO;}VA~si9KNrG%!iBTqp=qP+xGI1IRKeS z#$F8sw!Oz;FCT?I$T<$i-eq9cVH-@7J#IhToLffTg3Gp-oP}pNWIkLyrHuW(2bXQH z4)(YYO=20-ow#g!(_xQ#K3ue8{CgT~+vERTwFfejjJ?Mpus+X6=xa$=4O&9^8yUB>?)j3KjlP7 zGG*T&Z@0U92F`56XFkXoZkvAekFz%qXYK-&n`G>z18jTa=S9~QzFLUb#6LP@5Kzk#v++lY;D6$C!$;cJSB zy?M}Mok_TuO7PpbS!U59&oW-8$LVz(s}%RNNk-2vdPe>@^gc8h+>NW>gP!eQ=3>Op zDEHywPXt-Ub%5!NoGn0g5PBgtCdnZ0*78vIjK!XT;26j=anT;v7rsi1vA1FZ{zhty Ipv>U^0`-fVz5oCK diff --git a/storno_cqp6xx_digital_xtal/Debug/main.o b/storno_cqp6xx_digital_xtal/Debug/main.o index 68abe1e7d9789b4ffa8b3ba2bca83983f9d5e4cc..395c48ab34f38b4553f0678ba67404e53c20396e 100644 GIT binary patch delta 2739 zcmYk83v5$W7{|}KYrCy`xC!eXuyt)m%NScb9tz_zHU)+v#^JJIkVjxDlVQfpzyzra zfk1d#mWvcdst82QzJ{A-fRK0*5U%^9T^@Ai;TR3@JU_IXq8d*NZ88^H1-bTC;#K8+M()- z%a`v^wf?C#;MSqMA~Y>UMe3H=!ksRCZysiM&STyFId4z2r_EH2}HK zQ=f)=d6|3%e2;t?oqtS@wP`SYIn{QzCs+b21E^Gj1LRupQ{>Iyk>or)8l~hLNLEG; z!0jaRL{zCDe~I}s$ae5YpBe23je~UTtjGCF_8RbBZB~&ip+DvZ4x>j-* z<{TiGqRvTjyz0pD1V4bIM0|9$eOTor>lOycr?IM(+>UG&2B1 zEwKA8c|5L7Wc^CpLas;oJ>*(kkC9Kp?m4m_{EJm6zt@`Kf%bs0e+hj8-lE-NDPqT7@~fPA%rWPF?}MfvmkQC1+sc&15I^Rtqe^l;GD=nFRtC4Dur_lHN%oS*pwKDu9^AW5@(f%rkays! zH>1~4E*OVtN632d z*$Dk&gnpOoz#Kb@>%uwU!Q>&}D)JcA7xQ$$e+ch!Ko?sVp>NcTHs&H(YlPlL9X}~z zcLX0K4@7qlNANe~6UcuGJT!c75S-({_h|J`5qyoDhv%cKheKEMZW;2pI#G}(e^>Vl zJl44`AvUN?zem2KO8h=KSg5jP68xJ4<0*-lD A^8f$< delta 2634 zcmYk73v5$W7{~9qTTA!ovVm)9q1)QKwJU6E3uxHJU?89yFaa|+4T(dT@(3h=qL8=( zS`%eN@IXW%%0q|>=%9pv5e0c}hA@#$2%scP5s8TpKm-;4r}tmoO?J=k`=9eY&Uemk zJ7=`bSY4q1Qo6=BM_kywsv?=zABx*U8FQ4U_aAPcwYkF{~vd%0_Ba2(&%fMn&wo~ z!o3skl-Bb!^U75GR?)u%0g{gxbOn~H9IsSOJ2}RkoER`xNgsZ(<>7&kfE*4BW;|+k zBNE(&lxLkK#cU}=*wjCOUYIF2Wg3=!z#4fnv%qo`v_SrxX^5|6j@>Q1vcx_zYlK&b zWFl*2`~~~|6sMk+tqDy}6)Co~OiiTf34SB~P)>HLjJYR@A@YoSLHw!QxE{~zzel7` zZC=#8aB=g@CnNH-YhV1q0h@JQ)8bb=mxS=d59fa_+!pL92Z;pwn2Sns$qiQdwzn)R zj9rYR)NGU8UZ1@>P1Bkw9g!BF;i|K0+HxvQm|abd$(}Pk*%9- z!k|^;W+#KX4=s~gyQ9+)H zW=$Y}g7wqLo51tPb5KePd6jA|c^hJG)wO6MnF_j>6FoT5W8^MyH#r5)SIN&I=xuT- z+M14YQ8!>Q5_`x7#xk-KT^vQeg`Q0&Yr0%f=%_k`^e<8R2IE?C6T)pLZ$SD3N$nY*N`uQpCH@7bIEH^+l%Bo7}dp9zB{Dd z@6-#d((m_Gbwj+xiE}6=6`fRz`eMu_--Yfc|A?}Nk#EYF-*{{&l!a8DMWp5AN8z=W z>_917$ko_J8@T{$4wHAG^fP3iMgHS=xRj|rv#Ow}IGb#8rz{OP?R(M1(NvboDFLT@ z2-2(TqSlAtyOR7$np_d^O}~LE&QdBy)jyE4z<-h}@de02U=`v5bPqX(^d;o)5vP*u zgkLTBy0jFBiY`G}M`b9+_sGW)El%DqA1^la!F^;)ahdM3$&ZSCRc8^k5o=UtC&p*U z%b+hNx4=I}cHSo0UT5L|>pRGeYpT5>hGNwNB=Mt*G}CseYRlM~>T zicwGj0<7<)ze`TAKU>S>__C|RsY>18WSE!xR6$$9KOXQe{UksG9BLR^r*F*ySd-8D! LQGN2k#uLxKbu&#_ diff --git a/storno_cqp6xx_digital_xtal/Debug/si5351_driver/si5351_driver.o b/storno_cqp6xx_digital_xtal/Debug/si5351_driver/si5351_driver.o index 59965f374c2355a288e1cdd80cae74d2439d78f0..3fee05b52850e075099cc7b1e99960a3938b0320 100644 GIT binary patch literal 36860 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 literal 41552 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

Sj{bU_zyOa##`MC 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 literal 69952 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%0D-073w;V_4`eU5uC+=D*L+KapMN1ZO~6|@2r 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®TiOn?41!nG*iD?kIn#|&2gAn;p&55dR5 zU2Q)ep!Y8#dw{5R`4?FI2Y~T@FqIgLcH0eW9Zm>Y{Z9lFU#B?VVDi}0@|vJqzlH)4 zYanfXK90w-GSlgtR5li#Vo+|7kZ*qQ?GN`D5PY$NANT0NLcE3E$d9K~Ad7oie!M>f z!9y*6yg#tEqWj|=Lqx6K-h7Te!R^g+2yo|bB?NJ5{LCQSjK?9aiweMTyw|+-JCwC# zJI)*5d>lemcJOvweR8|vliL-a+^+bH?TVeT9z2@A*Ix3=?TSxsSA252;xo1@cIE>S z{;VOWl}~P0d~&}+c0}~d zJwiR^Qw=)@w%BLC5#jk!Urb_A4>;^Q2ZLv!3%ItYdKY=Nph~uHC9Yk*!?>pUE**r4 z*Y_o^-F$r@lpi|rz#s6PkL&N%_RwC(S9ScZyKxQ30}vi)Byc!Nkg0Q+nuH6OcuN%a#d9(1CUJXc zUrIZ5A8b?AZ_FJ(7sav(l%}n?Yk79Y~%LOzNZp4!7IOM z#^NT4+e7<4#UyRx_Rzjx0n#>Z5A6pOAZ_FJ(0)(>(l%}n?cXXu+Q#jn{W}Fn+qgZn zf3E;(8@Gq{Lkdu~aeHV#%qKapt>b;##_gf~sAQ7c!z6AG?Z=dqG=u+e7=$3Qz@cduTtg1qGm>CwYjU#O44s3ZV&BuSt&$mGPj5Jdx{cC+#cHR%L>cwVG_58_6HJ>+rwmT5A6>Xzn#qO zq5YAf+)3OX+8;}1xuHtp_Rv140F>rQ=JwF;QvBXzZV&B4iqhLd`_qB25w?ETinT*B zw}73EIi_R#)DGOOBfduV^F0Ms8A}7 zv*cl}+#cFq&7`-7wohD(+JY${{*Hv)9@+^JCT!rX&RBSC%1=ox_Fz~EA1X)Bo<+EduaC*oO>W9w}*Bw!SUbO z9@@PH2W4k_X!j8uDP4MdX!jKyoSf~U-A`~laJGjwmYax4XM1Q5)TG)T+L@YE+e3Sh zCe`-P9;`{VJ;c`*lq$77w1;R?Z4d3CnpE3Ed$?eqb+(802*IxAY!B@d1$&6IJ+wz^ zQf&|I(SkAQY!B@*npE3Ed#ona_R!AOq}m?ZIhs`4LpxWKYI|spm$Bh&5A6vu3Y_hs zJxQn#4sQ?b$-4azSX2yv8phFvU{v&rRG zccQn4_6)&=lCwRuPnE$D-X7Ys#Ux0oHI+zeN80xy)^$l6#lCJ_0CkryOLsd5C{{o;t6LuV1}Gi;`i9amAfjVHM8|-Ljseus z;}00YMJ7?avGo=fWnzO+s?LC_p7I@!4brrpx3HWI(rY~zQ%t3;Ua!CkZpHX>W%Iap z?S@w|dVdOZ4Ekm7Z;&{Pi2yXVBGKnvAl`rRy30)W<-4XYfT15Bt)7FS=P>~N^)AhI zk+Ax$Lq;7k-jNw4-5K7y{ixL{$hcv3GdL~1cnQs1P>|s z%n2{Ilz^c1{Gqk?VSu;{PlN`k7hLGa=AIzCvCb!REq{b0H}~RXI`LEti-WkkSLDMa zxxH6pF2>ZsY?n_^KsOX1&i#!3nF**7dA;+T#5g220Lda3-5;*{79@3Le`@u|PBd^& zf3Nx`g1zMx)HLP|l_B&k9>2krjapYBYIJOU{=tqu*Oq?AR+shgcUdM*jVS7VY(;QA zAMlA4()D!vyV%?BM&-q4co{^weg$3M9}P9=Y`T60w@7!9gJT#y)XF;#y06tK5JSv}Ky69B@NsjFj8-H~3<-_QHd`FyGZ}@JlCq`)< zavZH$Z)>gJVP|fX#!<)7XblyenQ+Iw($8?1{Nt`${2Fg=C_mpzKc`?Np+fv#hWL3P zhgCt4UVfOwLQVW|0Ek7JxEsXqrGudEelmUnQpUO}2k-~)rs`OK2!o4^b(vtSKL;d> zoMx=M+g4oRa@xif8|_}^W}SZY8cR{MxTEqE)X?$d(bPtQUa37s;48IK>m`W31=O0P zdZYS6xu@;C&)p|{uc}14hbrA3S4 z9q9W9W?Z`;L*w`FJox?*-wWWQ{}Pza@uUE*IfyEVW{fo><#0Y!&SjG^o{W_K8Y<|p z<)p`PkQpj?fO0jGS^XewM&?m16yu`$qVMRDDaQ;L$k!M|kus3R@drEq%wnI$n57IX zk_M*0Kgz%&Y2f*!?`2hr1W#`s2i@<-+Q6X@K5oN^f+!=Cj$>rMJGIguf2Y!^QA!hz zqcp2iD?PrI`B4fJkE0N-Q5FS`XHhRs@y_3)G~@sb>CJI2ai|{oa+u(}Uyj80>;aLPUQSBK82X$5 zt7JW|P-1raXrev2jLd6Q}q5N=sv?>V>t0AAmv1Uhs0tg z_-^ctNDQDLfATjxR&No}D=v|v7hI#s8fLr5eGE1n5z3Qnajj}qwrDk0O20*Ef~!Gg z|FzQo+ToxN!4_~|0`-3&-GOx(Xs*b=1wE#|rqL2N%Hbe?gk_B#n~D5ehK z)yjAxd~9XYzMrxITG^kDt8DuBQ;(SbF{CHllZb8p=S)CY5+=AiBAEM@uO^+Ef*8Epj zyKvFiWwi~9#@5u-SBDl}*jO{B!Wz4D#j={Qjrhg%hJ~wY>#E0Iu%iCFhLu%|YQ|Qr zuAe-*x@L9lqMC-$K+YT6P``-iXsHT`u}BbDv#e%G)wr<@OIOr4j$Tw%SJyB$@}uea zMfS}6ip<Mc*jqQN3G_>pZ#$HhW|CX`%TH?@Psu%7Zf@f`siTv>iJCbyd z2YOQC4-!k#^O9UxDtTf7Z!F-81^lrk1uA2Kxv{{!Sm5+n;EY({%vj*8Sm5kf zV16v{qgddaSRfP&EQkfFVu6LRz@k{7Iu@vj1s2BwOJaegu|RDsaBeJcUMx@-3oMHT zmd64sVu6*h!1=L2eJs!r3pB<8t73uGvA_kfz?xX#!dT$PvA|DafuF_#KZ^w}iUroj z0!<L++159*9F8j6;4Khx{%M`F$MnP#p4yIOO3tm@5cpUPl zIONZ9$Y0`+C*qL5#vxC}Ay362Psbt8#39edA$#JG=i-p(L;ewm?2SWSk3-&wL-xfXopH$iIOISa@@5?JRvhxrIOOd(Am z($HXfq8;oToa;@)PZ{Zx4xV$^c+hQUgpW6Hv^2z$I3B;_D+_r^>fmE|QW{>onCjhG zkR%Czb0FfvsfjNUMRdclI1f4e>Y#*pVBfQUZiu$o>)7m*2^?R-9nu-HN_2)k*OJa)yP$cLEAd;~%9VIQS-CP8?aGvBSK<)Z zbY+_9%5HAi2-2Cd8PcPxo+-`g9&r!ewHc#r%Y;ezHiF|vJhzGj8NQtD#8U4uh_k4+ z=;N_+(iw(0H&TgyL~sz?AFSnKuJ??@GiAX8`U9sd0le}OZCsSn%!rLtJ;)%@qJyc~ zQN*ChQaxaMK@tldVswI`Oy{J_4lztx3VECg!BQkfB*HvATQ)7l6Q83P#x99t{D^~S z)~HCw8;zu;`rv=wxl~|y9bfx;h~Y^pIQ$;j?*b}j5}cSxbYdncI%bliVs;!juzfcz-Kd8ql3L1~Gmkiv2wjY8g%+=*iJW#k(_{?V#^^nO>ER z?F@6hjn;)%5l~KdVH+W=91?+L^>YS6;}DW;1LD*>gT=szLB=qG7p)>V-5icTgj=LY z1Y3kqr_%r9_BF=_pLQ}lNw@l)mJK*9o8Ux4Vk8=pR5T<k9`~M z5;Y!UtohFIm^0B)JUj+b&Y5X=k{UaMky_#Hq)24Iv1T-JFinfdmZU3b%tVg5s1A@G z(aJ{Y9y`4CaE90nC-^ZqtFgA1GX&A+y^TidqcZf6*f%_EJDpDVBZ~ERbf6a*Qp}1P zqoZujG+RC<$k=~$7@_|pV#ShWj<8fbgzk#0Nzk!}MkDax|2PF`nyT5f*M&52qy+7tUxZSIn46 z^%~6S%(5{#bg0D`+Ay*hbDB!_bfXP*SC_pUJbLkRv~KN`Vy?na*0EM$;U$<}b`1?z z2*aozDZE$`uw*RB95>K><8d8HKCBBni4W?Wxe0lZMVfR|)Y!yj8e0PLe!(&MpQ6z;Od zBG)Cp3MNZ_JzF0QSsX~-P0X7a=n=2tZ?tErpc(739)cE$WjW3uP-O^rqTzwPHk z$7FdKy=3{S(NXyP+U1MtR#n$9`@f?ZZ_CD3VGLepwk%bvF-uW%tD&(P|C1HcHoOBT z*U?D{!nW}p2JHIXHd4KG>Sy=~aD06!;KffO;p{;+%AMrzVe*SG|JqpoUrKMgj^*to zD{EK$SAA_2o;1Hqx8O9R1@mPKRzzB`3~$mj=!VU&Y^+^=VW?-44EX1>j7Z|F4*^*UGCcuL<(X?=|2* z9N-ln<@GLlJ=2kN2i#IV16RRxIOM@*;rmEODZwqZCdzBQyasv22PF)5vsZkJblh0N zTGZw)`oFZ9V0nBi=_;X>5SUR-#txAR(Eb}d`><*nSHKVASxd&Yi+us!CFGM=kG$IY z%KlRS6Xqa<+mc%8IE}@MkFS$m&$c z+M0D%6&xlj5R%s+^6Ds~`si_h|4E7clC+64yb973X@^UyfBzzRyIfg&tD^SOGs0da zl`DTK?sLfu6!xY=vkSw-F@}m&RrQVkmyQ)Q{pf>*%vpNW(SrX&0={O802-`%m)ExF zL@(N#kv3SjG5^m5e2W$+J*?JUDlMm1#SJYghIv(OCS;pAv8`5X%yl?{$gn++e5!?< zk>F9Cr8>Iodx%~m@Sl`=fT-|SJzr}3Syb1Q=<<7}UUizFa5Vb+pbu=D*Xx^H(+2*8O)>%XhKIHq=fSHzCIvvbcHTB2O;d;y`n7 zlbkxV!&1@P2W!#!%O`&h#5vcI+h1CWrDC1xxj|FQy^64{^@@@n4t8RH6J ztfFNGipTf;G4mpZbX+FND0Fe&gO)30yg={ai!`!DPBK6~mx!GpV{x^VN?-?pRFfRy z!1JLab%i7Kv6Ax3u9P6lm9k-*o}^6&V9u}C>L}+7{DPYN`^%Mp>ZS7PL^ybKU$-me zlzomilR=S~0x&g)=lxq$cx7|TLaFDAUe44={IYIp>sv1!lN3S1qWpbg`(-JLMnwB_ z=O`CCYqv>KO$o26g$mFWD>p_jSj|3)3RM~o`{ zzcg4|QH8|M_tDu)Q5ha};JYyJ1_rNXRgFtkihkg4I@tXgfhWp1WW>5<2U6=QFNa1f z1UOF)(IX#!MFBsg0U6G}Pr2j@!d&d{`hS<8ONFNun>ZX}$3y=`#2R#LPu@W)- z_!?BM(%_OB9RBaCA$sJ24dKekW$AA)XsM%(7mPJ2MoA8J`!ABWYI!yH&5BjY#pB0E z=KXJKgDy3%%F1+w2We#*f5MO<6S=B-DdbpYsxzK53@OF`ePpH1uu=S`x&2EVpsJNX zk{sFjzk$=|jMQ`G*x_^n29ZpMn~2{8w;zK7wS&!&qAKll3eG6WQrUc|OckZ#Pwj69 z%G?^6>&&W@%8;S%oJ;bX()Ph{QGPj#1msm7Xxb~Zt>GywY^C)5dYe|pdRn$a*dLOy z9gNL#gJiE$F4a`C;oz_czv^pWBXx78bo!o}{#2J|TGh+eCUT&#bx%{~s!hOmUtLmz z>Tiy=hz7M|Ia~ToF8|k{MlSi^?Z%DioRge?;cqGOC^_;qMGUbVO!?JD{H&24+MJeS zF!VP@7h^#n%8q>NP?ybbD%vLqyO&Xt`B1|dZB%ITI?muUZB=J4CZf`bl0QzT zs)L1}0I|NsAEwT=Ly|IGJn$X`jDI{?FTf{1XkYHi54yM7`9V*sJ3r`c^W+D8*Lw4V z{_8LyJN!IZ|33UjD-%&>HR9v^IW*6WGx2d~C;wPF9s~mqK=HkADMQ-%qmKWC=E+_Y zWRE4!^D{o#aq_2vJ_U4ld{`dOvgY6pKei%yRG(J@Z$vpfj+v);o9Xi=yC~?{MxVFS z=U33@+kN@Lzz%J+Y^3_TC!QeH?`N5RygZaVKU5G9ILbv~x4-zlHU`jP<{q_20_+x3d0itpByF|8+@LFRh2$ymd;CuCIzCmci{7 z<4U#%%4lO5*RqW3JdQlKD?f~pm%f2K_ao%X#E1I0`Pi#?TWPbY?`U7PyX&u02(3;lB${c}0}vz77D z%J^twd|aE7A56P0)tahxbAkA|(!GhgH&gc(>b{J+FQ@LU)ZI$mZPa}&bzg^>i}6qU zxL_NBc!F=gmky_15SM?DJ6gRqvFyz(dkf3HjAdWWvbVBct*loY>vb*bbzKVlm>C+B?B;A3*}Ye#a2$qvlZ>6 z3M?m8$W%@^SEgjHOch!c#iubd+o~*|TRB7Da;({fvt}wGCsiP^S*3+DWkOq0T2Yvr zJzF{{-!g~-hmd9>V_dG*S6EnPRg}%ZXO>k_UOe5Y!@OD9W#uK-ta-C?<`u&(?f!5z z3mhoF;>xevPDazZ3IF_N4VNluO= zr$mxD*_LCLy5~q*8%0RlR904uI4USDDx5YQx6(?I@DIs~Gb?bTCf;+b%EF>-;-?o? z@;1G!q!iVXw;XlLRkv{#+ohnS(#kI?Dvt`GqWsE8aEBvNdzb(1IzEN7a@1(n%!=Y!Rw4RI;T)%rINdF-my{Kk!vfi#^Oe+}UVWc}HN#d#=8Z z)A#ZEK0)6n>iZ;ppRDgwESgtQJg1@(}u^5{)pd`4wK`AiH#^GYyoMSGMj zQShC^nCT_ec8-H*%kZ0BkUzHwgM@5WdBfNtjhXHES@KozIy=8&rd6SMXbG zsZ8bb>V$|>q#kR_&!Er@OWkMTUN(#D&Y)4L^VNNpRq5ojTb7reo^9zwj+4lB662i2 zcqcKzNlbJSlbpn4Co#oIU}SJqhjr(KmFI-D<2NH5zOeqBZ~-~t5^};t_r+q{GT&*Vx)sZp zWXcPsX#KKO=z{v%#v1t>Hx_>^r*O)Y%n4)0kIBv)y=?jD#dTE;OHa;Wdd295^J-U) zUbt!rsAY>*os4N;{qzoKtppM zy|A`%acxaqbpt?fEo!V?v3ztxjl2`9u4=3@Y5o)tG}o_M)QDVFZq4#l%Nndm?VQ3g zSxr1ODlRT7FP*JwYT?&+mozRl;QE@XYCa<4Idjw_rFaCVv6_QI%4y-{j;>)QYiJdn zG#>@yrMh!bm4^AtY8Tb7ShTcuWk|hE7s+X8Tv5M#MQG9aEBOSix^_uzV^v*f4K8@` z?wDCcHE0K%6#uxU@xqlg;iqPyx|-EBb&)wnPcY$mM81c%q^42x0ap`5cs8l8SyJ23 zSX0mSTUlv&C2pJzL$iwK70(J`U4_ZX07%x?G}P3uuBi^?M3T9jpVYJ@xv45YVr6x0 zy=q`phH6b`?vnx~bILF&N^={+<|6*}}iy> zYOJqX-mtg^k9U?g$WBI;4yfiPOiD4+5G$!$o6U+yWIv=NN`?7y&oC|*Q5SYcMP+Fj zOD>!pD#JEz0WP-r!J+KT!RCM#zK2d8|#k3Lv~w|^~4&t<$8 zudZ3%7+SotF+9o7tsq`DyR@h{gb_g6r?5haaoIhiymU_KTp6v7=7yT()tK`rTR5Yl zt#a&FbuTKZ$S;^xT*Pu4RGfs@KOFz%HrF&CLkA`ta61F4 zJF<2Wvy(TC^O=biCSs>8Z}R%It9CU9s~h3Feb)amG2DAlR7(Zgs9D`+(| zR@FBa!X~XUzJi72g&|e}JCI|zz~RVsYAKbnq8M$f8fzLbG{pPZ8Mt9e#f8fkNr!0v zR1{K^YycYC=#+eVKDzO=(sDYhypj#!lvpkO8Yzxq(G42!vXVL2PdknXaWNC27S&_K zMst_VnpF@g%P-HLjj;@iJeY+6uXI)8%2kcU%c~aF)$rvbV&E*R!Z#Se$KR5~tL-69 z`SMky(4q?$;cE?+99N5K7FVsRYpkeg1kaL&;$nUi!g=bhG&f+yTw0E~CcmsKRDMQ? zV~FvR6M6@_VMU32p$a?aP+95eSOm;1)8>`c)k#yzt1d7VRcb|gUAMBXF0_&sGek^n z6{T~_3yVW%ROZV;AY9+su(}pa)wq<3XIIQw6T(k_t9!1#k7F1j5X~2|w4rKQ6VhWD z+|;;irKP|20q2FJ$>^H(sC{hJicX)yNX0^CdCeLGlYW;BGq!dxnkF*DU>b26FJCua z#Gufsl?bew(uPG=!~?o3$n`GQzI>I8^I4=7u!5hCCbAg9MHG!AizpgL7g02hFrsK2Wkk_9 z(ukrbS!~#nYBq?DIyzPj3QmKrK#(dahO!R6LY{Z2v{k>Rh$EHidOWsVvAnTmWRE9P}IZj9IP(NozTS5hHT(a&ZH1F=s2tkai|E% zlMEetD93O!$G2M98<&Oq$ecBifaVA`Yvu$NpbE4id^wUWUVc)PI4iG8P>Xii`NoAN zg<_kusAOKjnW1r5Zs~myOP&~7q%_uwGCAW%?kEY-77RZ{fUD)Wr`yP9phxl=E|M3uVV^uCkbAbpj%$KGdoy~k=S;^EZT#%~a7@6Yu+LOjljMM}C`5OGbV>OdIAk6@6Dlbx zp9fb>VU^HkP6!!68}@c+R_W=E5EisG_4TV(Hkz&o z%cJfSLO3f`{XIOXFzP3ccT~WraiMG@UR2pRx=Tw}h0At?BEd5;s_!}ebUJTnM#=OU zD!`$T#z3F!4o9^r2ZwDdj0J-;e6icm$fI=|x=8nT=r-yBYLaYZBqlH+-5wqqq8vB7 zs^L7iO&tW6GqmTamP1g?JX1AX#0imrkh$d(CBF>f+(@|PhQrMn7M(iBgxh3tVs95y-8ECT=?CSP_KrvoS#>vlOx>+80eT``IM$?@fP zNuf2hO8v!I_;7rHdx( zKv^wE1LeO+drmOgJrZiV4r;AiRJ*#CyAK`MQf)-RIHe#mFw${cRpf`*K#nvy983`c-7r=k2&E^mJE`4Jgu4#)hZ=(udeevNJM8NApBPvvx5Yg>5cY@Q9pn+R0S@Z&1rIytrFew_=gw zslxIzvB#Q)VL87jl#^XH&B?$6-O%j0vnorlX~nDpkD@PVJC2eUb|>?s1@a763q+MN zIl2(kJTxIxSULxfedRtx9zj7xgSEK6riOlq>I=~nHor$JVUPl zX4#^Z7s|z^n#*xKRgUwn20Ry-vufEwd|Ta+WsT%nv0k^Dc{SJ5O&|pt~x(x20|# zBbvMJ+2Iv-Y>~O)A{%P3wXF;95F9U!3p1$hrWRd>;YN)a*s4hsuY9=BD9;1Ta;N3v z@DWFsYX4=ZiVE$*{IdMQl1e!P>7b>L%8KTwQ>K-T_3|yo<#;2;wzg%um{_R^n+bdy zUgo%&Xw-y}iEOwdP)nRU$#~hcHEjhL!?SpNfipBkQk=TKc zpJe71Yw#{oyYUILAT9rB?cMlDr!nzsP1sD_s|hy~_iMt##DkjfGVwc2_?YO@MA&I8 z;#qtgr!oD4q?OZ{rckugD5bcR(@d_2)5!HWK5!auWRgxZxg$=adCZ~Hcz+cipVh?1 z>bHvoU+xQNAWQ5bdBEgBI_ghYOC37ede-L)eEv^!=L2KMRh{v9``$j=>-C>lRT@A^ zLmD6o&SJy5gcgWvnYCjX$2f^emaxxWub&gg_AYjm5;r1SS|NjsMcK%Og0faq47B_) zAVn2*gB68fS(fF73Z+qGEC?Y@LmE3)1VP39e)pa;b7%I&2}D?(%9hUe1aNpxH_iknsjhqG?1nEY zX~@aWC`AR(FQb5rmzm2oQQsF8$R1J(I}7l%Qj-H^;TtEx&$;j=0Zh5j+jl_a2a%P= zgA&Y@r`S^}!Ke=1dnR>sW=$o14}3NsF|1L~$L5Ie@lZpP5fIxKCnHV5!fTt1=a{GT zcV2K1F9YDkO6B3CWND%W<_+;`v(UR!N#`&!R4`PWwgyzPHYnUmwoWNDt}U>|iH|$g z$3vm6f`Fq&^qy$k(70F0PaxpWDaF=<_9s&Cw*uchQM-Mj2L2bNs0}(8q;Vv`{}y=E z20x+{wLwRMG-`usUX)I4Up)TO_O&NzUu;j5rtN7@(w^u)N>l&sN&Mr_XHnH-d9J2@ zhjYJWoz(kq?!By&wqZDLLs=(n$zHXvmaQYBvkcC<;Qrw#AoDR@m)lbfH{wH7c2RC> zRo90k)hbSQSlqAFmF?;xKcJ-Z3mFwkhYE5E&u#IQtgxGo1=E_wfa6B$fX9q90FN8# z20US;2{>V78sMan>42XYnE`mxNDtsCBQpU{8|ei+V`LWKStGLn&l#Bm2=Ozt1fA{u=UornUmleqx&R1}asoeMzEL;=~exxkxE$@E5O zHd(I{(ekbt4{)An>;>pbC3TN%u~JvIr%ry0Qd9zMR+19g$8rJao+u#OoeMyFqkwFm zlHB*my>EQ6@}N@KkAOo)>VSugGyo49=>|MvqzO1|WE$Xzk?DY=MrHtx8R-EWH!>6O zsF7Ykh;g8~rV!k5qm8GPe2#$oHG`VjmWkR{{e2T*D#cMsYrP=NTGl3Wh2r?fY*ZK_ z8<2%sb~D+s0NZ3~d$+)!VmR=@;Ppx=)*~+Wy z8CqZI;43XpeR+A=*SBTiUKo(Yau#%RiR=m7yWl$DII#@}| zQ!8Fxw(>Dq*ww*GTAo_*^0F27&_Sgzj{pxEsRKeNlk|jw`a?=STfip*kEaCiNu@Xi zKxYyu7?b4_1|`$dj6rCRNK4~Pn5juwRY*4oIDmBmk-;tJe{6i zUY?$G{Mpc4EuaC<8L0zK8)*PuRMJATK_23bWV?Utoe2d?^}Hs`3&4PpI$*hx24IDe zZoo<-O~5K6(*UcDOb4tnG6QgfksiQWBQpUv8R-QK8kq&S#mH>HkdZlnbw=g_LQE7* z(+j*~bo3)iy6Yx86yVKds4~flb&Tsa?O6sD9#m>(gA=t6P1L|%t9Z&otp}8Pv!RJv zYoZpX6(xs5=?xRL8z*XOCu$#@s8Qk;hVq$or%DefH8WM$<7ICsvQU@G2 z(f~Yaq#N)bMw);h8JPxn%*b@W<3?rxo-on_IALTaAcSnukoKm{IxT@8`QX>Y4vr2?(V@hB7PEzYiih%SNqr6lpY32Tol%sy&!NO;s+0OG z<`+J%4EEwYzGb5J;fWe0K8l0EC#~(ZxgK?Vq-ftfNxQOz`KW;$7LrP)R0vM@OgVP~tv|d5h00f^ItBC~==d!RMYS zI+VE2q2Tl66dg+3XEAT_xg_YO^Oh3#IT(CWv-7<5oe<_?O7svSZbB^nrOI*owpYhJSvcDa5 z{JYA$zUHpO@)`8E7r34By!2A67jv$&jykr%^t!4pde#~@$oV*K-Cy;n@oR|7*>%OQ|L2x^o!{>P<6i#% zP2J8D`_)W-PVUbrg{c5|)<_-joRJ3Lc_ZC`5a~@bCO?H^=nXm_`)&nasT6l3h$=4i zp$yj+m21cKD)S2MNw1LXQFJc~x+7$+JCf**xLtfLRSMk#3>c{cmK$jRRv769gs5_9 zw=i^^z}pvKA1~EKTf1z9F%7^9yTkfr(|xtJqfxm3dr1UdlGa!3dr1K zv4X+mok3xQ%uS92lV6JhGB-IAOrD4WGB;V=yixMJQW#LcX(M&O86yqAi$=NuAs${j zpcuMXmueqS@O-5>C?Kl1)b}T~W~*F-MCKKAdtw!mdE#|KQ&aNWp544|wK3)W=UPb% zP$>3Bp^#5c6pFERh1c9*40K*bX?c?`soY()TTQ#eF68A0=0$n=y7X%6rFS=OtDfy@ z2qmus|3XT?bmMn}U7RoQ_>{Jcf zo-S9mXovBV8Hty=d}HU4D4Q$b+~t&Aro>B9BM5Ed9h(D6{tk_odzrsZbxyFOMpHLxRrM%iHlBO4UyBYAGLjP1vt&d9&u>UWHNCfyR+qkdnQZk;y-T)wHmlTwMt15f7Knivw^L{JSMIX+ zIF+0jh}R_iO~U;NzbeOoQ)l0$e;MSsojN<&i9>FHiW+97p}%cl-97 zXMdkR&;IV0KTaxlD_5xX@Jg^Z;e71>@3}MO=fmG&`T27lkMTgSXFn8QobVIkyp-}z zd28%Ke=>J1#yTe-}$m|34$1`ul=77q|uL2mN8u(UrHamOUVz z_V2Jb7t0mqkC*aNdp{FrQNR}k*!#6Oivz9`@CzkN^;vKf<8$h4zc`D4i%frsc^;*piO)AnpdZaVb;lfvFV?EjrOi^WxD|I6a5g)da1 zy$^`9cwS=i?~51y>)F4Hvv|A7A4Qc)T^K&;DE}p89)_IE(Qoq|f-gzaqa`oJBl0O2|JV4!+d* zctwA=c(Ffg+2T{> z#97qOxAD6~{NCBpHEy4I_Khm=$n~pR%Ui7oRz|>=a+D~BZ^#v*MG@XM1-x_P_E9H_ zX0v{KYk0>F8R{ER_(11;Osa5paE=)z(DI|$#Svi|-`>?X<f7Tn;w$p!j5U-+0JNzgkcf3=0Ud+U)^-K| z%&W*~h%Tjwe#@@CZk2){hCmMNpBoh9)r+rNbL}#HNZ+!rB=upTe<82fGHS!v=oZC1 z37`3D&u9co;V4`Bo|K3>jB6=kQV7qKw?%tNuJ8YIzV{NI* z`-@mur2t@gT}4t&TO22IIk1rA3TU?@^hU$5!w~^%e3vA9%6I=F#%%lTd_G&+<3#I| zXw7xR5mTtU)^!5|`kYp~vv3=O;^mE8$ixU?V2UEzZLSnaw!rTyFvaPiDrzlZK+D4( zOQOLY-e5jTjY^2II+^(}t2r-k}z1j|l_(^~9i8O(_TCMh$ zF*_zY1X^qP`C!UfhBI2y^#0@wTAhCSQaX?L72^qbsHIBC*Sy7wBw@42d+F1cGvI(m zy~C7APkYHRW+#lT>$h*xWXN48XmUJF#8L5ZZ5Gxr>?Gt#SfvnHAnV(4*Va4M4=cZ8 zd(3Zj6h^%-oH6@!=x2Q!Mz?Myx>et{QC*J|ZMaWYtG*b4nQqU5J=S@9WN*F6$lTt1!wXD?o@3WTcaf5oEctdwdaOl# zv!!lWuegYy-_NlO>7@lO7)iO0pI-}3Zn3j%WkXa{r5K6_@k+Me^JqU;nP|6 zH?Nzj_tzD@kA7MAh(4H-c|Sf=(YyESdYA07srJ55(HlITWjAt@XPft9zqn&W-_-Zp z3zBhh884ECIe?P3pU$e4o{hO4c~U()`H~)d>;71~C9FZ|2bd?bsl7wZTK31uj&ytf E2dEpNwg3PC diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex index 813e37a..1e8514d 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex @@ -1,258 +1,255 @@ :1000000019C033C032C031C030C02FC02EC02DC087 :100010002CC02BC02AC029C028C027C026C025C09C -:1000200024C023C022C021C020C01FC04FC11DC09A +:1000200024C023C022C021C020C01FC069C11DC080 :100030001CC01BC011241FBECFEFCDBFDFE3DEBF4E -:100040002FE3A6E0BFE301C01D92A736B207E1F798 -:100050001FE3A0E0BFE3E4EFFFE002C005900D92D4 -:10006000A630B107D9F7C1D3C3C7CACFEF92FF9269 -:100070000F931F93CF93DF93442391F0EB018C01F7 -:100080004150E42EF12C8FEFE81AF80AE60EF71E25 -:100090006991C80199D70F5F1F4FCE15DF05C1F7D2 -:1000A000DF91CF911F910F91FF90EF900895EF9204 -:1000B000FF920F931F93CF93DF93442391F08C0112 -:1000C000EB014150E42EF12C8FEFE81AF80AE60E0E -:1000D000F71EC80171D789930F5F1F4FCE15DF053B -:1000E000C1F7DF91CF911F910F91FF90EF9008958D -:1000F00081110BC08091080490E002C0959587950E -:100100006A95E2F781709927089580E090E008955C -:1001100020911508207CE1F32091150824FD1FC0D3 -:10012000FC018191809318088091150886FFFCCF0F -:100130008091150884FD24C0809115088C70A9F465 -:100140008091150884FD05C041505109610971096C -:1001500041F783E08093140880E090E0089583E005 -:10016000809314088FEF9FEF0895809114088860A2 -:100170008093140881E08093150881E090E0089551 -:1001800083E08093140881E090E00895A62F972FD4 -:10019000211531054105510569F1816080931708EA -:1001A00080911508807CE1F38091150884FD1CC0C6 -:1001B000BA01A9014150510961097109EA2FF92FCA -:1001C00092E080911508807CE1F38091180881937A -:1001D000411551056105710581F090931408415056 -:1001E000510961097109EDCF83E0809314088FEF05 -:1001F0009FEF089581E090E0089584E080931408D3 -:1002000083E08093140880E090E00895E0E0F4E05B -:1002100080818B7F80838081877F8083A0E1B8E0AD -:100220008BE016968C93169781E013968C93139718 -:1002300015968C9388E0828B838B80E090E0089504 -:10024000FC01842F880F809317089091150896FF62 -:10025000FCCF8091150884FF06C083E080931408CA -:100260008EEF9FEF089583E080931408608371837D -:1002700050E0440F551F428380E090E008950F93B3 -:10028000009709F1FB01DC010023B1F0013021F0FE -:1002900080E090E00F910895211531054105510549 -:1002A000B9F312968C9180931708BA01A901CF0176 -:1002B0002FDF80E090E0EECF12968C9167DF80E038 -:1002C00090E00F9108958FEF9FEFE4CF1F920F9270 -:1002D0000FB60F9211242F933F934F935F936F9319 -:1002E0007F938F939F93AF93BF93EF93FF93E0918F -:1002F000063FF091073F309719F08091000809956B -:10030000FF91EF91BF91AF919F918F917F916F91ED -:100310005F914F913F912F910F900FBE0F901F90C3 -:100320001895CF93DF931F92CDB7DEB7AC01F89449 -:100330002CE635E0209308083093090893E0909369 -:10034000070890EC9093060861157105D1F080E8DC -:10035000809305086093063F7093073F80910408DF -:1003600087FF04C0809100088983898180E480939D -:10037000010480E88093020478940F90DF91CF917C -:100380000895452B21F7EACF9091413F923041F1FA -:1003900060F49923E1F0913089F48A3529F180E005 -:1003A0008093413F81E090E00895933061F0943074 -:1003B00029F41092413F80E090E008951092413F6F -:1003C00081E090E00895833451F784E0E9CF91E033 -:1003D0008F3409F090E09093413F81E090E00895E0 -:1003E0008133E9F683E0DCCF82E0DACF9091403FC1 -:1003F000933009F44BC068F4992309F440C091305C -:1004000029F48093083F83E08093403F80E090E0B0 -:100410000895943019F19530C9F790913F3FE92F35 -:10042000F0E0E85FF04C838381E0890F80933F3FE9 -:100430009091083F891750F3E091443FF091453F78 -:100440006BE07FE38091423F9091433F099510928A -:10045000403F10923F3F80E090E008952091093F97 -:1004600030910A3FA901482BCA018093093F90931C -:100470000A3F85E08093403F80E090E0089584DF6C -:10048000892B39F781E08093403FE3CF1092093FF9 -:1004900080930A3F84E08093403F80E090E008959D -:1004A000009759F06115710541F08093423F909398 -:1004B000433F6093443F7093453F08959F92AF92AE -:1004C000BF92CF92DF92EF92FF920F931F93CF9341 -:1004D000DF93EC01942EAD84BE84CF84D888E98468 -:1004E000FA840B851C852D813E814F8158858A8138 -:1004F0009B81EBD181E493E00197F1F70000A98C97 -:10050000BA8CCB8CDC8CED88FE880F89188D2989FC -:100510003A894B895C89692D8A819B8151D281E41A -:1005200093E00197F1F7000040E0692D8A819B81FB -:10053000DF91CF911F910F91FF90EF90DF90CF90BF -:10054000BF90AF909F90FDC2CF93DF93FC0182815B -:100550009381892B09F13097F9F081819081891776 -:10056000D9F0EF018130D9F08230B1F481E493E029 -:100570000197F1F7000041E060E082819381B4D2FD -:1005800081E493E00197F1F7000040E061E08A81A7 -:100590009B81DF91CF91A8C2DF91CF91089581E433 -:1005A00093E00197F1F7000040E060E082819381E1 -:1005B0009BD281E493E00197F1F7000041E061E014 -:1005C0008A819B81DF91CF918FC20F931F93CF932D -:1005D000DF93FC0122813381232BA9F0009799F04E -:1005E000EC018181813009F45BC090F0823059F4D4 -:1005F000CE01AADF8981888363E080E079DD892BE1 -:1006000011F481E08983DF91CF911F910F910895BB -:1006100018828E010C5F1F4F49E1B80180E090E025 -:1006200046DD81E493E00197F1F7000060E08A8104 -:100630009B81DDD2E1E4F3E03197F1F7000040E087 -:1006400060E0CE013BDF81E493E00197F1F7000029 -:1006500049E1B80180E290E02ADDE1E4F3E031977E -:10066000F1F7000041E061E0CE0128DF42E061E007 -:10067000CE0124DF40E062E08A819B8162D281E486 -:1006800093E00197F1F7000040E062E08A819B81EE -:100690002BD281E08983DF91CF911F910F91089533 -:1006A000CE0152DF8981888363E080E021DD0197FC -:1006B00009F0A9CF82E08983A6CFCF93DF93EC0125 -:1006C0008C81882369F0813039F449E1BE016C5F87 -:1006D0007F4F80E290E0CADC1982DF91CF910895CC -:1006E00049E1BE016C5F7F4F80E090E0BFDC198282 -:1006F000DF91CF910895DC01149629E1FB0101906F -:100700000D922A95E1F7D9DF80E090E008950F93EC -:100710001F93CF93DF936115710511F1009701F1DC -:10072000EC01198218826A837B836BE773E0B8DE81 -:1007300066EF71E0CE01F5DD8E010C5F1F4F49E1E0 -:10074000B80180E090E0B3DCF8019E01235E3F4FEA -:1007500003C0E217F30749F0919191509E3FC8F70B -:10076000DF91CF911F910F9108951C8283E49DE04A -:10077000A0E0B0E08D839E83AF83B88786EF9CE2D4 -:10078000A0E0B0E089879A87AB87BC878BE598E4C7 -:10079000A0E1B0E08D879E87AF87B88B82E190E0C3 -:1007A000A0E0B0E0898B9A8BAB8BBC8B1D8A1E8A34 -:1007B0001F8A188E81E090E0A0E0B0E0898F9A8FC8 -:1007C000AB8FBC8F49E1B80180E090E04FDC81E461 -:1007D00093E00197F1F7000049E1B80180E290E071 -:1007E000DF91CF911F910F9141CCCF93DF93CDB784 -:1007F000DEB7CB55D109CDBFDEBF80E090E006DD8E -:1008000040E660E070E0CE01875A9F4F19DD4FE36C -:1008100051E0BE01675A7F4FCE0101960DD2BE0155 -:100820006F5F7F4F86E49FE372DF86E49FE3CDDE58 -:100830002AE684E091E0215080409040E1F700C03A -:10084000F4CF4F925F926F927F929F92AF92BF923E -:10085000CF92DF92EF92FF920F931F93CF93DF938C -:10086000EC016B01942E590127013801C701019653 -:1008700079D2F82E192FDC019D92CD01A201B5018C -:1008800092D3A30192012F5F3F4F4F4F5F4FD6018D -:10089000ED91FC9101E06F2D712F8881998109956F -:1008A0008F2D912FF7D280E090E0DF91CF911F91B3 -:1008B0000F91FF90EF90DF90CF90BF90AF909F90FF -:1008C0007F906F905F904F900895AF92BF92CF92BC -:1008D000DF92EF92FF920F931F93CF93DF93EC0180 -:1008E000662309F448C0613009F16C0182E0C80E4A -:1008F000D11C9E01295A3F4FF90180818062806896 -:100900008083E12CF12C8701E39441EBB601CE0109 -:1009100098DF80E090E0DF91CF911F910F91FF90E1 -:10092000EF90DF90CF90BF90AF90089542708E8D82 -:100930008C7F482B4E8F3F8F28A3D801C701882773 -:100940009927AF70BB27FAA2EBA28A2F8F7089A3D9 -:10095000BC8EAD8E6E01F2E0CF0ED11C18E0E12E00 -:10096000F12C00E010E09E01245E3F4F42E2B60110 -:10097000CE0167DFBECF42708E898C7F482B4E8BB5 -:100980003F8B288FD801C70188279927AF70BB27D5 -:10099000FA8EEB8E8A2F8F70898FBC8AAD8A6E019A -:1009A000E2E0CE0ED11C18E0E12EF12C00E010E0C8 -:1009B0009E012C5E3F4F4AE1B601CE0142DF99CF46 -:1009C000AF92BF92CF92DF92EF92FF920F931F935D -:1009D000FC01613009F45FC0A8F1623041F5437059 -:1009E00056A9507837AB20AFF2AEE3AED601C501C1 -:1009F0002CE0B695A795979587952A95D1F78370A2 -:100A00008295807F0370082B01AFB4AAA5AA452B5D -:100A100046AB9F012C5C3F4FBF016E5F7F4F18E0DC -:100A2000E12EF12C00E010E04AE3CF010ADF80E084 -:100A300090E01F910F91FF90EF90DF90CF90BF90CB -:100A4000AF900895437056A1507837A320A7F2A61F -:100A5000E3A6D601C5011CE0B695A79597958795A5 -:100A60001A95D1F783708295807F0370802B81A7C0 -:100A7000B4A2A5A2452B46A39F012C5D3F4FBF0109 -:100A80006E5F7F4F18E0E12EF12C00E010E04AE2AB -:100A9000CF01D7DECCCF437056A5507837A720AB17 -:100AA000F2AAE3AAD601C5016CE0B695A795979581 -:100AB00087956A95D1F783708295807F0370802B2C -:100AC00081ABB4A6A5A6452B46A79F01245D3F4F49 -:100AD000BF016E5F7F4F18E0E12EF12C00E010E0C7 -:100AE00042E3CF01AEDEA3CFEF92FF920F931F93AD -:100AF000613009F1D0F0623029F4FC01278140FB1C -:100B000022F927839C01295F3F4FBC016E5F7F4F15 -:100B1000E12CF12C8701E39443E093DE80E090E048 -:100B20001F910F91FF90EF900895FC01278140FBEA -:100B300020F92783E7CFFC01278140FB21F9278398 -:100B4000E1CFEF92FF920F931F936130B9F1E0F084 -:100B5000623099F4FC01248540FB27F92379236650 -:100B600024879C01245F3F4FBC016E5F7F4FE12CC7 -:100B7000F12C8701E39442E164DE80E090E01F9174 -:100B80000F91FF90EF900895FC01228540FB27F91B -:100B900020792F6422879C01265F3F4FBC016E5F46 -:100BA0007F4FE12CF12C8701E39440E14ADE80E0A5 -:100BB00090E01F910F91FF90EF900895FC01238525 -:100BC00040FB27F92F6623879C01255F3F4FBC011F -:100BD0006E5F7F4FE12CF12C8701E39441E131DE20 -:100BE00080E090E01F910F91FF90EF900895EF92B9 -:100BF000FF920F931F936623C9F0613021F4FC012B -:100C00002185246021879C01275F3F4FBC016E5FD7 -:100C10007F4FE12CF12C8701E39440EF12DE80E05E -:100C200090E01F910F91FF90EF900895FC012185B6 -:100C30002B7F277F2187E7CFAF92BF92CF92DF92A2 -:100C4000EF92FF920F931F93CF93DF931F92CDB735 -:100C5000DEB7009709F483C06115710509F47FC000 -:100C60004115510509F47BC06C01DC016D937C9347 -:100C7000119712964D935C931397FC01349684E57B -:100C8000DF011D928A95E9F78FEF89835601B2E063 -:100C9000AB0EB11CE12CF12C8701E3949E012F5F78 -:100CA0003F4F43E0B501C601CCDD80E889839E015A -:100CB0002F5F3F4F40E1B501C601C3DD9E012F5FAD -:100CC0003F4F41E1B501C601BCDD9E012F5F3F4FA3 -:100CD00042E1B501C601B5DD9E012F5F3F4F43E103 -:100CE000B501C601AEDD9E012F5F3F4F44E1B50166 -:100CF000C601A7DD9E012F5F3F4F45E1B501C6014B -:100D0000A0DD9E012F5F3F4F46E1B501C60199DD91 -:100D10009E012F5F3F4F47E1B501C60192DD80EC98 -:100D200089839E012F5F3F4F47EBB501C60189DDE7 -:100D300080E489839E012F5F3F4F4BEBB501C601D5 -:100D400080DD80E090E00F90DF91CF911F910F91B7 -:100D5000FF90EF90DF90CF90BF90AF9008958FEF0E -:100D60009FEFF1CF0F931F93CF93DF9382309105C5 -:100D700010F482E090E0E091653FF091663F20E062 -:100D800030E0A0E0B0E0309719F14081518102815C -:100D9000138148175907C8F08417950769F410970D -:100DA00031F012960C93129713961C9327C0009360 -:100DB000653F1093663F22C02115310519F0421797 -:100DC000530718F49A01BD01EF01DF01F801DBCFF1 -:100DD00021153105F9F0281B390B2430310580F439 -:100DE0008A819B816115710521F0FB0182839383C8 -:100DF00004C08093653F9093663FFE01329644C0E5 -:100E0000FE01E20FF31F8193919322503109288351 -:100E100039833AC02091633F3091643F232B41F4E2 -:100E20002091023F3091033F2093633F3093643F12 -:100E30002091003F3091013F2115310541F42DB73C -:100E40003EB74091043F5091053F241B350BE09184 -:100E5000633FF091643FE217F307A0F42E1B3F0BB2 -:100E60002817390778F0AC014E5F5F4F241735071C -:100E700048F04E0F5F1F4093633F5093643F819350 -:100E8000919302C0E0E0F0E0CF01DF91CF911F919C -:100E90000F910895CF93DF93009709F481C0FC016F -:100EA000329712821382A091653FB091663F1097EE -:100EB00081F420813181820F931F2091633F309113 -:100EC000643F2817390751F5E093633FF093643F7F -:100ED00067C0ED0120E030E0CE17DF0740F44A8123 -:100EE0005B819E0141155105F1F0EA01F5CFC28306 -:100EF000D38340815181840F951FC817D90759F4B6 -:100F000088819981840F951F0296808391838A81BD -:100F10009B81828393832115310529F4E093653FFA -:100F2000F093663F3DC0E901EA83FB834991599103 -:100F3000C40FD51FEC17FD0761F480819181840FE8 -:100F4000951F0296E90188839983828193818A8320 -:100F50009B83E0E0F0E012968D919C9113970097AF -:100F600019F0FD01DC01F7CF8D919C9111979D0146 -:100F70002E5F3F4F820F931F2091633F3091643F5C -:100F80002817390769F4309729F41092653F1092B9 -:100F9000663F02C012821382A093633FB093643F06 -:100FA000DF91CF910895FB01DC0102C001900D9209 -:100FB00041505040D8F7089503D080819927089573 -:100FC000FC01E050FC4E0895262FAF93BF93E0E064 -:100FD000F0E1328131FDFDCFDC01A050BC4E2C93FD -:100FE0002DE924BF23E020830196BF91AF9108959E -:040FF000F894FFCFA3 -:060FF4000000673F200031 +:100040002FE3A6E0BFE301C01D92AB36B207E1F794 +:100050001FE3A0E0BFE3E4ECFFE002C005900D92D7 +:10006000A630B107D9F7DBD3ABC7CACFEF92FF9267 +:100070000F931F93CF93DF93EB018C017B01E40E71 +:10008000F11CCE15DF0531F06991C80185D70F5FEE +:100090001F4FF7CFDF91CF911F910F91FF90EF90FE +:1000A0000895EF92FF920F931F93CF93DF938C01EC +:1000B000EB017B01E40EF11CCE15DF0531F0C80128 +:1000C00063D789930F5F1F4FF7CFDF91CF911F91B8 +:1000D0000F91FF90EF90089581110BC0809108045B +:1000E00090E002C0959587956A95E2F7817099270F +:1000F000089580E090E00895809317088091150896 +:10010000807CE1F390911508892F807194FF04C0E1 +:1001100083E08093140881E00895CF92DF92EF92FC +:10012000FF92CF93DF93D62FC72F69017A01232B3C +:10013000242B252B19F48FEF9FEF32C0DDDF8111C7 +:10014000FACFED2FFC2F819180931808809115082C +:1001500086FFFCCF8091150884FF04C083E0809364 +:1001600014080CC0809115088C7059F08091140807 +:1001700088608093140881E08093150881E090E006 +:100180000FC08091150884FD06C081E0C81AD1080F +:10019000E108F108C1F683E08093140880E090E064 +:1001A000DF91CF91FF90EF90DF90CF900895CF92A5 +:1001B000DF92EF92FF92CF93DF93D62FC72F690183 +:1001C0007A01232B242B252B61F1816095DF81118E +:1001D0002BC0ED2FFC2F92E024E0B701A601415087 +:1001E000510961097109CD28CE28CF28A1F080914D +:1001F0001508807CE1F38091180881934115510521 +:100200006105710519F42093140802C09093140835 +:100210006A017B01E2CF83E08093140880E090E0E4 +:1002200005C081E090E002C08FEF9FEFDF91CF919A +:10023000FF90EF90DF90CF90089580931708809102 +:10024000150886FFFCCF8091150884FF06C083E067 +:100250008093140881E090E0089583E0809314086F +:1002600080E090E00895E0E0F4E080818B7F80837F +:100270008081877F8083A0E1B8E08BE016968C9325 +:10028000169781E013968C93139715968C9388E0BC +:10029000828B838B80E090E00895EF92FF920F9322 +:1002A0001F93CF938C017B01C42F842F880FC5DF50 +:1002B000009749F4F801E082F1824C2F50E0440F9E +:1002C000551F428302C08EEF9FEFCF911F910F9178 +:1002D000FF90EF9008950F93009759F0FC010023D1 +:1002E00029F0013049F4828118DF06C082815FDF86 +:1002F00003C08FEF9FEF02C080E090E00F91089560 +:100300001F920F920FB60F9211242F933F934F938A +:100310005F936F937F938F939F93AF93BF93EF936D +:10032000FF93E091063FF091073F309719F08091DD +:1003300000080995FF91EF91BF91AF919F918F9127 +:100340007F916F915F914F913F912F910F900FBED1 +:100350000F901F901895CF93DF931F92CDB7DEB704 +:10036000F8942CE635E0209308083093090823E040 +:100370002093070820EC209306086115710511F4FD +:10038000892B39F080E8809305086093063F7093CD +:10039000073F8091040887FF04C08091000889838B +:1003A000898180E48093010480E88093020478943A +:1003B0000F90DF91CF9108959091413F9230D1F00D +:1003C00028F4992361F0913089F020C09330B1F086 +:1003D0009430E1F41092413F80E090E0089591E084 +:1003E0008F3409F090E09093413F12C08A3541F478 +:1003F00082E009C0813321F483E005C0833411F029 +:1004000080E001C084E08093413F02C01092413FF0 +:1004100081E090E008959091403F9330B1F048F42E +:10042000992361F0913009F043C08093083F83E045 +:100430001EC0943081F09530E9F03AC0BDDF892BC1 +:10044000A9F581E08093403F31C01092093F80932D +:100450000A3F84E00CC02091093F30910A3FA90176 +:10046000482BCA018093093F90930A3F85E080930F +:10047000403F1EC090913F3FE92FF0E0E85FF04C15 +:10048000838381E0890F80933F3F9091083F8917D4 +:1004900078F0E091443FF091453F6BE07FE380913D +:1004A000423F9091433F09951092403F10923F3F49 +:1004B00080E090E00895009759F06115710541F0D2 +:1004C0008093423F9093433F6093443F7093453FF6 +:1004D00008959F92AF92BF92CF92DF92EF92FF92D8 +:1004E0000F931F93CF93DF93EC01942EAD84BE84C2 +:1004F000CF84D888E984FA840B851C852D813E81C0 +:100500004F8158858A819B8113D381E493E00197C1 +:10051000F1F70000A98CBA8CCB8CDC8CED88FE88BE +:100520000F89188D29893A894B895C89692D8A81BF +:100530009B81DDD181E493E00197F1F7000040E079 +:10054000692D8A819B81DF91CF911F910F91FF903F +:10055000EF90DF90CF90BF90AF909F9070C2CF93FD +:10056000DF93FC0182819381892B91F1309781F196 +:1005700081819081891761F1EF01813099F082309A +:1005800039F581E493E00197F1F7000041E060E084 +:100590008281938131D281E493E00197F1F70000E9 +:1005A00040E010C081E493E00197F1F7000040E0E3 +:1005B00060E08281938120D281E493E00197F1F79A +:1005C000000041E061E08A819B81DF91CF9114C2FC +:1005D000DF91CF9108950F931F93CF93DF93FC0189 +:1005E00022813381232B09F465C0009709F462C08E +:1005F000EC018181813061F4CE01B1DF8981888392 +:1006000063E080E069DD019709F054C082E045C0F5 +:10061000813008F044C018828E010C5F1F4F4DE1FD +:10062000B80180E090E03DDD81E493E00197F1F7CF +:10063000000060E08A819B813DD2E1E4F3E03197E4 +:10064000F1F7000040E060E0CE0143DF81E493E099 +:100650000197F1F700004DE1B80180E290E021DD63 +:10066000E1E4F3E03197F1F7000041E061E0CE0111 +:1006700030DF42E061E0CE012CDF40E062E08A81C1 +:100680009B81DDD181E493E00197F1F7000040E028 +:1006900062E08A819B81B0D181E089830BC0823086 +:1006A00049F4CE015CDF8981888363E080E014DD5A +:1006B000892B91F3DF91CF911F910F910895CF93E3 +:1006C000DF93EC018C81813099F058F08E3FC1F0BE +:1006D0008F3FE9F44DE1BE016C5F7F4F80E290E017 +:1006E00015C04DE1BE016C5F7F4F80E090E006C019 +:1006F0004DE1BE016C5F7F4F80E290E0B7DC07C048 +:100700004DE1BE016C5F7F4F80E090E0CADC198252 +:10071000DF91CF910895DC0114962DE1FB0101904A +:100720000D922A95E1F7CBDF80E090E008950F93DA +:100730001F93CF93DF936115710509F46BC0009788 +:1007400009F468C0EC01198218826A837B836BE824 +:1007500073E0B1DE6BE072E0CE01FDDD8E010C5F77 +:100760001F4F4DE1B80180E090E09BDCF8019E0155 +:100770002F5D3F4F819181508E3F08F44BC0E217AF +:10078000F307C1F71C8283E49DE0A0E0B0E08D8315 +:100790009E83AF83B88786EF9CE2A0E0B0E08987B4 +:1007A0009A87AB87BC878BE598E4A0E1B0E08D87A2 +:1007B0009E87AF87B88B82E190E0A0E0B0E0898BA4 +:1007C0009A8BAB8BBC8B1D8A1E8A1F8A188E81E088 +:1007D00090E0A0E0B0E0898F9A8FAB8FBC8F80E46F +:1007E00098E7ADE7B1E08D8F9E8FAF8FB8A34DE155 +:1007F000B80180E090E03ADC81E493E00197F1F702 +:1008000000004DE1B80180E290E0DF91CF911F91AF +:100810000F912CCCDF91CF911F910F910895CF9321 +:10082000DF93CDB7DEB7CB55D109CDBFDEBF80E0BA +:1008300090E019DD40E660E070E0CE01875A9F4FFE +:100840002CDD4BE651E0BE01675A7F4FCE01019689 +:10085000CAD1BE016F5F7F4F86E49FE368DF86E405 +:100860009FE3B9DE2AE684E091E021508040904089 +:10087000E1F700C0F4CF8F929F92AF92BF92CF92D8 +:10088000DF92EF92FF920F931F93CF93DF93EC01D0 +:10089000862E5A0168017901C80101964BD2982E23 +:1008A000192FFC018192CF01A601B50164D3A701E4 +:1008B00096012F5F3F4F4F4F5F4FEA81FB8101E071 +:1008C000692D712F888199810995892D912FCAD21F +:1008D00080E090E0DF91CF911F910F91FF90EF901A +:1008E000DF90CF90BF90AF909F908F900895AF9280 +:1008F000BF92CF92DF92EF92FF920F931F93FC0172 +:10090000613009F44AC030F1623009F06AC04370C6 +:1009100056A9507837AB20AFF2AEE3AED601C50191 +:100920002CE0B695A795979587952A95D1F7837072 +:100930008295807F0370802B81AFB4AAA5AA452B36 +:1009400046ABAF014C5C5F4F08E010E020E030E0C8 +:100950006AE345C0437056A1507837A320A7F2A69A +:10096000E3A6D601C5016CE0B695A7959795879546 +:100970006A95D1F783708295807F0370802B81A761 +:10098000B4A2A5A2452B46A3AF014C5D5F4F08E082 +:1009900010E020E030E06AE222C0437056A55078B3 +:1009A00037A720ABF2AAE3AAD601C5013CE0B69571 +:1009B000A795979587953A95D1F783708295807F13 +:1009C0000370802B81ABB4A6A5A6452B46A7AF012B +:1009D000445D5F4F08E010E020E030E062E3CF01CB +:1009E0004ADF80E090E01F910F91FF90EF90DF9041 +:1009F000CF90BF90AF9008950F931F93FC0161308B +:100A000059F030F0623061F4878140FB82F907C011 +:100A1000878140FB80F903C0878140FB81F9878390 +:100A2000AF01495F5F4F01E010E020E030E063E09C +:100A3000CF0121DF80E090E01F910F9108950F9387 +:100A40001F93613019F190F0623079F5FC01248533 +:100A500040FB27F9237923662487AC01445F5F4F6D +:100A600001E010E020E030E062E11EC0FC012285E0 +:100A700040FB27F920792F642287AC01465F5F4F46 +:100A800001E010E020E030E060E10EC0FC012385D1 +:100A900040FB27F92F662387AC01455F5F4F01E0DC +:100AA00010E020E030E061E1E6DE80E090E01F91C0 +:100AB0000F9108950F931F93662331F0613049F42D +:100AC000FC012185246004C0FC0121852B7F277F48 +:100AD0002187AC01475F5F4F01E010E020E030E08C +:100AE00060EFC9DE80E090E01F910F9108950F93B1 +:100AF0001F9331E0611101C030E0FC01E95AFF4F62 +:100B0000208130FB25F9208331E0411101C030E024 +:100B1000208130FB27F9208301E010E020E030E065 +:100B2000AF0161EBA8DE80E090E01F910F91089586 +:100B3000AF92BF92CF92DF92EF92FF920F931F93EB +:100B4000CF93DF93EC016623F9F06130D9F5427061 +:100B50008E8D8C7F482B4E8F3F8F28A3D801C701E5 +:100B600088279927AF70BB27FAA2EBA28A2F8F7034 +:100B700089A3BC8EAD8E08E010E020E030E0AE012D +:100B8000445E5F4F62E21CC042708E898C7F482BAE +:100B90004E8B3F8B288FD801C70188279927AF70CC +:100BA000BB27FA8EEB8E8A2F8F70898FBC8AAD8A15 +:100BB00008E010E020E030E0AE014C5E5F4F6AE1FB +:100BC000CE0159DE41E061E0CE0191DF80E090E0AE +:100BD000DF91CF911F910F91FF90EF90DF90CF9019 +:100BE000BF90AF900895EF92FF920F931F93CF9312 +:100BF000DF931F92CDB7DEB7009709F491C061155E +:100C0000710509F48DC04115510509F489C07C01B5 +:100C1000DC016D937C93119712964D935C9313971F +:100C2000FC01349684E5DF011D928A95E9F78FEF88 +:100C3000898301E010E020E030E0AE014F5F5F4FBC +:100C400063E0C70118DE80E8898301E010E020E05E +:100C500030E0AE014F5F5F4F60E1C7010CDE01E0A5 +:100C600010E020E030E0AE014F5F5F4F61E1C7016F +:100C700002DE01E010E020E030E0AE014F5F5F4FA8 +:100C800062E1C701F8DD01E010E020E030E0AE01F4 +:100C90004F5F5F4F63E1C701EEDD01E010E020E050 +:100CA00030E0AE014F5F5F4F64E1C701E4DD01E07A +:100CB00010E020E030E0AE014F5F5F4F65E1C7011B +:100CC000DADD01E010E020E030E0AE014F5F5F4F81 +:100CD00066E1C701D0DD01E010E020E030E0AE01C8 +:100CE0004F5F5F4F67E1C701C6DD80EC898301E09C +:100CF00010E020E030E0AE014F5F5F4F67EBC701CF +:100D0000BADD80E4898301E010E020E030E0AE014C +:100D10004F5F5F4F6BEBC701AEDD80E090E002C03C +:100D20008FEF9FEF0F90DF91CF911F910F91FF9069 +:100D3000EF9008950F931F93CF93DF938230910527 +:100D400010F482E090E0E091693FF0916A3F20E08A +:100D500030E0A0E0B0E0309719F14081518102818C +:100D6000138148175907C8F08417950769F410973D +:100D700031F012960C93129713961C9327C0009390 +:100D8000693F10936A3F22C02115310519F04217BF +:100D9000530718F49A01BD01EF01DF01F801DBCF21 +:100DA00021153105F9F0281B390B2430310580F469 +:100DB0008A819B816115710521F0FB0182839383F8 +:100DC00004C08093693F90936A3FFE01329644C00D +:100DD000FE01E20FF31F8193919322503109288382 +:100DE00039833AC02091673F3091683F232B41F40B +:100DF0002091023F3091033F2093673F3093683F3B +:100E00002091003F3091013F2115310541F42DB76C +:100E10003EB74091043F5091053F241B350BE091B4 +:100E2000673FF091683FE217F307A0F42E1B3F0BDA +:100E30002817390778F0AC014E5F5F4F241735074C +:100E400048F04E0F5F1F4093673F5093683F819378 +:100E5000919302C0E0E0F0E0CF01DF91CF911F91CC +:100E60000F910895CF93DF93009709F481C0FC019F +:100E7000329712821382A091693FB0916A3F109716 +:100E800081F420813181820F931F2091673F30913F +:100E9000683F2817390751F5E093673FF093683FA3 +:100EA00067C0ED0120E030E0CE17DF0740F44A8153 +:100EB0005B819E0141155105F1F0EA01F5CFC28336 +:100EC000D38340815181840F951FC817D90759F4E6 +:100ED00088819981840F951F0296808391838A81EE +:100EE0009B81828393832115310529F4E093693F27 +:100EF000F0936A3F3DC0E901EA83FB834991599130 +:100F0000C40FD51FEC17FD0761F480819181840F18 +:100F1000951F0296E90188839983828193818A8350 +:100F20009B83E0E0F0E012968D919C9113970097DF +:100F300019F0FD01DC01F7CF8D919C9111979D0176 +:100F40002E5F3F4F820F931F2091673F3091683F84 +:100F50002817390769F4309729F41092693F1092E5 +:100F60006A3F02C012821382A093673FB093683F2A +:100F7000DF91CF910895FB01DC0102C001900D9239 +:100F800041505040D8F7089503D0808199270895A3 +:100F9000FC01E050FC4E0895262FAF93BF93E0E094 +:100FA000F0E1328131FDFDCFDC01A050BC4E2C932D +:100FB0002DE924BF23E020830196BF91AF910895CE +:040FC000F894FFCFD3 +:060FC40000006B3F20005D :00000001FF diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss index afc99e3..d917ac6 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss @@ -3,31 +3,31 @@ storno_cqp6xx_digital_xtal.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000006 00803f00 00000ff4 00001088 2**0 + 0 .data 00000006 00803f00 00000fc4 00001058 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 00000ff4 00000000 00000000 00000094 2**1 + 1 .text 00000fc4 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000061 00803f06 00803f06 0000108e 2**0 + 2 .bss 00000065 00803f06 00803f06 0000105e 2**0 ALLOC - 3 .comment 00000030 00000000 00000000 0000108e 2**0 + 3 .comment 00000030 00000000 00000000 0000105e 2**0 CONTENTS, READONLY - 4 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 000010c0 2**2 + 4 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 00001090 2**2 CONTENTS, READONLY - 5 .debug_aranges 00000248 00000000 00000000 00001100 2**3 + 5 .debug_aranges 00000240 00000000 00000000 000010d0 2**3 CONTENTS, READONLY, DEBUGGING - 6 .debug_info 00005ba3 00000000 00000000 00001348 2**0 + 6 .debug_info 00005484 00000000 00000000 00001310 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_abbrev 00001f08 00000000 00000000 00006eeb 2**0 + 7 .debug_abbrev 00001ebe 00000000 00000000 00006794 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_line 00001984 00000000 00000000 00008df3 2**0 + 8 .debug_line 00001876 00000000 00000000 00008652 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_frame 0000061c 00000000 00000000 0000a778 2**2 + 9 .debug_frame 00000630 00000000 00000000 00009ec8 2**2 CONTENTS, READONLY, DEBUGGING - 10 .debug_str 000022c6 00000000 00000000 0000ad94 2**0 + 10 .debug_str 000022f5 00000000 00000000 0000a4f8 2**0 CONTENTS, READONLY, DEBUGGING - 11 .debug_loc 00002855 00000000 00000000 0000d05a 2**0 + 11 .debug_loc 000023e8 00000000 00000000 0000c7ed 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_ranges 00000230 00000000 00000000 0000f8af 2**0 + 12 .debug_ranges 000001c8 00000000 00000000 0000ebd5 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -55,7 +55,7 @@ Disassembly of section .text: 26: 21 c0 rjmp .+66 ; 0x6a <__bad_interrupt> 28: 20 c0 rjmp .+64 ; 0x6a <__bad_interrupt> 2a: 1f c0 rjmp .+62 ; 0x6a <__bad_interrupt> - 2c: 4f c1 rjmp .+670 ; 0x2cc <__vector_22> + 2c: 69 c1 rjmp .+722 ; 0x300 <__vector_22> 2e: 1d c0 rjmp .+58 ; 0x6a <__bad_interrupt> 30: 1c c0 rjmp .+56 ; 0x6a <__bad_interrupt> 32: 1b c0 rjmp .+54 ; 0x6a <__bad_interrupt> @@ -78,7 +78,7 @@ Disassembly of section .text: 48: 1d 92 st X+, r1 0000004a <.do_clear_bss_start>: - 4a: a7 36 cpi r26, 0x67 ; 103 + 4a: ab 36 cpi r26, 0x6B ; 107 4c: b2 07 cpc r27, r18 4e: e1 f7 brne .-8 ; 0x48 <.do_clear_bss_loop> @@ -86,7 +86,7 @@ Disassembly of section .text: 50: 1f e3 ldi r17, 0x3F ; 63 52: a0 e0 ldi r26, 0x00 ; 0 54: bf e3 ldi r27, 0x3F ; 63 - 56: e4 ef ldi r30, 0xF4 ; 244 + 56: e4 ec ldi r30, 0xC4 ; 196 58: ff e0 ldi r31, 0x0F ; 15 5a: 02 c0 rjmp .+4 ; 0x60 <__do_copy_data+0x10> 5c: 05 90 lpm r0, Z+ @@ -94,8 +94,8 @@ Disassembly of section .text: 60: a6 30 cpi r26, 0x06 ; 6 62: b1 07 cpc r27, r17 64: d9 f7 brne .-10 ; 0x5c <__do_copy_data+0xc> - 66: c1 d3 rcall .+1922 ; 0x7ea

- 68: c3 c7 rjmp .+3974 ; 0xff0 <_exit> + 66: db d3 rcall .+1974 ; 0x81e
+ 68: ab c7 rjmp .+3926 ; 0xfc0 <_exit> 0000006a <__bad_interrupt>: 6a: ca cf rjmp .-108 ; 0x0 <__vectors> @@ -113,2746 +113,2733 @@ void cm_EEPROM_write(uint8_t *address, uint8_t *data, uint8_t length) { 72: 1f 93 push r17 74: cf 93 push r28 76: df 93 push r29 + 78: eb 01 movw r28, r22 + 7a: 8c 01 movw r16, r24 + 7c: 7b 01 movw r14, r22 + 7e: e4 0e add r14, r20 + 80: f1 1c adc r15, r1 for (uint8_t i = 0; i < length; i++) { - 78: 44 23 and r20, r20 - 7a: 91 f0 breq .+36 ; 0xa0 <__EEPROM_REGION_LENGTH__+0x20> - 7c: eb 01 movw r28, r22 - 7e: 8c 01 movw r16, r24 - 80: 41 50 subi r20, 0x01 ; 1 - 82: e4 2e mov r14, r20 - 84: f1 2c mov r15, r1 - 86: 8f ef ldi r24, 0xFF ; 255 - 88: e8 1a sub r14, r24 - 8a: f8 0a sbc r15, r24 - 8c: e6 0e add r14, r22 - 8e: f7 1e adc r15, r23 - - // Write data to address + i.. - eeprom_write_byte(address+i,data[i]); - 90: 69 91 ld r22, Y+ - 92: c8 01 movw r24, r16 - 94: 99 d7 rcall .+3890 ; 0xfc8 - 96: 0f 5f subi r16, 0xFF ; 255 - 98: 1f 4f sbci r17, 0xFF ; 255 -#include - -void cm_EEPROM_write(uint8_t *address, uint8_t *data, uint8_t length) { - - - for (uint8_t i = 0; i < length; i++) { - 9a: ce 15 cp r28, r14 - 9c: df 05 cpc r29, r15 - 9e: c1 f7 brne .-16 ; 0x90 <__EEPROM_REGION_LENGTH__+0x10> + 82: ce 15 cp r28, r14 + 84: df 05 cpc r29, r15 + 86: 31 f0 breq .+12 ; 0x94 <__EEPROM_REGION_LENGTH__+0x14> // Write data to address + i.. eeprom_write_byte(address+i,data[i]); + 88: 69 91 ld r22, Y+ + 8a: c8 01 movw r24, r16 + 8c: 85 d7 rcall .+3850 ; 0xf98 + 8e: 0f 5f subi r16, 0xFF ; 255 + 90: 1f 4f sbci r17, 0xFF ; 255 + 92: f7 cf rjmp .-18 ; 0x82 <__EEPROM_REGION_LENGTH__+0x2> } } - a0: df 91 pop r29 - a2: cf 91 pop r28 - a4: 1f 91 pop r17 - a6: 0f 91 pop r16 - a8: ff 90 pop r15 - aa: ef 90 pop r14 - ac: 08 95 ret + 94: df 91 pop r29 + 96: cf 91 pop r28 + 98: 1f 91 pop r17 + 9a: 0f 91 pop r16 + 9c: ff 90 pop r15 + 9e: ef 90 pop r14 + a0: 08 95 ret -000000ae : +000000a2 : void cm_EEPROM_read(uint8_t* address, uint8_t *data, uint8_t length) { - ae: ef 92 push r14 - b0: ff 92 push r15 - b2: 0f 93 push r16 - b4: 1f 93 push r17 - b6: cf 93 push r28 - b8: df 93 push r29 + a2: ef 92 push r14 + a4: ff 92 push r15 + a6: 0f 93 push r16 + a8: 1f 93 push r17 + aa: cf 93 push r28 + ac: df 93 push r29 + ae: 8c 01 movw r16, r24 + b0: eb 01 movw r28, r22 + b2: 7b 01 movw r14, r22 + b4: e4 0e add r14, r20 + b6: f1 1c adc r15, r1 for (uint8_t i = 0; i < length; i++) { - ba: 44 23 and r20, r20 - bc: 91 f0 breq .+36 ; 0xe2 - be: 8c 01 movw r16, r24 - c0: eb 01 movw r28, r22 - c2: 41 50 subi r20, 0x01 ; 1 - c4: e4 2e mov r14, r20 - c6: f1 2c mov r15, r1 - c8: 8f ef ldi r24, 0xFF ; 255 - ca: e8 1a sub r14, r24 - cc: f8 0a sbc r15, r24 - ce: e6 0e add r14, r22 - d0: f7 1e adc r15, r23 - data[i] = eeprom_read_byte(address+i); - d2: c8 01 movw r24, r16 - d4: 71 d7 rcall .+3810 ; 0xfb8 - d6: 89 93 st Y+, r24 - d8: 0f 5f subi r16, 0xFF ; 255 - da: 1f 4f sbci r17, 0xFF ; 255 - - -void cm_EEPROM_read(uint8_t* address, uint8_t *data, uint8_t length) { - - - for (uint8_t i = 0; i < length; i++) { - dc: ce 15 cp r28, r14 - de: df 05 cpc r29, r15 - e0: c1 f7 brne .-16 ; 0xd2 + b8: ce 15 cp r28, r14 + ba: df 05 cpc r29, r15 + bc: 31 f0 breq .+12 ; 0xca data[i] = eeprom_read_byte(address+i); + be: c8 01 movw r24, r16 + c0: 63 d7 rcall .+3782 ; 0xf88 + c2: 89 93 st Y+, r24 + c4: 0f 5f subi r16, 0xFF ; 255 + c6: 1f 4f sbci r17, 0xFF ; 255 + c8: f7 cf rjmp .-18 ; 0xb8 } } - e2: df 91 pop r29 - e4: cf 91 pop r28 - e6: 1f 91 pop r17 - e8: 0f 91 pop r16 - ea: ff 90 pop r15 - ec: ef 90 pop r14 - ee: 08 95 ret + ca: df 91 pop r29 + cc: cf 91 pop r28 + ce: 1f 91 pop r17 + d0: 0f 91 pop r16 + d2: ff 90 pop r15 + d4: ef 90 pop r14 + d6: 08 95 ret -000000f0 : +000000d8 : return 0; } int gpio_get_level(avr_gpio_ports port, uint8_t pin){ switch (port) - f0: 81 11 cpse r24, r1 - f2: 0b c0 rjmp .+22 ; 0x10a <__DATA_REGION_LENGTH__+0xa> + d8: 81 11 cpse r24, r1 + da: 0b c0 rjmp .+22 ; 0xf2 { case GPIO_PORTA: return (PORTA.IN & (1 << pin)) ? 1 : 0; - f4: 80 91 08 04 lds r24, 0x0408 ; 0x800408 <__RODATA_PM_OFFSET__+0x7f8408> - f8: 90 e0 ldi r25, 0x00 ; 0 - fa: 02 c0 rjmp .+4 ; 0x100 <__DATA_REGION_LENGTH__> - fc: 95 95 asr r25 - fe: 87 95 ror r24 - 100: 6a 95 dec r22 - 102: e2 f7 brpl .-8 ; 0xfc - 104: 81 70 andi r24, 0x01 ; 1 - 106: 99 27 eor r25, r25 - 108: 08 95 ret + dc: 80 91 08 04 lds r24, 0x0408 ; 0x800408 <__RODATA_PM_OFFSET__+0x7f8408> + e0: 90 e0 ldi r25, 0x00 ; 0 + e2: 02 c0 rjmp .+4 ; 0xe8 + e4: 95 95 asr r25 + e6: 87 95 ror r24 + e8: 6a 95 dec r22 + ea: e2 f7 brpl .-8 ; 0xe4 + ec: 81 70 andi r24, 0x01 ; 1 + ee: 99 27 eor r25, r25 + f0: 08 95 ret break; default: break; } return 0; - 10a: 80 e0 ldi r24, 0x00 ; 0 - 10c: 90 e0 ldi r25, 0x00 ; 0 + f2: 80 e0 ldi r24, 0x00 ; 0 + f4: 90 e0 ldi r25, 0x00 ; 0 } - 10e: 08 95 ret + f6: 08 95 ret -00000110 : - while (!(TWI0.MSTATUS & TWI_WIF_bm)); +000000f8 : + *data = TWI0.MDATA; - if (TWI0.MSTATUS & TWI_RXACK_bm) { - // NACK received - TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition - return 1; // Error: NACK received - 110: 20 91 15 08 lds r18, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 114: 20 7c andi r18, 0xC0 ; 192 - 116: e1 f3 breq .-8 ; 0x110 - 118: 20 91 15 08 lds r18, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 11c: 24 fd sbrc r18, 4 - 11e: 1f c0 rjmp .+62 ; 0x15e - 120: fc 01 movw r30, r24 - 122: 81 91 ld r24, Z+ - 124: 80 93 18 08 sts 0x0818, r24 ; 0x800818 <__RODATA_PM_OFFSET__+0x7f8818> - 128: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 12c: 86 ff sbrs r24, 6 - 12e: fc cf rjmp .-8 ; 0x128 - 130: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 134: 84 fd sbrc r24, 4 - 136: 24 c0 rjmp .+72 ; 0x180 - 138: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 13c: 8c 70 andi r24, 0x0C ; 12 - 13e: a9 f4 brne .+42 ; 0x16a - 140: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 144: 84 fd sbrc r24, 4 - 146: 05 c0 rjmp .+10 ; 0x152 - 148: 41 50 subi r20, 0x01 ; 1 - 14a: 51 09 sbc r21, r1 - 14c: 61 09 sbc r22, r1 - 14e: 71 09 sbc r23, r1 - 150: 41 f7 brne .-48 ; 0x122 - 152: 83 e0 ldi r24, 0x03 ; 3 - 154: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 158: 80 e0 ldi r24, 0x00 ; 0 - 15a: 90 e0 ldi r25, 0x00 ; 0 - 15c: 08 95 ret - 15e: 83 e0 ldi r24, 0x03 ; 3 - 160: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 164: 8f ef ldi r24, 0xFF ; 255 - 166: 9f ef ldi r25, 0xFF ; 255 - 168: 08 95 ret - 16a: 80 91 14 08 lds r24, 0x0814 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 16e: 88 60 ori r24, 0x08 ; 8 - 170: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 174: 81 e0 ldi r24, 0x01 ; 1 - 176: 80 93 15 08 sts 0x0815, r24 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 17a: 81 e0 ldi r24, 0x01 ; 1 - 17c: 90 e0 ldi r25, 0x00 ; 0 - 17e: 08 95 ret - 180: 83 e0 ldi r24, 0x03 ; 3 - 182: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 186: 81 e0 ldi r24, 0x01 ; 1 - 188: 90 e0 ldi r25, 0x00 ; 0 - 18a: 08 95 ret + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + return 0; // Success +} + f8: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> + fc: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 100: 80 7c andi r24, 0xC0 ; 192 + 102: e1 f3 breq .-8 ; 0xfc + 104: 90 91 15 08 lds r25, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 108: 89 2f mov r24, r25 + 10a: 80 71 andi r24, 0x10 ; 16 + 10c: 94 ff sbrs r25, 4 + 10e: 04 c0 rjmp .+8 ; 0x118 <__DATA_REGION_LENGTH__+0x18> + 110: 83 e0 ldi r24, 0x03 ; 3 + 112: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + 116: 81 e0 ldi r24, 0x01 ; 1 + 118: 08 95 ret -0000018c : - 18c: a6 2f mov r26, r22 - 18e: 97 2f mov r25, r23 - 190: 21 15 cp r18, r1 - 192: 31 05 cpc r19, r1 - 194: 41 05 cpc r20, r1 - 196: 51 05 cpc r21, r1 - 198: 69 f1 breq .+90 ; 0x1f4 - 19a: 81 60 ori r24, 0x01 ; 1 - 19c: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> - 1a0: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 1a4: 80 7c andi r24, 0xC0 ; 192 - 1a6: e1 f3 breq .-8 ; 0x1a0 - 1a8: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 1ac: 84 fd sbrc r24, 4 - 1ae: 1c c0 rjmp .+56 ; 0x1e8 - 1b0: ba 01 movw r22, r20 - 1b2: a9 01 movw r20, r18 - 1b4: 41 50 subi r20, 0x01 ; 1 - 1b6: 51 09 sbc r21, r1 - 1b8: 61 09 sbc r22, r1 - 1ba: 71 09 sbc r23, r1 - 1bc: ea 2f mov r30, r26 - 1be: f9 2f mov r31, r25 - 1c0: 92 e0 ldi r25, 0x02 ; 2 - 1c2: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 1c6: 80 7c andi r24, 0xC0 ; 192 - 1c8: e1 f3 breq .-8 ; 0x1c2 - 1ca: 80 91 18 08 lds r24, 0x0818 ; 0x800818 <__RODATA_PM_OFFSET__+0x7f8818> - 1ce: 81 93 st Z+, r24 - 1d0: 41 15 cp r20, r1 - 1d2: 51 05 cpc r21, r1 - 1d4: 61 05 cpc r22, r1 - 1d6: 71 05 cpc r23, r1 - 1d8: 81 f0 breq .+32 ; 0x1fa - 1da: 90 93 14 08 sts 0x0814, r25 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> +0000011a : + +int i2c_write(uint8_t dev_addr, void *data, uint32_t len){ + 11a: cf 92 push r12 + 11c: df 92 push r13 + 11e: ef 92 push r14 + 120: ff 92 push r15 + 122: cf 93 push r28 + 124: df 93 push r29 + 126: d6 2f mov r29, r22 + 128: c7 2f mov r28, r23 + 12a: 69 01 movw r12, r18 + 12c: 7a 01 movw r14, r20 + + // Check length + if(len == 0) return CM_I2C_NOK; + 12e: 23 2b or r18, r19 + 130: 24 2b or r18, r20 + 132: 25 2b or r18, r21 + 134: 19 f4 brne .+6 ; 0x13c + 136: 8f ef ldi r24, 0xFF ; 255 + 138: 9f ef ldi r25, 0xFF ; 255 + 13a: 32 c0 rjmp .+100 ; 0x1a0 + + // Make a pointer to data + uint8_t *dp = data; + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr) != CM_I2C_OK)return CM_I2C_NOK; + 13c: dd df rcall .-70 ; 0xf8 + 13e: 81 11 cpse r24, r1 + 140: fa cf rjmp .-12 ; 0x136 + 142: ed 2f mov r30, r29 + 144: fc 2f mov r31, r28 + + do + { + // Prepare and send new data. + TWI0.MDATA = *dp++; + 146: 81 91 ld r24, Z+ + 148: 80 93 18 08 sts 0x0818, r24 ; 0x800818 <__RODATA_PM_OFFSET__+0x7f8818> + + while (!(TWI0.MSTATUS & TWI_WIF_bm)); + 14c: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 150: 86 ff sbrs r24, 6 + 152: fc cf rjmp .-8 ; 0x14c + + if (TWI0.MSTATUS & TWI_RXACK_bm) { + 154: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 158: 84 ff sbrs r24, 4 + 15a: 04 c0 rjmp .+8 ; 0x164 + // NACK received + TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition + 15c: 83 e0 ldi r24, 0x03 ; 3 + 15e: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + 162: 0c c0 rjmp .+24 ; 0x17c + return 1; // Error: NACK received + } + + // Check for bus error and reset if it happens.. + if (TWI0.MSTATUS & (TWI_ARBLOST_bm | TWI_BUSERR_bm)) { + 164: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 168: 8c 70 andi r24, 0x0C ; 12 + 16a: 59 f0 breq .+22 ; 0x182 + return 0; +} + +static void i2c_reset() +{ + TWI0.MCTRLB |= TWI_FLUSH_bm; + 16c: 80 91 14 08 lds r24, 0x0814 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + 170: 88 60 ori r24, 0x08 ; 8 + 172: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + TWI0.MSTATUS = TWI_BUSSTATE_IDLE_gc; + 176: 81 e0 ldi r24, 0x01 ; 1 + 178: 80 93 15 08 sts 0x0815, r24 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + } + + // Check for bus error and reset if it happens.. + if (TWI0.MSTATUS & (TWI_ARBLOST_bm | TWI_BUSERR_bm)) { + i2c_reset(); + return 1; + 17c: 81 e0 ldi r24, 0x01 ; 1 + 17e: 90 e0 ldi r25, 0x00 ; 0 + 180: 0f c0 rjmp .+30 ; 0x1a0 + } + + if (TWI0.MSTATUS & TWI_RXACK_bm) + 182: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 186: 84 fd sbrc r24, 4 + 188: 06 c0 rjmp .+12 ; 0x196 + break; + + }while(--len); + 18a: 81 e0 ldi r24, 0x01 ; 1 + 18c: c8 1a sub r12, r24 + 18e: d1 08 sbc r13, r1 + 190: e1 08 sbc r14, r1 + 192: f1 08 sbc r15, r1 + 194: c1 f6 brne .-80 ; 0x146 + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 196: 83 e0 ldi r24, 0x03 ; 3 + 198: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + + + return CM_I2C_OK; + 19c: 80 e0 ldi r24, 0x00 ; 0 + 19e: 90 e0 ldi r25, 0x00 ; 0 +} + 1a0: df 91 pop r29 + 1a2: cf 91 pop r28 + 1a4: ff 90 pop r15 + 1a6: ef 90 pop r14 + 1a8: df 90 pop r13 + 1aa: cf 90 pop r12 + 1ac: 08 95 ret + +000001ae : + +int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ + 1ae: cf 92 push r12 + 1b0: df 92 push r13 + 1b2: ef 92 push r14 + 1b4: ff 92 push r15 + 1b6: cf 93 push r28 + 1b8: df 93 push r29 + 1ba: d6 2f mov r29, r22 + 1bc: c7 2f mov r28, r23 + 1be: 69 01 movw r12, r18 + 1c0: 7a 01 movw r14, r20 + + uint8_t *dp = data; + + if (len == 0) + 1c2: 23 2b or r18, r19 + 1c4: 24 2b or r18, r20 + 1c6: 25 2b or r18, r21 + 1c8: 61 f1 breq .+88 ; 0x222 + return 1; + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr | 1) != CM_I2C_OK)return CM_I2C_NOK; + 1ca: 81 60 ori r24, 0x01 ; 1 + 1cc: 95 df rcall .-214 ; 0xf8 + 1ce: 81 11 cpse r24, r1 + 1d0: 2b c0 rjmp .+86 ; 0x228 + 1d2: ed 2f mov r30, r29 + 1d4: fc 2f mov r31, r28 + + *dp++ = TWI0.MDATA; + if (len == 0) { + TWI0.MCTRLB = TWI_ACKACT_NACK_gc; + } else { + TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; + 1d6: 92 e0 ldi r25, 0x02 ; 2 + + while (!(TWI0.MSTATUS & (TWI_WIF_bm | TWI_RIF_bm))); + + *dp++ = TWI0.MDATA; + if (len == 0) { + TWI0.MCTRLB = TWI_ACKACT_NACK_gc; + 1d8: 24 e0 ldi r18, 0x04 ; 4 + return 1; + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr | 1) != CM_I2C_OK)return CM_I2C_NOK; + + while (len--) { + 1da: b7 01 movw r22, r14 + 1dc: a6 01 movw r20, r12 1de: 41 50 subi r20, 0x01 ; 1 1e0: 51 09 sbc r21, r1 1e2: 61 09 sbc r22, r1 1e4: 71 09 sbc r23, r1 - 1e6: ed cf rjmp .-38 ; 0x1c2 - 1e8: 83 e0 ldi r24, 0x03 ; 3 - 1ea: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 1ee: 8f ef ldi r24, 0xFF ; 255 - 1f0: 9f ef ldi r25, 0xFF ; 255 - 1f2: 08 95 ret - 1f4: 81 e0 ldi r24, 0x01 ; 1 - 1f6: 90 e0 ldi r25, 0x00 ; 0 - 1f8: 08 95 ret - 1fa: 84 e0 ldi r24, 0x04 ; 4 - 1fc: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 200: 83 e0 ldi r24, 0x03 ; 3 - 202: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 206: 80 e0 ldi r24, 0x00 ; 0 - 208: 90 e0 ldi r25, 0x00 ; 0 - 20a: 08 95 ret - -0000020c : + 1e6: cd 28 or r12, r13 + 1e8: ce 28 or r12, r14 + 1ea: cf 28 or r12, r15 + 1ec: a1 f0 breq .+40 ; 0x216 + + while (!(TWI0.MSTATUS & (TWI_WIF_bm | TWI_RIF_bm))); + 1ee: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 1f2: 80 7c andi r24, 0xC0 ; 192 + 1f4: e1 f3 breq .-8 ; 0x1ee + + *dp++ = TWI0.MDATA; + 1f6: 80 91 18 08 lds r24, 0x0818 ; 0x800818 <__RODATA_PM_OFFSET__+0x7f8818> + 1fa: 81 93 st Z+, r24 + if (len == 0) { + 1fc: 41 15 cp r20, r1 + 1fe: 51 05 cpc r21, r1 + 200: 61 05 cpc r22, r1 + 202: 71 05 cpc r23, r1 + 204: 19 f4 brne .+6 ; 0x20c + TWI0.MCTRLB = TWI_ACKACT_NACK_gc; + 206: 20 93 14 08 sts 0x0814, r18 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + 20a: 02 c0 rjmp .+4 ; 0x210 + } else { + TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; + 20c: 90 93 14 08 sts 0x0814, r25 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + + + return CM_I2C_OK; } +int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ + 210: 6a 01 movw r12, r20 + 212: 7b 01 movw r14, r22 + 214: e2 cf rjmp .-60 ; 0x1da + TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; + } + } + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 216: 83 e0 ldi r24, 0x03 ; 3 + 218: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + 21c: 80 e0 ldi r24, 0x00 ; 0 + 21e: 90 e0 ldi r25, 0x00 ; 0 + 220: 05 c0 rjmp .+10 ; 0x22c +int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ + + uint8_t *dp = data; + + if (len == 0) + return 1; + 222: 81 e0 ldi r24, 0x01 ; 1 + 224: 90 e0 ldi r25, 0x00 ; 0 + 226: 02 c0 rjmp .+4 ; 0x22c + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr | 1) != CM_I2C_OK)return CM_I2C_NOK; + 228: 8f ef ldi r24, 0xFF ; 255 + 22a: 9f ef ldi r25, 0xFF ; 255 + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + + return 0; + + +} + 22c: df 91 pop r29 + 22e: cf 91 pop r28 + 230: ff 90 pop r15 + 232: ef 90 pop r14 + 234: df 90 pop r13 + 236: cf 90 pop r12 + 238: 08 95 ret + +0000023a : + +int i2c_IsDeviceReady(uint8_t dev_addr){ + + TWI0.MADDR = dev_addr | 0; + 23a: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> + + // Wait for acknowledgment + while (!(TWI0.MSTATUS & TWI_WIF_bm)); + 23e: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 242: 86 ff sbrs r24, 6 + 244: fc cf rjmp .-8 ; 0x23e + + if (TWI0.MSTATUS & TWI_RXACK_bm) { + 246: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 24a: 84 ff sbrs r24, 4 + 24c: 06 c0 rjmp .+12 ; 0x25a + // NACK received + TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition + 24e: 83 e0 ldi r24, 0x03 ; 3 + 250: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + return 1; // Error: NACK received + 254: 81 e0 ldi r24, 0x01 ; 1 + 256: 90 e0 ldi r25, 0x00 ; 0 + 258: 08 95 ret + } + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 25a: 83 e0 ldi r24, 0x03 ; 3 + 25c: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + return CM_I2C_OK; // Success + 260: 80 e0 ldi r24, 0x00 ; 0 + 262: 90 e0 ldi r25, 0x00 ; 0 + +} + 264: 08 95 ret + +00000266 : + int cm_i2c_init(void *i2c_inst){ PORTA.DIR &= ~(1 << 2); // Clear bit 2 (PA2) - 20c: e0 e0 ldi r30, 0x00 ; 0 - 20e: f4 e0 ldi r31, 0x04 ; 4 - 210: 80 81 ld r24, Z - 212: 8b 7f andi r24, 0xFB ; 251 - 214: 80 83 st Z, r24 + 266: e0 e0 ldi r30, 0x00 ; 0 + 268: f4 e0 ldi r31, 0x04 ; 4 + 26a: 80 81 ld r24, Z + 26c: 8b 7f andi r24, 0xFB ; 251 + 26e: 80 83 st Z, r24 PORTA.DIR &= ~(1 << 3); // Clear bit 3 (PA3) - 216: 80 81 ld r24, Z - 218: 87 7f andi r24, 0xF7 ; 247 - 21a: 80 83 st Z, r24 + 270: 80 81 ld r24, Z + 272: 87 7f andi r24, 0xF7 ; 247 + 274: 80 83 st Z, r24 // Set the baud rate for 100kHz with a typical rise time of 300 ns TWI0.MBAUD = 11; - 21c: a0 e1 ldi r26, 0x10 ; 16 - 21e: b8 e0 ldi r27, 0x08 ; 8 - 220: 8b e0 ldi r24, 0x0B ; 11 - 222: 16 96 adiw r26, 0x06 ; 6 - 224: 8c 93 st X, r24 - 226: 16 97 sbiw r26, 0x06 ; 6 + 276: a0 e1 ldi r26, 0x10 ; 16 + 278: b8 e0 ldi r27, 0x08 ; 8 + 27a: 8b e0 ldi r24, 0x0B ; 11 + 27c: 16 96 adiw r26, 0x06 ; 6 + 27e: 8c 93 st X, r24 + 280: 16 97 sbiw r26, 0x06 ; 6 // Enable the TWI master and set it to enable operation TWI0.MCTRLA = TWI_ENABLE_bm; - 228: 81 e0 ldi r24, 0x01 ; 1 - 22a: 13 96 adiw r26, 0x03 ; 3 - 22c: 8c 93 st X, r24 - 22e: 13 97 sbiw r26, 0x03 ; 3 + 282: 81 e0 ldi r24, 0x01 ; 1 + 284: 13 96 adiw r26, 0x03 ; 3 + 286: 8c 93 st X, r24 + 288: 13 97 sbiw r26, 0x03 ; 3 /* Set bus state idle */ TWI0.MSTATUS = TWI_BUSSTATE_IDLE_gc; - 230: 15 96 adiw r26, 0x05 ; 5 - 232: 8c 93 st X, r24 + 28a: 15 96 adiw r26, 0x05 ; 5 + 28c: 8c 93 st X, r24 // Enable the internal pull-ups for PA2 (SDA) and PA3 (SCL) PORTA.PIN2CTRL = PORT_PULLUPEN_bm; - 234: 88 e0 ldi r24, 0x08 ; 8 - 236: 82 8b std Z+18, r24 ; 0x12 + 28e: 88 e0 ldi r24, 0x08 ; 8 + 290: 82 8b std Z+18, r24 ; 0x12 PORTA.PIN3CTRL = PORT_PULLUPEN_bm; - 238: 83 8b std Z+19, r24 ; 0x13 + 292: 83 8b std Z+19, r24 ; 0x13 return CM_I2C_OK; } - 23a: 80 e0 ldi r24, 0x00 ; 0 - 23c: 90 e0 ldi r25, 0x00 ; 0 - 23e: 08 95 ret + 294: 80 e0 ldi r24, 0x00 ; 0 + 296: 90 e0 ldi r25, 0x00 ; 0 + 298: 08 95 ret -00000240 : +0000029a : int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ - 240: fc 01 movw r30, r24 + 29a: ef 92 push r14 + 29c: ff 92 push r15 + 29e: 0f 93 push r16 + 2a0: 1f 93 push r17 + 2a2: cf 93 push r28 + 2a4: 8c 01 movw r16, r24 + 2a6: 7b 01 movw r14, r22 + 2a8: c4 2f mov r28, r20 //if(i2c_inst == NULL) return CM_I2C_NOK; // Check if device responds! if(i2c_IsDeviceReady((dev_addr << 1)) != CM_I2C_OK)return CM_I2C_NO_DEVICE; - 242: 84 2f mov r24, r20 - 244: 88 0f add r24, r24 - -} - -int i2c_IsDeviceReady(uint8_t dev_addr){ - - TWI0.MADDR = dev_addr | 0; - 246: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> - - // Wait for acknowledgment - while (!(TWI0.MSTATUS & TWI_WIF_bm)); - 24a: 90 91 15 08 lds r25, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 24e: 96 ff sbrs r25, 6 - 250: fc cf rjmp .-8 ; 0x24a - - if (TWI0.MSTATUS & TWI_RXACK_bm) { - 252: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 256: 84 ff sbrs r24, 4 - 258: 06 c0 rjmp .+12 ; 0x266 - // NACK received - TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition - 25a: 83 e0 ldi r24, 0x03 ; 3 - 25c: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> -int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ - - //if(i2c_inst == NULL) return CM_I2C_NOK; - - // Check if device responds! - if(i2c_IsDeviceReady((dev_addr << 1)) != CM_I2C_OK)return CM_I2C_NO_DEVICE; - 260: 8e ef ldi r24, 0xFE ; 254 - 262: 9f ef ldi r25, 0xFF ; 255 - 264: 08 95 ret - TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition - return 1; // Error: NACK received - } - - // Send stop condition - TWI0.MCTRLB = TWI_MCMD_STOP_gc; - 266: 83 e0 ldi r24, 0x03 ; 3 - 268: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - - // Check if device responds! - if(i2c_IsDeviceReady((dev_addr << 1)) != CM_I2C_OK)return CM_I2C_NO_DEVICE; + 2aa: 84 2f mov r24, r20 + 2ac: 88 0f add r24, r24 + 2ae: c5 df rcall .-118 ; 0x23a + 2b0: 00 97 sbiw r24, 0x00 ; 0 + 2b2: 49 f4 brne .+18 ; 0x2c6 // add device info if device responds! inst->i2c_transfer_inst = i2c_inst; - 26c: 60 83 st Z, r22 - 26e: 71 83 std Z+1, r23 ; 0x01 + 2b4: f8 01 movw r30, r16 + 2b6: e0 82 st Z, r14 + 2b8: f1 82 std Z+1, r15 ; 0x01 inst->dev_addr = (dev_addr << 1) & 0b11111110; - 270: 50 e0 ldi r21, 0x00 ; 0 - 272: 44 0f add r20, r20 - 274: 55 1f adc r21, r21 - 276: 42 83 std Z+2, r20 ; 0x02 + 2ba: 4c 2f mov r20, r28 + 2bc: 50 e0 ldi r21, 0x00 ; 0 + 2be: 44 0f add r20, r20 + 2c0: 55 1f adc r21, r21 + 2c2: 42 83 std Z+2, r20 ; 0x02 return CM_I2C_OK; - 278: 80 e0 ldi r24, 0x00 ; 0 - 27a: 90 e0 ldi r25, 0x00 ; 0 -} - 27c: 08 95 ret + 2c4: 02 c0 rjmp .+4 ; 0x2ca +int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ -0000027e : + //if(i2c_inst == NULL) return CM_I2C_NOK; + + // Check if device responds! + if(i2c_IsDeviceReady((dev_addr << 1)) != CM_I2C_OK)return CM_I2C_NO_DEVICE; + 2c6: 8e ef ldi r24, 0xFE ; 254 + 2c8: 9f ef ldi r25, 0xFF ; 255 + // add device info if device responds! + inst->i2c_transfer_inst = i2c_inst; + inst->dev_addr = (dev_addr << 1) & 0b11111110; + + return CM_I2C_OK; +} + 2ca: cf 91 pop r28 + 2cc: 1f 91 pop r17 + 2ce: 0f 91 pop r16 + 2d0: ff 90 pop r15 + 2d2: ef 90 pop r14 + 2d4: 08 95 ret + +000002d6 : int cm_i2c_transfer(cm_i2c_device_t *inst, uint8_t *data, uint32_t len, i2c_setget_cm_t set_get){ - 27e: 0f 93 push r16 + 2d6: 0f 93 push r16 if(inst == NULL) return CM_I2C_NOK; - 280: 00 97 sbiw r24, 0x00 ; 0 - 282: 09 f1 breq .+66 ; 0x2c6 - 284: fb 01 movw r30, r22 - 286: dc 01 movw r26, r24 + 2d8: 00 97 sbiw r24, 0x00 ; 0 + 2da: 59 f0 breq .+22 ; 0x2f2 + 2dc: fc 01 movw r30, r24 // Check if device responds! //if(i2c_IsDeviceReady(inst->dev_addr) != CM_I2C_OK)return CM_I2C_NO_DEVICE; switch(set_get){ - 288: 00 23 and r16, r16 - 28a: b1 f0 breq .+44 ; 0x2b8 - 28c: 01 30 cpi r16, 0x01 ; 1 - 28e: 21 f0 breq .+8 ; 0x298 - break; - - - } - - return CM_I2C_OK; - 290: 80 e0 ldi r24, 0x00 ; 0 - 292: 90 e0 ldi r25, 0x00 ; 0 - -} - 294: 0f 91 pop r16 - 296: 08 95 ret -} - -int i2c_write(uint8_t dev_addr, void *data, uint32_t len){ - - // Check length - if(len == 0) return CM_I2C_NOK; - 298: 21 15 cp r18, r1 - 29a: 31 05 cpc r19, r1 - 29c: 41 05 cpc r20, r1 - 29e: 51 05 cpc r21, r1 - 2a0: b9 f3 breq .-18 ; 0x290 + 2de: 00 23 and r16, r16 + 2e0: 29 f0 breq .+10 ; 0x2ec + 2e2: 01 30 cpi r16, 0x01 ; 1 + 2e4: 49 f4 brne .+18 ; 0x2f8 i2c_read(inst->dev_addr, data, len); break; case I2C_CM_SET: //HAL_I2C_Master_Transmit(inst->i2c_transfer_inst, inst->dev_addr, data, len, 1); i2c_write(inst->dev_addr, data, len); - 2a2: 12 96 adiw r26, 0x02 ; 2 - 2a4: 8c 91 ld r24, X - -#ifdef AVR_ATTINY_402 - -uint8_t i2c_write_devAddr(uint8_t dev_addr){ - - TWI0.MADDR = dev_addr; - 2a6: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> - 2aa: ba 01 movw r22, r20 - 2ac: a9 01 movw r20, r18 - 2ae: cf 01 movw r24, r30 - 2b0: 2f df rcall .-418 ; 0x110 - break; - - - } - - return CM_I2C_OK; - 2b2: 80 e0 ldi r24, 0x00 ; 0 - 2b4: 90 e0 ldi r25, 0x00 ; 0 - 2b6: ee cf rjmp .-36 ; 0x294 + 2e6: 82 81 ldd r24, Z+2 ; 0x02 + 2e8: 18 df rcall .-464 ; 0x11a + 2ea: 06 c0 rjmp .+12 ; 0x2f8 switch(set_get){ case I2C_CM_GET: //HAL_I2C_Master_Receive(inst->i2c_transfer_inst, inst->dev_addr, data, len, 1); i2c_read(inst->dev_addr, data, len); - 2b8: 12 96 adiw r26, 0x02 ; 2 - 2ba: 8c 91 ld r24, X - 2bc: 67 df rcall .-306 ; 0x18c - break; - - - } - - return CM_I2C_OK; - 2be: 80 e0 ldi r24, 0x00 ; 0 - 2c0: 90 e0 ldi r25, 0x00 ; 0 - -} - 2c2: 0f 91 pop r16 - 2c4: 08 95 ret + 2ec: 82 81 ldd r24, Z+2 ; 0x02 + 2ee: 5f df rcall .-322 ; 0x1ae + 2f0: 03 c0 rjmp .+6 ; 0x2f8 } int cm_i2c_transfer(cm_i2c_device_t *inst, uint8_t *data, uint32_t len, i2c_setget_cm_t set_get){ if(inst == NULL) return CM_I2C_NOK; - 2c6: 8f ef ldi r24, 0xFF ; 255 - 2c8: 9f ef ldi r25, 0xFF ; 255 - 2ca: e4 cf rjmp .-56 ; 0x294 + 2f2: 8f ef ldi r24, 0xFF ; 255 + 2f4: 9f ef ldi r25, 0xFF ; 255 + 2f6: 02 c0 rjmp .+4 ; 0x2fc + break; -000002cc <__vector_22>: + + } + + return CM_I2C_OK; + 2f8: 80 e0 ldi r24, 0x00 ; 0 + 2fa: 90 e0 ldi r25, 0x00 ; 0 + +} + 2fc: 0f 91 pop r16 + 2fe: 08 95 ret + +00000300 <__vector_22>: #define BAUD_RATE 9600 static void *s_inst = NULL; get_UART_Event_fpt uart_rx_evt_fpt = NULL; ISR(USART0_RXC_vect) { - 2cc: 1f 92 push r1 - 2ce: 0f 92 push r0 - 2d0: 0f b6 in r0, 0x3f ; 63 - 2d2: 0f 92 push r0 - 2d4: 11 24 eor r1, r1 - 2d6: 2f 93 push r18 - 2d8: 3f 93 push r19 - 2da: 4f 93 push r20 - 2dc: 5f 93 push r21 - 2de: 6f 93 push r22 - 2e0: 7f 93 push r23 - 2e2: 8f 93 push r24 - 2e4: 9f 93 push r25 - 2e6: af 93 push r26 - 2e8: bf 93 push r27 - 2ea: ef 93 push r30 - 2ec: ff 93 push r31 + 300: 1f 92 push r1 + 302: 0f 92 push r0 + 304: 0f b6 in r0, 0x3f ; 63 + 306: 0f 92 push r0 + 308: 11 24 eor r1, r1 + 30a: 2f 93 push r18 + 30c: 3f 93 push r19 + 30e: 4f 93 push r20 + 310: 5f 93 push r21 + 312: 6f 93 push r22 + 314: 7f 93 push r23 + 316: 8f 93 push r24 + 318: 9f 93 push r25 + 31a: af 93 push r26 + 31c: bf 93 push r27 + 31e: ef 93 push r30 + 320: ff 93 push r31 // Read received data if(uart_rx_evt_fpt != NULL) uart_rx_evt_fpt(USART0.RXDATAL); - 2ee: e0 91 06 3f lds r30, 0x3F06 ; 0x803f06 <__data_end> - 2f2: f0 91 07 3f lds r31, 0x3F07 ; 0x803f07 <__data_end+0x1> - 2f6: 30 97 sbiw r30, 0x00 ; 0 - 2f8: 19 f0 breq .+6 ; 0x300 <__vector_22+0x34> - 2fa: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> - 2fe: 09 95 icall + 322: e0 91 06 3f lds r30, 0x3F06 ; 0x803f06 <__data_end> + 326: f0 91 07 3f lds r31, 0x3F07 ; 0x803f07 <__data_end+0x1> + 32a: 30 97 sbiw r30, 0x00 ; 0 + 32c: 19 f0 breq .+6 ; 0x334 <__vector_22+0x34> + 32e: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> + 332: 09 95 icall //cm_uart_send(USART0.RXDATAL); } - 300: ff 91 pop r31 - 302: ef 91 pop r30 - 304: bf 91 pop r27 - 306: af 91 pop r26 - 308: 9f 91 pop r25 - 30a: 8f 91 pop r24 - 30c: 7f 91 pop r23 - 30e: 6f 91 pop r22 - 310: 5f 91 pop r21 - 312: 4f 91 pop r20 - 314: 3f 91 pop r19 - 316: 2f 91 pop r18 - 318: 0f 90 pop r0 - 31a: 0f be out 0x3f, r0 ; 63 - 31c: 0f 90 pop r0 - 31e: 1f 90 pop r1 - 320: 18 95 reti + 334: ff 91 pop r31 + 336: ef 91 pop r30 + 338: bf 91 pop r27 + 33a: af 91 pop r26 + 33c: 9f 91 pop r25 + 33e: 8f 91 pop r24 + 340: 7f 91 pop r23 + 342: 6f 91 pop r22 + 344: 5f 91 pop r21 + 346: 4f 91 pop r20 + 348: 3f 91 pop r19 + 34a: 2f 91 pop r18 + 34c: 0f 90 pop r0 + 34e: 0f be out 0x3f, r0 ; 63 + 350: 0f 90 pop r0 + 352: 1f 90 pop r1 + 354: 18 95 reti -00000322 : +00000356 : void cm_uart_init(void *rtx_inst, get_UART_Event_fpt uart_rx_evt_fp){ - 322: cf 93 push r28 - 324: df 93 push r29 - 326: 1f 92 push r1 - 328: cd b7 in r28, 0x3d ; 61 - 32a: de b7 in r29, 0x3e ; 62 - 32c: ac 01 movw r20, r24 + 356: cf 93 push r28 + 358: df 93 push r29 + 35a: 1f 92 push r1 + 35c: cd b7 in r28, 0x3d ; 61 + 35e: de b7 in r29, 0x3e ; 62 //For interrupt-driven USART operation, global interrupts must be disabled during the initialization cli(); - 32e: f8 94 cli + 360: f8 94 cli // Calculate and set baud rate register (3.33 MHz / (16 * 9600) - 1) uint16_t baud = 1388;//(F_CPU / (16 * BAUD_RATE)) - 1; USART0.BAUD = baud; - 330: 2c e6 ldi r18, 0x6C ; 108 - 332: 35 e0 ldi r19, 0x05 ; 5 - 334: 20 93 08 08 sts 0x0808, r18 ; 0x800808 <__RODATA_PM_OFFSET__+0x7f8808> - 338: 30 93 09 08 sts 0x0809, r19 ; 0x800809 <__RODATA_PM_OFFSET__+0x7f8809> + 362: 2c e6 ldi r18, 0x6C ; 108 + 364: 35 e0 ldi r19, 0x05 ; 5 + 366: 20 93 08 08 sts 0x0808, r18 ; 0x800808 <__RODATA_PM_OFFSET__+0x7f8808> + 36a: 30 93 09 08 sts 0x0809, r19 ; 0x800809 <__RODATA_PM_OFFSET__+0x7f8809> // Configure USART0 for 8-bit data, no parity, 1 stop bit USART0.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | // Asynchronous mode - 33c: 93 e0 ldi r25, 0x03 ; 3 - 33e: 90 93 07 08 sts 0x0807, r25 ; 0x800807 <__RODATA_PM_OFFSET__+0x7f8807> + 36e: 23 e0 ldi r18, 0x03 ; 3 + 370: 20 93 07 08 sts 0x0807, r18 ; 0x800807 <__RODATA_PM_OFFSET__+0x7f8807> USART_CHSIZE_8BIT_gc | // 8-bit character size USART_PMODE_DISABLED_gc; // No parity // Enable receiver, transmitter, and receive complete interrupt USART0.CTRLB = USART_RXEN_bm | // Enable receiver - 342: 90 ec ldi r25, 0xC0 ; 192 - 344: 90 93 06 08 sts 0x0806, r25 ; 0x800806 <__RODATA_PM_OFFSET__+0x7f8806> + 374: 20 ec ldi r18, 0xC0 ; 192 + 376: 20 93 06 08 sts 0x0806, r18 ; 0x800806 <__RODATA_PM_OFFSET__+0x7f8806> USART_TXEN_bm; // Enable transmitter if((uart_rx_evt_fp != NULL) || (rtx_inst != NULL)){ - 348: 61 15 cp r22, r1 - 34a: 71 05 cpc r23, r1 - 34c: d1 f0 breq .+52 ; 0x382 + 37a: 61 15 cp r22, r1 + 37c: 71 05 cpc r23, r1 + 37e: 11 f4 brne .+4 ; 0x384 + 380: 89 2b or r24, r25 + 382: 39 f0 breq .+14 ; 0x392 // Enable RX interrupt USART0.CTRLA = USART_RXCIE_bm; // Enable receive interrupt - 34e: 80 e8 ldi r24, 0x80 ; 128 - 350: 80 93 05 08 sts 0x0805, r24 ; 0x800805 <__RODATA_PM_OFFSET__+0x7f8805> + 384: 80 e8 ldi r24, 0x80 ; 128 + 386: 80 93 05 08 sts 0x0805, r24 ; 0x800805 <__RODATA_PM_OFFSET__+0x7f8805> s_inst = rtx_inst; uart_rx_evt_fpt = uart_rx_evt_fp; - 354: 60 93 06 3f sts 0x3F06, r22 ; 0x803f06 <__data_end> - 358: 70 93 07 3f sts 0x3F07, r23 ; 0x803f07 <__data_end+0x1> + 38a: 60 93 06 3f sts 0x3F06, r22 ; 0x803f06 <__data_end> + 38e: 70 93 07 3f sts 0x3F07, r23 ; 0x803f07 <__data_end+0x1> } // Clear any existing receive complete interrupt flag by reading RXDATAL if (USART0.STATUS & USART_RXCIF_bm) { - 35c: 80 91 04 08 lds r24, 0x0804 ; 0x800804 <__RODATA_PM_OFFSET__+0x7f8804> - 360: 87 ff sbrs r24, 7 - 362: 04 c0 rjmp .+8 ; 0x36c + 392: 80 91 04 08 lds r24, 0x0804 ; 0x800804 <__RODATA_PM_OFFSET__+0x7f8804> + 396: 87 ff sbrs r24, 7 + 398: 04 c0 rjmp .+8 ; 0x3a2 volatile uint8_t dummy = USART0.RXDATAL; // Read RXDATAL to clear the flag - 364: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> - 368: 89 83 std Y+1, r24 ; 0x01 + 39a: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> + 39e: 89 83 std Y+1, r24 ; 0x01 (void)dummy; // Silence unused variable warning - 36a: 89 81 ldd r24, Y+1 ; 0x01 + 3a0: 89 81 ldd r24, Y+1 ; 0x01 } PORTA.DIRSET = (1 << 6); // Set PA1 (TX) as output - 36c: 80 e4 ldi r24, 0x40 ; 64 - 36e: 80 93 01 04 sts 0x0401, r24 ; 0x800401 <__RODATA_PM_OFFSET__+0x7f8401> + 3a2: 80 e4 ldi r24, 0x40 ; 64 + 3a4: 80 93 01 04 sts 0x0401, r24 ; 0x800401 <__RODATA_PM_OFFSET__+0x7f8401> PORTA.DIRCLR = (1 << 7); // Set PA2 (RX) as input - 372: 80 e8 ldi r24, 0x80 ; 128 - 374: 80 93 02 04 sts 0x0402, r24 ; 0x800402 <__RODATA_PM_OFFSET__+0x7f8402> + 3a8: 80 e8 ldi r24, 0x80 ; 128 + 3aa: 80 93 02 04 sts 0x0402, r24 ; 0x800402 <__RODATA_PM_OFFSET__+0x7f8402> // Enable global interrupts sei(); - 378: 78 94 sei + 3ae: 78 94 sei } - 37a: 0f 90 pop r0 - 37c: df 91 pop r29 - 37e: cf 91 pop r28 - 380: 08 95 ret + 3b0: 0f 90 pop r0 + 3b2: df 91 pop r29 + 3b4: cf 91 pop r28 + 3b6: 08 95 ret - // Enable receiver, transmitter, and receive complete interrupt - USART0.CTRLB = USART_RXEN_bm | // Enable receiver - USART_TXEN_bm; // Enable transmitter - - if((uart_rx_evt_fp != NULL) || (rtx_inst != NULL)){ - 382: 45 2b or r20, r21 - 384: 21 f7 brne .-56 ; 0x34e - 386: ea cf rjmp .-44 ; 0x35c - -00000388 : +000003b8 : int cm_msgSync_Byte_DecodeSC(uint8_t rx_byte){ static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; switch (state) - 388: 90 91 41 3f lds r25, 0x3F41 ; 0x803f41 - 38c: 92 30 cpi r25, 0x02 ; 2 - 38e: 41 f1 breq .+80 ; 0x3e0 - 390: 60 f4 brcc .+24 ; 0x3aa - 392: 99 23 and r25, r25 - 394: e1 f0 breq .+56 ; 0x3ce - 396: 91 30 cpi r25, 0x01 ; 1 - 398: 89 f4 brne .+34 ; 0x3bc - case CM_MSGSYNC_STATE_INIT: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; - break; - - case CM_MSGSYNC_STATE_2: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; - 39a: 8a 35 cpi r24, 0x5A ; 90 - 39c: 29 f1 breq .+74 ; 0x3e8 - case CM_MSGSYNC_STATE_3: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; - break; - - case CM_MSGSYNC_STATE_4: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; - 39e: 80 e0 ldi r24, 0x00 ; 0 - 3a0: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; - break; - } - - return 1; - 3a4: 81 e0 ldi r24, 0x01 ; 1 - 3a6: 90 e0 ldi r25, 0x00 ; 0 - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; - break; - - case CM_MSGSYNC_STATE_4: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; - break; - 3a8: 08 95 ret - -int cm_msgSync_Byte_DecodeSC(uint8_t rx_byte){ - - static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; - - switch (state) - 3aa: 93 30 cpi r25, 0x03 ; 3 - 3ac: 61 f0 breq .+24 ; 0x3c6 - 3ae: 94 30 cpi r25, 0x04 ; 4 - 3b0: 29 f4 brne .+10 ; 0x3bc + 3b8: 90 91 41 3f lds r25, 0x3F41 ; 0x803f41 + 3bc: 92 30 cpi r25, 0x02 ; 2 + 3be: d1 f0 breq .+52 ; 0x3f4 + 3c0: 28 f4 brcc .+10 ; 0x3cc + 3c2: 99 23 and r25, r25 + 3c4: 61 f0 breq .+24 ; 0x3de + 3c6: 91 30 cpi r25, 0x01 ; 1 + 3c8: 89 f0 breq .+34 ; 0x3ec + 3ca: 20 c0 rjmp .+64 ; 0x40c <__LOCK_REGION_LENGTH__+0xc> + 3cc: 93 30 cpi r25, 0x03 ; 3 + 3ce: b1 f0 breq .+44 ; 0x3fc + 3d0: 94 30 cpi r25, 0x04 ; 4 + 3d2: e1 f4 brne .+56 ; 0x40c <__LOCK_REGION_LENGTH__+0xc> case CM_MSGSYNC_STATE_4: state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; break; case CM_MSGSYNC_STATE_5: state = CM_MSGSYNC_STATE_INIT; - 3b2: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 + 3d4: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 return 0; - 3b6: 80 e0 ldi r24, 0x00 ; 0 - 3b8: 90 e0 ldi r25, 0x00 ; 0 - 3ba: 08 95 ret - break; - - default: - state = CM_MSGSYNC_STATE_INIT; - 3bc: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 - break; - } - - return 1; - 3c0: 81 e0 ldi r24, 0x01 ; 1 - 3c2: 90 e0 ldi r25, 0x00 ; 0 - - -} - 3c4: 08 95 ret - case CM_MSGSYNC_STATE_3: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; - break; - - case CM_MSGSYNC_STATE_4: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; - 3c6: 83 34 cpi r24, 0x43 ; 67 - 3c8: 51 f7 brne .-44 ; 0x39e - 3ca: 84 e0 ldi r24, 0x04 ; 4 - 3cc: e9 cf rjmp .-46 ; 0x3a0 + 3d8: 80 e0 ldi r24, 0x00 ; 0 + 3da: 90 e0 ldi r25, 0x00 ; 0 + 3dc: 08 95 ret static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; switch (state) { case CM_MSGSYNC_STATE_INIT: state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; - 3ce: 91 e0 ldi r25, 0x01 ; 1 - 3d0: 8f 34 cpi r24, 0x4F ; 79 - 3d2: 09 f0 breq .+2 ; 0x3d6 - 3d4: 90 e0 ldi r25, 0x00 ; 0 - 3d6: 90 93 41 3f sts 0x3F41, r25 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; + 3de: 91 e0 ldi r25, 0x01 ; 1 + 3e0: 8f 34 cpi r24, 0x4F ; 79 + 3e2: 09 f0 breq .+2 ; 0x3e6 + 3e4: 90 e0 ldi r25, 0x00 ; 0 + 3e6: 90 93 41 3f sts 0x3F41, r25 ; 0x803f41 + 3ea: 12 c0 rjmp .+36 ; 0x410 <__LOCK_REGION_LENGTH__+0x10> break; - } - - return 1; - 3da: 81 e0 ldi r24, 0x01 ; 1 - 3dc: 90 e0 ldi r25, 0x00 ; 0 - - switch (state) - { - case CM_MSGSYNC_STATE_INIT: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; - break; - 3de: 08 95 ret + case CM_MSGSYNC_STATE_2: state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; + 3ec: 8a 35 cpi r24, 0x5A ; 90 + 3ee: 41 f4 brne .+16 ; 0x400 <__LOCK_REGION_LENGTH__> + 3f0: 82 e0 ldi r24, 0x02 ; 2 + 3f2: 09 c0 rjmp .+18 ; 0x406 <__LOCK_REGION_LENGTH__+0x6> break; case CM_MSGSYNC_STATE_3: state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; - 3e0: 81 33 cpi r24, 0x31 ; 49 - 3e2: e9 f6 brne .-70 ; 0x39e - 3e4: 83 e0 ldi r24, 0x03 ; 3 - 3e6: dc cf rjmp .-72 ; 0x3a0 - case CM_MSGSYNC_STATE_INIT: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; + 3f4: 81 33 cpi r24, 0x31 ; 49 + 3f6: 21 f4 brne .+8 ; 0x400 <__LOCK_REGION_LENGTH__> + 3f8: 83 e0 ldi r24, 0x03 ; 3 + 3fa: 05 c0 rjmp .+10 ; 0x406 <__LOCK_REGION_LENGTH__+0x6> break; - case CM_MSGSYNC_STATE_2: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; - 3e8: 82 e0 ldi r24, 0x02 ; 2 - 3ea: da cf rjmp .-76 ; 0x3a0 + case CM_MSGSYNC_STATE_4: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; + 3fc: 83 34 cpi r24, 0x43 ; 67 + 3fe: 11 f0 breq .+4 ; 0x404 <__LOCK_REGION_LENGTH__+0x4> + 400: 80 e0 ldi r24, 0x00 ; 0 + 402: 01 c0 rjmp .+2 ; 0x406 <__LOCK_REGION_LENGTH__+0x6> + 404: 84 e0 ldi r24, 0x04 ; 4 + 406: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 + 40a: 02 c0 rjmp .+4 ; 0x410 <__LOCK_REGION_LENGTH__+0x10> + state = CM_MSGSYNC_STATE_INIT; + return 0; + break; + + default: + state = CM_MSGSYNC_STATE_INIT; + 40c: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 + break; + } + + return 1; + 410: 81 e0 ldi r24, 0x01 ; 1 + 412: 90 e0 ldi r25, 0x00 ; 0 + + +} + 414: 08 95 ret -000003ec : +00000416 : static cm_msg_decode_states_t state = CM_MSG_WAIT_FOR_STARTCODE; static cm_data_msg_t msg; static uint8_t data_bytes_idx = 0; switch (state) - 3ec: 90 91 40 3f lds r25, 0x3F40 ; 0x803f40 - 3f0: 93 30 cpi r25, 0x03 ; 3 - 3f2: 09 f4 brne .+2 ; 0x3f6 - 3f4: 4b c0 rjmp .+150 ; 0x48c <__LOCK_REGION_LENGTH__+0x8c> - 3f6: 68 f4 brcc .+26 ; 0x412 <__LOCK_REGION_LENGTH__+0x12> - 3f8: 99 23 and r25, r25 - 3fa: 09 f4 brne .+2 ; 0x3fe - 3fc: 40 c0 rjmp .+128 ; 0x47e <__LOCK_REGION_LENGTH__+0x7e> - 3fe: 91 30 cpi r25, 0x01 ; 1 - 400: 29 f4 brne .+10 ; 0x40c <__LOCK_REGION_LENGTH__+0xc> + 416: 90 91 40 3f lds r25, 0x3F40 ; 0x803f40 + 41a: 93 30 cpi r25, 0x03 ; 3 + 41c: b1 f0 breq .+44 ; 0x44a + 41e: 48 f4 brcc .+18 ; 0x432 + 420: 99 23 and r25, r25 + 422: 61 f0 breq .+24 ; 0x43c + 424: 91 30 cpi r25, 0x01 ; 1 + 426: 09 f0 breq .+2 ; 0x42a + 428: 43 c0 rjmp .+134 ; 0x4b0 if(!cm_msgSync_Byte_DecodeSC(rx_byte)) state = CM_MSG_DECODE_STATE_GET_SIZE_BYTE; data_bytes_idx = 0; break; case CM_MSG_DECODE_STATE_GET_SIZE_BYTE: msg.msg_data_size = rx_byte; - 402: 80 93 08 3f sts 0x3F08, r24 ; 0x803f08 + 42a: 80 93 08 3f sts 0x3F08, r24 ; 0x803f08 state = CM_MSG_DECODE_STATE_GET_CRC_BYTE1; - 406: 83 e0 ldi r24, 0x03 ; 3 - 408: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - - } - break; - } - return 0; -} - 40c: 80 e0 ldi r24, 0x00 ; 0 - 40e: 90 e0 ldi r25, 0x00 ; 0 - 410: 08 95 ret + 42e: 83 e0 ldi r24, 0x03 ; 3 + 430: 1e c0 rjmp .+60 ; 0x46e static cm_msg_decode_states_t state = CM_MSG_WAIT_FOR_STARTCODE; static cm_data_msg_t msg; static uint8_t data_bytes_idx = 0; switch (state) - 412: 94 30 cpi r25, 0x04 ; 4 - 414: 19 f1 breq .+70 ; 0x45c <__LOCK_REGION_LENGTH__+0x5c> - 416: 95 30 cpi r25, 0x05 ; 5 - 418: c9 f7 brne .-14 ; 0x40c <__LOCK_REGION_LENGTH__+0xc> - msg.msg_data_crc |= rx_byte & 0xff; - state = CM_MSG_DECODE_STATE_GET_DATA; - break; - - case CM_MSG_DECODE_STATE_GET_DATA: - msg.msg_data[data_bytes_idx] = rx_byte; - 41a: 90 91 3f 3f lds r25, 0x3F3F ; 0x803f3f - 41e: e9 2f mov r30, r25 - 420: f0 e0 ldi r31, 0x00 ; 0 - 422: e8 5f subi r30, 0xF8 ; 248 - 424: f0 4c sbci r31, 0xC0 ; 192 - 426: 83 83 std Z+3, r24 ; 0x03 - data_bytes_idx++; - 428: 81 e0 ldi r24, 0x01 ; 1 - 42a: 89 0f add r24, r25 - 42c: 80 93 3f 3f sts 0x3F3F, r24 ; 0x803f3f - if(data_bytes_idx >= msg.msg_data_size){ - 430: 90 91 08 3f lds r25, 0x3F08 ; 0x803f08 - 434: 89 17 cp r24, r25 - 436: 50 f3 brcs .-44 ; 0x40c <__LOCK_REGION_LENGTH__+0xc> - // calculate CRC.. - - // Run function pointer msg evt.. - s_msg_cmplete_evt_fpt(s_msg_cmplete_evt_inst,&(msg.msg_data[0])); - 438: e0 91 44 3f lds r30, 0x3F44 ; 0x803f44 - 43c: f0 91 45 3f lds r31, 0x3F45 ; 0x803f45 - 440: 6b e0 ldi r22, 0x0B ; 11 - 442: 7f e3 ldi r23, 0x3F ; 63 - 444: 80 91 42 3f lds r24, 0x3F42 ; 0x803f42 - 448: 90 91 43 3f lds r25, 0x3F43 ; 0x803f43 - 44c: 09 95 icall - state = CM_MSG_WAIT_FOR_STARTCODE; - 44e: 10 92 40 3f sts 0x3F40, r1 ; 0x803f40 - data_bytes_idx = 0; - 452: 10 92 3f 3f sts 0x3F3F, r1 ; 0x803f3f - - } - break; - } - return 0; -} - 456: 80 e0 ldi r24, 0x00 ; 0 - 458: 90 e0 ldi r25, 0x00 ; 0 - 45a: 08 95 ret - msg.msg_data_crc = (rx_byte << 8) & 0xff00; - state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; - break; - - case CM_MSG_DECODE_STATE_GET_CRC_BYTE2: - msg.msg_data_crc |= rx_byte & 0xff; - 45c: 20 91 09 3f lds r18, 0x3F09 ; 0x803f09 - 460: 30 91 0a 3f lds r19, 0x3F0A ; 0x803f0a - 464: a9 01 movw r20, r18 - 466: 48 2b or r20, r24 - 468: ca 01 movw r24, r20 - 46a: 80 93 09 3f sts 0x3F09, r24 ; 0x803f09 - 46e: 90 93 0a 3f sts 0x3F0A, r25 ; 0x803f0a - state = CM_MSG_DECODE_STATE_GET_DATA; - 472: 85 e0 ldi r24, 0x05 ; 5 - 474: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - - } - break; - } - return 0; -} - 478: 80 e0 ldi r24, 0x00 ; 0 - 47a: 90 e0 ldi r25, 0x00 ; 0 - 47c: 08 95 ret - static uint8_t data_bytes_idx = 0; - - switch (state) + 432: 94 30 cpi r25, 0x04 ; 4 + 434: 81 f0 breq .+32 ; 0x456 + 436: 95 30 cpi r25, 0x05 ; 5 + 438: e9 f0 breq .+58 ; 0x474 + 43a: 3a c0 rjmp .+116 ; 0x4b0 { case CM_MSG_WAIT_FOR_STARTCODE: if(!cm_msgSync_Byte_DecodeSC(rx_byte)) state = CM_MSG_DECODE_STATE_GET_SIZE_BYTE; - 47e: 84 df rcall .-248 ; 0x388 - 480: 89 2b or r24, r25 - 482: 39 f7 brne .-50 ; 0x452 <__LOCK_REGION_LENGTH__+0x52> - 484: 81 e0 ldi r24, 0x01 ; 1 - 486: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - 48a: e3 cf rjmp .-58 ; 0x452 <__LOCK_REGION_LENGTH__+0x52> + 43c: bd df rcall .-134 ; 0x3b8 + 43e: 89 2b or r24, r25 + 440: a9 f5 brne .+106 ; 0x4ac + 442: 81 e0 ldi r24, 0x01 ; 1 + 444: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 + 448: 31 c0 rjmp .+98 ; 0x4ac state = CM_MSG_DECODE_STATE_GET_CRC_BYTE1; break; case CM_MSG_DECODE_STATE_GET_CRC_BYTE1: msg.msg_data_crc = (rx_byte << 8) & 0xff00; - 48c: 10 92 09 3f sts 0x3F09, r1 ; 0x803f09 - 490: 80 93 0a 3f sts 0x3F0A, r24 ; 0x803f0a + 44a: 10 92 09 3f sts 0x3F09, r1 ; 0x803f09 + 44e: 80 93 0a 3f sts 0x3F0A, r24 ; 0x803f0a state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; - 494: 84 e0 ldi r24, 0x04 ; 4 - 496: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 + 452: 84 e0 ldi r24, 0x04 ; 4 + 454: 0c c0 rjmp .+24 ; 0x46e + break; + + case CM_MSG_DECODE_STATE_GET_CRC_BYTE2: + msg.msg_data_crc |= rx_byte & 0xff; + 456: 20 91 09 3f lds r18, 0x3F09 ; 0x803f09 + 45a: 30 91 0a 3f lds r19, 0x3F0A ; 0x803f0a + 45e: a9 01 movw r20, r18 + 460: 48 2b or r20, r24 + 462: ca 01 movw r24, r20 + 464: 80 93 09 3f sts 0x3F09, r24 ; 0x803f09 + 468: 90 93 0a 3f sts 0x3F0A, r25 ; 0x803f0a + state = CM_MSG_DECODE_STATE_GET_DATA; + 46c: 85 e0 ldi r24, 0x05 ; 5 + 46e: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 + break; + 472: 1e c0 rjmp .+60 ; 0x4b0 + + case CM_MSG_DECODE_STATE_GET_DATA: + msg.msg_data[data_bytes_idx] = rx_byte; + 474: 90 91 3f 3f lds r25, 0x3F3F ; 0x803f3f + 478: e9 2f mov r30, r25 + 47a: f0 e0 ldi r31, 0x00 ; 0 + 47c: e8 5f subi r30, 0xF8 ; 248 + 47e: f0 4c sbci r31, 0xC0 ; 192 + 480: 83 83 std Z+3, r24 ; 0x03 + data_bytes_idx++; + 482: 81 e0 ldi r24, 0x01 ; 1 + 484: 89 0f add r24, r25 + 486: 80 93 3f 3f sts 0x3F3F, r24 ; 0x803f3f + if(data_bytes_idx >= msg.msg_data_size){ + 48a: 90 91 08 3f lds r25, 0x3F08 ; 0x803f08 + 48e: 89 17 cp r24, r25 + 490: 78 f0 brcs .+30 ; 0x4b0 + // calculate CRC.. + + // Run function pointer msg evt.. + s_msg_cmplete_evt_fpt(s_msg_cmplete_evt_inst,&(msg.msg_data[0])); + 492: e0 91 44 3f lds r30, 0x3F44 ; 0x803f44 + 496: f0 91 45 3f lds r31, 0x3F45 ; 0x803f45 + 49a: 6b e0 ldi r22, 0x0B ; 11 + 49c: 7f e3 ldi r23, 0x3F ; 63 + 49e: 80 91 42 3f lds r24, 0x3F42 ; 0x803f42 + 4a2: 90 91 43 3f lds r25, 0x3F43 ; 0x803f43 + 4a6: 09 95 icall + state = CM_MSG_WAIT_FOR_STARTCODE; + 4a8: 10 92 40 3f sts 0x3F40, r1 ; 0x803f40 + data_bytes_idx = 0; + 4ac: 10 92 3f 3f sts 0x3F3F, r1 ; 0x803f3f } break; } return 0; } - 49a: 80 e0 ldi r24, 0x00 ; 0 - 49c: 90 e0 ldi r25, 0x00 ; 0 - 49e: 08 95 ret + 4b0: 80 e0 ldi r24, 0x00 ; 0 + 4b2: 90 e0 ldi r25, 0x00 ; 0 + 4b4: 08 95 ret -000004a0 : +000004b6 : void cm_MsgCompleteEvt_Register(void *msg_cmplete_evt_inst, Get_msgComplete_Event_fpt msg_cmplete_evt_fp){ if((msg_cmplete_evt_inst == NULL) || (msg_cmplete_evt_fp == NULL))return; - 4a0: 00 97 sbiw r24, 0x00 ; 0 - 4a2: 59 f0 breq .+22 ; 0x4ba - 4a4: 61 15 cp r22, r1 - 4a6: 71 05 cpc r23, r1 - 4a8: 41 f0 breq .+16 ; 0x4ba + 4b6: 00 97 sbiw r24, 0x00 ; 0 + 4b8: 59 f0 breq .+22 ; 0x4d0 + 4ba: 61 15 cp r22, r1 + 4bc: 71 05 cpc r23, r1 + 4be: 41 f0 breq .+16 ; 0x4d0 s_msg_cmplete_evt_inst = msg_cmplete_evt_inst; - 4aa: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 - 4ae: 90 93 43 3f sts 0x3F43, r25 ; 0x803f43 + 4c0: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 + 4c4: 90 93 43 3f sts 0x3F43, r25 ; 0x803f43 s_msg_cmplete_evt_fpt = msg_cmplete_evt_fp; - 4b2: 60 93 44 3f sts 0x3F44, r22 ; 0x803f44 - 4b6: 70 93 45 3f sts 0x3F45, r23 ; 0x803f45 - 4ba: 08 95 ret + 4c8: 60 93 44 3f sts 0x3F44, r22 ; 0x803f44 + 4cc: 70 93 45 3f sts 0x3F45, r23 ; 0x803f45 + 4d0: 08 95 ret -000004bc : +000004d2 : } } static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351_Outputs output){ - 4bc: 9f 92 push r9 - 4be: af 92 push r10 - 4c0: bf 92 push r11 - 4c2: cf 92 push r12 - 4c4: df 92 push r13 - 4c6: ef 92 push r14 - 4c8: ff 92 push r15 - 4ca: 0f 93 push r16 - 4cc: 1f 93 push r17 - 4ce: cf 93 push r28 - 4d0: df 93 push r29 - 4d2: ec 01 movw r28, r24 - 4d4: 94 2e mov r9, r20 + 4d2: 9f 92 push r9 + 4d4: af 92 push r10 + 4d6: bf 92 push r11 + 4d8: cf 92 push r12 + 4da: df 92 push r13 + 4dc: ef 92 push r14 + 4de: ff 92 push r15 + 4e0: 0f 93 push r16 + 4e2: 1f 93 push r17 + 4e4: cf 93 push r28 + 4e6: df 93 push r29 + 4e8: ec 01 movw r28, r24 + 4ea: 94 2e mov r9, r20 cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->pll_param_data.MSNx_P1, inst->pll_param_data.MSNx_P2, inst->pll_param_data.MSNx_P3); - 4d6: ad 84 ldd r10, Y+13 ; 0x0d - 4d8: be 84 ldd r11, Y+14 ; 0x0e - 4da: cf 84 ldd r12, Y+15 ; 0x0f - 4dc: d8 88 ldd r13, Y+16 ; 0x10 - 4de: e9 84 ldd r14, Y+9 ; 0x09 - 4e0: fa 84 ldd r15, Y+10 ; 0x0a - 4e2: 0b 85 ldd r16, Y+11 ; 0x0b - 4e4: 1c 85 ldd r17, Y+12 ; 0x0c - 4e6: 2d 81 ldd r18, Y+5 ; 0x05 - 4e8: 3e 81 ldd r19, Y+6 ; 0x06 - 4ea: 4f 81 ldd r20, Y+7 ; 0x07 - 4ec: 58 85 ldd r21, Y+8 ; 0x08 - 4ee: 8a 81 ldd r24, Y+2 ; 0x02 - 4f0: 9b 81 ldd r25, Y+3 ; 0x03 - 4f2: eb d1 rcall .+982 ; 0x8ca + 4ec: ad 84 ldd r10, Y+13 ; 0x0d + 4ee: be 84 ldd r11, Y+14 ; 0x0e + 4f0: cf 84 ldd r12, Y+15 ; 0x0f + 4f2: d8 88 ldd r13, Y+16 ; 0x10 + 4f4: e9 84 ldd r14, Y+9 ; 0x09 + 4f6: fa 84 ldd r15, Y+10 ; 0x0a + 4f8: 0b 85 ldd r16, Y+11 ; 0x0b + 4fa: 1c 85 ldd r17, Y+12 ; 0x0c + 4fc: 2d 81 ldd r18, Y+5 ; 0x05 + 4fe: 3e 81 ldd r19, Y+6 ; 0x06 + 500: 4f 81 ldd r20, Y+7 ; 0x07 + 502: 58 85 ldd r21, Y+8 ; 0x08 + 504: 8a 81 ldd r24, Y+2 ; 0x02 + 506: 9b 81 ldd r25, Y+3 ; 0x03 + 508: 13 d3 rcall .+1574 ; 0xb30 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 4f4: 81 e4 ldi r24, 0x41 ; 65 - 4f6: 93 e0 ldi r25, 0x03 ; 3 - 4f8: 01 97 sbiw r24, 0x01 ; 1 - 4fa: f1 f7 brne .-4 ; 0x4f8 - 4fc: 00 00 nop + 50a: 81 e4 ldi r24, 0x41 ; 65 + 50c: 93 e0 ldi r25, 0x03 ; 3 + 50e: 01 97 sbiw r24, 0x01 ; 1 + 510: f1 f7 brne .-4 ; 0x50e + 512: 00 00 nop _delay_ms(1); cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->pll_param_data.MSx_P1, inst->pll_param_data.MSx_P2, inst->pll_param_data.MSx_P3); - 4fe: a9 8c ldd r10, Y+25 ; 0x19 - 500: ba 8c ldd r11, Y+26 ; 0x1a - 502: cb 8c ldd r12, Y+27 ; 0x1b - 504: dc 8c ldd r13, Y+28 ; 0x1c - 506: ed 88 ldd r14, Y+21 ; 0x15 - 508: fe 88 ldd r15, Y+22 ; 0x16 - 50a: 0f 89 ldd r16, Y+23 ; 0x17 - 50c: 18 8d ldd r17, Y+24 ; 0x18 - 50e: 29 89 ldd r18, Y+17 ; 0x11 - 510: 3a 89 ldd r19, Y+18 ; 0x12 - 512: 4b 89 ldd r20, Y+19 ; 0x13 - 514: 5c 89 ldd r21, Y+20 ; 0x14 - 516: 69 2d mov r22, r9 - 518: 8a 81 ldd r24, Y+2 ; 0x02 - 51a: 9b 81 ldd r25, Y+3 ; 0x03 - 51c: 51 d2 rcall .+1186 ; 0x9c0 - 51e: 81 e4 ldi r24, 0x41 ; 65 - 520: 93 e0 ldi r25, 0x03 ; 3 - 522: 01 97 sbiw r24, 0x01 ; 1 - 524: f1 f7 brne .-4 ; 0x522 - 526: 00 00 nop + 514: a9 8c ldd r10, Y+25 ; 0x19 + 516: ba 8c ldd r11, Y+26 ; 0x1a + 518: cb 8c ldd r12, Y+27 ; 0x1b + 51a: dc 8c ldd r13, Y+28 ; 0x1c + 51c: ed 88 ldd r14, Y+21 ; 0x15 + 51e: fe 88 ldd r15, Y+22 ; 0x16 + 520: 0f 89 ldd r16, Y+23 ; 0x17 + 522: 18 8d ldd r17, Y+24 ; 0x18 + 524: 29 89 ldd r18, Y+17 ; 0x11 + 526: 3a 89 ldd r19, Y+18 ; 0x12 + 528: 4b 89 ldd r20, Y+19 ; 0x13 + 52a: 5c 89 ldd r21, Y+20 ; 0x14 + 52c: 69 2d mov r22, r9 + 52e: 8a 81 ldd r24, Y+2 ; 0x02 + 530: 9b 81 ldd r25, Y+3 ; 0x03 + 532: dd d1 rcall .+954 ; 0x8ee + 534: 81 e4 ldi r24, 0x41 ; 65 + 536: 93 e0 ldi r25, 0x03 ; 3 + 538: 01 97 sbiw r24, 0x01 ; 1 + 53a: f1 f7 brne .-4 ; 0x538 + 53c: 00 00 nop _delay_ms(1); cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); - 528: 40 e0 ldi r20, 0x00 ; 0 - 52a: 69 2d mov r22, r9 - 52c: 8a 81 ldd r24, Y+2 ; 0x02 - 52e: 9b 81 ldd r25, Y+3 ; 0x03 + 53e: 40 e0 ldi r20, 0x00 ; 0 + 540: 69 2d mov r22, r9 + 542: 8a 81 ldd r24, Y+2 ; 0x02 + 544: 9b 81 ldd r25, Y+3 ; 0x03 } - 530: df 91 pop r29 - 532: cf 91 pop r28 - 534: 1f 91 pop r17 - 536: 0f 91 pop r16 - 538: ff 90 pop r15 - 53a: ef 90 pop r14 - 53c: df 90 pop r13 - 53e: cf 90 pop r12 - 540: bf 90 pop r11 - 542: af 90 pop r10 - 544: 9f 90 pop r9 + 546: df 91 pop r29 + 548: cf 91 pop r28 + 54a: 1f 91 pop r17 + 54c: 0f 91 pop r16 + 54e: ff 90 pop r15 + 550: ef 90 pop r14 + 552: df 90 pop r13 + 554: cf 90 pop r12 + 556: bf 90 pop r11 + 558: af 90 pop r10 + 55a: 9f 90 pop r9 cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->pll_param_data.MSNx_P1, inst->pll_param_data.MSNx_P2, inst->pll_param_data.MSNx_P3); _delay_ms(1); cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->pll_param_data.MSx_P1, inst->pll_param_data.MSx_P2, inst->pll_param_data.MSx_P3); _delay_ms(1); cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); - 546: fd c2 rjmp .+1530 ; 0xb42 + 55c: 70 c2 rjmp .+1248 ; 0xa3e -00000548 : +0000055e : if(inst == NULL)return 1; return 0; } static void cqm6xx_app_updateOsc(storno_xtal_app_t *inst){ - 548: cf 93 push r28 - 54a: df 93 push r29 - 54c: fc 01 movw r30, r24 + 55e: cf 93 push r28 + 560: df 93 push r29 + 562: fc 01 movw r30, r24 #define PLLA_SETTINGS_EEPROM_ADDR 0x00 // addr 0 #define PLLB_SETTINGS_EEPROM_ADDR 0x20 // addr 32 (64 bytes total memory) static uint8_t isStructValid(storno_xtal_app_t *inst){ if(inst->si5351_dev == NULL) return 1; - 54e: 82 81 ldd r24, Z+2 ; 0x02 - 550: 93 81 ldd r25, Z+3 ; 0x03 - 552: 89 2b or r24, r25 - 554: 09 f1 breq .+66 ; 0x598 + 564: 82 81 ldd r24, Z+2 ; 0x02 + 566: 93 81 ldd r25, Z+3 ; 0x03 + 568: 89 2b or r24, r25 + 56a: 91 f1 breq .+100 ; 0x5d0 if(inst == NULL)return 1; - 556: 30 97 sbiw r30, 0x00 ; 0 - 558: f9 f0 breq .+62 ; 0x598 + 56c: 30 97 sbiw r30, 0x00 ; 0 + 56e: 81 f1 breq .+96 ; 0x5d0 // Check Struct if(isStructValid(inst) != 0)return; // We will only do this once, aka when transisioning from RX to TX and TX to RX.. if(inst->state_next == inst->state_now)return; - 55a: 81 81 ldd r24, Z+1 ; 0x01 - 55c: 90 81 ld r25, Z - 55e: 89 17 cp r24, r25 - 560: d9 f0 breq .+54 ; 0x598 - 562: ef 01 movw r28, r30 + 570: 81 81 ldd r24, Z+1 ; 0x01 + 572: 90 81 ld r25, Z + 574: 89 17 cp r24, r25 + 576: 61 f1 breq .+88 ; 0x5d0 + 578: ef 01 movw r28, r30 switch(inst->state_next){ - 564: 81 30 cpi r24, 0x01 ; 1 - 566: d9 f0 breq .+54 ; 0x59e - 568: 82 30 cpi r24, 0x02 ; 2 - 56a: b1 f4 brne .+44 ; 0x598 - 56c: 81 e4 ldi r24, 0x41 ; 65 - 56e: 93 e0 ldi r25, 0x03 ; 3 - 570: 01 97 sbiw r24, 0x01 ; 1 - 572: f1 f7 brne .-4 ; 0x570 - 574: 00 00 nop + 57a: 81 30 cpi r24, 0x01 ; 1 + 57c: 99 f0 breq .+38 ; 0x5a4 + 57e: 82 30 cpi r24, 0x02 ; 2 + 580: 39 f5 brne .+78 ; 0x5d0 + 582: 81 e4 ldi r24, 0x41 ; 65 + 584: 93 e0 ldi r25, 0x03 ; 3 + 586: 01 97 sbiw r24, 0x01 ; 1 + 588: f1 f7 brne .-4 ; 0x586 + 58a: 00 00 nop break; case STORNO_APP_TX_MODE: _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX - 576: 41 e0 ldi r20, 0x01 ; 1 - 578: 60 e0 ldi r22, 0x00 ; 0 - 57a: 82 81 ldd r24, Z+2 ; 0x02 - 57c: 93 81 ldd r25, Z+3 ; 0x03 - 57e: b4 d2 rcall .+1384 ; 0xae8 - 580: 81 e4 ldi r24, 0x41 ; 65 - 582: 93 e0 ldi r25, 0x03 ; 3 - 584: 01 97 sbiw r24, 0x01 ; 1 - 586: f1 f7 brne .-4 ; 0x584 - 588: 00 00 nop + 58c: 41 e0 ldi r20, 0x01 ; 1 + 58e: 60 e0 ldi r22, 0x00 ; 0 + 590: 82 81 ldd r24, Z+2 ; 0x02 + 592: 93 81 ldd r25, Z+3 ; 0x03 + 594: 31 d2 rcall .+1122 ; 0x9f8 + 596: 81 e4 ldi r24, 0x41 ; 65 + 598: 93 e0 ldi r25, 0x03 ; 3 + 59a: 01 97 sbiw r24, 0x01 ; 1 + 59c: f1 f7 brne .-4 ; 0x59a + 59e: 00 00 nop _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 58a: 40 e0 ldi r20, 0x00 ; 0 - 58c: 61 e0 ldi r22, 0x01 ; 1 - 58e: 8a 81 ldd r24, Y+2 ; 0x02 - 590: 9b 81 ldd r25, Y+3 ; 0x03 - break; - - } - - -} - 592: df 91 pop r29 - 594: cf 91 pop r28 - - case STORNO_APP_TX_MODE: - _delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX - _delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 596: a8 c2 rjmp .+1360 ; 0xae8 - break; - - } - - -} - 598: df 91 pop r29 - 59a: cf 91 pop r28 - 59c: 08 95 ret - 59e: 81 e4 ldi r24, 0x41 ; 65 - 5a0: 93 e0 ldi r25, 0x03 ; 3 - 5a2: 01 97 sbiw r24, 0x01 ; 1 - 5a4: f1 f7 brne .-4 ; 0x5a2 - 5a6: 00 00 nop + 5a0: 40 e0 ldi r20, 0x00 ; 0 + 5a2: 10 c0 rjmp .+32 ; 0x5c4 + 5a4: 81 e4 ldi r24, 0x41 ; 65 + 5a6: 93 e0 ldi r25, 0x03 ; 3 + 5a8: 01 97 sbiw r24, 0x01 ; 1 + 5aa: f1 f7 brne .-4 ; 0x5a8 + 5ac: 00 00 nop switch(inst->state_next){ case STORNO_APP_RX_MODE: _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_ENABLE); // RX - 5a8: 40 e0 ldi r20, 0x00 ; 0 - 5aa: 60 e0 ldi r22, 0x00 ; 0 - 5ac: 82 81 ldd r24, Z+2 ; 0x02 - 5ae: 93 81 ldd r25, Z+3 ; 0x03 - 5b0: 9b d2 rcall .+1334 ; 0xae8 - 5b2: 81 e4 ldi r24, 0x41 ; 65 - 5b4: 93 e0 ldi r25, 0x03 ; 3 - 5b6: 01 97 sbiw r24, 0x01 ; 1 - 5b8: f1 f7 brne .-4 ; 0x5b6 - 5ba: 00 00 nop + 5ae: 40 e0 ldi r20, 0x00 ; 0 + 5b0: 60 e0 ldi r22, 0x00 ; 0 + 5b2: 82 81 ldd r24, Z+2 ; 0x02 + 5b4: 93 81 ldd r25, Z+3 ; 0x03 + 5b6: 20 d2 rcall .+1088 ; 0x9f8 + 5b8: 81 e4 ldi r24, 0x41 ; 65 + 5ba: 93 e0 ldi r25, 0x03 ; 3 + 5bc: 01 97 sbiw r24, 0x01 ; 1 + 5be: f1 f7 brne .-4 ; 0x5bc + 5c0: 00 00 nop _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_DISABLE); // TX - 5bc: 41 e0 ldi r20, 0x01 ; 1 + 5c2: 41 e0 ldi r20, 0x01 ; 1 case STORNO_APP_TX_MODE: _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 5be: 61 e0 ldi r22, 0x01 ; 1 - 5c0: 8a 81 ldd r24, Y+2 ; 0x02 - 5c2: 9b 81 ldd r25, Y+3 ; 0x03 + 5c4: 61 e0 ldi r22, 0x01 ; 1 + 5c6: 8a 81 ldd r24, Y+2 ; 0x02 + 5c8: 9b 81 ldd r25, Y+3 ; 0x03 break; } } - 5c4: df 91 pop r29 - 5c6: cf 91 pop r28 + 5ca: df 91 pop r29 + 5cc: cf 91 pop r28 case STORNO_APP_TX_MODE: _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 5c8: 8f c2 rjmp .+1310 ; 0xae8 + 5ce: 14 c2 rjmp .+1064 ; 0x9f8 + break; + + } + + +} + 5d0: df 91 pop r29 + 5d2: cf 91 pop r28 + 5d4: 08 95 ret -000005ca : +000005d6 : } void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ - 5ca: 0f 93 push r16 - 5cc: 1f 93 push r17 - 5ce: cf 93 push r28 - 5d0: df 93 push r29 + 5d6: 0f 93 push r16 + 5d8: 1f 93 push r17 + 5da: cf 93 push r28 + 5dc: df 93 push r29 #define PLLA_SETTINGS_EEPROM_ADDR 0x00 // addr 0 #define PLLB_SETTINGS_EEPROM_ADDR 0x20 // addr 32 (64 bytes total memory) static uint8_t isStructValid(storno_xtal_app_t *inst){ if(inst->si5351_dev == NULL) return 1; - 5d2: fc 01 movw r30, r24 - 5d4: 22 81 ldd r18, Z+2 ; 0x02 - 5d6: 33 81 ldd r19, Z+3 ; 0x03 - 5d8: 23 2b or r18, r19 - 5da: a9 f0 breq .+42 ; 0x606 + 5de: fc 01 movw r30, r24 + 5e0: 22 81 ldd r18, Z+2 ; 0x02 + 5e2: 33 81 ldd r19, Z+3 ; 0x03 + 5e4: 23 2b or r18, r19 + 5e6: 09 f4 brne .+2 ; 0x5ea + 5e8: 65 c0 rjmp .+202 ; 0x6b4 if(inst == NULL)return 1; - 5dc: 00 97 sbiw r24, 0x00 ; 0 - 5de: 99 f0 breq .+38 ; 0x606 - 5e0: ec 01 movw r28, r24 + 5ea: 00 97 sbiw r24, 0x00 ; 0 + 5ec: 09 f4 brne .+2 ; 0x5f0 + 5ee: 62 c0 rjmp .+196 ; 0x6b4 + 5f0: ec 01 movw r28, r24 void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ // Check Struct if(isStructValid(inst) != 0)return; switch (inst->state_next) - 5e2: 81 81 ldd r24, Z+1 ; 0x01 - 5e4: 81 30 cpi r24, 0x01 ; 1 - 5e6: 09 f4 brne .+2 ; 0x5ea - 5e8: 5b c0 rjmp .+182 ; 0x6a0 - 5ea: 90 f0 brcs .+36 ; 0x610 - 5ec: 82 30 cpi r24, 0x02 ; 2 - 5ee: 59 f4 brne .+22 ; 0x606 - - break; - - case STORNO_APP_TX_MODE: - // If we just came from another state, then Enable TX osc here.. - cqm6xx_app_updateOsc(inst); - 5f0: ce 01 movw r24, r28 - 5f2: aa df rcall .-172 ; 0x548 - - // Update state now.. - inst->state_now = inst->state_next; - 5f4: 89 81 ldd r24, Y+1 ; 0x01 - 5f6: 88 83 st Y, r24 - - // If PTT is released, then disable TX osc, and go to STORNO_APP_RX_MODE, to enable rx osc. - if(gpio_get_level(GPIO_PORTA,GPIO_PIN_PTT) == GPIO_LEVEL_RESET) inst->state_next = STORNO_APP_RX_MODE; - 5f8: 63 e0 ldi r22, 0x03 ; 3 - 5fa: 80 e0 ldi r24, 0x00 ; 0 - 5fc: 79 dd rcall .-1294 ; 0xf0 - 5fe: 89 2b or r24, r25 - 600: 11 f4 brne .+4 ; 0x606 - 602: 81 e0 ldi r24, 0x01 ; 1 - 604: 89 83 std Y+1, r24 ; 0x01 - default: - break; - } - - -} - 606: df 91 pop r29 - 608: cf 91 pop r28 - 60a: 1f 91 pop r17 - 60c: 0f 91 pop r16 - 60e: 08 95 ret - - switch (inst->state_next) - { - case STORNO_APP_PROGRAM_OSC: - // Read PLL parameters from EEPROM and Program PLL values here: - inst->state_now = inst->state_next; - 610: 18 82 st Y, r1 - -} -static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ - - // Read settings for PLLA first - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 612: 8e 01 movw r16, r28 - 614: 0c 5f subi r16, 0xFC ; 252 - 616: 1f 4f sbci r17, 0xFF ; 255 - 618: 49 e1 ldi r20, 0x19 ; 25 - 61a: b8 01 movw r22, r16 - 61c: 80 e0 ldi r24, 0x00 ; 0 - 61e: 90 e0 ldi r25, 0x00 ; 0 - 620: 46 dd rcall .-1396 ; 0xae - 622: 81 e4 ldi r24, 0x41 ; 65 - 624: 93 e0 ldi r25, 0x03 ; 3 - 626: 01 97 sbiw r24, 0x01 ; 1 - 628: f1 f7 brne .-4 ; 0x626 - 62a: 00 00 nop - _delay_ms(1); - cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); - 62c: 60 e0 ldi r22, 0x00 ; 0 - 62e: 8a 81 ldd r24, Y+2 ; 0x02 - 630: 9b 81 ldd r25, Y+3 ; 0x03 - 632: dd d2 rcall .+1466 ; 0xbee - 634: e1 e4 ldi r30, 0x41 ; 65 - 636: f3 e0 ldi r31, 0x03 ; 3 - 638: 31 97 sbiw r30, 0x01 ; 1 - 63a: f1 f7 brne .-4 ; 0x638 - 63c: 00 00 nop - _delay_ms(1); - - - cqm_setPLLParam(inst, SI5351_PLL_A, SI5351_OUTPUT_0); - 63e: 40 e0 ldi r20, 0x00 ; 0 - 640: 60 e0 ldi r22, 0x00 ; 0 - 642: ce 01 movw r24, r28 - 644: 3b df rcall .-394 ; 0x4bc - 646: 81 e4 ldi r24, 0x41 ; 65 - 648: 93 e0 ldi r25, 0x03 ; 3 - 64a: 01 97 sbiw r24, 0x01 ; 1 - 64c: f1 f7 brne .-4 ; 0x64a - 64e: 00 00 nop - _delay_ms(1); - - - cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 650: 49 e1 ldi r20, 0x19 ; 25 - 652: b8 01 movw r22, r16 - 654: 80 e2 ldi r24, 0x20 ; 32 - 656: 90 e0 ldi r25, 0x00 ; 0 - 658: 2a dd rcall .-1452 ; 0xae - 65a: e1 e4 ldi r30, 0x41 ; 65 - 65c: f3 e0 ldi r31, 0x03 ; 3 - 65e: 31 97 sbiw r30, 0x01 ; 1 - 660: f1 f7 brne .-4 ; 0x65e - 662: 00 00 nop - _delay_ms(1); - cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); - 664: 41 e0 ldi r20, 0x01 ; 1 - 666: 61 e0 ldi r22, 0x01 ; 1 - 668: ce 01 movw r24, r28 - 66a: 28 df rcall .-432 ; 0x4bc - - - // Set third output to crystal freq for calibration! - cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_2); - 66c: 42 e0 ldi r20, 0x02 ; 2 - 66e: 61 e0 ldi r22, 0x01 ; 1 - 670: ce 01 movw r24, r28 - 672: 24 df rcall .-440 ; 0x4bc - cm_setCLKControl(inst->si5351_dev, SI5351_OUTPUT_2,SI5351_CLK_POWER_UP); - 674: 40 e0 ldi r20, 0x00 ; 0 - 676: 62 e0 ldi r22, 0x02 ; 2 - 678: 8a 81 ldd r24, Y+2 ; 0x02 - 67a: 9b 81 ldd r25, Y+3 ; 0x03 - 67c: 62 d2 rcall .+1220 ; 0xb42 - 67e: 81 e4 ldi r24, 0x41 ; 65 - 680: 93 e0 ldi r25, 0x03 ; 3 - 682: 01 97 sbiw r24, 0x01 ; 1 - 684: f1 f7 brne .-4 ; 0x682 - 686: 00 00 nop - _delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_2,SI5351_OUTPUT_ENABLE); - 688: 40 e0 ldi r20, 0x00 ; 0 - 68a: 62 e0 ldi r22, 0x02 ; 2 - 68c: 8a 81 ldd r24, Y+2 ; 0x02 - 68e: 9b 81 ldd r25, Y+3 ; 0x03 - 690: 2b d2 rcall .+1110 ; 0xae8 - - cqm6xx_app_loadPLLParam(inst); - - - // if ok, then go to RX mode: - inst->state_next = STORNO_APP_RX_MODE; - 692: 81 e0 ldi r24, 0x01 ; 1 - 694: 89 83 std Y+1, r24 ; 0x01 - default: - break; - } - - -} - 696: df 91 pop r29 - 698: cf 91 pop r28 - 69a: 1f 91 pop r17 - 69c: 0f 91 pop r16 - 69e: 08 95 ret + 5f2: 81 81 ldd r24, Z+1 ; 0x01 + 5f4: 81 30 cpi r24, 0x01 ; 1 + 5f6: 61 f4 brne .+24 ; 0x610 break; case STORNO_APP_RX_MODE: // If we just came from another state, then Enable RX osc here.. cqm6xx_app_updateOsc(inst); - 6a0: ce 01 movw r24, r28 - 6a2: 52 df rcall .-348 ; 0x548 + 5f8: ce 01 movw r24, r28 + 5fa: b1 df rcall .-158 ; 0x55e // Update state now.. inst->state_now = inst->state_next; - 6a4: 89 81 ldd r24, Y+1 ; 0x01 - 6a6: 88 83 st Y, r24 + 5fc: 89 81 ldd r24, Y+1 ; 0x01 + 5fe: 88 83 st Y, r24 // If PTT is hold, then disable RX osc, and go to STORNO_APP_TX_MODE, to enable tx osc. if(gpio_get_level(GPIO_PORTA,GPIO_PIN_PTT) == GPIO_LEVEL_SET) inst->state_next = STORNO_APP_TX_MODE; - 6a8: 63 e0 ldi r22, 0x03 ; 3 - 6aa: 80 e0 ldi r24, 0x00 ; 0 - 6ac: 21 dd rcall .-1470 ; 0xf0 - 6ae: 01 97 sbiw r24, 0x01 ; 1 - 6b0: 09 f0 breq .+2 ; 0x6b4 - 6b2: a9 cf rjmp .-174 ; 0x606 - 6b4: 82 e0 ldi r24, 0x02 ; 2 - 6b6: 89 83 std Y+1, r24 ; 0x01 - 6b8: a6 cf rjmp .-180 ; 0x606 - -000006ba : + 600: 63 e0 ldi r22, 0x03 ; 3 + 602: 80 e0 ldi r24, 0x00 ; 0 + 604: 69 dd rcall .-1326 ; 0xd8 + 606: 01 97 sbiw r24, 0x01 ; 1 + 608: 09 f0 breq .+2 ; 0x60c + 60a: 54 c0 rjmp .+168 ; 0x6b4 + 60c: 82 e0 ldi r24, 0x02 ; 2 + 60e: 45 c0 rjmp .+138 ; 0x69a +void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ + + // Check Struct + if(isStructValid(inst) != 0)return; + + switch (inst->state_next) + 610: 81 30 cpi r24, 0x01 ; 1 + 612: 08 f0 brcs .+2 ; 0x616 + 614: 44 c0 rjmp .+136 ; 0x69e + { + case STORNO_APP_PROGRAM_OSC: + // Read PLL parameters from EEPROM and Program PLL values here: + inst->state_now = inst->state_next; + 616: 18 82 st Y, r1 + +} +static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ + + // Read settings for PLLA first + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + 618: 8e 01 movw r16, r28 + 61a: 0c 5f subi r16, 0xFC ; 252 + 61c: 1f 4f sbci r17, 0xFF ; 255 + 61e: 4d e1 ldi r20, 0x1D ; 29 + 620: b8 01 movw r22, r16 + 622: 80 e0 ldi r24, 0x00 ; 0 + 624: 90 e0 ldi r25, 0x00 ; 0 + 626: 3d dd rcall .-1414 ; 0xa2 + 628: 81 e4 ldi r24, 0x41 ; 65 + 62a: 93 e0 ldi r25, 0x03 ; 3 + 62c: 01 97 sbiw r24, 0x01 ; 1 + 62e: f1 f7 brne .-4 ; 0x62c + 630: 00 00 nop + _delay_ms(1); + cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); + 632: 60 e0 ldi r22, 0x00 ; 0 + 634: 8a 81 ldd r24, Y+2 ; 0x02 + 636: 9b 81 ldd r25, Y+3 ; 0x03 + 638: 3d d2 rcall .+1146 ; 0xab4 + 63a: e1 e4 ldi r30, 0x41 ; 65 + 63c: f3 e0 ldi r31, 0x03 ; 3 + 63e: 31 97 sbiw r30, 0x01 ; 1 + 640: f1 f7 brne .-4 ; 0x63e + 642: 00 00 nop + _delay_ms(1); + + + cqm_setPLLParam(inst, SI5351_PLL_A, SI5351_OUTPUT_0); + 644: 40 e0 ldi r20, 0x00 ; 0 + 646: 60 e0 ldi r22, 0x00 ; 0 + 648: ce 01 movw r24, r28 + 64a: 43 df rcall .-378 ; 0x4d2 + 64c: 81 e4 ldi r24, 0x41 ; 65 + 64e: 93 e0 ldi r25, 0x03 ; 3 + 650: 01 97 sbiw r24, 0x01 ; 1 + 652: f1 f7 brne .-4 ; 0x650 + 654: 00 00 nop + _delay_ms(1); + + + cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + 656: 4d e1 ldi r20, 0x1D ; 29 + 658: b8 01 movw r22, r16 + 65a: 80 e2 ldi r24, 0x20 ; 32 + 65c: 90 e0 ldi r25, 0x00 ; 0 + 65e: 21 dd rcall .-1470 ; 0xa2 + 660: e1 e4 ldi r30, 0x41 ; 65 + 662: f3 e0 ldi r31, 0x03 ; 3 + 664: 31 97 sbiw r30, 0x01 ; 1 + 666: f1 f7 brne .-4 ; 0x664 + 668: 00 00 nop + _delay_ms(1); + cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); + 66a: 41 e0 ldi r20, 0x01 ; 1 + 66c: 61 e0 ldi r22, 0x01 ; 1 + 66e: ce 01 movw r24, r28 + 670: 30 df rcall .-416 ; 0x4d2 + + + // Set third output to crystal freq for calibration! + cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_2); + 672: 42 e0 ldi r20, 0x02 ; 2 + 674: 61 e0 ldi r22, 0x01 ; 1 + 676: ce 01 movw r24, r28 + 678: 2c df rcall .-424 ; 0x4d2 + cm_setCLKControl(inst->si5351_dev, SI5351_OUTPUT_2,SI5351_CLK_POWER_UP); + 67a: 40 e0 ldi r20, 0x00 ; 0 + 67c: 62 e0 ldi r22, 0x02 ; 2 + 67e: 8a 81 ldd r24, Y+2 ; 0x02 + 680: 9b 81 ldd r25, Y+3 ; 0x03 + 682: dd d1 rcall .+954 ; 0xa3e + 684: 81 e4 ldi r24, 0x41 ; 65 + 686: 93 e0 ldi r25, 0x03 ; 3 + 688: 01 97 sbiw r24, 0x01 ; 1 + 68a: f1 f7 brne .-4 ; 0x688 + 68c: 00 00 nop + _delay_ms(1); + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_2,SI5351_OUTPUT_ENABLE); + 68e: 40 e0 ldi r20, 0x00 ; 0 + 690: 62 e0 ldi r22, 0x02 ; 2 + 692: 8a 81 ldd r24, Y+2 ; 0x02 + 694: 9b 81 ldd r25, Y+3 ; 0x03 + 696: b0 d1 rcall .+864 ; 0x9f8 + + // Update state now.. + inst->state_now = inst->state_next; + + // If PTT is released, then disable TX osc, and go to STORNO_APP_RX_MODE, to enable rx osc. + if(gpio_get_level(GPIO_PORTA,GPIO_PIN_PTT) == GPIO_LEVEL_RESET) inst->state_next = STORNO_APP_RX_MODE; + 698: 81 e0 ldi r24, 0x01 ; 1 + 69a: 89 83 std Y+1, r24 ; 0x01 + 69c: 0b c0 rjmp .+22 ; 0x6b4 +void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ + + // Check Struct + if(isStructValid(inst) != 0)return; + + switch (inst->state_next) + 69e: 82 30 cpi r24, 0x02 ; 2 + 6a0: 49 f4 brne .+18 ; 0x6b4 + + break; + + case STORNO_APP_TX_MODE: + // If we just came from another state, then Enable TX osc here.. + cqm6xx_app_updateOsc(inst); + 6a2: ce 01 movw r24, r28 + 6a4: 5c df rcall .-328 ; 0x55e + + // Update state now.. + inst->state_now = inst->state_next; + 6a6: 89 81 ldd r24, Y+1 ; 0x01 + 6a8: 88 83 st Y, r24 + + // If PTT is released, then disable TX osc, and go to STORNO_APP_RX_MODE, to enable rx osc. + if(gpio_get_level(GPIO_PORTA,GPIO_PIN_PTT) == GPIO_LEVEL_RESET) inst->state_next = STORNO_APP_RX_MODE; + 6aa: 63 e0 ldi r22, 0x03 ; 3 + 6ac: 80 e0 ldi r24, 0x00 ; 0 + 6ae: 14 dd rcall .-1496 ; 0xd8 + 6b0: 89 2b or r24, r25 + 6b2: 91 f3 breq .-28 ; 0x698 + default: + break; } } + 6b4: df 91 pop r29 + 6b6: cf 91 pop r28 + 6b8: 1f 91 pop r17 + 6ba: 0f 91 pop r16 + 6bc: 08 95 ret + +000006be : void programPLL_Parameters(storno_xtal_app_t *inst){ - 6ba: cf 93 push r28 - 6bc: df 93 push r29 - 6be: ec 01 movw r28, r24 + 6be: cf 93 push r28 + 6c0: df 93 push r29 + 6c2: ec 01 movw r28, r24 + + uint8_t *data_ptr = (void *)&inst->pll_param_data; //Burn settings into eeprom here: switch(inst->pll_param_data.PLL_Ident){ - 6c0: 8c 81 ldd r24, Y+4 ; 0x04 - 6c2: 88 23 and r24, r24 - 6c4: 69 f0 breq .+26 ; 0x6e0 + 6c4: 8c 81 ldd r24, Y+4 ; 0x04 6c6: 81 30 cpi r24, 0x01 ; 1 - 6c8: 39 f4 brne .+14 ; 0x6d8 + 6c8: 99 f0 breq .+38 ; 0x6f0 + 6ca: 58 f0 brcs .+22 ; 0x6e2 + 6cc: 8e 3f cpi r24, 0xFE ; 254 + 6ce: c1 f0 breq .+48 ; 0x700 + 6d0: 8f 3f cpi r24, 0xFF ; 255 + 6d2: e9 f4 brne .+58 ; 0x70e + case MSG_GET_PLLA_PARAM: + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + break; + + case MSG_GET_PLLB_PARAM: + cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + 6d4: 4d e1 ldi r20, 0x1D ; 29 + 6d6: be 01 movw r22, r28 + 6d8: 6c 5f subi r22, 0xFC ; 252 + 6da: 7f 4f sbci r23, 0xFF ; 255 + 6dc: 80 e2 ldi r24, 0x20 ; 32 + 6de: 90 e0 ldi r25, 0x00 ; 0 + 6e0: 15 c0 rjmp .+42 ; 0x70c + + //Burn settings into eeprom here: + switch(inst->pll_param_data.PLL_Ident){ + case MSG_PLLA_PARAM: cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); + 6e2: 4d e1 ldi r20, 0x1D ; 29 + 6e4: be 01 movw r22, r28 + 6e6: 6c 5f subi r22, 0xFC ; 252 + 6e8: 7f 4f sbci r23, 0xFF ; 255 + 6ea: 80 e0 ldi r24, 0x00 ; 0 + 6ec: 90 e0 ldi r25, 0x00 ; 0 + 6ee: 06 c0 rjmp .+12 ; 0x6fc break; case MSG_PLLB_PARAM: cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 6ca: 49 e1 ldi r20, 0x19 ; 25 - 6cc: be 01 movw r22, r28 - 6ce: 6c 5f subi r22, 0xFC ; 252 - 6d0: 7f 4f sbci r23, 0xFF ; 255 - 6d2: 80 e2 ldi r24, 0x20 ; 32 - 6d4: 90 e0 ldi r25, 0x00 ; 0 - 6d6: ca dc rcall .-1644 ; 0x6c - } - - // Send status back maybe.. - - //Force state machine to load new settings from eeprom: - inst->state_next = STORNO_APP_PROGRAM_OSC; - 6d8: 19 82 std Y+1, r1 ; 0x01 - -} - 6da: df 91 pop r29 - 6dc: cf 91 pop r28 - 6de: 08 95 ret - - //Burn settings into eeprom here: - switch(inst->pll_param_data.PLL_Ident){ + 6f0: 4d e1 ldi r20, 0x1D ; 29 + 6f2: be 01 movw r22, r28 + 6f4: 6c 5f subi r22, 0xFC ; 252 + 6f6: 7f 4f sbci r23, 0xFF ; 255 + 6f8: 80 e2 ldi r24, 0x20 ; 32 + 6fa: 90 e0 ldi r25, 0x00 ; 0 + 6fc: b7 dc rcall .-1682 ; 0x6c + break; + 6fe: 07 c0 rjmp .+14 ; 0x70e - case MSG_PLLA_PARAM: - cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 6e0: 49 e1 ldi r20, 0x19 ; 25 - 6e2: be 01 movw r22, r28 - 6e4: 6c 5f subi r22, 0xFC ; 252 - 6e6: 7f 4f sbci r23, 0xFF ; 255 - 6e8: 80 e0 ldi r24, 0x00 ; 0 - 6ea: 90 e0 ldi r25, 0x00 ; 0 - 6ec: bf dc rcall .-1666 ; 0x6c + case MSG_GET_PLLA_PARAM: + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + 700: 4d e1 ldi r20, 0x1D ; 29 + 702: be 01 movw r22, r28 + 704: 6c 5f subi r22, 0xFC ; 252 + 706: 7f 4f sbci r23, 0xFF ; 255 + 708: 80 e0 ldi r24, 0x00 ; 0 + 70a: 90 e0 ldi r25, 0x00 ; 0 + break; + + case MSG_GET_PLLB_PARAM: + cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + 70c: ca dc rcall .-1644 ; 0xa2 } // Send status back maybe.. //Force state machine to load new settings from eeprom: inst->state_next = STORNO_APP_PROGRAM_OSC; - 6ee: 19 82 std Y+1, r1 ; 0x01 + 70e: 19 82 std Y+1, r1 ; 0x01 } - 6f0: df 91 pop r29 - 6f2: cf 91 pop r28 - 6f4: 08 95 ret + 710: df 91 pop r29 + 712: cf 91 pop r28 + 714: 08 95 ret -000006f6 : +00000716 : } int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ memcpy(&inst->pll_param_data,rxData,sizeof(storno_pll_param_msg)); - 6f6: dc 01 movw r26, r24 - 6f8: 14 96 adiw r26, 0x04 ; 4 - 6fa: 29 e1 ldi r18, 0x19 ; 25 - 6fc: fb 01 movw r30, r22 - 6fe: 01 90 ld r0, Z+ - 700: 0d 92 st X+, r0 - 702: 2a 95 dec r18 - 704: e1 f7 brne .-8 ; 0x6fe + 716: dc 01 movw r26, r24 + 718: 14 96 adiw r26, 0x04 ; 4 + 71a: 2d e1 ldi r18, 0x1D ; 29 + 71c: fb 01 movw r30, r22 + 71e: 01 90 ld r0, Z+ + 720: 0d 92 st X+, r0 + 722: 2a 95 dec r18 + 724: e1 f7 brne .-8 ; 0x71e programPLL_Parameters(inst); - 706: d9 df rcall .-78 ; 0x6ba + 726: cb df rcall .-106 ; 0x6be return 0; } - 708: 80 e0 ldi r24, 0x00 ; 0 - 70a: 90 e0 ldi r25, 0x00 ; 0 - 70c: 08 95 ret + 728: 80 e0 ldi r24, 0x00 ; 0 + 72a: 90 e0 ldi r25, 0x00 ; 0 + 72c: 08 95 ret -0000070e : +0000072e : void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev){ - 70e: 0f 93 push r16 - 710: 1f 93 push r17 - 712: cf 93 push r28 - 714: df 93 push r29 + 72e: 0f 93 push r16 + 730: 1f 93 push r17 + 732: cf 93 push r28 + 734: df 93 push r29 if(si5351_dev == NULL) return; - 716: 61 15 cp r22, r1 - 718: 71 05 cpc r23, r1 - 71a: 11 f1 breq .+68 ; 0x760 + 736: 61 15 cp r22, r1 + 738: 71 05 cpc r23, r1 + 73a: 09 f4 brne .+2 ; 0x73e + 73c: 6b c0 rjmp .+214 ; 0x814 if(inst == NULL)return; - 71c: 00 97 sbiw r24, 0x00 ; 0 - 71e: 01 f1 breq .+64 ; 0x760 - 720: ec 01 movw r28, r24 + 73e: 00 97 sbiw r24, 0x00 ; 0 + 740: 09 f4 brne .+2 ; 0x744 + 742: 68 c0 rjmp .+208 ; 0x814 + 744: ec 01 movw r28, r24 inst->state_next = STORNO_APP_PROGRAM_OSC; - 722: 19 82 std Y+1, r1 ; 0x01 + 746: 19 82 std Y+1, r1 ; 0x01 inst->state_now = STORNO_APP_PROGRAM_OSC; - 724: 18 82 st Y, r1 + 748: 18 82 st Y, r1 inst->si5351_dev = si5351_dev; - 726: 6a 83 std Y+2, r22 ; 0x02 - 728: 7b 83 std Y+3, r23 ; 0x03 + 74a: 6a 83 std Y+2, r22 ; 0x02 + 74c: 7b 83 std Y+3, r23 ; 0x03 cm_MsgCompleteEvt_Register(inst,(Get_msgComplete_Event_fpt)uart_rx_event); - 72a: 6b e7 ldi r22, 0x7B ; 123 - 72c: 73 e0 ldi r23, 0x03 ; 3 - 72e: b8 de rcall .-656 ; 0x4a0 + 74e: 6b e8 ldi r22, 0x8B ; 139 + 750: 73 e0 ldi r23, 0x03 ; 3 + 752: b1 de rcall .-670 ; 0x4b6 cm_uart_init(inst,(get_UART_Event_fpt)cm_msg_DecodeMsg_Byte); - 730: 66 ef ldi r22, 0xF6 ; 246 - 732: 71 e0 ldi r23, 0x01 ; 1 - 734: ce 01 movw r24, r28 - 736: f5 dd rcall .-1046 ; 0x322 + 754: 6b e0 ldi r22, 0x0B ; 11 + 756: 72 e0 ldi r23, 0x02 ; 2 + 758: ce 01 movw r24, r28 + 75a: fd dd rcall .-1030 ; 0x356 } static int isEEPROMValid(storno_xtal_app_t *inst){ cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 738: 8e 01 movw r16, r28 - 73a: 0c 5f subi r16, 0xFC ; 252 - 73c: 1f 4f sbci r17, 0xFF ; 255 - 73e: 49 e1 ldi r20, 0x19 ; 25 - 740: b8 01 movw r22, r16 - 742: 80 e0 ldi r24, 0x00 ; 0 - 744: 90 e0 ldi r25, 0x00 ; 0 - 746: b3 dc rcall .-1690 ; 0xae - 748: f8 01 movw r30, r16 - 74a: 9e 01 movw r18, r28 - 74c: 23 5e subi r18, 0xE3 ; 227 - 74e: 3f 4f sbci r19, 0xFF ; 255 - 750: 03 c0 rjmp .+6 ; 0x758 + 75c: 8e 01 movw r16, r28 + 75e: 0c 5f subi r16, 0xFC ; 252 + 760: 1f 4f sbci r17, 0xFF ; 255 + 762: 4d e1 ldi r20, 0x1D ; 29 + 764: b8 01 movw r22, r16 + 766: 80 e0 ldi r24, 0x00 ; 0 + 768: 90 e0 ldi r25, 0x00 ; 0 + 76a: 9b dc rcall .-1738 ; 0xa2 + 76c: f8 01 movw r30, r16 + 76e: 9e 01 movw r18, r28 + 770: 2f 5d subi r18, 0xDF ; 223 + 772: 3f 4f sbci r19, 0xFF ; 255 uint8_t *ptr = (void*)&inst->pll_param_data; for (uint32_t idx = 0; idx < sizeof(storno_pll_param_msg); idx++ ) - 752: e2 17 cp r30, r18 - 754: f3 07 cpc r31, r19 - 756: 49 f0 breq .+18 ; 0x76a { if ((*ptr != 0xff) && (*ptr != 0x00)) - 758: 91 91 ld r25, Z+ - 75a: 91 50 subi r25, 0x01 ; 1 - 75c: 9e 3f cpi r25, 0xFE ; 254 - 75e: c8 f7 brcc .-14 ; 0x752 - if(!isEEPROMValid(inst)){ - // If settings are somehow unvalid, then write default settings.. - writeDefaultSettingsEEprom(inst); - } + 774: 81 91 ld r24, Z+ + 776: 81 50 subi r24, 0x01 ; 1 + 778: 8e 3f cpi r24, 0xFE ; 254 + 77a: 08 f4 brcc .+2 ; 0x77e + 77c: 4b c0 rjmp .+150 ; 0x814 - 760: df 91 pop r29 - 762: cf 91 pop r28 - 764: 1f 91 pop r17 - 766: 0f 91 pop r16 - 768: 08 95 ret + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + + uint8_t *ptr = (void*)&inst->pll_param_data; + + for (uint32_t idx = 0; idx < sizeof(storno_pll_param_msg); idx++ ) + 77e: e2 17 cp r30, r18 + 780: f3 07 cpc r31, r19 + 782: c1 f7 brne .-16 ; 0x774 } static int writeDefaultSettingsEEprom(storno_xtal_app_t *inst){ inst->pll_param_data.PLL_Ident = 0; - 76a: 1c 82 std Y+4, r1 ; 0x04 + 784: 1c 82 std Y+4, r1 ; 0x04 inst->pll_param_data.MSNx_P1 = 3395; - 76c: 83 e4 ldi r24, 0x43 ; 67 - 76e: 9d e0 ldi r25, 0x0D ; 13 - 770: a0 e0 ldi r26, 0x00 ; 0 - 772: b0 e0 ldi r27, 0x00 ; 0 - 774: 8d 83 std Y+5, r24 ; 0x05 - 776: 9e 83 std Y+6, r25 ; 0x06 - 778: af 83 std Y+7, r26 ; 0x07 - 77a: b8 87 std Y+8, r27 ; 0x08 + 786: 83 e4 ldi r24, 0x43 ; 67 + 788: 9d e0 ldi r25, 0x0D ; 13 + 78a: a0 e0 ldi r26, 0x00 ; 0 + 78c: b0 e0 ldi r27, 0x00 ; 0 + 78e: 8d 83 std Y+5, r24 ; 0x05 + 790: 9e 83 std Y+6, r25 ; 0x06 + 792: af 83 std Y+7, r26 ; 0x07 + 794: b8 87 std Y+8, r27 ; 0x08 inst->pll_param_data.MSNx_P2 = 11510; - 77c: 86 ef ldi r24, 0xF6 ; 246 - 77e: 9c e2 ldi r25, 0x2C ; 44 - 780: a0 e0 ldi r26, 0x00 ; 0 - 782: b0 e0 ldi r27, 0x00 ; 0 - 784: 89 87 std Y+9, r24 ; 0x09 - 786: 9a 87 std Y+10, r25 ; 0x0a - 788: ab 87 std Y+11, r26 ; 0x0b - 78a: bc 87 std Y+12, r27 ; 0x0c + 796: 86 ef ldi r24, 0xF6 ; 246 + 798: 9c e2 ldi r25, 0x2C ; 44 + 79a: a0 e0 ldi r26, 0x00 ; 0 + 79c: b0 e0 ldi r27, 0x00 ; 0 + 79e: 89 87 std Y+9, r24 ; 0x09 + 7a0: 9a 87 std Y+10, r25 ; 0x0a + 7a2: ab 87 std Y+11, r26 ; 0x0b + 7a4: bc 87 std Y+12, r27 ; 0x0c inst->pll_param_data.MSNx_P3 = 1067099; - 78c: 8b e5 ldi r24, 0x5B ; 91 - 78e: 98 e4 ldi r25, 0x48 ; 72 - 790: a0 e1 ldi r26, 0x10 ; 16 - 792: b0 e0 ldi r27, 0x00 ; 0 - 794: 8d 87 std Y+13, r24 ; 0x0d - 796: 9e 87 std Y+14, r25 ; 0x0e - 798: af 87 std Y+15, r26 ; 0x0f - 79a: b8 8b std Y+16, r27 ; 0x10 + 7a6: 8b e5 ldi r24, 0x5B ; 91 + 7a8: 98 e4 ldi r25, 0x48 ; 72 + 7aa: a0 e1 ldi r26, 0x10 ; 16 + 7ac: b0 e0 ldi r27, 0x00 ; 0 + 7ae: 8d 87 std Y+13, r24 ; 0x0d + 7b0: 9e 87 std Y+14, r25 ; 0x0e + 7b2: af 87 std Y+15, r26 ; 0x0f + 7b4: b8 8b std Y+16, r27 ; 0x10 inst->pll_param_data.MSx_P1 = 18; - 79c: 82 e1 ldi r24, 0x12 ; 18 - 79e: 90 e0 ldi r25, 0x00 ; 0 - 7a0: a0 e0 ldi r26, 0x00 ; 0 - 7a2: b0 e0 ldi r27, 0x00 ; 0 - 7a4: 89 8b std Y+17, r24 ; 0x11 - 7a6: 9a 8b std Y+18, r25 ; 0x12 - 7a8: ab 8b std Y+19, r26 ; 0x13 - 7aa: bc 8b std Y+20, r27 ; 0x14 + 7b6: 82 e1 ldi r24, 0x12 ; 18 + 7b8: 90 e0 ldi r25, 0x00 ; 0 + 7ba: a0 e0 ldi r26, 0x00 ; 0 + 7bc: b0 e0 ldi r27, 0x00 ; 0 + 7be: 89 8b std Y+17, r24 ; 0x11 + 7c0: 9a 8b std Y+18, r25 ; 0x12 + 7c2: ab 8b std Y+19, r26 ; 0x13 + 7c4: bc 8b std Y+20, r27 ; 0x14 inst->pll_param_data.MSx_P2 = 0; - 7ac: 1d 8a std Y+21, r1 ; 0x15 - 7ae: 1e 8a std Y+22, r1 ; 0x16 - 7b0: 1f 8a std Y+23, r1 ; 0x17 - 7b2: 18 8e std Y+24, r1 ; 0x18 + 7c6: 1d 8a std Y+21, r1 ; 0x15 + 7c8: 1e 8a std Y+22, r1 ; 0x16 + 7ca: 1f 8a std Y+23, r1 ; 0x17 + 7cc: 18 8e std Y+24, r1 ; 0x18 inst->pll_param_data.MSx_P3 = 1; - 7b4: 81 e0 ldi r24, 0x01 ; 1 - 7b6: 90 e0 ldi r25, 0x00 ; 0 - 7b8: a0 e0 ldi r26, 0x00 ; 0 - 7ba: b0 e0 ldi r27, 0x00 ; 0 - 7bc: 89 8f std Y+25, r24 ; 0x19 - 7be: 9a 8f std Y+26, r25 ; 0x1a - 7c0: ab 8f std Y+27, r26 ; 0x1b - 7c2: bc 8f std Y+28, r27 ; 0x1c + 7ce: 81 e0 ldi r24, 0x01 ; 1 + 7d0: 90 e0 ldi r25, 0x00 ; 0 + 7d2: a0 e0 ldi r26, 0x00 ; 0 + 7d4: b0 e0 ldi r27, 0x00 ; 0 + 7d6: 89 8f std Y+25, r24 ; 0x19 + 7d8: 9a 8f std Y+26, r25 ; 0x1a + 7da: ab 8f std Y+27, r26 ; 0x1b + 7dc: bc 8f std Y+28, r27 ; 0x1c + inst->pll_param_data.XtalFreq = 25000000; + 7de: 80 e4 ldi r24, 0x40 ; 64 + 7e0: 98 e7 ldi r25, 0x78 ; 120 + 7e2: ad e7 ldi r26, 0x7D ; 125 + 7e4: b1 e0 ldi r27, 0x01 ; 1 + 7e6: 8d 8f std Y+29, r24 ; 0x1d + 7e8: 9e 8f std Y+30, r25 ; 0x1e + 7ea: af 8f std Y+31, r26 ; 0x1f + 7ec: b8 a3 std Y+32, r27 ; 0x20 cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 7c4: 49 e1 ldi r20, 0x19 ; 25 - 7c6: b8 01 movw r22, r16 - 7c8: 80 e0 ldi r24, 0x00 ; 0 - 7ca: 90 e0 ldi r25, 0x00 ; 0 - 7cc: 4f dc rcall .-1890 ; 0x6c - 7ce: 81 e4 ldi r24, 0x41 ; 65 - 7d0: 93 e0 ldi r25, 0x03 ; 3 - 7d2: 01 97 sbiw r24, 0x01 ; 1 - 7d4: f1 f7 brne .-4 ; 0x7d2 - 7d6: 00 00 nop + 7ee: 4d e1 ldi r20, 0x1D ; 29 + 7f0: b8 01 movw r22, r16 + 7f2: 80 e0 ldi r24, 0x00 ; 0 + 7f4: 90 e0 ldi r25, 0x00 ; 0 + 7f6: 3a dc rcall .-1932 ; 0x6c + 7f8: 81 e4 ldi r24, 0x41 ; 65 + 7fa: 93 e0 ldi r25, 0x03 ; 3 + 7fc: 01 97 sbiw r24, 0x01 ; 1 + 7fe: f1 f7 brne .-4 ; 0x7fc + 800: 00 00 nop _delay_ms(1); cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 7d8: 49 e1 ldi r20, 0x19 ; 25 - 7da: b8 01 movw r22, r16 - 7dc: 80 e2 ldi r24, 0x20 ; 32 - 7de: 90 e0 ldi r25, 0x00 ; 0 + 802: 4d e1 ldi r20, 0x1D ; 29 + 804: b8 01 movw r22, r16 + 806: 80 e2 ldi r24, 0x20 ; 32 + 808: 90 e0 ldi r25, 0x00 ; 0 if(!isEEPROMValid(inst)){ // If settings are somehow unvalid, then write default settings.. writeDefaultSettingsEEprom(inst); } - 7e0: df 91 pop r29 - 7e2: cf 91 pop r28 - 7e4: 1f 91 pop r17 - 7e6: 0f 91 pop r16 - inst->pll_param_data.MSx_P2 = 0; + 80a: df 91 pop r29 + 80c: cf 91 pop r28 + 80e: 1f 91 pop r17 + 810: 0f 91 pop r16 inst->pll_param_data.MSx_P3 = 1; + inst->pll_param_data.XtalFreq = 25000000; cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); _delay_ms(1); cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 7e8: 41 cc rjmp .-1918 ; 0x6c + 812: 2c cc rjmp .-1960 ; 0x6c + if(!isEEPROMValid(inst)){ + // If settings are somehow unvalid, then write default settings.. + writeDefaultSettingsEEprom(inst); + } + + 814: df 91 pop r29 + 816: cf 91 pop r28 + 818: 1f 91 pop r17 + 81a: 0f 91 pop r16 + 81c: 08 95 ret -000007ea
: +0000081e
: #include "avr_eeprom_driver/avr_eeprom_driver.h" storno_xtal_app_t storno_xtal_app; int main(void) { - 7ea: cf 93 push r28 - 7ec: df 93 push r29 - 7ee: cd b7 in r28, 0x3d ; 61 - 7f0: de b7 in r29, 0x3e ; 62 - 7f2: cb 55 subi r28, 0x5B ; 91 - 7f4: d1 09 sbc r29, r1 - 7f6: cd bf out 0x3d, r28 ; 61 - 7f8: de bf out 0x3e, r29 ; 62 + 81e: cf 93 push r28 + 820: df 93 push r29 + 822: cd b7 in r28, 0x3d ; 61 + 824: de b7 in r29, 0x3e ; 62 + 826: cb 55 subi r28, 0x5B ; 91 + 828: d1 09 sbc r29, r1 + 82a: cd bf out 0x3d, r28 ; 61 + 82c: de bf out 0x3e, r29 ; 62 /* Replace with your application code */ // Init Periphials cm_i2c_init(NULL); - 7fa: 80 e0 ldi r24, 0x00 ; 0 - 7fc: 90 e0 ldi r25, 0x00 ; 0 - 7fe: 06 dd rcall .-1524 ; 0x20c + 82e: 80 e0 ldi r24, 0x00 ; 0 + 830: 90 e0 ldi r25, 0x00 ; 0 + 832: 19 dd rcall .-1486 ; 0x266 // Add devices cm_i2c_device_t si5351_i2c; cm_i2c_addDev(&si5351_i2c,NULL,0x60); - 800: 40 e6 ldi r20, 0x60 ; 96 - 802: 60 e0 ldi r22, 0x00 ; 0 - 804: 70 e0 ldi r23, 0x00 ; 0 - 806: ce 01 movw r24, r28 - 808: 87 5a subi r24, 0xA7 ; 167 - 80a: 9f 4f sbci r25, 0xFF ; 255 - 80c: 19 dd rcall .-1486 ; 0x240 + 834: 40 e6 ldi r20, 0x60 ; 96 + 836: 60 e0 ldi r22, 0x00 ; 0 + 838: 70 e0 ldi r23, 0x00 ; 0 + 83a: ce 01 movw r24, r28 + 83c: 87 5a subi r24, 0xA7 ; 167 + 83e: 9f 4f sbci r25, 0xFF ; 255 + 840: 2c dd rcall .-1448 ; 0x29a // Init Devices: si5351_driver si5351_dev; - cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); - 80e: 4f e3 ldi r20, 0x3F ; 63 - 810: 51 e0 ldi r21, 0x01 ; 1 - 812: be 01 movw r22, r28 - 814: 67 5a subi r22, 0xA7 ; 167 - 816: 7f 4f sbci r23, 0xFF ; 255 - 818: ce 01 movw r24, r28 - 81a: 01 96 adiw r24, 0x01 ; 1 - 81c: 0d d2 rcall .+1050 ; 0xc38 - + cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); + 842: 4b e6 ldi r20, 0x6B ; 107 + 844: 51 e0 ldi r21, 0x01 ; 1 + 846: be 01 movw r22, r28 + 848: 67 5a subi r22, 0xA7 ; 167 + 84a: 7f 4f sbci r23, 0xFF ; 255 + 84c: ce 01 movw r24, r28 + 84e: 01 96 adiw r24, 0x01 ; 1 + 850: ca d1 rcall .+916 ; 0xbe6 cqm6xx_app_init(&storno_xtal_app, &si5351_dev); - 81e: be 01 movw r22, r28 - 820: 6f 5f subi r22, 0xFF ; 255 - 822: 7f 4f sbci r23, 0xFF ; 255 - 824: 86 e4 ldi r24, 0x46 ; 70 - 826: 9f e3 ldi r25, 0x3F ; 63 - 828: 72 df rcall .-284 ; 0x70e - + 852: be 01 movw r22, r28 + 854: 6f 5f subi r22, 0xFF ; 255 + 856: 7f 4f sbci r23, 0xFF ; 255 + 858: 86 e4 ldi r24, 0x46 ; 70 + 85a: 9f e3 ldi r25, 0x3F ; 63 + 85c: 68 df rcall .-304 ; 0x72e while (1) { cqm6xx_app_statemachine(&storno_xtal_app); - 82a: 86 e4 ldi r24, 0x46 ; 70 - 82c: 9f e3 ldi r25, 0x3F ; 63 - 82e: cd de rcall .-614 ; 0x5ca - 830: 2a e6 ldi r18, 0x6A ; 106 - 832: 84 e0 ldi r24, 0x04 ; 4 - 834: 91 e0 ldi r25, 0x01 ; 1 - 836: 21 50 subi r18, 0x01 ; 1 - 838: 80 40 sbci r24, 0x00 ; 0 - 83a: 90 40 sbci r25, 0x00 ; 0 - 83c: e1 f7 brne .-8 ; 0x836 - 83e: 00 c0 rjmp .+0 ; 0x840 - 840: f4 cf rjmp .-24 ; 0x82a + 85e: 86 e4 ldi r24, 0x46 ; 70 + 860: 9f e3 ldi r25, 0x3F ; 63 + 862: b9 de rcall .-654 ; 0x5d6 + 864: 2a e6 ldi r18, 0x6A ; 106 + 866: 84 e0 ldi r24, 0x04 ; 4 + 868: 91 e0 ldi r25, 0x01 ; 1 + 86a: 21 50 subi r18, 0x01 ; 1 + 86c: 80 40 sbci r24, 0x00 ; 0 + 86e: 90 40 sbci r25, 0x00 ; 0 + 870: e1 f7 brne .-8 ; 0x86a + 872: 00 c0 rjmp .+0 ; 0x874 + 874: f4 cf rjmp .-24 ; 0x85e -00000842 : +00000876 : // Read Device Status register: readRegister(inst,0x00, (uint8_t *) &inst->device_data.deviceStatus, sizeof(si5351_deviceStat_t)); return inst->device_data.deviceStatus.REVID; } - 842: 4f 92 push r4 - 844: 5f 92 push r5 - 846: 6f 92 push r6 - 848: 7f 92 push r7 - 84a: 9f 92 push r9 - 84c: af 92 push r10 - 84e: bf 92 push r11 - 850: cf 92 push r12 - 852: df 92 push r13 - 854: ef 92 push r14 - 856: ff 92 push r15 - 858: 0f 93 push r16 - 85a: 1f 93 push r17 - 85c: cf 93 push r28 - 85e: df 93 push r29 - 860: ec 01 movw r28, r24 - 862: 6b 01 movw r12, r22 - 864: 94 2e mov r9, r20 - 866: 59 01 movw r10, r18 - 868: 27 01 movw r4, r14 - 86a: 38 01 movw r6, r16 - 86c: c7 01 movw r24, r14 - 86e: 01 96 adiw r24, 0x01 ; 1 - 870: 79 d2 rcall .+1266 ; 0xd64 - 872: f8 2e mov r15, r24 - 874: 19 2f mov r17, r25 - 876: dc 01 movw r26, r24 - 878: 9d 92 st X+, r9 - 87a: cd 01 movw r24, r26 - 87c: a2 01 movw r20, r4 - 87e: b5 01 movw r22, r10 - 880: 92 d3 rcall .+1828 ; 0xfa6 - 882: a3 01 movw r20, r6 - 884: 92 01 movw r18, r4 - 886: 2f 5f subi r18, 0xFF ; 255 - 888: 3f 4f sbci r19, 0xFF ; 255 - 88a: 4f 4f sbci r20, 0xFF ; 255 - 88c: 5f 4f sbci r21, 0xFF ; 255 - 88e: d6 01 movw r26, r12 - 890: ed 91 ld r30, X+ - 892: fc 91 ld r31, X - 894: 01 e0 ldi r16, 0x01 ; 1 - 896: 6f 2d mov r22, r15 - 898: 71 2f mov r23, r17 - 89a: 88 81 ld r24, Y - 89c: 99 81 ldd r25, Y+1 ; 0x01 - 89e: 09 95 icall - 8a0: 8f 2d mov r24, r15 - 8a2: 91 2f mov r25, r17 - 8a4: f7 d2 rcall .+1518 ; 0xe94 - 8a6: 80 e0 ldi r24, 0x00 ; 0 - 8a8: 90 e0 ldi r25, 0x00 ; 0 - 8aa: df 91 pop r29 - 8ac: cf 91 pop r28 - 8ae: 1f 91 pop r17 - 8b0: 0f 91 pop r16 - 8b2: ff 90 pop r15 - 8b4: ef 90 pop r14 - 8b6: df 90 pop r13 - 8b8: cf 90 pop r12 - 8ba: bf 90 pop r11 - 8bc: af 90 pop r10 - 8be: 9f 90 pop r9 - 8c0: 7f 90 pop r7 - 8c2: 6f 90 pop r6 - 8c4: 5f 90 pop r5 - 8c6: 4f 90 pop r4 - 8c8: 08 95 ret + 876: 8f 92 push r8 + 878: 9f 92 push r9 + 87a: af 92 push r10 + 87c: bf 92 push r11 + 87e: cf 92 push r12 + 880: df 92 push r13 + 882: ef 92 push r14 + 884: ff 92 push r15 + 886: 0f 93 push r16 + 888: 1f 93 push r17 + 88a: cf 93 push r28 + 88c: df 93 push r29 + 88e: ec 01 movw r28, r24 + 890: 86 2e mov r8, r22 + 892: 5a 01 movw r10, r20 + 894: 68 01 movw r12, r16 + 896: 79 01 movw r14, r18 + 898: c8 01 movw r24, r16 + 89a: 01 96 adiw r24, 0x01 ; 1 + 89c: 4b d2 rcall .+1174 ; 0xd34 + 89e: 98 2e mov r9, r24 + 8a0: 19 2f mov r17, r25 + 8a2: fc 01 movw r30, r24 + 8a4: 81 92 st Z+, r8 + 8a6: cf 01 movw r24, r30 + 8a8: a6 01 movw r20, r12 + 8aa: b5 01 movw r22, r10 + 8ac: 64 d3 rcall .+1736 ; 0xf76 + 8ae: a7 01 movw r20, r14 + 8b0: 96 01 movw r18, r12 + 8b2: 2f 5f subi r18, 0xFF ; 255 + 8b4: 3f 4f sbci r19, 0xFF ; 255 + 8b6: 4f 4f sbci r20, 0xFF ; 255 + 8b8: 5f 4f sbci r21, 0xFF ; 255 + 8ba: ea 81 ldd r30, Y+2 ; 0x02 + 8bc: fb 81 ldd r31, Y+3 ; 0x03 + 8be: 01 e0 ldi r16, 0x01 ; 1 + 8c0: 69 2d mov r22, r9 + 8c2: 71 2f mov r23, r17 + 8c4: 88 81 ld r24, Y + 8c6: 99 81 ldd r25, Y+1 ; 0x01 + 8c8: 09 95 icall + 8ca: 89 2d mov r24, r9 + 8cc: 91 2f mov r25, r17 + 8ce: ca d2 rcall .+1428 ; 0xe64 + 8d0: 80 e0 ldi r24, 0x00 ; 0 + 8d2: 90 e0 ldi r25, 0x00 ; 0 + 8d4: df 91 pop r29 + 8d6: cf 91 pop r28 + 8d8: 1f 91 pop r17 + 8da: 0f 91 pop r16 + 8dc: ff 90 pop r15 + 8de: ef 90 pop r14 + 8e0: df 90 pop r13 + 8e2: cf 90 pop r12 + 8e4: bf 90 pop r11 + 8e6: af 90 pop r10 + 8e8: 9f 90 pop r9 + 8ea: 8f 90 pop r8 + 8ec: 08 95 ret -000008ca : - 8ca: af 92 push r10 - 8cc: bf 92 push r11 - 8ce: cf 92 push r12 - 8d0: df 92 push r13 - 8d2: ef 92 push r14 - 8d4: ff 92 push r15 - 8d6: 0f 93 push r16 - 8d8: 1f 93 push r17 - 8da: cf 93 push r28 - 8dc: df 93 push r29 - 8de: ec 01 movw r28, r24 - 8e0: 66 23 and r22, r22 - 8e2: 09 f4 brne .+2 ; 0x8e6 - 8e4: 48 c0 rjmp .+144 ; 0x976 - 8e6: 61 30 cpi r22, 0x01 ; 1 - 8e8: 09 f1 breq .+66 ; 0x92c - 8ea: 6c 01 movw r12, r24 - 8ec: 82 e0 ldi r24, 0x02 ; 2 - 8ee: c8 0e add r12, r24 - 8f0: d1 1c adc r13, r1 - 8f2: 9e 01 movw r18, r28 - 8f4: 29 5a subi r18, 0xA9 ; 169 - 8f6: 3f 4f sbci r19, 0xFF ; 255 - 8f8: f9 01 movw r30, r18 - 8fa: 80 81 ld r24, Z - 8fc: 80 62 ori r24, 0x20 ; 32 - 8fe: 80 68 ori r24, 0x80 ; 128 - 900: 80 83 st Z, r24 - 902: e1 2c mov r14, r1 - 904: f1 2c mov r15, r1 - 906: 87 01 movw r16, r14 - 908: e3 94 inc r14 - 90a: 41 eb ldi r20, 0xB1 ; 177 - 90c: b6 01 movw r22, r12 - 90e: ce 01 movw r24, r28 - 910: 98 df rcall .-208 ; 0x842 - 912: 80 e0 ldi r24, 0x00 ; 0 - 914: 90 e0 ldi r25, 0x00 ; 0 - 916: df 91 pop r29 - 918: cf 91 pop r28 - 91a: 1f 91 pop r17 - 91c: 0f 91 pop r16 - 91e: ff 90 pop r15 - 920: ef 90 pop r14 - 922: df 90 pop r13 - 924: cf 90 pop r12 - 926: bf 90 pop r11 - 928: af 90 pop r10 - 92a: 08 95 ret - 92c: 42 70 andi r20, 0x02 ; 2 - 92e: 8e 8d ldd r24, Y+30 ; 0x1e - 930: 8c 7f andi r24, 0xFC ; 252 - 932: 48 2b or r20, r24 - 934: 4e 8f std Y+30, r20 ; 0x1e - 936: 3f 8f std Y+31, r19 ; 0x1f - 938: 28 a3 std Y+32, r18 ; 0x20 - 93a: d8 01 movw r26, r16 - 93c: c7 01 movw r24, r14 - 93e: 88 27 eor r24, r24 - 940: 99 27 eor r25, r25 - 942: af 70 andi r26, 0x0F ; 15 - 944: bb 27 eor r27, r27 - 946: fa a2 std Y+34, r15 ; 0x22 - 948: eb a2 std Y+35, r14 ; 0x23 - 94a: 8a 2f mov r24, r26 - 94c: 8f 70 andi r24, 0x0F ; 15 - 94e: 89 a3 std Y+33, r24 ; 0x21 - 950: bc 8e std Y+28, r11 ; 0x1c - 952: ad 8e std Y+29, r10 ; 0x1d - 954: 6e 01 movw r12, r28 - 956: f2 e0 ldi r31, 0x02 ; 2 - 958: cf 0e add r12, r31 - 95a: d1 1c adc r13, r1 - 95c: 18 e0 ldi r17, 0x08 ; 8 - 95e: e1 2e mov r14, r17 - 960: f1 2c mov r15, r1 - 962: 00 e0 ldi r16, 0x00 ; 0 - 964: 10 e0 ldi r17, 0x00 ; 0 - 966: 9e 01 movw r18, r28 - 968: 24 5e subi r18, 0xE4 ; 228 - 96a: 3f 4f sbci r19, 0xFF ; 255 - 96c: 42 e2 ldi r20, 0x22 ; 34 - 96e: b6 01 movw r22, r12 - 970: ce 01 movw r24, r28 - 972: 67 df rcall .-306 ; 0x842 - 974: be cf rjmp .-132 ; 0x8f2 - 976: 42 70 andi r20, 0x02 ; 2 - 978: 8e 89 ldd r24, Y+22 ; 0x16 - 97a: 8c 7f andi r24, 0xFC ; 252 - 97c: 48 2b or r20, r24 - 97e: 4e 8b std Y+22, r20 ; 0x16 - 980: 3f 8b std Y+23, r19 ; 0x17 - 982: 28 8f std Y+24, r18 ; 0x18 - 984: d8 01 movw r26, r16 - 986: c7 01 movw r24, r14 - 988: 88 27 eor r24, r24 - 98a: 99 27 eor r25, r25 - 98c: af 70 andi r26, 0x0F ; 15 - 98e: bb 27 eor r27, r27 - 990: fa 8e std Y+26, r15 ; 0x1a - 992: eb 8e std Y+27, r14 ; 0x1b - 994: 8a 2f mov r24, r26 - 996: 8f 70 andi r24, 0x0F ; 15 - 998: 89 8f std Y+25, r24 ; 0x19 - 99a: bc 8a std Y+20, r11 ; 0x14 - 99c: ad 8a std Y+21, r10 ; 0x15 - 99e: 6e 01 movw r12, r28 - 9a0: e2 e0 ldi r30, 0x02 ; 2 - 9a2: ce 0e add r12, r30 - 9a4: d1 1c adc r13, r1 - 9a6: 18 e0 ldi r17, 0x08 ; 8 - 9a8: e1 2e mov r14, r17 - 9aa: f1 2c mov r15, r1 - 9ac: 00 e0 ldi r16, 0x00 ; 0 - 9ae: 10 e0 ldi r17, 0x00 ; 0 - 9b0: 9e 01 movw r18, r28 - 9b2: 2c 5e subi r18, 0xEC ; 236 - 9b4: 3f 4f sbci r19, 0xFF ; 255 - 9b6: 4a e1 ldi r20, 0x1A ; 26 - 9b8: b6 01 movw r22, r12 - 9ba: ce 01 movw r24, r28 - 9bc: 42 df rcall .-380 ; 0x842 - 9be: 99 cf rjmp .-206 ; 0x8f2 +000008ee : + 8ee: af 92 push r10 + 8f0: bf 92 push r11 + 8f2: cf 92 push r12 + 8f4: df 92 push r13 + 8f6: ef 92 push r14 + 8f8: ff 92 push r15 + 8fa: 0f 93 push r16 + 8fc: 1f 93 push r17 + 8fe: fc 01 movw r30, r24 + 900: 61 30 cpi r22, 0x01 ; 1 + 902: 09 f4 brne .+2 ; 0x906 + 904: 4a c0 rjmp .+148 ; 0x99a + 906: 30 f1 brcs .+76 ; 0x954 + 908: 62 30 cpi r22, 0x02 ; 2 + 90a: 09 f0 breq .+2 ; 0x90e + 90c: 6a c0 rjmp .+212 ; 0x9e2 + 90e: 43 70 andi r20, 0x03 ; 3 + 910: 56 a9 ldd r21, Z+54 ; 0x36 + 912: 50 78 andi r21, 0x80 ; 128 + 914: 37 ab std Z+55, r19 ; 0x37 + 916: 20 af std Z+56, r18 ; 0x38 + 918: f2 ae std Z+58, r15 ; 0x3a + 91a: e3 ae std Z+59, r14 ; 0x3b + 91c: d6 01 movw r26, r12 + 91e: c5 01 movw r24, r10 + 920: 2c e0 ldi r18, 0x0C ; 12 + 922: b6 95 lsr r27 + 924: a7 95 ror r26 + 926: 97 95 ror r25 + 928: 87 95 ror r24 + 92a: 2a 95 dec r18 + 92c: d1 f7 brne .-12 ; 0x922 + 92e: 83 70 andi r24, 0x03 ; 3 + 930: 82 95 swap r24 + 932: 80 7f andi r24, 0xF0 ; 240 + 934: 03 70 andi r16, 0x03 ; 3 + 936: 80 2b or r24, r16 + 938: 81 af std Z+57, r24 ; 0x39 + 93a: b4 aa std Z+52, r11 ; 0x34 + 93c: a5 aa std Z+53, r10 ; 0x35 + 93e: 45 2b or r20, r21 + 940: 46 ab std Z+54, r20 ; 0x36 + 942: af 01 movw r20, r30 + 944: 4c 5c subi r20, 0xCC ; 204 + 946: 5f 4f sbci r21, 0xFF ; 255 + 948: 08 e0 ldi r16, 0x08 ; 8 + 94a: 10 e0 ldi r17, 0x00 ; 0 + 94c: 20 e0 ldi r18, 0x00 ; 0 + 94e: 30 e0 ldi r19, 0x00 ; 0 + 950: 6a e3 ldi r22, 0x3A ; 58 + 952: 45 c0 rjmp .+138 ; 0x9de + 954: 43 70 andi r20, 0x03 ; 3 + 956: 56 a1 ldd r21, Z+38 ; 0x26 + 958: 50 78 andi r21, 0x80 ; 128 + 95a: 37 a3 std Z+39, r19 ; 0x27 + 95c: 20 a7 std Z+40, r18 ; 0x28 + 95e: f2 a6 std Z+42, r15 ; 0x2a + 960: e3 a6 std Z+43, r14 ; 0x2b + 962: d6 01 movw r26, r12 + 964: c5 01 movw r24, r10 + 966: 6c e0 ldi r22, 0x0C ; 12 + 968: b6 95 lsr r27 + 96a: a7 95 ror r26 + 96c: 97 95 ror r25 + 96e: 87 95 ror r24 + 970: 6a 95 dec r22 + 972: d1 f7 brne .-12 ; 0x968 + 974: 83 70 andi r24, 0x03 ; 3 + 976: 82 95 swap r24 + 978: 80 7f andi r24, 0xF0 ; 240 + 97a: 03 70 andi r16, 0x03 ; 3 + 97c: 80 2b or r24, r16 + 97e: 81 a7 std Z+41, r24 ; 0x29 + 980: b4 a2 std Z+36, r11 ; 0x24 + 982: a5 a2 std Z+37, r10 ; 0x25 + 984: 45 2b or r20, r21 + 986: 46 a3 std Z+38, r20 ; 0x26 + 988: af 01 movw r20, r30 + 98a: 4c 5d subi r20, 0xDC ; 220 + 98c: 5f 4f sbci r21, 0xFF ; 255 + 98e: 08 e0 ldi r16, 0x08 ; 8 + 990: 10 e0 ldi r17, 0x00 ; 0 + 992: 20 e0 ldi r18, 0x00 ; 0 + 994: 30 e0 ldi r19, 0x00 ; 0 + 996: 6a e2 ldi r22, 0x2A ; 42 + 998: 22 c0 rjmp .+68 ; 0x9de + 99a: 43 70 andi r20, 0x03 ; 3 + 99c: 56 a5 ldd r21, Z+46 ; 0x2e + 99e: 50 78 andi r21, 0x80 ; 128 + 9a0: 37 a7 std Z+47, r19 ; 0x2f + 9a2: 20 ab std Z+48, r18 ; 0x30 + 9a4: f2 aa std Z+50, r15 ; 0x32 + 9a6: e3 aa std Z+51, r14 ; 0x33 + 9a8: d6 01 movw r26, r12 + 9aa: c5 01 movw r24, r10 + 9ac: 3c e0 ldi r19, 0x0C ; 12 + 9ae: b6 95 lsr r27 + 9b0: a7 95 ror r26 + 9b2: 97 95 ror r25 + 9b4: 87 95 ror r24 + 9b6: 3a 95 dec r19 + 9b8: d1 f7 brne .-12 ; 0x9ae + 9ba: 83 70 andi r24, 0x03 ; 3 + 9bc: 82 95 swap r24 + 9be: 80 7f andi r24, 0xF0 ; 240 + 9c0: 03 70 andi r16, 0x03 ; 3 + 9c2: 80 2b or r24, r16 + 9c4: 81 ab std Z+49, r24 ; 0x31 + 9c6: b4 a6 std Z+44, r11 ; 0x2c + 9c8: a5 a6 std Z+45, r10 ; 0x2d + 9ca: 45 2b or r20, r21 + 9cc: 46 a7 std Z+46, r20 ; 0x2e + 9ce: af 01 movw r20, r30 + 9d0: 44 5d subi r20, 0xD4 ; 212 + 9d2: 5f 4f sbci r21, 0xFF ; 255 + 9d4: 08 e0 ldi r16, 0x08 ; 8 + 9d6: 10 e0 ldi r17, 0x00 ; 0 + 9d8: 20 e0 ldi r18, 0x00 ; 0 + 9da: 30 e0 ldi r19, 0x00 ; 0 + 9dc: 62 e3 ldi r22, 0x32 ; 50 + 9de: cf 01 movw r24, r30 + 9e0: 4a df rcall .-364 ; 0x876 + 9e2: 80 e0 ldi r24, 0x00 ; 0 + 9e4: 90 e0 ldi r25, 0x00 ; 0 + 9e6: 1f 91 pop r17 + 9e8: 0f 91 pop r16 + 9ea: ff 90 pop r15 + 9ec: ef 90 pop r14 + 9ee: df 90 pop r13 + 9f0: cf 90 pop r12 + 9f2: bf 90 pop r11 + 9f4: af 90 pop r10 + 9f6: 08 95 ret -000009c0 : - 9c0: af 92 push r10 - 9c2: bf 92 push r11 - 9c4: cf 92 push r12 - 9c6: df 92 push r13 - 9c8: ef 92 push r14 - 9ca: ff 92 push r15 - 9cc: 0f 93 push r16 - 9ce: 1f 93 push r17 - 9d0: fc 01 movw r30, r24 - 9d2: 61 30 cpi r22, 0x01 ; 1 - 9d4: 09 f4 brne .+2 ; 0x9d8 - 9d6: 5f c0 rjmp .+190 ; 0xa96 - 9d8: a8 f1 brcs .+106 ; 0xa44 - 9da: 62 30 cpi r22, 0x02 ; 2 - 9dc: 41 f5 brne .+80 ; 0xa2e - 9de: 43 70 andi r20, 0x03 ; 3 - 9e0: 56 a9 ldd r21, Z+54 ; 0x36 - 9e2: 50 78 andi r21, 0x80 ; 128 - 9e4: 37 ab std Z+55, r19 ; 0x37 - 9e6: 20 af std Z+56, r18 ; 0x38 - 9e8: f2 ae std Z+58, r15 ; 0x3a - 9ea: e3 ae std Z+59, r14 ; 0x3b - 9ec: d6 01 movw r26, r12 - 9ee: c5 01 movw r24, r10 - 9f0: 2c e0 ldi r18, 0x0C ; 12 - 9f2: b6 95 lsr r27 - 9f4: a7 95 ror r26 - 9f6: 97 95 ror r25 - 9f8: 87 95 ror r24 - 9fa: 2a 95 dec r18 - 9fc: d1 f7 brne .-12 ; 0x9f2 - 9fe: 83 70 andi r24, 0x03 ; 3 - a00: 82 95 swap r24 - a02: 80 7f andi r24, 0xF0 ; 240 - a04: 03 70 andi r16, 0x03 ; 3 - a06: 08 2b or r16, r24 - a08: 01 af std Z+57, r16 ; 0x39 - a0a: b4 aa std Z+52, r11 ; 0x34 - a0c: a5 aa std Z+53, r10 ; 0x35 - a0e: 45 2b or r20, r21 - a10: 46 ab std Z+54, r20 ; 0x36 - a12: 9f 01 movw r18, r30 - a14: 2c 5c subi r18, 0xCC ; 204 - a16: 3f 4f sbci r19, 0xFF ; 255 - a18: bf 01 movw r22, r30 - a1a: 6e 5f subi r22, 0xFE ; 254 - a1c: 7f 4f sbci r23, 0xFF ; 255 - a1e: 18 e0 ldi r17, 0x08 ; 8 - a20: e1 2e mov r14, r17 - a22: f1 2c mov r15, r1 - a24: 00 e0 ldi r16, 0x00 ; 0 - a26: 10 e0 ldi r17, 0x00 ; 0 - a28: 4a e3 ldi r20, 0x3A ; 58 - a2a: cf 01 movw r24, r30 - a2c: 0a df rcall .-492 ; 0x842 - a2e: 80 e0 ldi r24, 0x00 ; 0 - a30: 90 e0 ldi r25, 0x00 ; 0 - a32: 1f 91 pop r17 - a34: 0f 91 pop r16 - a36: ff 90 pop r15 - a38: ef 90 pop r14 - a3a: df 90 pop r13 - a3c: cf 90 pop r12 - a3e: bf 90 pop r11 - a40: af 90 pop r10 - a42: 08 95 ret - a44: 43 70 andi r20, 0x03 ; 3 - a46: 56 a1 ldd r21, Z+38 ; 0x26 - a48: 50 78 andi r21, 0x80 ; 128 - a4a: 37 a3 std Z+39, r19 ; 0x27 - a4c: 20 a7 std Z+40, r18 ; 0x28 - a4e: f2 a6 std Z+42, r15 ; 0x2a - a50: e3 a6 std Z+43, r14 ; 0x2b - a52: d6 01 movw r26, r12 - a54: c5 01 movw r24, r10 - a56: 1c e0 ldi r17, 0x0C ; 12 - a58: b6 95 lsr r27 - a5a: a7 95 ror r26 - a5c: 97 95 ror r25 - a5e: 87 95 ror r24 - a60: 1a 95 dec r17 - a62: d1 f7 brne .-12 ; 0xa58 - a64: 83 70 andi r24, 0x03 ; 3 - a66: 82 95 swap r24 - a68: 80 7f andi r24, 0xF0 ; 240 - a6a: 03 70 andi r16, 0x03 ; 3 - a6c: 80 2b or r24, r16 - a6e: 81 a7 std Z+41, r24 ; 0x29 - a70: b4 a2 std Z+36, r11 ; 0x24 - a72: a5 a2 std Z+37, r10 ; 0x25 - a74: 45 2b or r20, r21 - a76: 46 a3 std Z+38, r20 ; 0x26 - a78: 9f 01 movw r18, r30 - a7a: 2c 5d subi r18, 0xDC ; 220 - a7c: 3f 4f sbci r19, 0xFF ; 255 - a7e: bf 01 movw r22, r30 - a80: 6e 5f subi r22, 0xFE ; 254 - a82: 7f 4f sbci r23, 0xFF ; 255 - a84: 18 e0 ldi r17, 0x08 ; 8 - a86: e1 2e mov r14, r17 - a88: f1 2c mov r15, r1 - a8a: 00 e0 ldi r16, 0x00 ; 0 - a8c: 10 e0 ldi r17, 0x00 ; 0 - a8e: 4a e2 ldi r20, 0x2A ; 42 - a90: cf 01 movw r24, r30 - a92: d7 de rcall .-594 ; 0x842 - a94: cc cf rjmp .-104 ; 0xa2e - a96: 43 70 andi r20, 0x03 ; 3 - a98: 56 a5 ldd r21, Z+46 ; 0x2e - a9a: 50 78 andi r21, 0x80 ; 128 - a9c: 37 a7 std Z+47, r19 ; 0x2f - a9e: 20 ab std Z+48, r18 ; 0x30 - aa0: f2 aa std Z+50, r15 ; 0x32 - aa2: e3 aa std Z+51, r14 ; 0x33 - aa4: d6 01 movw r26, r12 - aa6: c5 01 movw r24, r10 - aa8: 6c e0 ldi r22, 0x0C ; 12 - aaa: b6 95 lsr r27 - aac: a7 95 ror r26 - aae: 97 95 ror r25 - ab0: 87 95 ror r24 - ab2: 6a 95 dec r22 - ab4: d1 f7 brne .-12 ; 0xaaa - ab6: 83 70 andi r24, 0x03 ; 3 - ab8: 82 95 swap r24 - aba: 80 7f andi r24, 0xF0 ; 240 - abc: 03 70 andi r16, 0x03 ; 3 - abe: 80 2b or r24, r16 - ac0: 81 ab std Z+49, r24 ; 0x31 - ac2: b4 a6 std Z+44, r11 ; 0x2c - ac4: a5 a6 std Z+45, r10 ; 0x2d - ac6: 45 2b or r20, r21 - ac8: 46 a7 std Z+46, r20 ; 0x2e - aca: 9f 01 movw r18, r30 - acc: 24 5d subi r18, 0xD4 ; 212 - ace: 3f 4f sbci r19, 0xFF ; 255 - ad0: bf 01 movw r22, r30 - ad2: 6e 5f subi r22, 0xFE ; 254 - ad4: 7f 4f sbci r23, 0xFF ; 255 - ad6: 18 e0 ldi r17, 0x08 ; 8 - ad8: e1 2e mov r14, r17 - ada: f1 2c mov r15, r1 - adc: 00 e0 ldi r16, 0x00 ; 0 - ade: 10 e0 ldi r17, 0x00 ; 0 - ae0: 42 e3 ldi r20, 0x32 ; 50 - ae2: cf 01 movw r24, r30 - ae4: ae de rcall .-676 ; 0x842 - ae6: a3 cf rjmp .-186 ; 0xa2e +000009f8 : + 9f8: 0f 93 push r16 + 9fa: 1f 93 push r17 + 9fc: fc 01 movw r30, r24 + 9fe: 61 30 cpi r22, 0x01 ; 1 + a00: 59 f0 breq .+22 ; 0xa18 + a02: 30 f0 brcs .+12 ; 0xa10 + a04: 62 30 cpi r22, 0x02 ; 2 + a06: 61 f4 brne .+24 ; 0xa20 + a08: 87 81 ldd r24, Z+7 ; 0x07 + a0a: 40 fb bst r20, 0 + a0c: 82 f9 bld r24, 2 + a0e: 07 c0 rjmp .+14 ; 0xa1e + a10: 87 81 ldd r24, Z+7 ; 0x07 + a12: 40 fb bst r20, 0 + a14: 80 f9 bld r24, 0 + a16: 03 c0 rjmp .+6 ; 0xa1e + a18: 87 81 ldd r24, Z+7 ; 0x07 + a1a: 40 fb bst r20, 0 + a1c: 81 f9 bld r24, 1 + a1e: 87 83 std Z+7, r24 ; 0x07 + a20: af 01 movw r20, r30 + a22: 49 5f subi r20, 0xF9 ; 249 + a24: 5f 4f sbci r21, 0xFF ; 255 + a26: 01 e0 ldi r16, 0x01 ; 1 + a28: 10 e0 ldi r17, 0x00 ; 0 + a2a: 20 e0 ldi r18, 0x00 ; 0 + a2c: 30 e0 ldi r19, 0x00 ; 0 + a2e: 63 e0 ldi r22, 0x03 ; 3 + a30: cf 01 movw r24, r30 + a32: 21 df rcall .-446 ; 0x876 + a34: 80 e0 ldi r24, 0x00 ; 0 + a36: 90 e0 ldi r25, 0x00 ; 0 + a38: 1f 91 pop r17 + a3a: 0f 91 pop r16 + a3c: 08 95 ret -00000ae8 : - ae8: ef 92 push r14 - aea: ff 92 push r15 - aec: 0f 93 push r16 - aee: 1f 93 push r17 - af0: 61 30 cpi r22, 0x01 ; 1 - af2: 09 f1 breq .+66 ; 0xb36 - af4: d0 f0 brcs .+52 ; 0xb2a - af6: 62 30 cpi r22, 0x02 ; 2 - af8: 29 f4 brne .+10 ; 0xb04 +00000a3e : + a3e: 0f 93 push r16 + a40: 1f 93 push r17 + a42: 61 30 cpi r22, 0x01 ; 1 + a44: 19 f1 breq .+70 ; 0xa8c + a46: 90 f0 brcs .+36 ; 0xa6c + a48: 62 30 cpi r22, 0x02 ; 2 + a4a: 79 f5 brne .+94 ; 0xaaa + a4c: fc 01 movw r30, r24 + a4e: 24 85 ldd r18, Z+12 ; 0x0c + a50: 40 fb bst r20, 0 + a52: 27 f9 bld r18, 7 + a54: 23 79 andi r18, 0x93 ; 147 + a56: 23 66 ori r18, 0x63 ; 99 + a58: 24 87 std Z+12, r18 ; 0x0c + a5a: ac 01 movw r20, r24 + a5c: 44 5f subi r20, 0xF4 ; 244 + a5e: 5f 4f sbci r21, 0xFF ; 255 + a60: 01 e0 ldi r16, 0x01 ; 1 + a62: 10 e0 ldi r17, 0x00 ; 0 + a64: 20 e0 ldi r18, 0x00 ; 0 + a66: 30 e0 ldi r19, 0x00 ; 0 + a68: 62 e1 ldi r22, 0x12 ; 18 + a6a: 1e c0 rjmp .+60 ; 0xaa8 + a6c: fc 01 movw r30, r24 + a6e: 22 85 ldd r18, Z+10 ; 0x0a + a70: 40 fb bst r20, 0 + a72: 27 f9 bld r18, 7 + a74: 20 79 andi r18, 0x90 ; 144 + a76: 2f 64 ori r18, 0x4F ; 79 + a78: 22 87 std Z+10, r18 ; 0x0a + a7a: ac 01 movw r20, r24 + a7c: 46 5f subi r20, 0xF6 ; 246 + a7e: 5f 4f sbci r21, 0xFF ; 255 + a80: 01 e0 ldi r16, 0x01 ; 1 + a82: 10 e0 ldi r17, 0x00 ; 0 + a84: 20 e0 ldi r18, 0x00 ; 0 + a86: 30 e0 ldi r19, 0x00 ; 0 + a88: 60 e1 ldi r22, 0x10 ; 16 + a8a: 0e c0 rjmp .+28 ; 0xaa8 + a8c: fc 01 movw r30, r24 + a8e: 23 85 ldd r18, Z+11 ; 0x0b + a90: 40 fb bst r20, 0 + a92: 27 f9 bld r18, 7 + a94: 2f 66 ori r18, 0x6F ; 111 + a96: 23 87 std Z+11, r18 ; 0x0b + a98: ac 01 movw r20, r24 + a9a: 45 5f subi r20, 0xF5 ; 245 + a9c: 5f 4f sbci r21, 0xFF ; 255 + a9e: 01 e0 ldi r16, 0x01 ; 1 + aa0: 10 e0 ldi r17, 0x00 ; 0 + aa2: 20 e0 ldi r18, 0x00 ; 0 + aa4: 30 e0 ldi r19, 0x00 ; 0 + aa6: 61 e1 ldi r22, 0x11 ; 17 + aa8: e6 de rcall .-564 ; 0x876 + aaa: 80 e0 ldi r24, 0x00 ; 0 + aac: 90 e0 ldi r25, 0x00 ; 0 + aae: 1f 91 pop r17 + ab0: 0f 91 pop r16 + ab2: 08 95 ret + +00000ab4 : + ab4: 0f 93 push r16 + ab6: 1f 93 push r17 + ab8: 66 23 and r22, r22 + aba: 31 f0 breq .+12 ; 0xac8 + abc: 61 30 cpi r22, 0x01 ; 1 + abe: 49 f4 brne .+18 ; 0xad2 + ac0: fc 01 movw r30, r24 + ac2: 21 85 ldd r18, Z+9 ; 0x09 + ac4: 24 60 ori r18, 0x04 ; 4 + ac6: 04 c0 rjmp .+8 ; 0xad0 + ac8: fc 01 movw r30, r24 + aca: 21 85 ldd r18, Z+9 ; 0x09 + acc: 2b 7f andi r18, 0xFB ; 251 + ace: 27 7f andi r18, 0xF7 ; 247 + ad0: 21 87 std Z+9, r18 ; 0x09 + ad2: ac 01 movw r20, r24 + ad4: 47 5f subi r20, 0xF7 ; 247 + ad6: 5f 4f sbci r21, 0xFF ; 255 + ad8: 01 e0 ldi r16, 0x01 ; 1 + ada: 10 e0 ldi r17, 0x00 ; 0 + adc: 20 e0 ldi r18, 0x00 ; 0 + ade: 30 e0 ldi r19, 0x00 ; 0 + ae0: 60 ef ldi r22, 0xF0 ; 240 + ae2: c9 de rcall .-622 ; 0x876 + ae4: 80 e0 ldi r24, 0x00 ; 0 + ae6: 90 e0 ldi r25, 0x00 ; 0 + ae8: 1f 91 pop r17 + aea: 0f 91 pop r16 + aec: 08 95 ret + +00000aee : + aee: 0f 93 push r16 + af0: 1f 93 push r17 + af2: 31 e0 ldi r19, 0x01 ; 1 + af4: 61 11 cpse r22, r1 + af6: 01 c0 rjmp .+2 ; 0xafa + af8: 30 e0 ldi r19, 0x00 ; 0 afa: fc 01 movw r30, r24 - afc: 27 81 ldd r18, Z+7 ; 0x07 - afe: 40 fb bst r20, 0 - b00: 22 f9 bld r18, 2 - b02: 27 83 std Z+7, r18 ; 0x07 - b04: 9c 01 movw r18, r24 - b06: 29 5f subi r18, 0xF9 ; 249 - b08: 3f 4f sbci r19, 0xFF ; 255 - b0a: bc 01 movw r22, r24 - b0c: 6e 5f subi r22, 0xFE ; 254 - b0e: 7f 4f sbci r23, 0xFF ; 255 - b10: e1 2c mov r14, r1 - b12: f1 2c mov r15, r1 - b14: 87 01 movw r16, r14 - b16: e3 94 inc r14 - b18: 43 e0 ldi r20, 0x03 ; 3 - b1a: 93 de rcall .-730 ; 0x842 - b1c: 80 e0 ldi r24, 0x00 ; 0 - b1e: 90 e0 ldi r25, 0x00 ; 0 - b20: 1f 91 pop r17 - b22: 0f 91 pop r16 - b24: ff 90 pop r15 - b26: ef 90 pop r14 - b28: 08 95 ret - b2a: fc 01 movw r30, r24 - b2c: 27 81 ldd r18, Z+7 ; 0x07 - b2e: 40 fb bst r20, 0 - b30: 20 f9 bld r18, 0 - b32: 27 83 std Z+7, r18 ; 0x07 - b34: e7 cf rjmp .-50 ; 0xb04 - b36: fc 01 movw r30, r24 - b38: 27 81 ldd r18, Z+7 ; 0x07 - b3a: 40 fb bst r20, 0 - b3c: 21 f9 bld r18, 1 - b3e: 27 83 std Z+7, r18 ; 0x07 - b40: e1 cf rjmp .-62 ; 0xb04 + afc: e9 5a subi r30, 0xA9 ; 169 + afe: ff 4f sbci r31, 0xFF ; 255 + b00: 20 81 ld r18, Z + b02: 30 fb bst r19, 0 + b04: 25 f9 bld r18, 5 + b06: 20 83 st Z, r18 + b08: 31 e0 ldi r19, 0x01 ; 1 + b0a: 41 11 cpse r20, r1 + b0c: 01 c0 rjmp .+2 ; 0xb10 + b0e: 30 e0 ldi r19, 0x00 ; 0 + b10: 20 81 ld r18, Z + b12: 30 fb bst r19, 0 + b14: 27 f9 bld r18, 7 + b16: 20 83 st Z, r18 + b18: 01 e0 ldi r16, 0x01 ; 1 + b1a: 10 e0 ldi r17, 0x00 ; 0 + b1c: 20 e0 ldi r18, 0x00 ; 0 + b1e: 30 e0 ldi r19, 0x00 ; 0 + b20: af 01 movw r20, r30 + b22: 61 eb ldi r22, 0xB1 ; 177 + b24: a8 de rcall .-688 ; 0x876 + b26: 80 e0 ldi r24, 0x00 ; 0 + b28: 90 e0 ldi r25, 0x00 ; 0 + b2a: 1f 91 pop r17 + b2c: 0f 91 pop r16 + b2e: 08 95 ret -00000b42 : - b42: ef 92 push r14 - b44: ff 92 push r15 - b46: 0f 93 push r16 - b48: 1f 93 push r17 +00000b30 : + b30: af 92 push r10 + b32: bf 92 push r11 + b34: cf 92 push r12 + b36: df 92 push r13 + b38: ef 92 push r14 + b3a: ff 92 push r15 + b3c: 0f 93 push r16 + b3e: 1f 93 push r17 + b40: cf 93 push r28 + b42: df 93 push r29 + b44: ec 01 movw r28, r24 + b46: 66 23 and r22, r22 + b48: f9 f0 breq .+62 ; 0xb88 b4a: 61 30 cpi r22, 0x01 ; 1 - b4c: b9 f1 breq .+110 ; 0xbbc - b4e: e0 f0 brcs .+56 ; 0xb88 - b50: 62 30 cpi r22, 0x02 ; 2 - b52: 99 f4 brne .+38 ; 0xb7a - b54: fc 01 movw r30, r24 - b56: 24 85 ldd r18, Z+12 ; 0x0c - b58: 40 fb bst r20, 0 - b5a: 27 f9 bld r18, 7 - b5c: 23 79 andi r18, 0x93 ; 147 - b5e: 23 66 ori r18, 0x63 ; 99 - b60: 24 87 std Z+12, r18 ; 0x0c - b62: 9c 01 movw r18, r24 - b64: 24 5f subi r18, 0xF4 ; 244 - b66: 3f 4f sbci r19, 0xFF ; 255 - b68: bc 01 movw r22, r24 - b6a: 6e 5f subi r22, 0xFE ; 254 - b6c: 7f 4f sbci r23, 0xFF ; 255 - b6e: e1 2c mov r14, r1 - b70: f1 2c mov r15, r1 - b72: 87 01 movw r16, r14 - b74: e3 94 inc r14 - b76: 42 e1 ldi r20, 0x12 ; 18 - b78: 64 de rcall .-824 ; 0x842 - b7a: 80 e0 ldi r24, 0x00 ; 0 - b7c: 90 e0 ldi r25, 0x00 ; 0 - b7e: 1f 91 pop r17 - b80: 0f 91 pop r16 - b82: ff 90 pop r15 - b84: ef 90 pop r14 - b86: 08 95 ret - b88: fc 01 movw r30, r24 - b8a: 22 85 ldd r18, Z+10 ; 0x0a - b8c: 40 fb bst r20, 0 - b8e: 27 f9 bld r18, 7 - b90: 20 79 andi r18, 0x90 ; 144 - b92: 2f 64 ori r18, 0x4F ; 79 - b94: 22 87 std Z+10, r18 ; 0x0a - b96: 9c 01 movw r18, r24 - b98: 26 5f subi r18, 0xF6 ; 246 - b9a: 3f 4f sbci r19, 0xFF ; 255 - b9c: bc 01 movw r22, r24 - b9e: 6e 5f subi r22, 0xFE ; 254 - ba0: 7f 4f sbci r23, 0xFF ; 255 - ba2: e1 2c mov r14, r1 - ba4: f1 2c mov r15, r1 - ba6: 87 01 movw r16, r14 - ba8: e3 94 inc r14 - baa: 40 e1 ldi r20, 0x10 ; 16 - bac: 4a de rcall .-876 ; 0x842 - bae: 80 e0 ldi r24, 0x00 ; 0 - bb0: 90 e0 ldi r25, 0x00 ; 0 - bb2: 1f 91 pop r17 - bb4: 0f 91 pop r16 - bb6: ff 90 pop r15 - bb8: ef 90 pop r14 - bba: 08 95 ret - bbc: fc 01 movw r30, r24 - bbe: 23 85 ldd r18, Z+11 ; 0x0b - bc0: 40 fb bst r20, 0 - bc2: 27 f9 bld r18, 7 - bc4: 2f 66 ori r18, 0x6F ; 111 - bc6: 23 87 std Z+11, r18 ; 0x0b - bc8: 9c 01 movw r18, r24 - bca: 25 5f subi r18, 0xF5 ; 245 - bcc: 3f 4f sbci r19, 0xFF ; 255 - bce: bc 01 movw r22, r24 - bd0: 6e 5f subi r22, 0xFE ; 254 - bd2: 7f 4f sbci r23, 0xFF ; 255 - bd4: e1 2c mov r14, r1 - bd6: f1 2c mov r15, r1 - bd8: 87 01 movw r16, r14 - bda: e3 94 inc r14 - bdc: 41 e1 ldi r20, 0x11 ; 17 - bde: 31 de rcall .-926 ; 0x842 - be0: 80 e0 ldi r24, 0x00 ; 0 - be2: 90 e0 ldi r25, 0x00 ; 0 - be4: 1f 91 pop r17 - be6: 0f 91 pop r16 - be8: ff 90 pop r15 - bea: ef 90 pop r14 - bec: 08 95 ret + b4c: d9 f5 brne .+118 ; 0xbc4 + b4e: 42 70 andi r20, 0x02 ; 2 + b50: 8e 8d ldd r24, Y+30 ; 0x1e + b52: 8c 7f andi r24, 0xFC ; 252 + b54: 48 2b or r20, r24 + b56: 4e 8f std Y+30, r20 ; 0x1e + b58: 3f 8f std Y+31, r19 ; 0x1f + b5a: 28 a3 std Y+32, r18 ; 0x20 + b5c: d8 01 movw r26, r16 + b5e: c7 01 movw r24, r14 + b60: 88 27 eor r24, r24 + b62: 99 27 eor r25, r25 + b64: af 70 andi r26, 0x0F ; 15 + b66: bb 27 eor r27, r27 + b68: fa a2 std Y+34, r15 ; 0x22 + b6a: eb a2 std Y+35, r14 ; 0x23 + b6c: 8a 2f mov r24, r26 + b6e: 8f 70 andi r24, 0x0F ; 15 + b70: 89 a3 std Y+33, r24 ; 0x21 + b72: bc 8e std Y+28, r11 ; 0x1c + b74: ad 8e std Y+29, r10 ; 0x1d + b76: 08 e0 ldi r16, 0x08 ; 8 + b78: 10 e0 ldi r17, 0x00 ; 0 + b7a: 20 e0 ldi r18, 0x00 ; 0 + b7c: 30 e0 ldi r19, 0x00 ; 0 + b7e: ae 01 movw r20, r28 + b80: 44 5e subi r20, 0xE4 ; 228 + b82: 5f 4f sbci r21, 0xFF ; 255 + b84: 62 e2 ldi r22, 0x22 ; 34 + b86: 1c c0 rjmp .+56 ; 0xbc0 + b88: 42 70 andi r20, 0x02 ; 2 + b8a: 8e 89 ldd r24, Y+22 ; 0x16 + b8c: 8c 7f andi r24, 0xFC ; 252 + b8e: 48 2b or r20, r24 + b90: 4e 8b std Y+22, r20 ; 0x16 + b92: 3f 8b std Y+23, r19 ; 0x17 + b94: 28 8f std Y+24, r18 ; 0x18 + b96: d8 01 movw r26, r16 + b98: c7 01 movw r24, r14 + b9a: 88 27 eor r24, r24 + b9c: 99 27 eor r25, r25 + b9e: af 70 andi r26, 0x0F ; 15 + ba0: bb 27 eor r27, r27 + ba2: fa 8e std Y+26, r15 ; 0x1a + ba4: eb 8e std Y+27, r14 ; 0x1b + ba6: 8a 2f mov r24, r26 + ba8: 8f 70 andi r24, 0x0F ; 15 + baa: 89 8f std Y+25, r24 ; 0x19 + bac: bc 8a std Y+20, r11 ; 0x14 + bae: ad 8a std Y+21, r10 ; 0x15 + bb0: 08 e0 ldi r16, 0x08 ; 8 + bb2: 10 e0 ldi r17, 0x00 ; 0 + bb4: 20 e0 ldi r18, 0x00 ; 0 + bb6: 30 e0 ldi r19, 0x00 ; 0 + bb8: ae 01 movw r20, r28 + bba: 4c 5e subi r20, 0xEC ; 236 + bbc: 5f 4f sbci r21, 0xFF ; 255 + bbe: 6a e1 ldi r22, 0x1A ; 26 + bc0: ce 01 movw r24, r28 + bc2: 59 de rcall .-846 ; 0x876 + bc4: 41 e0 ldi r20, 0x01 ; 1 + bc6: 61 e0 ldi r22, 0x01 ; 1 + bc8: ce 01 movw r24, r28 + bca: 91 df rcall .-222 ; 0xaee + bcc: 80 e0 ldi r24, 0x00 ; 0 + bce: 90 e0 ldi r25, 0x00 ; 0 + bd0: df 91 pop r29 + bd2: cf 91 pop r28 + bd4: 1f 91 pop r17 + bd6: 0f 91 pop r16 + bd8: ff 90 pop r15 + bda: ef 90 pop r14 + bdc: df 90 pop r13 + bde: cf 90 pop r12 + be0: bf 90 pop r11 + be2: af 90 pop r10 + be4: 08 95 ret -00000bee : - bee: ef 92 push r14 - bf0: ff 92 push r15 - bf2: 0f 93 push r16 - bf4: 1f 93 push r17 - bf6: 66 23 and r22, r22 - bf8: c9 f0 breq .+50 ; 0xc2c - bfa: 61 30 cpi r22, 0x01 ; 1 - bfc: 21 f4 brne .+8 ; 0xc06 - bfe: fc 01 movw r30, r24 - c00: 21 85 ldd r18, Z+9 ; 0x09 - c02: 24 60 ori r18, 0x04 ; 4 - c04: 21 87 std Z+9, r18 ; 0x09 - c06: 9c 01 movw r18, r24 - c08: 27 5f subi r18, 0xF7 ; 247 - c0a: 3f 4f sbci r19, 0xFF ; 255 - c0c: bc 01 movw r22, r24 - c0e: 6e 5f subi r22, 0xFE ; 254 - c10: 7f 4f sbci r23, 0xFF ; 255 - c12: e1 2c mov r14, r1 - c14: f1 2c mov r15, r1 - c16: 87 01 movw r16, r14 - c18: e3 94 inc r14 - c1a: 40 ef ldi r20, 0xF0 ; 240 - c1c: 12 de rcall .-988 ; 0x842 - c1e: 80 e0 ldi r24, 0x00 ; 0 - c20: 90 e0 ldi r25, 0x00 ; 0 - c22: 1f 91 pop r17 - c24: 0f 91 pop r16 - c26: ff 90 pop r15 - c28: ef 90 pop r14 - c2a: 08 95 ret - c2c: fc 01 movw r30, r24 - c2e: 21 85 ldd r18, Z+9 ; 0x09 - c30: 2b 7f andi r18, 0xFB ; 251 - c32: 27 7f andi r18, 0xF7 ; 247 - c34: 21 87 std Z+9, r18 ; 0x09 - c36: e7 cf rjmp .-50 ; 0xc06 - -00000c38 : +00000be6 : int cm_si5351_init(si5351_driver *inst, void *i2c_transfer_inst, setGet_I2C_Event_fpt i2c_transfer_evt){ - c38: af 92 push r10 - c3a: bf 92 push r11 - c3c: cf 92 push r12 - c3e: df 92 push r13 - c40: ef 92 push r14 - c42: ff 92 push r15 - c44: 0f 93 push r16 - c46: 1f 93 push r17 - c48: cf 93 push r28 - c4a: df 93 push r29 - c4c: 1f 92 push r1 - c4e: cd b7 in r28, 0x3d ; 61 - c50: de b7 in r29, 0x3e ; 62 + be6: ef 92 push r14 + be8: ff 92 push r15 + bea: 0f 93 push r16 + bec: 1f 93 push r17 + bee: cf 93 push r28 + bf0: df 93 push r29 + bf2: 1f 92 push r1 + bf4: cd b7 in r28, 0x3d ; 61 + bf6: de b7 in r29, 0x3e ; 62 if(inst == NULL)return -1; - c52: 00 97 sbiw r24, 0x00 ; 0 - c54: 09 f4 brne .+2 ; 0xc58 - c56: 83 c0 rjmp .+262 ; 0xd5e + bf8: 00 97 sbiw r24, 0x00 ; 0 + bfa: 09 f4 brne .+2 ; 0xbfe + bfc: 91 c0 rjmp .+290 ; 0xd20 if(i2c_transfer_inst == NULL)return -1; - c58: 61 15 cp r22, r1 - c5a: 71 05 cpc r23, r1 - c5c: 09 f4 brne .+2 ; 0xc60 - c5e: 7f c0 rjmp .+254 ; 0xd5e + bfe: 61 15 cp r22, r1 + c00: 71 05 cpc r23, r1 + c02: 09 f4 brne .+2 ; 0xc06 + c04: 8d c0 rjmp .+282 ; 0xd20 if(i2c_transfer_evt == NULL)return -1; - c60: 41 15 cp r20, r1 - c62: 51 05 cpc r21, r1 - c64: 09 f4 brne .+2 ; 0xc68 - c66: 7b c0 rjmp .+246 ; 0xd5e - c68: 6c 01 movw r12, r24 + c06: 41 15 cp r20, r1 + c08: 51 05 cpc r21, r1 + c0a: 09 f4 brne .+2 ; 0xc0e + c0c: 89 c0 rjmp .+274 ; 0xd20 + c0e: 7c 01 movw r14, r24 inst->i2c_transfer_inst = i2c_transfer_inst; - c6a: dc 01 movw r26, r24 - c6c: 6d 93 st X+, r22 - c6e: 7c 93 st X, r23 - c70: 11 97 sbiw r26, 0x01 ; 1 + c10: dc 01 movw r26, r24 + c12: 6d 93 st X+, r22 + c14: 7c 93 st X, r23 + c16: 11 97 sbiw r26, 0x01 ; 1 inst->i2c_transfer_evt = i2c_transfer_evt; - c72: 12 96 adiw r26, 0x02 ; 2 - c74: 4d 93 st X+, r20 - c76: 5c 93 st X, r21 - c78: 13 97 sbiw r26, 0x03 ; 3 + c18: 12 96 adiw r26, 0x02 ; 2 + c1a: 4d 93 st X+, r20 + c1c: 5c 93 st X, r21 + c1e: 13 97 sbiw r26, 0x03 ; 3 int ret = 0; memset(&(inst->device_data),0x00,sizeof(si5351_data)); - c7a: fc 01 movw r30, r24 - c7c: 34 96 adiw r30, 0x04 ; 4 - c7e: 84 e5 ldi r24, 0x54 ; 84 - c80: df 01 movw r26, r30 - c82: 1d 92 st X+, r1 - c84: 8a 95 dec r24 - c86: e9 f7 brne .-6 ; 0xc82 + c20: fc 01 movw r30, r24 + c22: 34 96 adiw r30, 0x04 ; 4 + c24: 84 e5 ldi r24, 0x54 ; 84 + c26: df 01 movw r26, r30 + c28: 1d 92 st X+, r1 + c2a: 8a 95 dec r24 + c2c: e9 f7 brne .-6 ; 0xc28 /* Disable all outputs setting CLKx_DIS high */ uint8_t temp = 0xff; - c88: 8f ef ldi r24, 0xFF ; 255 - c8a: 89 83 std Y+1, r24 ; 0x01 - c8c: 56 01 movw r10, r12 - c8e: b2 e0 ldi r27, 0x02 ; 2 - c90: ab 0e add r10, r27 - c92: b1 1c adc r11, r1 + c2e: 8f ef ldi r24, 0xFF ; 255 + c30: 89 83 std Y+1, r24 ; 0x01 writeRegister(inst,SI5351_REG_OUTPUT_ENABLE_CONTROL,&temp,1); - c94: e1 2c mov r14, r1 - c96: f1 2c mov r15, r1 - c98: 87 01 movw r16, r14 - c9a: e3 94 inc r14 - c9c: 9e 01 movw r18, r28 - c9e: 2f 5f subi r18, 0xFF ; 255 - ca0: 3f 4f sbci r19, 0xFF ; 255 - ca2: 43 e0 ldi r20, 0x03 ; 3 - ca4: b5 01 movw r22, r10 - ca6: c6 01 movw r24, r12 - ca8: cc dd rcall .-1128 ; 0x842 + c32: 01 e0 ldi r16, 0x01 ; 1 + c34: 10 e0 ldi r17, 0x00 ; 0 + c36: 20 e0 ldi r18, 0x00 ; 0 + c38: 30 e0 ldi r19, 0x00 ; 0 + c3a: ae 01 movw r20, r28 + c3c: 4f 5f subi r20, 0xFF ; 255 + c3e: 5f 4f sbci r21, 0xFF ; 255 + c40: 63 e0 ldi r22, 0x03 ; 3 + c42: c7 01 movw r24, r14 + c44: 18 de rcall .-976 ; 0x876 /* Power down all output drivers */ temp = 0x80; - caa: 80 e8 ldi r24, 0x80 ; 128 - cac: 89 83 std Y+1, r24 ; 0x01 + c46: 80 e8 ldi r24, 0x80 ; 128 + c48: 89 83 std Y+1, r24 ; 0x01 writeRegister(inst,SI5351_REG_CLK_0_CONTROL,&temp,1); - cae: 9e 01 movw r18, r28 - cb0: 2f 5f subi r18, 0xFF ; 255 - cb2: 3f 4f sbci r19, 0xFF ; 255 - cb4: 40 e1 ldi r20, 0x10 ; 16 - cb6: b5 01 movw r22, r10 - cb8: c6 01 movw r24, r12 - cba: c3 dd rcall .-1146 ; 0x842 + c4a: 01 e0 ldi r16, 0x01 ; 1 + c4c: 10 e0 ldi r17, 0x00 ; 0 + c4e: 20 e0 ldi r18, 0x00 ; 0 + c50: 30 e0 ldi r19, 0x00 ; 0 + c52: ae 01 movw r20, r28 + c54: 4f 5f subi r20, 0xFF ; 255 + c56: 5f 4f sbci r21, 0xFF ; 255 + c58: 60 e1 ldi r22, 0x10 ; 16 + c5a: c7 01 movw r24, r14 + c5c: 0c de rcall .-1000 ; 0x876 writeRegister(inst,SI5351_REG_CLK_1_CONTROL,&temp,1); - cbc: 9e 01 movw r18, r28 - cbe: 2f 5f subi r18, 0xFF ; 255 - cc0: 3f 4f sbci r19, 0xFF ; 255 - cc2: 41 e1 ldi r20, 0x11 ; 17 - cc4: b5 01 movw r22, r10 - cc6: c6 01 movw r24, r12 - cc8: bc dd rcall .-1160 ; 0x842 + c5e: 01 e0 ldi r16, 0x01 ; 1 + c60: 10 e0 ldi r17, 0x00 ; 0 + c62: 20 e0 ldi r18, 0x00 ; 0 + c64: 30 e0 ldi r19, 0x00 ; 0 + c66: ae 01 movw r20, r28 + c68: 4f 5f subi r20, 0xFF ; 255 + c6a: 5f 4f sbci r21, 0xFF ; 255 + c6c: 61 e1 ldi r22, 0x11 ; 17 + c6e: c7 01 movw r24, r14 + c70: 02 de rcall .-1020 ; 0x876 writeRegister(inst,SI5351_REG_CLK_2_CONTROL,&temp,1); - cca: 9e 01 movw r18, r28 - ccc: 2f 5f subi r18, 0xFF ; 255 - cce: 3f 4f sbci r19, 0xFF ; 255 - cd0: 42 e1 ldi r20, 0x12 ; 18 - cd2: b5 01 movw r22, r10 - cd4: c6 01 movw r24, r12 - cd6: b5 dd rcall .-1174 ; 0x842 + c72: 01 e0 ldi r16, 0x01 ; 1 + c74: 10 e0 ldi r17, 0x00 ; 0 + c76: 20 e0 ldi r18, 0x00 ; 0 + c78: 30 e0 ldi r19, 0x00 ; 0 + c7a: ae 01 movw r20, r28 + c7c: 4f 5f subi r20, 0xFF ; 255 + c7e: 5f 4f sbci r21, 0xFF ; 255 + c80: 62 e1 ldi r22, 0x12 ; 18 + c82: c7 01 movw r24, r14 + c84: f8 dd rcall .-1040 ; 0x876 writeRegister(inst,SI5351_REG_CLK_3_CONTROL,&temp,1); - cd8: 9e 01 movw r18, r28 - cda: 2f 5f subi r18, 0xFF ; 255 - cdc: 3f 4f sbci r19, 0xFF ; 255 - cde: 43 e1 ldi r20, 0x13 ; 19 - ce0: b5 01 movw r22, r10 - ce2: c6 01 movw r24, r12 - ce4: ae dd rcall .-1188 ; 0x842 + c86: 01 e0 ldi r16, 0x01 ; 1 + c88: 10 e0 ldi r17, 0x00 ; 0 + c8a: 20 e0 ldi r18, 0x00 ; 0 + c8c: 30 e0 ldi r19, 0x00 ; 0 + c8e: ae 01 movw r20, r28 + c90: 4f 5f subi r20, 0xFF ; 255 + c92: 5f 4f sbci r21, 0xFF ; 255 + c94: 63 e1 ldi r22, 0x13 ; 19 + c96: c7 01 movw r24, r14 + c98: ee dd rcall .-1060 ; 0x876 writeRegister(inst,SI5351_REG_CLK_4_CONTROL,&temp,1); - ce6: 9e 01 movw r18, r28 - ce8: 2f 5f subi r18, 0xFF ; 255 - cea: 3f 4f sbci r19, 0xFF ; 255 - cec: 44 e1 ldi r20, 0x14 ; 20 - cee: b5 01 movw r22, r10 - cf0: c6 01 movw r24, r12 - cf2: a7 dd rcall .-1202 ; 0x842 + c9a: 01 e0 ldi r16, 0x01 ; 1 + c9c: 10 e0 ldi r17, 0x00 ; 0 + c9e: 20 e0 ldi r18, 0x00 ; 0 + ca0: 30 e0 ldi r19, 0x00 ; 0 + ca2: ae 01 movw r20, r28 + ca4: 4f 5f subi r20, 0xFF ; 255 + ca6: 5f 4f sbci r21, 0xFF ; 255 + ca8: 64 e1 ldi r22, 0x14 ; 20 + caa: c7 01 movw r24, r14 + cac: e4 dd rcall .-1080 ; 0x876 writeRegister(inst,SI5351_REG_CLK_5_CONTROL,&temp,1); - cf4: 9e 01 movw r18, r28 - cf6: 2f 5f subi r18, 0xFF ; 255 - cf8: 3f 4f sbci r19, 0xFF ; 255 - cfa: 45 e1 ldi r20, 0x15 ; 21 - cfc: b5 01 movw r22, r10 - cfe: c6 01 movw r24, r12 - d00: a0 dd rcall .-1216 ; 0x842 + cae: 01 e0 ldi r16, 0x01 ; 1 + cb0: 10 e0 ldi r17, 0x00 ; 0 + cb2: 20 e0 ldi r18, 0x00 ; 0 + cb4: 30 e0 ldi r19, 0x00 ; 0 + cb6: ae 01 movw r20, r28 + cb8: 4f 5f subi r20, 0xFF ; 255 + cba: 5f 4f sbci r21, 0xFF ; 255 + cbc: 65 e1 ldi r22, 0x15 ; 21 + cbe: c7 01 movw r24, r14 + cc0: da dd rcall .-1100 ; 0x876 writeRegister(inst,SI5351_REG_CLK_6_CONTROL,&temp,1); - d02: 9e 01 movw r18, r28 - d04: 2f 5f subi r18, 0xFF ; 255 - d06: 3f 4f sbci r19, 0xFF ; 255 - d08: 46 e1 ldi r20, 0x16 ; 22 - d0a: b5 01 movw r22, r10 - d0c: c6 01 movw r24, r12 - d0e: 99 dd rcall .-1230 ; 0x842 + cc2: 01 e0 ldi r16, 0x01 ; 1 + cc4: 10 e0 ldi r17, 0x00 ; 0 + cc6: 20 e0 ldi r18, 0x00 ; 0 + cc8: 30 e0 ldi r19, 0x00 ; 0 + cca: ae 01 movw r20, r28 + ccc: 4f 5f subi r20, 0xFF ; 255 + cce: 5f 4f sbci r21, 0xFF ; 255 + cd0: 66 e1 ldi r22, 0x16 ; 22 + cd2: c7 01 movw r24, r14 + cd4: d0 dd rcall .-1120 ; 0x876 writeRegister(inst,SI5351_REG_CLK_7_CONTROL,&temp,1); - d10: 9e 01 movw r18, r28 - d12: 2f 5f subi r18, 0xFF ; 255 - d14: 3f 4f sbci r19, 0xFF ; 255 - d16: 47 e1 ldi r20, 0x17 ; 23 - d18: b5 01 movw r22, r10 - d1a: c6 01 movw r24, r12 - d1c: 92 dd rcall .-1244 ; 0x842 + cd6: 01 e0 ldi r16, 0x01 ; 1 + cd8: 10 e0 ldi r17, 0x00 ; 0 + cda: 20 e0 ldi r18, 0x00 ; 0 + cdc: 30 e0 ldi r19, 0x00 ; 0 + cde: ae 01 movw r20, r28 + ce0: 4f 5f subi r20, 0xFF ; 255 + ce2: 5f 4f sbci r21, 0xFF ; 255 + ce4: 67 e1 ldi r22, 0x17 ; 23 + ce6: c7 01 movw r24, r14 + ce8: c6 dd rcall .-1140 ; 0x876 temp = SI5351_CRYSTAL_LOAD_10PF; - d1e: 80 ec ldi r24, 0xC0 ; 192 - d20: 89 83 std Y+1, r24 ; 0x01 + cea: 80 ec ldi r24, 0xC0 ; 192 + cec: 89 83 std Y+1, r24 ; 0x01 writeRegister(inst,SI5351_REG_CRYSTAL_LOAD_CAPACITANCE,&temp,1); - d22: 9e 01 movw r18, r28 - d24: 2f 5f subi r18, 0xFF ; 255 - d26: 3f 4f sbci r19, 0xFF ; 255 - d28: 47 eb ldi r20, 0xB7 ; 183 - d2a: b5 01 movw r22, r10 - d2c: c6 01 movw r24, r12 - d2e: 89 dd rcall .-1262 ; 0x842 + cee: 01 e0 ldi r16, 0x01 ; 1 + cf0: 10 e0 ldi r17, 0x00 ; 0 + cf2: 20 e0 ldi r18, 0x00 ; 0 + cf4: 30 e0 ldi r19, 0x00 ; 0 + cf6: ae 01 movw r20, r28 + cf8: 4f 5f subi r20, 0xFF ; 255 + cfa: 5f 4f sbci r21, 0xFF ; 255 + cfc: 67 eb ldi r22, 0xB7 ; 183 + cfe: c7 01 movw r24, r14 + d00: ba dd rcall .-1164 ; 0x876 // Enable xtal clk.. temp = 0b01000000; - d30: 80 e4 ldi r24, 0x40 ; 64 - d32: 89 83 std Y+1, r24 ; 0x01 + d02: 80 e4 ldi r24, 0x40 ; 64 + d04: 89 83 std Y+1, r24 ; 0x01 writeRegister(inst,SI5351_REG_FANOUT_ENABLE,&temp,1); - d34: 9e 01 movw r18, r28 - d36: 2f 5f subi r18, 0xFF ; 255 - d38: 3f 4f sbci r19, 0xFF ; 255 - d3a: 4b eb ldi r20, 0xBB ; 187 - d3c: b5 01 movw r22, r10 - d3e: c6 01 movw r24, r12 - d40: 80 dd rcall .-1280 ; 0x842 + d06: 01 e0 ldi r16, 0x01 ; 1 + d08: 10 e0 ldi r17, 0x00 ; 0 + d0a: 20 e0 ldi r18, 0x00 ; 0 + d0c: 30 e0 ldi r19, 0x00 ; 0 + d0e: ae 01 movw r20, r28 + d10: 4f 5f subi r20, 0xFF ; 255 + d12: 5f 4f sbci r21, 0xFF ; 255 + d14: 6b eb ldi r22, 0xBB ; 187 + d16: c7 01 movw r24, r14 + d18: ae dd rcall .-1188 ; 0x876 return ret; - d42: 80 e0 ldi r24, 0x00 ; 0 - d44: 90 e0 ldi r25, 0x00 ; 0 - - - -} - d46: 0f 90 pop r0 - d48: df 91 pop r29 - d4a: cf 91 pop r28 - d4c: 1f 91 pop r17 - d4e: 0f 91 pop r16 - d50: ff 90 pop r15 - d52: ef 90 pop r14 - d54: df 90 pop r13 - d56: cf 90 pop r12 - d58: bf 90 pop r11 - d5a: af 90 pop r10 - d5c: 08 95 ret + d1a: 80 e0 ldi r24, 0x00 ; 0 + d1c: 90 e0 ldi r25, 0x00 ; 0 + d1e: 02 c0 rjmp .+4 ; 0xd24 return inst->device_data.deviceStatus.REVID; } int cm_si5351_init(si5351_driver *inst, void *i2c_transfer_inst, setGet_I2C_Event_fpt i2c_transfer_evt){ if(inst == NULL)return -1; - d5e: 8f ef ldi r24, 0xFF ; 255 - d60: 9f ef ldi r25, 0xFF ; 255 - d62: f1 cf rjmp .-30 ; 0xd46 + d20: 8f ef ldi r24, 0xFF ; 255 + d22: 9f ef ldi r25, 0xFF ; 255 + writeRegister(inst,SI5351_REG_FANOUT_ENABLE,&temp,1); + return ret; -00000d64 : - d64: 0f 93 push r16 - d66: 1f 93 push r17 - d68: cf 93 push r28 - d6a: df 93 push r29 - d6c: 82 30 cpi r24, 0x02 ; 2 - d6e: 91 05 cpc r25, r1 - d70: 10 f4 brcc .+4 ; 0xd76 - d72: 82 e0 ldi r24, 0x02 ; 2 - d74: 90 e0 ldi r25, 0x00 ; 0 - d76: e0 91 65 3f lds r30, 0x3F65 ; 0x803f65 <__flp> - d7a: f0 91 66 3f lds r31, 0x3F66 ; 0x803f66 <__flp+0x1> - d7e: 20 e0 ldi r18, 0x00 ; 0 - d80: 30 e0 ldi r19, 0x00 ; 0 - d82: a0 e0 ldi r26, 0x00 ; 0 - d84: b0 e0 ldi r27, 0x00 ; 0 - d86: 30 97 sbiw r30, 0x00 ; 0 - d88: 19 f1 breq .+70 ; 0xdd0 - d8a: 40 81 ld r20, Z - d8c: 51 81 ldd r21, Z+1 ; 0x01 - d8e: 02 81 ldd r16, Z+2 ; 0x02 - d90: 13 81 ldd r17, Z+3 ; 0x03 - d92: 48 17 cp r20, r24 - d94: 59 07 cpc r21, r25 - d96: c8 f0 brcs .+50 ; 0xdca - d98: 84 17 cp r24, r20 - d9a: 95 07 cpc r25, r21 - d9c: 69 f4 brne .+26 ; 0xdb8 - d9e: 10 97 sbiw r26, 0x00 ; 0 - da0: 31 f0 breq .+12 ; 0xdae - da2: 12 96 adiw r26, 0x02 ; 2 - da4: 0c 93 st X, r16 - da6: 12 97 sbiw r26, 0x02 ; 2 - da8: 13 96 adiw r26, 0x03 ; 3 - daa: 1c 93 st X, r17 - dac: 27 c0 rjmp .+78 ; 0xdfc - dae: 00 93 65 3f sts 0x3F65, r16 ; 0x803f65 <__flp> - db2: 10 93 66 3f sts 0x3F66, r17 ; 0x803f66 <__flp+0x1> - db6: 22 c0 rjmp .+68 ; 0xdfc - db8: 21 15 cp r18, r1 - dba: 31 05 cpc r19, r1 - dbc: 19 f0 breq .+6 ; 0xdc4 - dbe: 42 17 cp r20, r18 - dc0: 53 07 cpc r21, r19 - dc2: 18 f4 brcc .+6 ; 0xdca - dc4: 9a 01 movw r18, r20 - dc6: bd 01 movw r22, r26 - dc8: ef 01 movw r28, r30 - dca: df 01 movw r26, r30 - dcc: f8 01 movw r30, r16 - dce: db cf rjmp .-74 ; 0xd86 - dd0: 21 15 cp r18, r1 - dd2: 31 05 cpc r19, r1 - dd4: f9 f0 breq .+62 ; 0xe14 - dd6: 28 1b sub r18, r24 - dd8: 39 0b sbc r19, r25 - dda: 24 30 cpi r18, 0x04 ; 4 - ddc: 31 05 cpc r19, r1 - dde: 80 f4 brcc .+32 ; 0xe00 - de0: 8a 81 ldd r24, Y+2 ; 0x02 - de2: 9b 81 ldd r25, Y+3 ; 0x03 - de4: 61 15 cp r22, r1 - de6: 71 05 cpc r23, r1 - de8: 21 f0 breq .+8 ; 0xdf2 - dea: fb 01 movw r30, r22 - dec: 82 83 std Z+2, r24 ; 0x02 - dee: 93 83 std Z+3, r25 ; 0x03 - df0: 04 c0 rjmp .+8 ; 0xdfa - df2: 80 93 65 3f sts 0x3F65, r24 ; 0x803f65 <__flp> - df6: 90 93 66 3f sts 0x3F66, r25 ; 0x803f66 <__flp+0x1> - dfa: fe 01 movw r30, r28 - dfc: 32 96 adiw r30, 0x02 ; 2 - dfe: 44 c0 rjmp .+136 ; 0xe88 - e00: fe 01 movw r30, r28 - e02: e2 0f add r30, r18 - e04: f3 1f adc r31, r19 - e06: 81 93 st Z+, r24 - e08: 91 93 st Z+, r25 - e0a: 22 50 subi r18, 0x02 ; 2 - e0c: 31 09 sbc r19, r1 - e0e: 28 83 st Y, r18 - e10: 39 83 std Y+1, r19 ; 0x01 - e12: 3a c0 rjmp .+116 ; 0xe88 - e14: 20 91 63 3f lds r18, 0x3F63 ; 0x803f63 <__brkval> - e18: 30 91 64 3f lds r19, 0x3F64 ; 0x803f64 <__brkval+0x1> - e1c: 23 2b or r18, r19 - e1e: 41 f4 brne .+16 ; 0xe30 - e20: 20 91 02 3f lds r18, 0x3F02 ; 0x803f02 <__malloc_heap_start> - e24: 30 91 03 3f lds r19, 0x3F03 ; 0x803f03 <__malloc_heap_start+0x1> - e28: 20 93 63 3f sts 0x3F63, r18 ; 0x803f63 <__brkval> - e2c: 30 93 64 3f sts 0x3F64, r19 ; 0x803f64 <__brkval+0x1> - e30: 20 91 00 3f lds r18, 0x3F00 ; 0x803f00 <__DATA_REGION_ORIGIN__> - e34: 30 91 01 3f lds r19, 0x3F01 ; 0x803f01 <__DATA_REGION_ORIGIN__+0x1> - e38: 21 15 cp r18, r1 - e3a: 31 05 cpc r19, r1 - e3c: 41 f4 brne .+16 ; 0xe4e - e3e: 2d b7 in r18, 0x3d ; 61 - e40: 3e b7 in r19, 0x3e ; 62 - e42: 40 91 04 3f lds r20, 0x3F04 ; 0x803f04 <__malloc_margin> - e46: 50 91 05 3f lds r21, 0x3F05 ; 0x803f05 <__malloc_margin+0x1> - e4a: 24 1b sub r18, r20 - e4c: 35 0b sbc r19, r21 - e4e: e0 91 63 3f lds r30, 0x3F63 ; 0x803f63 <__brkval> - e52: f0 91 64 3f lds r31, 0x3F64 ; 0x803f64 <__brkval+0x1> - e56: e2 17 cp r30, r18 - e58: f3 07 cpc r31, r19 - e5a: a0 f4 brcc .+40 ; 0xe84 - e5c: 2e 1b sub r18, r30 - e5e: 3f 0b sbc r19, r31 - e60: 28 17 cp r18, r24 - e62: 39 07 cpc r19, r25 - e64: 78 f0 brcs .+30 ; 0xe84 - e66: ac 01 movw r20, r24 - e68: 4e 5f subi r20, 0xFE ; 254 - e6a: 5f 4f sbci r21, 0xFF ; 255 - e6c: 24 17 cp r18, r20 - e6e: 35 07 cpc r19, r21 - e70: 48 f0 brcs .+18 ; 0xe84 - e72: 4e 0f add r20, r30 - e74: 5f 1f adc r21, r31 - e76: 40 93 63 3f sts 0x3F63, r20 ; 0x803f63 <__brkval> - e7a: 50 93 64 3f sts 0x3F64, r21 ; 0x803f64 <__brkval+0x1> - e7e: 81 93 st Z+, r24 - e80: 91 93 st Z+, r25 - e82: 02 c0 rjmp .+4 ; 0xe88 - e84: e0 e0 ldi r30, 0x00 ; 0 - e86: f0 e0 ldi r31, 0x00 ; 0 - e88: cf 01 movw r24, r30 - e8a: df 91 pop r29 - e8c: cf 91 pop r28 - e8e: 1f 91 pop r17 - e90: 0f 91 pop r16 - e92: 08 95 ret -00000e94 : - e94: cf 93 push r28 - e96: df 93 push r29 - e98: 00 97 sbiw r24, 0x00 ; 0 - e9a: 09 f4 brne .+2 ; 0xe9e - e9c: 81 c0 rjmp .+258 ; 0xfa0 - e9e: fc 01 movw r30, r24 - ea0: 32 97 sbiw r30, 0x02 ; 2 - ea2: 12 82 std Z+2, r1 ; 0x02 - ea4: 13 82 std Z+3, r1 ; 0x03 - ea6: a0 91 65 3f lds r26, 0x3F65 ; 0x803f65 <__flp> - eaa: b0 91 66 3f lds r27, 0x3F66 ; 0x803f66 <__flp+0x1> - eae: 10 97 sbiw r26, 0x00 ; 0 - eb0: 81 f4 brne .+32 ; 0xed2 - eb2: 20 81 ld r18, Z - eb4: 31 81 ldd r19, Z+1 ; 0x01 - eb6: 82 0f add r24, r18 - eb8: 93 1f adc r25, r19 - eba: 20 91 63 3f lds r18, 0x3F63 ; 0x803f63 <__brkval> - ebe: 30 91 64 3f lds r19, 0x3F64 ; 0x803f64 <__brkval+0x1> - ec2: 28 17 cp r18, r24 - ec4: 39 07 cpc r19, r25 - ec6: 51 f5 brne .+84 ; 0xf1c - ec8: e0 93 63 3f sts 0x3F63, r30 ; 0x803f63 <__brkval> - ecc: f0 93 64 3f sts 0x3F64, r31 ; 0x803f64 <__brkval+0x1> - ed0: 67 c0 rjmp .+206 ; 0xfa0 - ed2: ed 01 movw r28, r26 - ed4: 20 e0 ldi r18, 0x00 ; 0 - ed6: 30 e0 ldi r19, 0x00 ; 0 - ed8: ce 17 cp r28, r30 - eda: df 07 cpc r29, r31 - edc: 40 f4 brcc .+16 ; 0xeee - ede: 4a 81 ldd r20, Y+2 ; 0x02 - ee0: 5b 81 ldd r21, Y+3 ; 0x03 - ee2: 9e 01 movw r18, r28 - ee4: 41 15 cp r20, r1 - ee6: 51 05 cpc r21, r1 - ee8: f1 f0 breq .+60 ; 0xf26 - eea: ea 01 movw r28, r20 - eec: f5 cf rjmp .-22 ; 0xed8 - eee: c2 83 std Z+2, r28 ; 0x02 - ef0: d3 83 std Z+3, r29 ; 0x03 - ef2: 40 81 ld r20, Z - ef4: 51 81 ldd r21, Z+1 ; 0x01 - ef6: 84 0f add r24, r20 - ef8: 95 1f adc r25, r21 - efa: c8 17 cp r28, r24 - efc: d9 07 cpc r29, r25 - efe: 59 f4 brne .+22 ; 0xf16 - f00: 88 81 ld r24, Y - f02: 99 81 ldd r25, Y+1 ; 0x01 - f04: 84 0f add r24, r20 - f06: 95 1f adc r25, r21 - f08: 02 96 adiw r24, 0x02 ; 2 - f0a: 80 83 st Z, r24 - f0c: 91 83 std Z+1, r25 ; 0x01 - f0e: 8a 81 ldd r24, Y+2 ; 0x02 - f10: 9b 81 ldd r25, Y+3 ; 0x03 - f12: 82 83 std Z+2, r24 ; 0x02 - f14: 93 83 std Z+3, r25 ; 0x03 - f16: 21 15 cp r18, r1 - f18: 31 05 cpc r19, r1 - f1a: 29 f4 brne .+10 ; 0xf26 - f1c: e0 93 65 3f sts 0x3F65, r30 ; 0x803f65 <__flp> - f20: f0 93 66 3f sts 0x3F66, r31 ; 0x803f66 <__flp+0x1> - f24: 3d c0 rjmp .+122 ; 0xfa0 - f26: e9 01 movw r28, r18 - f28: ea 83 std Y+2, r30 ; 0x02 - f2a: fb 83 std Y+3, r31 ; 0x03 - f2c: 49 91 ld r20, Y+ - f2e: 59 91 ld r21, Y+ - f30: c4 0f add r28, r20 - f32: d5 1f adc r29, r21 - f34: ec 17 cp r30, r28 - f36: fd 07 cpc r31, r29 - f38: 61 f4 brne .+24 ; 0xf52 - f3a: 80 81 ld r24, Z - f3c: 91 81 ldd r25, Z+1 ; 0x01 - f3e: 84 0f add r24, r20 - f40: 95 1f adc r25, r21 - f42: 02 96 adiw r24, 0x02 ; 2 - f44: e9 01 movw r28, r18 - f46: 88 83 st Y, r24 - f48: 99 83 std Y+1, r25 ; 0x01 - f4a: 82 81 ldd r24, Z+2 ; 0x02 - f4c: 93 81 ldd r25, Z+3 ; 0x03 - f4e: 8a 83 std Y+2, r24 ; 0x02 - f50: 9b 83 std Y+3, r25 ; 0x03 - f52: e0 e0 ldi r30, 0x00 ; 0 - f54: f0 e0 ldi r31, 0x00 ; 0 - f56: 12 96 adiw r26, 0x02 ; 2 - f58: 8d 91 ld r24, X+ - f5a: 9c 91 ld r25, X - f5c: 13 97 sbiw r26, 0x03 ; 3 - f5e: 00 97 sbiw r24, 0x00 ; 0 - f60: 19 f0 breq .+6 ; 0xf68 - f62: fd 01 movw r30, r26 - f64: dc 01 movw r26, r24 - f66: f7 cf rjmp .-18 ; 0xf56 - f68: 8d 91 ld r24, X+ - f6a: 9c 91 ld r25, X - f6c: 11 97 sbiw r26, 0x01 ; 1 - f6e: 9d 01 movw r18, r26 - f70: 2e 5f subi r18, 0xFE ; 254 - f72: 3f 4f sbci r19, 0xFF ; 255 - f74: 82 0f add r24, r18 - f76: 93 1f adc r25, r19 - f78: 20 91 63 3f lds r18, 0x3F63 ; 0x803f63 <__brkval> - f7c: 30 91 64 3f lds r19, 0x3F64 ; 0x803f64 <__brkval+0x1> - f80: 28 17 cp r18, r24 - f82: 39 07 cpc r19, r25 - f84: 69 f4 brne .+26 ; 0xfa0 - f86: 30 97 sbiw r30, 0x00 ; 0 - f88: 29 f4 brne .+10 ; 0xf94 - f8a: 10 92 65 3f sts 0x3F65, r1 ; 0x803f65 <__flp> - f8e: 10 92 66 3f sts 0x3F66, r1 ; 0x803f66 <__flp+0x1> - f92: 02 c0 rjmp .+4 ; 0xf98 - f94: 12 82 std Z+2, r1 ; 0x02 - f96: 13 82 std Z+3, r1 ; 0x03 - f98: a0 93 63 3f sts 0x3F63, r26 ; 0x803f63 <__brkval> - f9c: b0 93 64 3f sts 0x3F64, r27 ; 0x803f64 <__brkval+0x1> - fa0: df 91 pop r29 - fa2: cf 91 pop r28 - fa4: 08 95 ret -00000fa6 : - fa6: fb 01 movw r30, r22 +} + d24: 0f 90 pop r0 + d26: df 91 pop r29 + d28: cf 91 pop r28 + d2a: 1f 91 pop r17 + d2c: 0f 91 pop r16 + d2e: ff 90 pop r15 + d30: ef 90 pop r14 + d32: 08 95 ret + +00000d34 : + d34: 0f 93 push r16 + d36: 1f 93 push r17 + d38: cf 93 push r28 + d3a: df 93 push r29 + d3c: 82 30 cpi r24, 0x02 ; 2 + d3e: 91 05 cpc r25, r1 + d40: 10 f4 brcc .+4 ; 0xd46 + d42: 82 e0 ldi r24, 0x02 ; 2 + d44: 90 e0 ldi r25, 0x00 ; 0 + d46: e0 91 69 3f lds r30, 0x3F69 ; 0x803f69 <__flp> + d4a: f0 91 6a 3f lds r31, 0x3F6A ; 0x803f6a <__flp+0x1> + d4e: 20 e0 ldi r18, 0x00 ; 0 + d50: 30 e0 ldi r19, 0x00 ; 0 + d52: a0 e0 ldi r26, 0x00 ; 0 + d54: b0 e0 ldi r27, 0x00 ; 0 + d56: 30 97 sbiw r30, 0x00 ; 0 + d58: 19 f1 breq .+70 ; 0xda0 + d5a: 40 81 ld r20, Z + d5c: 51 81 ldd r21, Z+1 ; 0x01 + d5e: 02 81 ldd r16, Z+2 ; 0x02 + d60: 13 81 ldd r17, Z+3 ; 0x03 + d62: 48 17 cp r20, r24 + d64: 59 07 cpc r21, r25 + d66: c8 f0 brcs .+50 ; 0xd9a + d68: 84 17 cp r24, r20 + d6a: 95 07 cpc r25, r21 + d6c: 69 f4 brne .+26 ; 0xd88 + d6e: 10 97 sbiw r26, 0x00 ; 0 + d70: 31 f0 breq .+12 ; 0xd7e + d72: 12 96 adiw r26, 0x02 ; 2 + d74: 0c 93 st X, r16 + d76: 12 97 sbiw r26, 0x02 ; 2 + d78: 13 96 adiw r26, 0x03 ; 3 + d7a: 1c 93 st X, r17 + d7c: 27 c0 rjmp .+78 ; 0xdcc + d7e: 00 93 69 3f sts 0x3F69, r16 ; 0x803f69 <__flp> + d82: 10 93 6a 3f sts 0x3F6A, r17 ; 0x803f6a <__flp+0x1> + d86: 22 c0 rjmp .+68 ; 0xdcc + d88: 21 15 cp r18, r1 + d8a: 31 05 cpc r19, r1 + d8c: 19 f0 breq .+6 ; 0xd94 + d8e: 42 17 cp r20, r18 + d90: 53 07 cpc r21, r19 + d92: 18 f4 brcc .+6 ; 0xd9a + d94: 9a 01 movw r18, r20 + d96: bd 01 movw r22, r26 + d98: ef 01 movw r28, r30 + d9a: df 01 movw r26, r30 + d9c: f8 01 movw r30, r16 + d9e: db cf rjmp .-74 ; 0xd56 + da0: 21 15 cp r18, r1 + da2: 31 05 cpc r19, r1 + da4: f9 f0 breq .+62 ; 0xde4 + da6: 28 1b sub r18, r24 + da8: 39 0b sbc r19, r25 + daa: 24 30 cpi r18, 0x04 ; 4 + dac: 31 05 cpc r19, r1 + dae: 80 f4 brcc .+32 ; 0xdd0 + db0: 8a 81 ldd r24, Y+2 ; 0x02 + db2: 9b 81 ldd r25, Y+3 ; 0x03 + db4: 61 15 cp r22, r1 + db6: 71 05 cpc r23, r1 + db8: 21 f0 breq .+8 ; 0xdc2 + dba: fb 01 movw r30, r22 + dbc: 82 83 std Z+2, r24 ; 0x02 + dbe: 93 83 std Z+3, r25 ; 0x03 + dc0: 04 c0 rjmp .+8 ; 0xdca + dc2: 80 93 69 3f sts 0x3F69, r24 ; 0x803f69 <__flp> + dc6: 90 93 6a 3f sts 0x3F6A, r25 ; 0x803f6a <__flp+0x1> + dca: fe 01 movw r30, r28 + dcc: 32 96 adiw r30, 0x02 ; 2 + dce: 44 c0 rjmp .+136 ; 0xe58 + dd0: fe 01 movw r30, r28 + dd2: e2 0f add r30, r18 + dd4: f3 1f adc r31, r19 + dd6: 81 93 st Z+, r24 + dd8: 91 93 st Z+, r25 + dda: 22 50 subi r18, 0x02 ; 2 + ddc: 31 09 sbc r19, r1 + dde: 28 83 st Y, r18 + de0: 39 83 std Y+1, r19 ; 0x01 + de2: 3a c0 rjmp .+116 ; 0xe58 + de4: 20 91 67 3f lds r18, 0x3F67 ; 0x803f67 <__brkval> + de8: 30 91 68 3f lds r19, 0x3F68 ; 0x803f68 <__brkval+0x1> + dec: 23 2b or r18, r19 + dee: 41 f4 brne .+16 ; 0xe00 + df0: 20 91 02 3f lds r18, 0x3F02 ; 0x803f02 <__malloc_heap_start> + df4: 30 91 03 3f lds r19, 0x3F03 ; 0x803f03 <__malloc_heap_start+0x1> + df8: 20 93 67 3f sts 0x3F67, r18 ; 0x803f67 <__brkval> + dfc: 30 93 68 3f sts 0x3F68, r19 ; 0x803f68 <__brkval+0x1> + e00: 20 91 00 3f lds r18, 0x3F00 ; 0x803f00 <__data_start> + e04: 30 91 01 3f lds r19, 0x3F01 ; 0x803f01 <__data_start+0x1> + e08: 21 15 cp r18, r1 + e0a: 31 05 cpc r19, r1 + e0c: 41 f4 brne .+16 ; 0xe1e + e0e: 2d b7 in r18, 0x3d ; 61 + e10: 3e b7 in r19, 0x3e ; 62 + e12: 40 91 04 3f lds r20, 0x3F04 ; 0x803f04 <__malloc_margin> + e16: 50 91 05 3f lds r21, 0x3F05 ; 0x803f05 <__malloc_margin+0x1> + e1a: 24 1b sub r18, r20 + e1c: 35 0b sbc r19, r21 + e1e: e0 91 67 3f lds r30, 0x3F67 ; 0x803f67 <__brkval> + e22: f0 91 68 3f lds r31, 0x3F68 ; 0x803f68 <__brkval+0x1> + e26: e2 17 cp r30, r18 + e28: f3 07 cpc r31, r19 + e2a: a0 f4 brcc .+40 ; 0xe54 + e2c: 2e 1b sub r18, r30 + e2e: 3f 0b sbc r19, r31 + e30: 28 17 cp r18, r24 + e32: 39 07 cpc r19, r25 + e34: 78 f0 brcs .+30 ; 0xe54 + e36: ac 01 movw r20, r24 + e38: 4e 5f subi r20, 0xFE ; 254 + e3a: 5f 4f sbci r21, 0xFF ; 255 + e3c: 24 17 cp r18, r20 + e3e: 35 07 cpc r19, r21 + e40: 48 f0 brcs .+18 ; 0xe54 + e42: 4e 0f add r20, r30 + e44: 5f 1f adc r21, r31 + e46: 40 93 67 3f sts 0x3F67, r20 ; 0x803f67 <__brkval> + e4a: 50 93 68 3f sts 0x3F68, r21 ; 0x803f68 <__brkval+0x1> + e4e: 81 93 st Z+, r24 + e50: 91 93 st Z+, r25 + e52: 02 c0 rjmp .+4 ; 0xe58 + e54: e0 e0 ldi r30, 0x00 ; 0 + e56: f0 e0 ldi r31, 0x00 ; 0 + e58: cf 01 movw r24, r30 + e5a: df 91 pop r29 + e5c: cf 91 pop r28 + e5e: 1f 91 pop r17 + e60: 0f 91 pop r16 + e62: 08 95 ret + +00000e64 : + e64: cf 93 push r28 + e66: df 93 push r29 + e68: 00 97 sbiw r24, 0x00 ; 0 + e6a: 09 f4 brne .+2 ; 0xe6e + e6c: 81 c0 rjmp .+258 ; 0xf70 + e6e: fc 01 movw r30, r24 + e70: 32 97 sbiw r30, 0x02 ; 2 + e72: 12 82 std Z+2, r1 ; 0x02 + e74: 13 82 std Z+3, r1 ; 0x03 + e76: a0 91 69 3f lds r26, 0x3F69 ; 0x803f69 <__flp> + e7a: b0 91 6a 3f lds r27, 0x3F6A ; 0x803f6a <__flp+0x1> + e7e: 10 97 sbiw r26, 0x00 ; 0 + e80: 81 f4 brne .+32 ; 0xea2 + e82: 20 81 ld r18, Z + e84: 31 81 ldd r19, Z+1 ; 0x01 + e86: 82 0f add r24, r18 + e88: 93 1f adc r25, r19 + e8a: 20 91 67 3f lds r18, 0x3F67 ; 0x803f67 <__brkval> + e8e: 30 91 68 3f lds r19, 0x3F68 ; 0x803f68 <__brkval+0x1> + e92: 28 17 cp r18, r24 + e94: 39 07 cpc r19, r25 + e96: 51 f5 brne .+84 ; 0xeec + e98: e0 93 67 3f sts 0x3F67, r30 ; 0x803f67 <__brkval> + e9c: f0 93 68 3f sts 0x3F68, r31 ; 0x803f68 <__brkval+0x1> + ea0: 67 c0 rjmp .+206 ; 0xf70 + ea2: ed 01 movw r28, r26 + ea4: 20 e0 ldi r18, 0x00 ; 0 + ea6: 30 e0 ldi r19, 0x00 ; 0 + ea8: ce 17 cp r28, r30 + eaa: df 07 cpc r29, r31 + eac: 40 f4 brcc .+16 ; 0xebe + eae: 4a 81 ldd r20, Y+2 ; 0x02 + eb0: 5b 81 ldd r21, Y+3 ; 0x03 + eb2: 9e 01 movw r18, r28 + eb4: 41 15 cp r20, r1 + eb6: 51 05 cpc r21, r1 + eb8: f1 f0 breq .+60 ; 0xef6 + eba: ea 01 movw r28, r20 + ebc: f5 cf rjmp .-22 ; 0xea8 + ebe: c2 83 std Z+2, r28 ; 0x02 + ec0: d3 83 std Z+3, r29 ; 0x03 + ec2: 40 81 ld r20, Z + ec4: 51 81 ldd r21, Z+1 ; 0x01 + ec6: 84 0f add r24, r20 + ec8: 95 1f adc r25, r21 + eca: c8 17 cp r28, r24 + ecc: d9 07 cpc r29, r25 + ece: 59 f4 brne .+22 ; 0xee6 + ed0: 88 81 ld r24, Y + ed2: 99 81 ldd r25, Y+1 ; 0x01 + ed4: 84 0f add r24, r20 + ed6: 95 1f adc r25, r21 + ed8: 02 96 adiw r24, 0x02 ; 2 + eda: 80 83 st Z, r24 + edc: 91 83 std Z+1, r25 ; 0x01 + ede: 8a 81 ldd r24, Y+2 ; 0x02 + ee0: 9b 81 ldd r25, Y+3 ; 0x03 + ee2: 82 83 std Z+2, r24 ; 0x02 + ee4: 93 83 std Z+3, r25 ; 0x03 + ee6: 21 15 cp r18, r1 + ee8: 31 05 cpc r19, r1 + eea: 29 f4 brne .+10 ; 0xef6 + eec: e0 93 69 3f sts 0x3F69, r30 ; 0x803f69 <__flp> + ef0: f0 93 6a 3f sts 0x3F6A, r31 ; 0x803f6a <__flp+0x1> + ef4: 3d c0 rjmp .+122 ; 0xf70 + ef6: e9 01 movw r28, r18 + ef8: ea 83 std Y+2, r30 ; 0x02 + efa: fb 83 std Y+3, r31 ; 0x03 + efc: 49 91 ld r20, Y+ + efe: 59 91 ld r21, Y+ + f00: c4 0f add r28, r20 + f02: d5 1f adc r29, r21 + f04: ec 17 cp r30, r28 + f06: fd 07 cpc r31, r29 + f08: 61 f4 brne .+24 ; 0xf22 + f0a: 80 81 ld r24, Z + f0c: 91 81 ldd r25, Z+1 ; 0x01 + f0e: 84 0f add r24, r20 + f10: 95 1f adc r25, r21 + f12: 02 96 adiw r24, 0x02 ; 2 + f14: e9 01 movw r28, r18 + f16: 88 83 st Y, r24 + f18: 99 83 std Y+1, r25 ; 0x01 + f1a: 82 81 ldd r24, Z+2 ; 0x02 + f1c: 93 81 ldd r25, Z+3 ; 0x03 + f1e: 8a 83 std Y+2, r24 ; 0x02 + f20: 9b 83 std Y+3, r25 ; 0x03 + f22: e0 e0 ldi r30, 0x00 ; 0 + f24: f0 e0 ldi r31, 0x00 ; 0 + f26: 12 96 adiw r26, 0x02 ; 2 + f28: 8d 91 ld r24, X+ + f2a: 9c 91 ld r25, X + f2c: 13 97 sbiw r26, 0x03 ; 3 + f2e: 00 97 sbiw r24, 0x00 ; 0 + f30: 19 f0 breq .+6 ; 0xf38 + f32: fd 01 movw r30, r26 + f34: dc 01 movw r26, r24 + f36: f7 cf rjmp .-18 ; 0xf26 + f38: 8d 91 ld r24, X+ + f3a: 9c 91 ld r25, X + f3c: 11 97 sbiw r26, 0x01 ; 1 + f3e: 9d 01 movw r18, r26 + f40: 2e 5f subi r18, 0xFE ; 254 + f42: 3f 4f sbci r19, 0xFF ; 255 + f44: 82 0f add r24, r18 + f46: 93 1f adc r25, r19 + f48: 20 91 67 3f lds r18, 0x3F67 ; 0x803f67 <__brkval> + f4c: 30 91 68 3f lds r19, 0x3F68 ; 0x803f68 <__brkval+0x1> + f50: 28 17 cp r18, r24 + f52: 39 07 cpc r19, r25 + f54: 69 f4 brne .+26 ; 0xf70 + f56: 30 97 sbiw r30, 0x00 ; 0 + f58: 29 f4 brne .+10 ; 0xf64 + f5a: 10 92 69 3f sts 0x3F69, r1 ; 0x803f69 <__flp> + f5e: 10 92 6a 3f sts 0x3F6A, r1 ; 0x803f6a <__flp+0x1> + f62: 02 c0 rjmp .+4 ; 0xf68 + f64: 12 82 std Z+2, r1 ; 0x02 + f66: 13 82 std Z+3, r1 ; 0x03 + f68: a0 93 67 3f sts 0x3F67, r26 ; 0x803f67 <__brkval> + f6c: b0 93 68 3f sts 0x3F68, r27 ; 0x803f68 <__brkval+0x1> + f70: df 91 pop r29 + f72: cf 91 pop r28 + f74: 08 95 ret + +00000f76 : + f76: fb 01 movw r30, r22 + f78: dc 01 movw r26, r24 + f7a: 02 c0 rjmp .+4 ; 0xf80 + f7c: 01 90 ld r0, Z+ + f7e: 0d 92 st X+, r0 + f80: 41 50 subi r20, 0x01 ; 1 + f82: 50 40 sbci r21, 0x00 ; 0 + f84: d8 f7 brcc .-10 ; 0xf7c + f86: 08 95 ret + +00000f88 : + f88: 03 d0 rcall .+6 ; 0xf90 + f8a: 80 81 ld r24, Z + f8c: 99 27 eor r25, r25 + f8e: 08 95 ret + +00000f90 : + f90: fc 01 movw r30, r24 + f92: e0 50 subi r30, 0x00 ; 0 + f94: fc 4e sbci r31, 0xEC ; 236 + f96: 08 95 ret + +00000f98 : + f98: 26 2f mov r18, r22 + +00000f9a : + f9a: af 93 push r26 + f9c: bf 93 push r27 + f9e: e0 e0 ldi r30, 0x00 ; 0 + fa0: f0 e1 ldi r31, 0x10 ; 16 + fa2: 32 81 ldd r19, Z+2 ; 0x02 + fa4: 31 fd sbrc r19, 1 + fa6: fd cf rjmp .-6 ; 0xfa2 fa8: dc 01 movw r26, r24 - faa: 02 c0 rjmp .+4 ; 0xfb0 - fac: 01 90 ld r0, Z+ - fae: 0d 92 st X+, r0 - fb0: 41 50 subi r20, 0x01 ; 1 - fb2: 50 40 sbci r21, 0x00 ; 0 - fb4: d8 f7 brcc .-10 ; 0xfac - fb6: 08 95 ret - -00000fb8 : - fb8: 03 d0 rcall .+6 ; 0xfc0 - fba: 80 81 ld r24, Z - fbc: 99 27 eor r25, r25 + faa: a0 50 subi r26, 0x00 ; 0 + fac: bc 4e sbci r27, 0xEC ; 236 + fae: 2c 93 st X, r18 + fb0: 2d e9 ldi r18, 0x9D ; 157 + fb2: 24 bf out 0x34, r18 ; 52 + fb4: 23 e0 ldi r18, 0x03 ; 3 + fb6: 20 83 st Z, r18 + fb8: 01 96 adiw r24, 0x01 ; 1 + fba: bf 91 pop r27 + fbc: af 91 pop r26 fbe: 08 95 ret -00000fc0 : - fc0: fc 01 movw r30, r24 - fc2: e0 50 subi r30, 0x00 ; 0 - fc4: fc 4e sbci r31, 0xEC ; 236 - fc6: 08 95 ret +00000fc0 <_exit>: + fc0: f8 94 cli -00000fc8 : - fc8: 26 2f mov r18, r22 - -00000fca : - fca: af 93 push r26 - fcc: bf 93 push r27 - fce: e0 e0 ldi r30, 0x00 ; 0 - fd0: f0 e1 ldi r31, 0x10 ; 16 - fd2: 32 81 ldd r19, Z+2 ; 0x02 - fd4: 31 fd sbrc r19, 1 - fd6: fd cf rjmp .-6 ; 0xfd2 - fd8: dc 01 movw r26, r24 - fda: a0 50 subi r26, 0x00 ; 0 - fdc: bc 4e sbci r27, 0xEC ; 236 - fde: 2c 93 st X, r18 - fe0: 2d e9 ldi r18, 0x9D ; 157 - fe2: 24 bf out 0x34, r18 ; 52 - fe4: 23 e0 ldi r18, 0x03 ; 3 - fe6: 20 83 st Z, r18 - fe8: 01 96 adiw r24, 0x01 ; 1 - fea: bf 91 pop r27 - fec: af 91 pop r26 - fee: 08 95 ret - -00000ff0 <_exit>: - ff0: f8 94 cli - -00000ff2 <__stop_program>: - ff2: ff cf rjmp .-2 ; 0xff2 <__stop_program> +00000fc2 <__stop_program>: + fc2: ff cf rjmp .-2 ; 0xfc2 <__stop_program> diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map index 1bef047..56698f8 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map @@ -58,7 +58,7 @@ c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/.. Allocating common symbols Common symbol size file -storno_xtal_app 0x1d main.o +storno_xtal_app 0x21 main.o __brkval 0x2 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) __flp 0x2 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) @@ -73,22 +73,16 @@ Discarded input sections .data 0x00000000 0x0 avr_gpio_driver/avr_gpio.o .bss 0x00000000 0x0 avr_gpio_driver/avr_gpio.o .text.gpio_set_level - 0x00000000 0x28 avr_gpio_driver/avr_gpio.o + 0x00000000 0x24 avr_gpio_driver/avr_gpio.o .text.gpio_init - 0x00000000 0x28 avr_gpio_driver/avr_gpio.o + 0x00000000 0x24 avr_gpio_driver/avr_gpio.o .text 0x00000000 0x0 avr_i2c_driver/avr_i2c.o .data 0x00000000 0x0 avr_i2c_driver/avr_i2c.o .bss 0x00000000 0x0 avr_i2c_driver/avr_i2c.o - .text.i2c_write_devAddr - 0x00000000 0x22 avr_i2c_driver/avr_i2c.o .text.i2c_byte_write 0x00000000 0x3e avr_i2c_driver/avr_i2c.o .text.i2c_byte_read 0x00000000 0x34 avr_i2c_driver/avr_i2c.o - .text.i2c_write - 0x00000000 0x1e avr_i2c_driver/avr_i2c.o - .text.i2c_IsDeviceReady - 0x00000000 0x2c avr_i2c_driver/avr_i2c.o .text 0x00000000 0x0 avr_uart_driver/avr_uart.o .data 0x00000000 0x0 avr_uart_driver/avr_uart.o .bss 0x00000000 0x0 avr_uart_driver/avr_uart.o @@ -110,12 +104,10 @@ Discarded input sections .text 0x00000000 0x0 si5351_driver/si5351_driver.o .data 0x00000000 0x0 si5351_driver/si5351_driver.o .bss 0x00000000 0x0 si5351_driver/si5351_driver.o - .text.cm_setPLLParameters - 0x00000000 0x2f6 si5351_driver/si5351_driver.o .text.cm_setOutputMultiSynth - 0x00000000 0x11c si5351_driver/si5351_driver.o - .text.cm_resetPLLs - 0x00000000 0x50 si5351_driver/si5351_driver.o + 0x00000000 0xdc si5351_driver/si5351_driver.o + .text.cm_setPLLParameters + 0x00000000 0x20c si5351_driver/si5351_driver.o .text.cm_si5351_getRevisionNumber 0x00000000 0x68 si5351_driver/si5351_driver.o .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) @@ -424,7 +416,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x00000000 0xff4 +.text 0x00000000 0xfc4 *(.vectors) .vectors 0x00000000 0x34 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o 0x00000000 __vector_default @@ -511,102 +503,112 @@ END GROUP 0x0000006c . = ALIGN (0x2) *(.text.*) .text.cm_EEPROM_write - 0x0000006c 0x42 avr_eeprom_driver/avr_eeprom_driver.o + 0x0000006c 0x36 avr_eeprom_driver/avr_eeprom_driver.o 0x0000006c cm_EEPROM_write .text.cm_EEPROM_read - 0x000000ae 0x42 avr_eeprom_driver/avr_eeprom_driver.o - 0x000000ae cm_EEPROM_read + 0x000000a2 0x36 avr_eeprom_driver/avr_eeprom_driver.o + 0x000000a2 cm_EEPROM_read .text.gpio_get_level - 0x000000f0 0x20 avr_gpio_driver/avr_gpio.o - 0x000000f0 gpio_get_level - .text.i2c_write.part.0 - 0x00000110 0x7c avr_i2c_driver/avr_i2c.o + 0x000000d8 0x20 avr_gpio_driver/avr_gpio.o + 0x000000d8 gpio_get_level + .text.i2c_write_devAddr + 0x000000f8 0x22 avr_i2c_driver/avr_i2c.o + 0x000000f8 i2c_write_devAddr + .text.i2c_write + 0x0000011a 0x94 avr_i2c_driver/avr_i2c.o + 0x0000011a i2c_write .text.i2c_read - 0x0000018c 0x80 avr_i2c_driver/avr_i2c.o - 0x0000018c i2c_read + 0x000001ae 0x8c avr_i2c_driver/avr_i2c.o + 0x000001ae i2c_read + .text.i2c_IsDeviceReady + 0x0000023a 0x2c avr_i2c_driver/avr_i2c.o + 0x0000023a i2c_IsDeviceReady .text.cm_i2c_init - 0x0000020c 0x34 avr_i2c_driver/avr_i2c.o - 0x0000020c cm_i2c_init + 0x00000266 0x34 avr_i2c_driver/avr_i2c.o + 0x00000266 cm_i2c_init .text.cm_i2c_addDev - 0x00000240 0x3e avr_i2c_driver/avr_i2c.o - 0x00000240 cm_i2c_addDev + 0x0000029a 0x3c avr_i2c_driver/avr_i2c.o + 0x0000029a cm_i2c_addDev .text.cm_i2c_transfer - 0x0000027e 0x4e avr_i2c_driver/avr_i2c.o - 0x0000027e cm_i2c_transfer + 0x000002d6 0x2a avr_i2c_driver/avr_i2c.o + 0x000002d6 cm_i2c_transfer .text.__vector_22 - 0x000002cc 0x56 avr_uart_driver/avr_uart.o - 0x000002cc __vector_22 + 0x00000300 0x56 avr_uart_driver/avr_uart.o + 0x00000300 __vector_22 .text.cm_uart_init - 0x00000322 0x66 avr_uart_driver/avr_uart.o - 0x00000322 cm_uart_init + 0x00000356 0x62 avr_uart_driver/avr_uart.o + 0x00000356 cm_uart_init .text.cm_msgSync_Byte_DecodeSC - 0x00000388 0x64 cm_msg/cm_msg.o - 0x00000388 cm_msgSync_Byte_DecodeSC + 0x000003b8 0x5e cm_msg/cm_msg.o + 0x000003b8 cm_msgSync_Byte_DecodeSC .text.cm_msg_DecodeMsg_Byte - 0x000003ec 0xb4 cm_msg/cm_msg.o - 0x000003ec cm_msg_DecodeMsg_Byte + 0x00000416 0xa0 cm_msg/cm_msg.o + 0x00000416 cm_msg_DecodeMsg_Byte .text.cm_MsgCompleteEvt_Register - 0x000004a0 0x1c cm_msg/cm_msg.o - 0x000004a0 cm_MsgCompleteEvt_Register + 0x000004b6 0x1c cm_msg/cm_msg.o + 0x000004b6 cm_MsgCompleteEvt_Register .text.cqm_setPLLParam - 0x000004bc 0x8c cqm6xx_app.o + 0x000004d2 0x8c cqm6xx_app.o .text.cqm6xx_app_updateOsc - 0x00000548 0x82 cqm6xx_app.o + 0x0000055e 0x78 cqm6xx_app.o .text.cqm6xx_app_statemachine - 0x000005ca 0xf0 cqm6xx_app.o - 0x000005ca cqm6xx_app_statemachine + 0x000005d6 0xe8 cqm6xx_app.o + 0x000005d6 cqm6xx_app_statemachine .text.programPLL_Parameters - 0x000006ba 0x3c cqm6xx_app.o - 0x000006ba programPLL_Parameters + 0x000006be 0x58 cqm6xx_app.o + 0x000006be programPLL_Parameters .text.uart_rx_event - 0x000006f6 0x18 cqm6xx_app.o - 0x000006f6 uart_rx_event + 0x00000716 0x18 cqm6xx_app.o + 0x00000716 uart_rx_event .text.cqm6xx_app_init - 0x0000070e 0xdc cqm6xx_app.o - 0x0000070e cqm6xx_app_init + 0x0000072e 0xf0 cqm6xx_app.o + 0x0000072e cqm6xx_app_init .text.startup.main - 0x000007ea 0x58 main.o - 0x000007ea main - .text.writeRegister.isra.1 - 0x00000842 0x88 si5351_driver/si5351_driver.o - .text.cm_setPllParamRaw - 0x000008ca 0xf6 si5351_driver/si5351_driver.o - 0x000008ca cm_setPllParamRaw + 0x0000081e 0x58 main.o + 0x0000081e main + .text.writeRegister + 0x00000876 0x78 si5351_driver/si5351_driver.o .text.cm_setOutputMultiSynthRaw - 0x000009c0 0x128 si5351_driver/si5351_driver.o - 0x000009c0 cm_setOutputMultiSynthRaw + 0x000008ee 0x10a si5351_driver/si5351_driver.o + 0x000008ee cm_setOutputMultiSynthRaw .text.cm_setOutputEnable - 0x00000ae8 0x5a si5351_driver/si5351_driver.o - 0x00000ae8 cm_setOutputEnable + 0x000009f8 0x46 si5351_driver/si5351_driver.o + 0x000009f8 cm_setOutputEnable .text.cm_setCLKControl - 0x00000b42 0xac si5351_driver/si5351_driver.o - 0x00000b42 cm_setCLKControl + 0x00000a3e 0x76 si5351_driver/si5351_driver.o + 0x00000a3e cm_setCLKControl .text.cm_setInputSource - 0x00000bee 0x4a si5351_driver/si5351_driver.o - 0x00000bee cm_setInputSource + 0x00000ab4 0x3a si5351_driver/si5351_driver.o + 0x00000ab4 cm_setInputSource + .text.cm_resetPLLs + 0x00000aee 0x42 si5351_driver/si5351_driver.o + 0x00000aee cm_resetPLLs + .text.cm_setPllParamRaw + 0x00000b30 0xb6 si5351_driver/si5351_driver.o + 0x00000b30 cm_setPllParamRaw .text.cm_si5351_init - 0x00000c38 0x12c si5351_driver/si5351_driver.o - 0x00000c38 cm_si5351_init + 0x00000be6 0x14e si5351_driver/si5351_driver.o + 0x00000be6 cm_si5351_init .text.avr-libc - 0x00000d64 0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - 0x00000d64 malloc - 0x00000e94 free + 0x00000d34 0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + 0x00000d34 malloc + 0x00000e64 free .text.avr-libc - 0x00000fa6 0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) - 0x00000fa6 memcpy + 0x00000f76 0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) + 0x00000f76 memcpy .text.avr-libc - 0x00000fb8 0x10 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - 0x00000fb8 eeprom_read_byte - 0x00000fc0 eeprom_mapen + 0x00000f88 0x10 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + 0x00000f88 eeprom_read_byte + 0x00000f90 eeprom_mapen .text.avr-libc - 0x00000fc8 0x28 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) - 0x00000fc8 eeprom_write_byte - 0x00000fca eeprom_write_r18 - 0x00000ff0 . = ALIGN (0x2) + 0x00000f98 0x28 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + 0x00000f98 eeprom_write_byte + 0x00000f9a eeprom_write_r18 + 0x00000fc0 . = ALIGN (0x2) *(.fini9) - .fini9 0x00000ff0 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) - 0x00000ff0 _exit - 0x00000ff0 exit + .fini9 0x00000fc0 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + 0x00000fc0 _exit + 0x00000fc0 exit *(.fini9) *(.fini8) *(.fini8) @@ -625,16 +627,16 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000ff0 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + .fini0 0x00000fc0 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) *(.fini0) - 0x00000ff4 _etext = . + 0x00000fc4 _etext = . .rodata *(.rodata) *(.rodata*) *(.gnu.linkonce.r*) -.data 0x00803f00 0x6 load address 0x00000ff4 +.data 0x00803f00 0x6 load address 0x00000fc4 0x00803f00 PROVIDE (__data_start, .) *(.data) .data 0x00803f00 0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) @@ -647,7 +649,7 @@ END GROUP 0x00803f06 _edata = . 0x00803f06 PROVIDE (__data_end, .) -.bss 0x00803f06 0x61 +.bss 0x00803f06 0x65 0x00803f06 PROVIDE (__bss_start, .) *(.bss) *(.bss*) @@ -668,21 +670,21 @@ END GROUP 0x00803f44 0x2 cm_msg/cm_msg.o 0x00803f44 s_msg_cmplete_evt_fpt *(COMMON) - COMMON 0x00803f46 0x1d main.o + COMMON 0x00803f46 0x21 main.o 0x00803f46 storno_xtal_app - COMMON 0x00803f63 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - 0x00803f63 __brkval - 0x00803f65 __flp - 0x00803f67 PROVIDE (__bss_end, .) - 0x00000ff4 __data_load_start = LOADADDR (.data) - 0x00000ffa __data_load_end = (__data_load_start + SIZEOF (.data)) + COMMON 0x00803f67 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + 0x00803f67 __brkval + 0x00803f69 __flp + 0x00803f6b PROVIDE (__bss_end, .) + 0x00000fc4 __data_load_start = LOADADDR (.data) + 0x00000fca __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00803f67 0x0 +.noinit 0x00803f6b 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00803f67 _end = . - 0x00803f67 PROVIDE (__heap_start, .) + 0x00803f6b _end = . + 0x00803f6b PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -754,86 +756,86 @@ END GROUP .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x248 +.debug_aranges 0x00000000 0x240 *(.debug_aranges) .debug_aranges 0x00000000 0x28 avr_eeprom_driver/avr_eeprom_driver.o .debug_aranges 0x00000028 0x30 avr_gpio_driver/avr_gpio.o .debug_aranges - 0x00000058 0x68 avr_i2c_driver/avr_i2c.o + 0x00000058 0x60 avr_i2c_driver/avr_i2c.o .debug_aranges - 0x000000c0 0x40 avr_uart_driver/avr_uart.o + 0x000000b8 0x40 avr_uart_driver/avr_uart.o .debug_aranges - 0x00000100 0x30 cm_msg/cm_msg.o + 0x000000f8 0x30 cm_msg/cm_msg.o .debug_aranges - 0x00000130 0x48 cqm6xx_app.o + 0x00000128 0x48 cqm6xx_app.o .debug_aranges - 0x00000178 0x20 main.o + 0x00000170 0x20 main.o .debug_aranges - 0x00000198 0x70 si5351_driver/si5351_driver.o + 0x00000190 0x70 si5351_driver/si5351_driver.o .debug_aranges - 0x00000208 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + 0x00000200 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) .debug_aranges - 0x00000228 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + 0x00000220 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x5ba3 +.debug_info 0x00000000 0x5484 *(.debug_info .gnu.linkonce.wi.*) .debug_info 0x00000000 0x11d6 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o .debug_info 0x000011d6 0x183 avr_eeprom_driver/avr_eeprom_driver.o .debug_info 0x00001359 0x320 avr_gpio_driver/avr_gpio.o - .debug_info 0x00001679 0x881 avr_i2c_driver/avr_i2c.o - .debug_info 0x00001efa 0x4fc avr_uart_driver/avr_uart.o - .debug_info 0x000023f6 0x2b8 cm_msg/cm_msg.o - .debug_info 0x000026ae 0xc29 cqm6xx_app.o - .debug_info 0x000032d7 0xcdf main.o - .debug_info 0x00003fb6 0x1a93 si5351_driver/si5351_driver.o - .debug_info 0x00005a49 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_info 0x00005af6 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_info 0x00001679 0x736 avr_i2c_driver/avr_i2c.o + .debug_info 0x00001daf 0x4fc avr_uart_driver/avr_uart.o + .debug_info 0x000022ab 0x2b4 cm_msg/cm_msg.o + .debug_info 0x0000255f 0xbfb cqm6xx_app.o + .debug_info 0x0000315a 0xced main.o + .debug_info 0x00003e47 0x14e3 si5351_driver/si5351_driver.o + .debug_info 0x0000532a 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_info 0x000053d7 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_abbrev 0x00000000 0x1f08 +.debug_abbrev 0x00000000 0x1ebe *(.debug_abbrev) .debug_abbrev 0x00000000 0x10de C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o .debug_abbrev 0x000010de 0xac avr_eeprom_driver/avr_eeprom_driver.o .debug_abbrev 0x0000118a 0x107 avr_gpio_driver/avr_gpio.o - .debug_abbrev 0x00001291 0x256 avr_i2c_driver/avr_i2c.o - .debug_abbrev 0x000014e7 0x1e0 avr_uart_driver/avr_uart.o - .debug_abbrev 0x000016c7 0x15c cm_msg/cm_msg.o - .debug_abbrev 0x00001823 0x20d cqm6xx_app.o - .debug_abbrev 0x00001a30 0x1da main.o - .debug_abbrev 0x00001c0a 0x2d6 si5351_driver/si5351_driver.o - .debug_abbrev 0x00001ee0 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_abbrev 0x00001ef4 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_abbrev 0x00001291 0x23a avr_i2c_driver/avr_i2c.o + .debug_abbrev 0x000014cb 0x1e0 avr_uart_driver/avr_uart.o + .debug_abbrev 0x000016ab 0x15a cm_msg/cm_msg.o + .debug_abbrev 0x00001805 0x228 cqm6xx_app.o + .debug_abbrev 0x00001a2d 0x1da main.o + .debug_abbrev 0x00001c07 0x28f si5351_driver/si5351_driver.o + .debug_abbrev 0x00001e96 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_abbrev 0x00001eaa 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_line 0x00000000 0x1984 +.debug_line 0x00000000 0x1876 *(.debug_line .debug_line.* .debug_line_end) .debug_line 0x00000000 0x136 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_line 0x00000136 0x16e avr_eeprom_driver/avr_eeprom_driver.o - .debug_line 0x000002a4 0x1a8 avr_gpio_driver/avr_gpio.o - .debug_line 0x0000044c 0x42b avr_i2c_driver/avr_i2c.o - .debug_line 0x00000877 0x217 avr_uart_driver/avr_uart.o - .debug_line 0x00000a8e 0x1e6 cm_msg/cm_msg.o - .debug_line 0x00000c74 0x475 cqm6xx_app.o - .debug_line 0x000010e9 0x187 main.o - .debug_line 0x00001270 0x5d4 si5351_driver/si5351_driver.o - .debug_line 0x00001844 0x7c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_line 0x000018c0 0xc4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_line 0x00000136 0x162 avr_eeprom_driver/avr_eeprom_driver.o + .debug_line 0x00000298 0x1a2 avr_gpio_driver/avr_gpio.o + .debug_line 0x0000043a 0x3ab avr_i2c_driver/avr_i2c.o + .debug_line 0x000007e5 0x21b avr_uart_driver/avr_uart.o + .debug_line 0x00000a00 0x1a8 cm_msg/cm_msg.o + .debug_line 0x00000ba8 0x479 cqm6xx_app.o + .debug_line 0x00001021 0x187 main.o + .debug_line 0x000011a8 0x58e si5351_driver/si5351_driver.o + .debug_line 0x00001736 0x7c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_line 0x000017b2 0xc4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_frame 0x00000000 0x61c +.debug_frame 0x00000000 0x630 *(.debug_frame) .debug_frame 0x00000000 0x74 avr_eeprom_driver/avr_eeprom_driver.o .debug_frame 0x00000074 0x44 avr_gpio_driver/avr_gpio.o - .debug_frame 0x000000b8 0xbc avr_i2c_driver/avr_i2c.o - .debug_frame 0x00000174 0xbc avr_uart_driver/avr_uart.o - .debug_frame 0x00000230 0x44 cm_msg/cm_msg.o - .debug_frame 0x00000274 0xec cqm6xx_app.o - .debug_frame 0x00000360 0x34 main.o - .debug_frame 0x00000394 0x288 si5351_driver/si5351_driver.o + .debug_frame 0x000000b8 0x108 avr_i2c_driver/avr_i2c.o + .debug_frame 0x000001c0 0xbc avr_uart_driver/avr_uart.o + .debug_frame 0x0000027c 0x44 cm_msg/cm_msg.o + .debug_frame 0x000002c0 0xec cqm6xx_app.o + .debug_frame 0x000003ac 0x34 main.o + .debug_frame 0x000003e0 0x250 si5351_driver/si5351_driver.o -.debug_str 0x00000000 0x22c6 +.debug_str 0x00000000 0x22f5 *(.debug_str) .debug_str 0x00000000 0x7a9 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o .debug_str 0x000007a9 0x1d9 avr_eeprom_driver/avr_eeprom_driver.o @@ -846,23 +848,23 @@ END GROUP 0x4f8 (size before relaxing) .debug_str 0x0000101e 0x23a cm_msg/cm_msg.o 0x3fe (size before relaxing) - .debug_str 0x00001258 0x3da cqm6xx_app.o - 0x63d (size before relaxing) - .debug_str 0x00001632 0x8ff main.o - 0xc58 (size before relaxing) - .debug_str 0x00001f31 0x395 si5351_driver/si5351_driver.o + .debug_str 0x00001258 0x412 cqm6xx_app.o + 0x675 (size before relaxing) + .debug_str 0x0000166a 0x8ff main.o + 0xc61 (size before relaxing) + .debug_str 0x00001f69 0x38c si5351_driver/si5351_driver.o 0xff9 (size before relaxing) -.debug_loc 0x00000000 0x2855 +.debug_loc 0x00000000 0x23e8 *(.debug_loc) - .debug_loc 0x00000000 0x26b avr_eeprom_driver/avr_eeprom_driver.o - .debug_loc 0x0000026b 0x7c avr_gpio_driver/avr_gpio.o - .debug_loc 0x000002e7 0x6e6 avr_i2c_driver/avr_i2c.o - .debug_loc 0x000009cd 0x13b avr_uart_driver/avr_uart.o - .debug_loc 0x00000b08 0x158 cm_msg/cm_msg.o - .debug_loc 0x00000c60 0x8ae cqm6xx_app.o - .debug_loc 0x0000150e 0x48 main.o - .debug_loc 0x00001556 0x12ff si5351_driver/si5351_driver.o + .debug_loc 0x00000000 0x20d avr_eeprom_driver/avr_eeprom_driver.o + .debug_loc 0x0000020d 0x7c avr_gpio_driver/avr_gpio.o + .debug_loc 0x00000289 0x6a7 avr_i2c_driver/avr_i2c.o + .debug_loc 0x00000930 0x139 avr_uart_driver/avr_uart.o + .debug_loc 0x00000a69 0x131 cm_msg/cm_msg.o + .debug_loc 0x00000b9a 0x86a cqm6xx_app.o + .debug_loc 0x00001404 0x48 main.o + .debug_loc 0x0000144c 0xf9c si5351_driver/si5351_driver.o .debug_macinfo *(.debug_macinfo) @@ -882,16 +884,16 @@ END GROUP .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x230 +.debug_ranges 0x00000000 0x1c8 *(.debug_ranges) .debug_ranges 0x00000000 0x18 avr_eeprom_driver/avr_eeprom_driver.o .debug_ranges 0x00000018 0x20 avr_gpio_driver/avr_gpio.o - .debug_ranges 0x00000038 0xd0 avr_i2c_driver/avr_i2c.o - .debug_ranges 0x00000108 0x30 avr_uart_driver/avr_uart.o - .debug_ranges 0x00000138 0x20 cm_msg/cm_msg.o - .debug_ranges 0x00000158 0x50 cqm6xx_app.o - .debug_ranges 0x000001a8 0x10 main.o - .debug_ranges 0x000001b8 0x78 si5351_driver/si5351_driver.o + .debug_ranges 0x00000038 0x68 avr_i2c_driver/avr_i2c.o + .debug_ranges 0x000000a0 0x30 avr_uart_driver/avr_uart.o + .debug_ranges 0x000000d0 0x20 cm_msg/cm_msg.o + .debug_ranges 0x000000f0 0x50 cqm6xx_app.o + .debug_ranges 0x00000140 0x10 main.o + .debug_ranges 0x00000150 0x78 si5351_driver/si5351_driver.o .debug_macro *(.debug_macro) diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec index 6e082e5..5c38bcb 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec @@ -1,259 +1,256 @@ S022000073746F726E6F5F6371703678785F6469676974616C5F7874616C2E737265633F S113000019C033C032C031C030C02FC02EC02DC083 S11300102CC02BC02AC029C028C027C026C025C098 -S113002024C023C022C021C020C01FC04FC11DC096 +S113002024C023C022C021C020C01FC069C11DC07C S11300301CC01BC011241FBECFEFCDBFDFE3DEBF4A -S11300402FE3A6E0BFE301C01D92A736B207E1F794 -S11300501FE3A0E0BFE3E4EFFFE002C005900D92D0 -S1130060A630B107D9F7C1D3C3C7CACFEF92FF9265 -S11300700F931F93CF93DF93442391F0EB018C01F3 -S11300804150E42EF12C8FEFE81AF80AE60EF71E21 -S11300906991C80199D70F5F1F4FCE15DF05C1F7CE -S11300A0DF91CF911F910F91FF90EF900895EF9200 -S11300B0FF920F931F93CF93DF93442391F08C010E -S11300C0EB014150E42EF12C8FEFE81AF80AE60E0A -S11300D0F71EC80171D789930F5F1F4FCE15DF0537 -S11300E0C1F7DF91CF911F910F91FF90EF90089589 -S11300F081110BC08091080490E002C0959587950A -S11301006A95E2F781709927089580E090E0089558 -S113011020911508207CE1F32091150824FD1FC0CF -S1130120FC018191809318088091150886FFFCCF0B -S11301308091150884FD24C0809115088C70A9F461 -S11301408091150884FD05C0415051096109710968 -S113015041F783E08093140880E090E0089583E001 -S1130160809314088FEF9FEF08958091140888609E -S11301708093140881E08093150881E090E008954D -S113018083E08093140881E090E00895A62F972FD0 -S1130190211531054105510569F1816080931708E6 -S11301A080911508807CE1F38091150884FD1CC0C2 -S11301B0BA01A9014150510961097109EA2FF92FC6 -S11301C092E080911508807CE1F380911808819376 -S11301D0411551056105710581F090931408415052 -S11301E0510961097109EDCF83E0809314088FEF01 -S11301F09FEF089581E090E0089584E080931408CF -S113020083E08093140880E090E00895E0E0F4E057 -S113021080818B7F80838081877F8083A0E1B8E0A9 -S11302208BE016968C93169781E013968C93139714 -S113023015968C9388E0828B838B80E090E0089500 -S1130240FC01842F880F809317089091150896FF5E -S1130250FCCF8091150884FF06C083E080931408C6 -S11302608EEF9FEF089583E0809314086083718379 -S113027050E0440F551F428380E090E008950F93AF -S1130280009709F1FB01DC010023B1F0013021F0FA -S113029080E090E00F910895211531054105510545 -S11302A0B9F312968C9180931708BA01A901CF0172 -S11302B02FDF80E090E0EECF12968C9167DF80E034 -S11302C090E00F9108958FEF9FEFE4CF1F920F926C -S11302D00FB60F9211242F933F934F935F936F9315 -S11302E07F938F939F93AF93BF93EF93FF93E0918B -S11302F0063FF091073F309719F080910008099567 -S1130300FF91EF91BF91AF919F918F917F916F91E9 -S11303105F914F913F912F910F900FBE0F901F90BF -S11303201895CF93DF931F92CDB7DEB7AC01F89445 -S11303302CE635E0209308083093090893E0909365 -S1130340070890EC9093060861157105D1F080E8D8 -S1130350809305086093063F7093073F80910408DB -S113036087FF04C0809100088983898180E4809399 -S1130370010480E88093020478940F90DF91CF9178 -S11303800895452B21F7EACF9091413F923041F1F6 -S113039060F49923E1F0913089F48A3529F180E001 -S11303A08093413F81E090E00895933061F0943070 -S11303B029F41092413F80E090E008951092413F6B -S11303C081E090E00895833451F784E0E9CF91E02F -S11303D08F3409F090E09093413F81E090E00895DC -S11303E08133E9F683E0DCCF82E0DACF9091403FBD -S11303F0933009F44BC068F4992309F440C0913058 -S113040029F48093083F83E08093403F80E090E0AC -S11304100895943019F19530C9F790913F3FE92F31 -S1130420F0E0E85FF04C838381E0890F80933F3FE5 -S11304309091083F891750F3E091443FF091453F74 -S11304406BE07FE38091423F9091433F0995109286 -S1130450403F10923F3F80E090E008952091093F93 -S113046030910A3FA901482BCA018093093F909318 -S11304700A3F85E08093403F80E090E0089584DF68 -S1130480892B39F781E08093403FE3CF1092093FF5 -S113049080930A3F84E08093403F80E090E0089599 -S11304A0009759F06115710541F08093423F909394 -S11304B0433F6093443F7093453F08959F92AF92AA -S11304C0BF92CF92DF92EF92FF920F931F93CF933D -S11304D0DF93EC01942EAD84BE84CF84D888E98464 -S11304E0FA840B851C852D813E814F8158858A8134 -S11304F09B81EBD181E493E00197F1F70000A98C93 -S1130500BA8CCB8CDC8CED88FE880F89188D2989F8 -S11305103A894B895C89692D8A819B8151D281E416 -S113052093E00197F1F7000040E0692D8A819B81F7 -S1130530DF91CF911F910F91FF90EF90DF90CF90BB -S1130540BF90AF909F90FDC2CF93DF93FC01828157 -S11305509381892B09F13097F9F081819081891772 -S1130560D9F0EF018130D9F08230B1F481E493E025 -S11305700197F1F7000041E060E082819381B4D2F9 -S113058081E493E00197F1F7000040E061E08A81A3 -S11305909B81DF91CF91A8C2DF91CF91089581E42F -S11305A093E00197F1F7000040E060E082819381DD -S11305B09BD281E493E00197F1F7000041E061E010 -S11305C08A819B81DF91CF918FC20F931F93CF9329 -S11305D0DF93FC0122813381232BA9F0009799F04A -S11305E0EC018181813009F45BC090F0823059F4D0 -S11305F0CE01AADF8981888363E080E079DD892BDD -S113060011F481E08983DF91CF911F910F910895B7 -S113061018828E010C5F1F4F49E1B80180E090E021 -S113062046DD81E493E00197F1F7000060E08A8100 -S11306309B81DDD2E1E4F3E03197F1F7000040E083 -S113064060E0CE013BDF81E493E00197F1F7000025 -S113065049E1B80180E290E02ADDE1E4F3E031977A -S1130660F1F7000041E061E0CE0128DF42E061E003 -S1130670CE0124DF40E062E08A819B8162D281E482 -S113068093E00197F1F7000040E062E08A819B81EA -S11306902BD281E08983DF91CF911F910F9108952F -S11306A0CE0152DF8981888363E080E021DD0197F8 -S11306B009F0A9CF82E08983A6CFCF93DF93EC0121 -S11306C08C81882369F0813039F449E1BE016C5F83 -S11306D07F4F80E290E0CADC1982DF91CF910895C8 -S11306E049E1BE016C5F7F4F80E090E0BFDC19827E -S11306F0DF91CF910895DC01149629E1FB0101906B -S11307000D922A95E1F7D9DF80E090E008950F93E8 -S11307101F93CF93DF936115710511F1009701F1D8 -S1130720EC01198218826A837B836BE773E0B8DE7D -S113073066EF71E0CE01F5DD8E010C5F1F4F49E1DC -S1130740B80180E090E0B3DCF8019E01235E3F4FE6 -S113075003C0E217F30749F0919191509E3FC8F707 -S1130760DF91CF911F910F9108951C8283E49DE046 -S1130770A0E0B0E08D839E83AF83B88786EF9CE2D0 -S1130780A0E0B0E089879A87AB87BC878BE598E4C3 -S1130790A0E1B0E08D879E87AF87B88B82E190E0BF -S11307A0A0E0B0E0898B9A8BAB8BBC8B1D8A1E8A30 -S11307B01F8A188E81E090E0A0E0B0E0898F9A8FC4 -S11307C0AB8FBC8F49E1B80180E090E04FDC81E45D -S11307D093E00197F1F7000049E1B80180E290E06D -S11307E0DF91CF911F910F9141CCCF93DF93CDB780 -S11307F0DEB7CB55D109CDBFDEBF80E090E006DD8A -S113080040E660E070E0CE01875A9F4F19DD4FE368 -S113081051E0BE01675A7F4FCE0101960DD2BE0151 -S11308206F5F7F4F86E49FE372DF86E49FE3CDDE54 -S11308302AE684E091E0215080409040E1F700C036 -S1130840F4CF4F925F926F927F929F92AF92BF923A -S1130850CF92DF92EF92FF920F931F93CF93DF9388 -S1130860EC016B01942E590127013801C70101964F -S113087079D2F82E192FDC019D92CD01A201B50188 -S113088092D3A30192012F5F3F4F4F4F5F4FD60189 -S1130890ED91FC9101E06F2D712F8881998109956B -S11308A08F2D912FF7D280E090E0DF91CF911F91AF -S11308B00F91FF90EF90DF90CF90BF90AF909F90FB -S11308C07F906F905F904F900895AF92BF92CF92B8 -S11308D0DF92EF92FF920F931F93CF93DF93EC017C -S11308E0662309F448C0613009F16C0182E0C80E46 -S11308F0D11C9E01295A3F4FF90180818062806892 -S11309008083E12CF12C8701E39441EBB601CE0105 -S113091098DF80E090E0DF91CF911F910F91FF90DD -S1130920EF90DF90CF90BF90AF90089542708E8D7E -S11309308C7F482B4E8F3F8F28A3D801C70188276F -S11309409927AF70BB27FAA2EBA28A2F8F7089A3D5 -S1130950BC8EAD8E6E01F2E0CF0ED11C18E0E12EFC -S1130960F12C00E010E09E01245E3F4F42E2B6010C -S1130970CE0167DFBECF42708E898C7F482B4E8BB1 -S11309803F8B288FD801C70188279927AF70BB27D1 -S1130990FA8EEB8E8A2F8F70898FBC8AAD8A6E0196 -S11309A0E2E0CE0ED11C18E0E12EF12C00E010E0C4 -S11309B09E012C5E3F4F4AE1B601CE0142DF99CF42 -S11309C0AF92BF92CF92DF92EF92FF920F931F9359 -S11309D0FC01613009F45FC0A8F1623041F5437055 -S11309E056A9507837AB20AFF2AEE3AED601C501BD -S11309F02CE0B695A795979587952A95D1F783709E -S1130A008295807F0370082B01AFB4AAA5AA452B59 -S1130A1046AB9F012C5C3F4FBF016E5F7F4F18E0D8 -S1130A20E12EF12C00E010E04AE3CF010ADF80E080 -S1130A3090E01F910F91FF90EF90DF90CF90BF90C7 -S1130A40AF900895437056A1507837A320A7F2A61B -S1130A50E3A6D601C5011CE0B695A79597958795A1 -S1130A601A95D1F783708295807F0370802B81A7BC -S1130A70B4A2A5A2452B46A39F012C5D3F4FBF0105 -S1130A806E5F7F4F18E0E12EF12C00E010E04AE2A7 -S1130A90CF01D7DECCCF437056A5507837A720AB13 -S1130AA0F2AAE3AAD601C5016CE0B695A79597957D -S1130AB087956A95D1F783708295807F0370802B28 -S1130AC081ABB4A6A5A6452B46A79F01245D3F4F45 -S1130AD0BF016E5F7F4F18E0E12EF12C00E010E0C3 -S1130AE042E3CF01AEDEA3CFEF92FF920F931F93A9 -S1130AF0613009F1D0F0623029F4FC01278140FB18 -S1130B0022F927839C01295F3F4FBC016E5F7F4F11 -S1130B10E12CF12C8701E39443E093DE80E090E044 -S1130B201F910F91FF90EF900895FC01278140FBE6 -S1130B3020F92783E7CFFC01278140FB21F9278394 -S1130B40E1CFEF92FF920F931F936130B9F1E0F080 -S1130B50623099F4FC01248540FB27F9237923664C -S1130B6024879C01245F3F4FBC016E5F7F4FE12CC3 -S1130B70F12C8701E39442E164DE80E090E01F9170 -S1130B800F91FF90EF900895FC01228540FB27F917 -S1130B9020792F6422879C01265F3F4FBC016E5F42 -S1130BA07F4FE12CF12C8701E39440E14ADE80E0A1 -S1130BB090E01F910F91FF90EF900895FC01238521 -S1130BC040FB27F92F6623879C01255F3F4FBC011B -S1130BD06E5F7F4FE12CF12C8701E39441E131DE1C -S1130BE080E090E01F910F91FF90EF900895EF92B5 -S1130BF0FF920F931F936623C9F0613021F4FC0127 -S1130C002185246021879C01275F3F4FBC016E5FD3 -S1130C107F4FE12CF12C8701E39440EF12DE80E05A -S1130C2090E01F910F91FF90EF900895FC012185B2 -S1130C302B7F277F2187E7CFAF92BF92CF92DF929E -S1130C40EF92FF920F931F93CF93DF931F92CDB731 -S1130C50DEB7009709F483C06115710509F47FC0FC -S1130C604115510509F47BC06C01DC016D937C9343 -S1130C70119712964D935C931397FC01349684E577 -S1130C80DF011D928A95E9F78FEF89835601B2E05F -S1130C90AB0EB11CE12CF12C8701E3949E012F5F74 -S1130CA03F4F43E0B501C601CCDD80E889839E0156 -S1130CB02F5F3F4F40E1B501C601C3DD9E012F5FA9 -S1130CC03F4F41E1B501C601BCDD9E012F5F3F4F9F -S1130CD042E1B501C601B5DD9E012F5F3F4F43E1FF -S1130CE0B501C601AEDD9E012F5F3F4F44E1B50162 -S1130CF0C601A7DD9E012F5F3F4F45E1B501C60147 -S1130D00A0DD9E012F5F3F4F46E1B501C60199DD8D -S1130D109E012F5F3F4F47E1B501C60192DD80EC94 -S1130D2089839E012F5F3F4F47EBB501C60189DDE3 -S1130D3080E489839E012F5F3F4F4BEBB501C601D1 -S1130D4080DD80E090E00F90DF91CF911F910F91B3 -S1130D50FF90EF90DF90CF90BF90AF9008958FEF0A -S1130D609FEFF1CF0F931F93CF93DF9382309105C1 -S1130D7010F482E090E0E091653FF091663F20E05E -S1130D8030E0A0E0B0E0309719F140815181028158 -S1130D90138148175907C8F08417950769F4109709 -S1130DA031F012960C93129713961C9327C000935C -S1130DB0653F1093663F22C02115310519F0421793 -S1130DC0530718F49A01BD01EF01DF01F801DBCFED -S1130DD021153105F9F0281B390B2430310580F435 -S1130DE08A819B816115710521F0FB0182839383C4 -S1130DF004C08093653F9093663FFE01329644C0E1 -S1130E00FE01E20FF31F819391932250310928834D -S1130E1039833AC02091633F3091643F232B41F4DE -S1130E202091023F3091033F2093633F3093643F0E -S1130E302091003F3091013F2115310541F42DB738 -S1130E403EB74091043F5091053F241B350BE09180 -S1130E50633FF091643FE217F307A0F42E1B3F0BAE -S1130E602817390778F0AC014E5F5F4F2417350718 -S1130E7048F04E0F5F1F4093633F5093643F81934C -S1130E80919302C0E0E0F0E0CF01DF91CF911F9198 -S1130E900F910895CF93DF93009709F481C0FC016B -S1130EA0329712821382A091653FB091663F1097EA -S1130EB081F420813181820F931F2091633F30910F -S1130EC0643F2817390751F5E093633FF093643F7B -S1130ED067C0ED0120E030E0CE17DF0740F44A811F -S1130EE05B819E0141155105F1F0EA01F5CFC28302 -S1130EF0D38340815181840F951FC817D90759F4B2 -S1130F0088819981840F951F0296808391838A81B9 -S1130F109B81828393832115310529F4E093653FF6 -S1130F20F093663F3DC0E901EA83FB8349915991FF -S1130F30C40FD51FEC17FD0761F480819181840FE4 -S1130F40951F0296E90188839983828193818A831C -S1130F509B83E0E0F0E012968D919C9113970097AB -S1130F6019F0FD01DC01F7CF8D919C9111979D0142 -S1130F702E5F3F4F820F931F2091633F3091643F58 -S1130F802817390769F4309729F41092653F1092B5 -S1130F90663F02C012821382A093633FB093643F02 -S1130FA0DF91CF910895FB01DC0102C001900D9205 -S1130FB041505040D8F7089503D08081992708956F -S1130FC0FC01E050FC4E0895262FAF93BF93E0E060 -S1130FD0F0E1328131FDFDCFDC01A050BC4E2C93F9 -S1130FE02DE924BF23E020830196BF91AF9108959A -S1070FF0F894FFCF9F -S1090FF40000673F20002D +S11300402FE3A6E0BFE301C01D92AB36B207E1F790 +S11300501FE3A0E0BFE3E4ECFFE002C005900D92D3 +S1130060A630B107D9F7DBD3ABC7CACFEF92FF9263 +S11300700F931F93CF93DF93EB018C017B01E40E6D +S1130080F11CCE15DF0531F06991C80185D70F5FEA +S11300901F4FF7CFDF91CF911F910F91FF90EF90FA +S11300A00895EF92FF920F931F93CF93DF938C01E8 +S11300B0EB017B01E40EF11CCE15DF0531F0C80124 +S11300C063D789930F5F1F4FF7CFDF91CF911F91B4 +S11300D00F91FF90EF90089581110BC08091080457 +S11300E090E002C0959587956A95E2F7817099270B +S11300F0089580E090E00895809317088091150892 +S1130100807CE1F390911508892F807194FF04C0DD +S113011083E08093140881E00895CF92DF92EF92F8 +S1130120FF92CF93DF93D62FC72F69017A01232B38 +S1130130242B252B19F48FEF9FEF32C0DDDF8111C3 +S1130140FACFED2FFC2F8191809318088091150828 +S113015086FFFCCF8091150884FF04C083E0809360 +S113016014080CC0809115088C7059F08091140803 +S113017088608093140881E08093150881E090E002 +S11301800FC08091150884FD06C081E0C81AD1080B +S1130190E108F108C1F683E08093140880E090E060 +S11301A0DF91CF91FF90EF90DF90CF900895CF92A1 +S11301B0DF92EF92FF92CF93DF93D62FC72F69017F +S11301C07A01232B242B252B61F1816095DF81118A +S11301D02BC0ED2FFC2F92E024E0B701A601415083 +S11301E0510961097109CD28CE28CF28A1F0809149 +S11301F01508807CE1F3809118088193411551051D +S11302006105710519F42093140802C09093140831 +S11302106A017B01E2CF83E08093140880E090E0E0 +S113022005C081E090E002C08FEF9FEFDF91CF9196 +S1130230FF90EF90DF90CF900895809317088091FE +S1130240150886FFFCCF8091150884FF06C083E063 +S11302508093140881E090E0089583E0809314086B +S113026080E090E00895E0E0F4E080818B7F80837B +S11302708081877F8083A0E1B8E08BE016968C9321 +S1130280169781E013968C93139715968C9388E0B8 +S1130290828B838B80E090E00895EF92FF920F931E +S11302A01F93CF938C017B01C42F842F880FC5DF4C +S11302B0009749F4F801E082F1824C2F50E0440F9A +S11302C0551F428302C08EEF9FEFCF911F910F9174 +S11302D0FF90EF9008950F93009759F0FC010023CD +S11302E029F0013049F4828118DF06C082815FDF82 +S11302F003C08FEF9FEF02C080E090E00F9108955C +S11303001F920F920FB60F9211242F933F934F9386 +S11303105F936F937F938F939F93AF93BF93EF9369 +S1130320FF93E091063FF091073F309719F08091D9 +S113033000080995FF91EF91BF91AF919F918F9123 +S11303407F916F915F914F913F912F910F900FBECD +S11303500F901F901895CF93DF931F92CDB7DEB700 +S1130360F8942CE635E0209308083093090823E03C +S11303702093070820EC209306086115710511F4F9 +S1130380892B39F080E8809305086093063F7093C9 +S1130390073F8091040887FF04C080910008898387 +S11303A0898180E48093010480E880930204789436 +S11303B00F90DF91CF9108959091413F9230D1F009 +S11303C028F4992361F0913089F020C09330B1F082 +S11303D09430E1F41092413F80E090E0089591E080 +S11303E08F3409F090E09093413F12C08A3541F474 +S11303F082E009C0813321F483E005C0833411F025 +S113040080E001C084E08093413F02C01092413FEC +S113041081E090E008959091403F9330B1F048F42A +S1130420992361F0913009F043C08093083F83E041 +S11304301EC0943081F09530E9F03AC0BDDF892BBD +S1130440A9F581E08093403F31C01092093F809329 +S11304500A3F84E00CC02091093F30910A3FA90172 +S1130460482BCA018093093F90930A3F85E080930B +S1130470403F1EC090913F3FE92FF0E0E85FF04C11 +S1130480838381E0890F80933F3F9091083F8917D0 +S113049078F0E091443FF091453F6BE07FE3809139 +S11304A0423F9091433F09951092403F10923F3F45 +S11304B080E090E00895009759F06115710541F0CE +S11304C08093423F9093433F6093443F7093453FF2 +S11304D008959F92AF92BF92CF92DF92EF92FF92D4 +S11304E00F931F93CF93DF93EC01942EAD84BE84BE +S11304F0CF84D888E984FA840B851C852D813E81BC +S11305004F8158858A819B8113D381E493E00197BD +S1130510F1F70000A98CBA8CCB8CDC8CED88FE88BA +S11305200F89188D29893A894B895C89692D8A81BB +S11305309B81DDD181E493E00197F1F7000040E075 +S1130540692D8A819B81DF91CF911F910F91FF903B +S1130550EF90DF90CF90BF90AF909F9070C2CF93F9 +S1130560DF93FC0182819381892B91F1309781F192 +S113057081819081891761F1EF01813099F0823096 +S113058039F581E493E00197F1F7000041E060E080 +S11305908281938131D281E493E00197F1F70000E5 +S11305A040E010C081E493E00197F1F7000040E0DF +S11305B060E08281938120D281E493E00197F1F796 +S11305C0000041E061E08A819B81DF91CF9114C2F8 +S11305D0DF91CF9108950F931F93CF93DF93FC0185 +S11305E022813381232B09F465C0009709F462C08A +S11305F0EC018181813061F4CE01B1DF898188838E +S113060063E080E069DD019709F054C082E045C0F1 +S1130610813008F044C018828E010C5F1F4F4DE1F9 +S1130620B80180E090E03DDD81E493E00197F1F7CB +S1130630000060E08A819B813DD2E1E4F3E03197E0 +S1130640F1F7000040E060E0CE0143DF81E493E095 +S11306500197F1F700004DE1B80180E290E021DD5F +S1130660E1E4F3E03197F1F7000041E061E0CE010D +S113067030DF42E061E0CE012CDF40E062E08A81BD +S11306809B81DDD181E493E00197F1F7000040E024 +S113069062E08A819B81B0D181E089830BC0823082 +S11306A049F4CE015CDF8981888363E080E014DD56 +S11306B0892B91F3DF91CF911F910F910895CF93DF +S11306C0DF93EC018C81813099F058F08E3FC1F0BA +S11306D08F3FE9F44DE1BE016C5F7F4F80E290E013 +S11306E015C04DE1BE016C5F7F4F80E090E006C015 +S11306F04DE1BE016C5F7F4F80E290E0B7DC07C044 +S11307004DE1BE016C5F7F4F80E090E0CADC19824E +S1130710DF91CF910895DC0114962DE1FB01019046 +S11307200D922A95E1F7CBDF80E090E008950F93D6 +S11307301F93CF93DF936115710509F46BC0009784 +S113074009F468C0EC01198218826A837B836BE820 +S113075073E0B1DE6BE072E0CE01FDDD8E010C5F73 +S11307601F4F4DE1B80180E090E09BDCF8019E0151 +S11307702F5D3F4F819181508E3F08F44BC0E217AB +S1130780F307C1F71C8283E49DE0A0E0B0E08D8311 +S11307909E83AF83B88786EF9CE2A0E0B0E08987B0 +S11307A09A87AB87BC878BE598E4A0E1B0E08D879E +S11307B09E87AF87B88B82E190E0A0E0B0E0898BA0 +S11307C09A8BAB8BBC8B1D8A1E8A1F8A188E81E084 +S11307D090E0A0E0B0E0898F9A8FAB8FBC8F80E46B +S11307E098E7ADE7B1E08D8F9E8FAF8FB8A34DE151 +S11307F0B80180E090E03ADC81E493E00197F1F7FE +S113080000004DE1B80180E290E0DF91CF911F91AB +S11308100F912CCCDF91CF911F910F910895CF931D +S1130820DF93CDB7DEB7CB55D109CDBFDEBF80E0B6 +S113083090E019DD40E660E070E0CE01875A9F4FFA +S11308402CDD4BE651E0BE01675A7F4FCE01019685 +S1130850CAD1BE016F5F7F4F86E49FE368DF86E401 +S11308609FE3B9DE2AE684E091E021508040904085 +S1130870E1F700C0F4CF8F929F92AF92BF92CF92D4 +S1130880DF92EF92FF920F931F93CF93DF93EC01CC +S1130890862E5A0168017901C80101964BD2982E1F +S11308A0192FFC018192CF01A601B50164D3A701E0 +S11308B096012F5F3F4F4F4F5F4FEA81FB8101E06D +S11308C0692D712F888199810995892D912FCAD21B +S11308D080E090E0DF91CF911F910F91FF90EF9016 +S11308E0DF90CF90BF90AF909F908F900895AF927C +S11308F0BF92CF92DF92EF92FF920F931F93FC016E +S1130900613009F44AC030F1623009F06AC04370C2 +S113091056A9507837AB20AFF2AEE3AED601C5018D +S11309202CE0B695A795979587952A95D1F783706E +S11309308295807F0370802B81AFB4AAA5AA452B32 +S113094046ABAF014C5C5F4F08E010E020E030E0C4 +S11309506AE345C0437056A1507837A320A7F2A696 +S1130960E3A6D601C5016CE0B695A7959795879542 +S11309706A95D1F783708295807F0370802B81A75D +S1130980B4A2A5A2452B46A3AF014C5D5F4F08E07E +S113099010E020E030E06AE222C0437056A55078AF +S11309A037A720ABF2AAE3AAD601C5013CE0B6956D +S11309B0A795979587953A95D1F783708295807F0F +S11309C00370802B81ABB4A6A5A6452B46A7AF0127 +S11309D0445D5F4F08E010E020E030E062E3CF01C7 +S11309E04ADF80E090E01F910F91FF90EF90DF903D +S11309F0CF90BF90AF9008950F931F93FC01613087 +S1130A0059F030F0623061F4878140FB82F907C00D +S1130A10878140FB80F903C0878140FB81F987838C +S1130A20AF01495F5F4F01E010E020E030E063E098 +S1130A30CF0121DF80E090E01F910F9108950F9383 +S1130A401F93613019F190F0623079F5FC0124852F +S1130A5040FB27F9237923662487AC01445F5F4F69 +S1130A6001E010E020E030E062E11EC0FC012285DC +S1130A7040FB27F920792F642287AC01465F5F4F42 +S1130A8001E010E020E030E060E10EC0FC012385CD +S1130A9040FB27F92F662387AC01455F5F4F01E0D8 +S1130AA010E020E030E061E1E6DE80E090E01F91BC +S1130AB00F9108950F931F93662331F0613049F429 +S1130AC0FC012185246004C0FC0121852B7F277F44 +S1130AD02187AC01475F5F4F01E010E020E030E088 +S1130AE060EFC9DE80E090E01F910F9108950F93AD +S1130AF01F9331E0611101C030E0FC01E95AFF4F5E +S1130B00208130FB25F9208331E0411101C030E020 +S1130B10208130FB27F9208301E010E020E030E061 +S1130B20AF0161EBA8DE80E090E01F910F91089582 +S1130B30AF92BF92CF92DF92EF92FF920F931F93E7 +S1130B40CF93DF93EC016623F9F06130D9F542705D +S1130B508E8D8C7F482B4E8F3F8F28A3D801C701E1 +S1130B6088279927AF70BB27FAA2EBA28A2F8F7030 +S1130B7089A3BC8EAD8E08E010E020E030E0AE0129 +S1130B80445E5F4F62E21CC042708E898C7F482BAA +S1130B904E8B3F8B288FD801C70188279927AF70C8 +S1130BA0BB27FA8EEB8E8A2F8F70898FBC8AAD8A11 +S1130BB008E010E020E030E0AE014C5E5F4F6AE1F7 +S1130BC0CE0159DE41E061E0CE0191DF80E090E0AA +S1130BD0DF91CF911F910F91FF90EF90DF90CF9015 +S1130BE0BF90AF900895EF92FF920F931F93CF930E +S1130BF0DF931F92CDB7DEB7009709F491C061155A +S1130C00710509F48DC04115510509F489C07C01B1 +S1130C10DC016D937C93119712964D935C9313971B +S1130C20FC01349684E5DF011D928A95E9F78FEF84 +S1130C30898301E010E020E030E0AE014F5F5F4FB8 +S1130C4063E0C70118DE80E8898301E010E020E05A +S1130C5030E0AE014F5F5F4F60E1C7010CDE01E0A1 +S1130C6010E020E030E0AE014F5F5F4F61E1C7016B +S1130C7002DE01E010E020E030E0AE014F5F5F4FA4 +S1130C8062E1C701F8DD01E010E020E030E0AE01F0 +S1130C904F5F5F4F63E1C701EEDD01E010E020E04C +S1130CA030E0AE014F5F5F4F64E1C701E4DD01E076 +S1130CB010E020E030E0AE014F5F5F4F65E1C70117 +S1130CC0DADD01E010E020E030E0AE014F5F5F4F7D +S1130CD066E1C701D0DD01E010E020E030E0AE01C4 +S1130CE04F5F5F4F67E1C701C6DD80EC898301E098 +S1130CF010E020E030E0AE014F5F5F4F67EBC701CB +S1130D00BADD80E4898301E010E020E030E0AE0148 +S1130D104F5F5F4F6BEBC701AEDD80E090E002C038 +S1130D208FEF9FEF0F90DF91CF911F910F91FF9065 +S1130D30EF9008950F931F93CF93DF938230910523 +S1130D4010F482E090E0E091693FF0916A3F20E086 +S1130D5030E0A0E0B0E0309719F140815181028188 +S1130D60138148175907C8F08417950769F4109739 +S1130D7031F012960C93129713961C9327C000938C +S1130D80693F10936A3F22C02115310519F04217BB +S1130D90530718F49A01BD01EF01DF01F801DBCF1D +S1130DA021153105F9F0281B390B2430310580F465 +S1130DB08A819B816115710521F0FB0182839383F4 +S1130DC004C08093693F90936A3FFE01329644C009 +S1130DD0FE01E20FF31F819391932250310928837E +S1130DE039833AC02091673F3091683F232B41F407 +S1130DF02091023F3091033F2093673F3093683F37 +S1130E002091003F3091013F2115310541F42DB768 +S1130E103EB74091043F5091053F241B350BE091B0 +S1130E20673FF091683FE217F307A0F42E1B3F0BD6 +S1130E302817390778F0AC014E5F5F4F2417350748 +S1130E4048F04E0F5F1F4093673F5093683F819374 +S1130E50919302C0E0E0F0E0CF01DF91CF911F91C8 +S1130E600F910895CF93DF93009709F481C0FC019B +S1130E70329712821382A091693FB0916A3F109712 +S1130E8081F420813181820F931F2091673F30913B +S1130E90683F2817390751F5E093673FF093683F9F +S1130EA067C0ED0120E030E0CE17DF0740F44A814F +S1130EB05B819E0141155105F1F0EA01F5CFC28332 +S1130EC0D38340815181840F951FC817D90759F4E2 +S1130ED088819981840F951F0296808391838A81EA +S1130EE09B81828393832115310529F4E093693F23 +S1130EF0F0936A3F3DC0E901EA83FB83499159912C +S1130F00C40FD51FEC17FD0761F480819181840F14 +S1130F10951F0296E90188839983828193818A834C +S1130F209B83E0E0F0E012968D919C9113970097DB +S1130F3019F0FD01DC01F7CF8D919C9111979D0172 +S1130F402E5F3F4F820F931F2091673F3091683F80 +S1130F502817390769F4309729F41092693F1092E1 +S1130F606A3F02C012821382A093673FB093683F26 +S1130F70DF91CF910895FB01DC0102C001900D9235 +S1130F8041505040D8F7089503D08081992708959F +S1130F90FC01E050FC4E0895262FAF93BF93E0E090 +S1130FA0F0E1328131FDFDCFDC01A050BC4E2C9329 +S1130FB02DE924BF23E020830196BF91AF910895CA +S1070FC0F894FFCFCF +S1090FC400006B3F200059 S9030000FC diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.c b/storno_cqp6xx_digital_xtal/cqm6xx_app.c index 1a36978..32b2c80 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.c +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.c @@ -153,6 +153,8 @@ void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ void programPLL_Parameters(storno_xtal_app_t *inst){ + uint8_t *data_ptr = (void *)&inst->pll_param_data; + //Burn settings into eeprom here: switch(inst->pll_param_data.PLL_Ident){ @@ -164,6 +166,32 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); break; + case MSG_GET_PLLA_PARAM: + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + break; + + case MSG_GET_PLLB_PARAM: + cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + break; + + default: + break; + + + } + + if((inst->pll_param_data.PLL_Ident == MSG_GET_PLLA_PARAM) && (inst->pll_param_data.PLL_Ident == MSG_GET_PLLB_PARAM)){ + + cm_uart_send('O'); + cm_uart_send('Z'); + cm_uart_send('1'); + cm_uart_send('C'); + cm_uart_send('M'); + + + for(uint8_t idx = 0; idx < sizeof(storno_pll_param_msg);idx++){ + cm_uart_send(data_ptr[idx]); + } } // Send status back maybe.. @@ -184,6 +212,7 @@ static int writeDefaultSettingsEEprom(storno_xtal_app_t *inst){ inst->pll_param_data.MSx_P1 = 18; inst->pll_param_data.MSx_P2 = 0; inst->pll_param_data.MSx_P3 = 1; + inst->pll_param_data.XtalFreq = 25000000; cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); _delay_ms(1); diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.h b/storno_cqp6xx_digital_xtal/cqm6xx_app.h index a97d830..e03e0e6 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.h +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.h @@ -15,6 +15,8 @@ enum{ MSG_PLLA_PARAM = 0, MSG_PLLB_PARAM = 1, + MSG_GET_PLLA_PARAM = 254, + MSG_GET_PLLB_PARAM = 255, }; @@ -29,6 +31,7 @@ typedef struct { uint32_t MSx_P1; uint32_t MSx_P2; uint32_t MSx_P3; + uint32_t XtalFreq; diff --git a/storno_cqp6xx_digital_xtal/main.c b/storno_cqp6xx_digital_xtal/main.c index 469bf17..1be7825 100644 --- a/storno_cqp6xx_digital_xtal/main.c +++ b/storno_cqp6xx_digital_xtal/main.c @@ -28,12 +28,8 @@ int main(void) // Init Devices: si5351_driver si5351_dev; - cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); - + cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); cqm6xx_app_init(&storno_xtal_app, &si5351_dev); - - - while (1) { diff --git a/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj b/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj index c629999..1ee5812 100644 --- a/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj +++ b/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj @@ -121,7 +121,7 @@ %24(PackRepoDir)\atmel\ATtiny_DFP\1.10.348\include\ - Optimize more (-O2) + Optimize for size (-Os) True True Default (-g2)