From 5e7e727a87783a977208b9e9191ac2cad447626f Mon Sep 17 00:00:00 2001 From: "Christian L. V. Madsen" Date: Mon, 25 Nov 2024 18:53:21 +0100 Subject: [PATCH] some structs changed to packed and clock output 2 added --- storno_cqp6xx_digital_xtal/Debug/Makefile | 16 +- .../Debug/avr_i2c_driver/avr_i2c.o | Bin 17756 -> 18616 bytes storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o | Bin 14916 -> 21428 bytes storno_cqp6xx_digital_xtal/Debug/main.o | Bin 13068 -> 12724 bytes .../Debug/si5351_driver/si5351_driver.o | Bin 38220 -> 41572 bytes .../Debug/storno_cqp6xx_digital_xtal.elf | Bin 64040 -> 69992 bytes .../Debug/storno_cqp6xx_digital_xtal.hex | 441 +- .../Debug/storno_cqp6xx_digital_xtal.lss | 4027 ++++++++++------- .../Debug/storno_cqp6xx_digital_xtal.map | 411 +- .../Debug/storno_cqp6xx_digital_xtal.srec | 441 +- storno_cqp6xx_digital_xtal/avr_i2c_driver | 2 +- storno_cqp6xx_digital_xtal/cm_msg | 2 +- storno_cqp6xx_digital_xtal/cqm6xx_app.c | 78 +- storno_cqp6xx_digital_xtal/cqm6xx_app.h | 4 +- storno_cqp6xx_digital_xtal/si5351_driver | 2 +- .../storno_cqp6xx_digital_xtal.cproj | 2 +- 16 files changed, 3243 insertions(+), 2183 deletions(-) diff --git a/storno_cqp6xx_digital_xtal/Debug/Makefile b/storno_cqp6xx_digital_xtal/Debug/Makefile index 2f28179..64661ba 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" -Og -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" -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 "$@" "$<" @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" -Og -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" -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 "$@" "$<" @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" -Og -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" -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 "$@" "$<" @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" -Og -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" -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 "$@" "$<" @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" -Og -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" -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 "$@" "$<" @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" -Og -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" -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 "$@" "$<" @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" -Og -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" -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 "$@" "$<" @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" -Og -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" -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 "$@" "$<" @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 53eeff2ff7f674d41f693fe2a7afe2cb86299757..3bc09d6e87b5aa41e35f566f3e4065bbc15c91f1 100644 GIT binary patch literal 18616 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 literal 14916 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 a1oI%l64Uy)uCa{r^sR<7_`Sj;1OFQ@eh5nd diff --git a/storno_cqp6xx_digital_xtal/Debug/main.o b/storno_cqp6xx_digital_xtal/Debug/main.o index 53f7a19b89be4748167121b7d9dc0d95a8e6fcd4..376cc3e1f1297841d2b2deb9d8ab682214ce4351 100644 GIT binary patch literal 12724 zcmcIqdwkT@mH++b1tB3kBFLM8fFPJ5FOmRS@)}??BylDnxas~FW+us$WG2o`Fu1!u zsE7}CMe)(9)fN@sTWWpOS|1D6t++neRqJatTdmq^x3#s^iY@y+_nbSwUt+r5fA;tJ z%>2IR+;h)4_uO;O@BZ%01;LgzrfC}bGL48~Q-<+LnPI$-#%d+7*qCNaF<#jB_P*yH ze(T|9HykZ^?uoaaxNvCiknv*uds~M3hn_cgpM6UksG;_u$Ib4uFKBz-G_NyWeB4Z1 z7qqb?e=m9O;-RaC=Cxl~zqj7}#CXzp@{Jk3lv8ur}mMM{D6<(Lm?OAXygjJ*Gq+QgnRH#MeigK}1 z&yw9B$C~7UxA;wb7vLk`rot}u?PhuJ)Q8b3^3#ei$iE`*f8Ulb?f75hl^&1!_Ns56 z`W_>8mz{{dDh}SAUjrQH>c@AX*$DMl0u|99ixfJG5RDQ-bn}_si>F{##uLkX39(F< z4*_AuZpARYdB&y8@Z=enF~gl_T+R$vo^b^;%sgWcGbrrh^*>z;FX77GEAy^gt%TgR z<$c`CwtNjUY|Ga&!?t`KGi=M(Gs9u|n|@e?D8+x4? z4!v(KgFcMtt(Wq8heqoCuaSCxHd609U();Y-K2M{_x%e|xK&;Cen5jl9y9d|rc93F zFV%o)x?IfoP%(Uv=UVOkh~?ef`&UePSopt{um=P8GUM0GKyNS0|Ays#OnuChu9d%g zn|=L#JDOSI4=f?nr%Z{jpAn_vF24Se889!5>mZp^1JjwuP#9?ci5QAYD8rerjK zR>F?a9A^fNrWmFTuVHcrACsn#V~h!^*==5dpieZtUULA$VIiLg86q^s>_i)c3d|ew zLgPjV6`B{Z(0KDRfJsVyu@W-9l+etXz#NkjjX4vALn+OiNy5P>vPUa6;E}Ru2gEC<>9nIk%5d8Z zrnnIJW-?X4ZL^sg&(s{ICNVXasVTf4@s+NGHQvbiPI?(wZMXQ_x$*OgeAz+B_-6Z- z%`4PiR!}z#ll50JC0Z2=V~E?ws3*ms|(&0?k{$1cNz(@04 zSDiP<*R{{=CXqR2+%>uj(_+-cm`mOq{gRAf z_^H91NRx%iM#Mb(9mx}L5@qx47H^yBX!4!vBvu*bBy(YLNuj%VX7L8!Br|MIq@}*V zC@lO6m;Un`j<0J}+B`Ng3-wTc||07A!{V zEc6*iT}fTx6mwBgsD!!}c@5%>w>17#4;88UQ#m27PNa$ z4wyWEMMZw)WeL(hKcW+=9mJG?vAW0>MtTHHn-MD6Z5B;Ja@PB5q;+B z228wdXLS)-nn#YFTC}^qn7uWO`NKJs)%tQ9SJT@9UqqY9ab?w@ZrHc8uPw<|DCm$8Pv&11#m3=|fQ{W7*ioScY>Gl*%#GcJl;8Wkl_;wKo<PV@T)dUMIhj#RFvb+A2(DNW=OnJn6y zTFzKb2H2os%T*|`FZZt<);-eE7H(~`8rs{f_Hf(UaKn15Ez)Gf`YZ`oGL_81?^ZZo zWz|~chK#XoLr43D4p`pUxY??zG{T8&BC|aaH+s{lZa0XClY@b@I zt+rqz%d1WUscf=4m58g}V%{Fl@L{t@l~%@eWHRgM`~|MdR@dk5Ze4A605lq&Am{ zrm|g$jFs4)pGNQvOtBS;CzL{!F6c%6HgTwUPRsL=YiWyEkO;NPERc^h8|0*#6-R7a z8+p=YU~n?2l1N$5QxOhEg5iz9X3S+C^1vhECL^96K+tGdwWFq0YlGw!h1E)>&&7gE zXHscvFcZN>VEx%|%I^$q#-ho5U(H~5=Ytne=nR0qoaWqql#uHI<2=d=pK>9Xv$WPjP# zfo@QJv4PW2q6YgC-O(!0*`9PJR~C!*_GbNM-Ie~bHhfUePD3?@!m=*yY8mCAlir%l zbtMzMarEngR4kWFr^>PkbtfLh)k*h9W80uPGZ4$6mF*@{1ASRed2L6n#C!sBp(1iq zM?(u!NajY1^2Smn*n$Q}NeM?ftd2ITv8}D6rLCbk7&gL#R5B={R;W3=5%XI^%dVxZ z#cELBjfO=^AfU>F${B4^&p9Ux%{G!vR{}~AyPor+{!%?|X*)|R!HP~~G6VfN(xY<) z`Xrqxle3iLS-sAzise?FPJv=GxyG@ozEtCCRDSBxo=u*Y z$nEG)Xq)*eZ>YBs`DXEt&MU`?H|ndd$~ zShPq1hQB~J^FnD=R;B$Z70`baG;_x#pJ&9@}UD7|PoI=6nD8jdMZj@ad3AZr9y zcH+r`eec&${j!~X$yg?hg-n}Wn=2_2JExzvfAM5@k{(|41jD{qJFWpLX}Nca66vpR#!h2B(+!ii`9bnE9xPrs+(oy`ub7z=wX$$;;~@`bd$Bd ztvSe*kpoS$h>Z^I8SRW+?#Nhs3yGxQ&GWDlRXHlRTCaYpM#HvR$y9c9 z^>wO?+O1aeT5@Jls8v0ZQ1bMuBAE&YnXlut7Dvfc6&pQpHLdh=!f!9~nxY>@!xv@^ z7N&%fHioqP=&6>+hOxG(X{CR0!^W^xXW=<-VSizD=vOwYDo_(Z8LX|XJDGPJ^cFJ_ zpX0djwsOIOBERc4yxY*LrM~EuvZ2_0ldGZF^DTGd_*sp`mTuE`^*SVk$N2cT=F{EH zFH3orTV7fPhNn4bIwo4}pi6=IH)djfe0*uXjpomu0;HboLx%tPOJjcyvjSgBJf;woNP&h6(PUo71rdUtL`)A0} zPV=*21RWbeXGhRGLDTr@plp)y+v8V{Xx~4A{^1B(zb#uXwBR26iEBT5#_mKJZ4|=|i|4cgjNkl?bP9gmFsXMXFNv5S|3)6v1D|0W!I0 zQgYy0h>t00b_!w0zl8*-5Ih$)$Ycfb3fwGCtT-<3;;;!M)JGK=2~?wnXr0z~zD?z%_y|0X|jm zB%JRx3Vs(l*9m?HKC}wH0X}RHydUyg1pfx}b+h0A#`0akOW@~|g3p4Uqk=mSpPva{ z4gT*0uK>nTk{TEN@-|iQ7Vu9NOgdKz{uS^Uf;T|EQ}8O_KEa#e=lOyc!_U2fZ->rX z1(VJP1iy=X__5%ZfnO1PGi2Tu9EZ-&1eYOJ;}Cb63;KCvw%}6S1A={s^J>9YA%^XO z=}{3Cyc99W2>u(``nuqs;(m?bW9WN8a1F-th~UNW=ZN6ru=R%ELFoKQ@KoIYB=~fU zy%=L7pFQw-u3(yna={NlXQNRrK|s59yqY z`xL>)z&}aw>+r2w@Vgj$qhR_sQbh0_7-L-U^N4dsa1M4Z5=^!28o^$SYro((a6c&6 z51D@vd=u>cyWsiI^N!%pVe1pYeYn$4ZRCF#{E33M;XY6B4e+y4a2tGU5S)bmGXJ;!QX(+A;C|>hhGcc1(`n!eho6?p-YVgc$VPDU~8%1oru*+!PmjJkl@1@ z<0irPLtnSxH24%3(m5UcU4m!8?lpqr(0@QM#s3F_tHD1anBxDY;L{QFj|8uQya^km zpPq>m1sA~oxq??hW|`m!`ZWn&2$?el|1Gd3xC^*Xa0>YE1V0L&FB5zS_XcHrpk0+){VT4V+>Cm_ct9>ajwbSs3Pk4@Cq=T`@ftLz~8KcU9)w>${Qq19o zVUhqY+S-y%x@ZsY7a5{8U;9RVBZ!gae-)Vayrd&0nC2@fcmZ%)FwNHv!S%qG2&Or@ zTrlaMh7bL?Oc!nIwJkqz-nT$@M_(?w)d=9cobNpv<>+iLpnkLn(5p!xgWn+o#D#D) zlN;y{@G*em$LahC2h&|?^iepvb!!IaC)|x$z3JF68b70?x^cAVlo^H9OQ*e}72X+v zSh}x|eq(a>>%vbm2@LK3e9`L=!lmYrI#FDm7q!tf4Im#W%p}!`l-fkfv7JtO3T_(R@0>L8bvi-C69{a~qK41z~?@z}`QC7$jB zX#6Ae`3cCS+p?gY`nDiY3&10NwEXlqC=R+0pm87c(fZPtZrcrpQ{TnVM{9@l(LXG; zzFUBGA3)IcKiYIOuu;ALn?#fPV|XBmbyeP#d{H^-||Dpy9`h(NO|& nX;_L?THpTwfGnBm literal 13068 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�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
- 68: a2 c5 rjmp .+2884 ; 0xbae <_exit> +00000050 <__do_copy_data>: + 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 + 58: ff e0 ldi r31, 0x0F ; 15 + 5a: 02 c0 rjmp .+4 ; 0x60 <__do_copy_data+0x10> + 5c: 05 90 lpm r0, Z+ + 5e: 0d 92 st X+, r0 + 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> 0000006a <__bad_interrupt>: 6a: ca cf rjmp .-108 ; 0x0 <__vectors> @@ -115,1852 +113,2745 @@ 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: 7c 01 movw r14, r24 - 7a: 8b 01 movw r16, r22 - 7c: d4 2f mov r29, r20 for (uint8_t i = 0; i < length; i++) { - 7e: c0 e0 ldi r28, 0x00 ; 0 - 80: 0a c0 rjmp .+20 ; 0x96 <__EEPROM_REGION_LENGTH__+0x16> + 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]); - 82: 8c 2f mov r24, r28 - 84: 90 e0 ldi r25, 0x00 ; 0 - 86: f8 01 movw r30, r16 - 88: e8 0f add r30, r24 - 8a: f9 1f adc r31, r25 - 8c: 60 81 ld r22, Z - 8e: 8e 0d add r24, r14 - 90: 9f 1d adc r25, r15 - 92: 79 d5 rcall .+2802 ; 0xb86 + 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++) { - 94: cf 5f subi r28, 0xFF ; 255 - 96: cd 17 cp r28, r29 - 98: a0 f3 brcs .-24 ; 0x82 <__EEPROM_REGION_LENGTH__+0x2> - //NVMCTRL.CTRLA = NVMCTRL_CMD_PAGEERASEWRITE_gc; + 9a: ce 15 cp r28, r14 + 9c: df 05 cpc r29, r15 + 9e: c1 f7 brne .-16 ; 0x90 <__EEPROM_REGION_LENGTH__+0x10> - /* Wait until the write is complete */ - //while (NVMCTRL.STATUS & NVMCTRL_EEBUSY_bm); + // Write data to address + i.. + eeprom_write_byte(address+i,data[i]); } } - 9a: df 91 pop r29 - 9c: cf 91 pop r28 - 9e: 1f 91 pop r17 - a0: 0f 91 pop r16 - a2: ff 90 pop r15 - a4: ef 90 pop r14 - a6: 08 95 ret + 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 -000000a8 : +000000ae : void cm_EEPROM_read(uint8_t* address, uint8_t *data, uint8_t length) { - a8: cf 92 push r12 - aa: df 92 push r13 - ac: ef 92 push r14 - ae: ff 92 push r15 - b0: 0f 93 push r16 - b2: 1f 93 push r17 - b4: cf 93 push r28 - b6: df 93 push r29 - b8: 6c 01 movw r12, r24 - ba: 7b 01 movw r14, r22 - bc: d4 2f mov r29, r20 + 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 for (uint8_t i = 0; i < length; i++) { - be: c0 e0 ldi r28, 0x00 ; 0 - c0: 0b c0 rjmp .+22 ; 0xd8 + 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); - c2: 8c 2f mov r24, r28 - c4: 90 e0 ldi r25, 0x00 ; 0 - c6: 87 01 movw r16, r14 - c8: 08 0f add r16, r24 - ca: 19 1f adc r17, r25 - cc: 8c 0d add r24, r12 - ce: 9d 1d adc r25, r13 - d0: 52 d5 rcall .+2724 ; 0xb76 - d2: f8 01 movw r30, r16 - d4: 80 83 st Z, r24 + 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++) { - d6: cf 5f subi r28, 0xFF ; 255 - d8: cd 17 cp r28, r29 - da: 98 f3 brcs .-26 ; 0xc2 + dc: ce 15 cp r28, r14 + de: df 05 cpc r29, r15 + e0: c1 f7 brne .-16 ; 0xd2 data[i] = eeprom_read_byte(address+i); } } - dc: df 91 pop r29 - de: cf 91 pop r28 - e0: 1f 91 pop r17 - e2: 0f 91 pop r16 - e4: ff 90 pop r15 - e6: ef 90 pop r14 - e8: df 90 pop r13 - ea: cf 90 pop r12 - ec: 08 95 ret + 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 -000000ee : +000000f0 : return 0; } int gpio_get_level(avr_gpio_ports port, uint8_t pin){ switch (port) - ee: 81 11 cpse r24, r1 - f0: 0d c0 rjmp .+26 ; 0x10c <__DATA_REGION_LENGTH__+0xc> + f0: 81 11 cpse r24, r1 + f2: 0b c0 rjmp .+22 ; 0x10a <__DATA_REGION_LENGTH__+0xa> { case GPIO_PORTA: return (PORTA.IN & (1 << pin)) ? 1 : 0; - f2: 20 91 08 04 lds r18, 0x0408 ; 0x800408 - f6: 30 e0 ldi r19, 0x00 ; 0 - f8: 02 c0 rjmp .+4 ; 0xfe - fa: 35 95 asr r19 - fc: 27 95 ror r18 - fe: 6a 95 dec r22 - 100: e2 f7 brpl .-8 ; 0xfa - 102: 81 e0 ldi r24, 0x01 ; 1 - 104: 20 ff sbrs r18, 0 - 106: 80 e0 ldi r24, 0x00 ; 0 - 108: 90 e0 ldi r25, 0x00 ; 0 - 10a: 08 95 ret + 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 break; default: break; } return 0; - 10c: 80 e0 ldi r24, 0x00 ; 0 - 10e: 90 e0 ldi r25, 0x00 ; 0 + 10a: 80 e0 ldi r24, 0x00 ; 0 + 10c: 90 e0 ldi r25, 0x00 ; 0 } - 110: 08 95 ret + 10e: 08 95 ret -00000112 : - 112: e0 e1 ldi r30, 0x10 ; 16 - 114: f8 e0 ldi r31, 0x08 ; 8 - 116: 84 81 ldd r24, Z+4 ; 0x04 - 118: 88 60 ori r24, 0x08 ; 8 - 11a: 84 83 std Z+4, r24 ; 0x04 - 11c: 81 e0 ldi r24, 0x01 ; 1 - 11e: 85 83 std Z+5, r24 ; 0x05 - 120: 08 95 ret - -00000122 : - 122: 80 93 17 08 sts 0x0817, r24 ; 0x800817 - 126: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 12a: 80 7c andi r24, 0xC0 ; 192 - 12c: e1 f3 breq .-8 ; 0x126 - 12e: 90 91 15 08 lds r25, 0x0815 ; 0x800815 - 132: 89 2f mov r24, r25 - 134: 80 71 andi r24, 0x10 ; 16 - 136: 94 ff sbrs r25, 4 - 138: 04 c0 rjmp .+8 ; 0x142 - 13a: 83 e0 ldi r24, 0x03 ; 3 - 13c: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - 140: 81 e0 ldi r24, 0x01 ; 1 - 142: 08 95 ret - -00000144 : - 144: cf 92 push r12 - 146: df 92 push r13 - 148: ef 92 push r14 - 14a: ff 92 push r15 - 14c: cf 93 push r28 - 14e: df 93 push r29 - 150: eb 01 movw r28, r22 - 152: 69 01 movw r12, r18 - 154: 7a 01 movw r14, r20 - 156: 23 2b or r18, r19 - 158: 24 2b or r18, r20 - 15a: 25 2b or r18, r21 - 15c: 81 f1 breq .+96 ; 0x1be - 15e: e1 df rcall .-62 ; 0x122 - 160: 81 11 cpse r24, r1 - 162: 30 c0 rjmp .+96 ; 0x1c4 - 164: 9e 01 movw r18, r28 - 166: 2f 5f subi r18, 0xFF ; 255 - 168: 3f 4f sbci r19, 0xFF ; 255 - 16a: 88 81 ld r24, Y - 16c: 80 93 18 08 sts 0x0818, r24 ; 0x800818 - 170: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 174: 86 ff sbrs r24, 6 - 176: fc cf rjmp .-8 ; 0x170 - 178: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 17c: 84 ff sbrs r24, 4 - 17e: 06 c0 rjmp .+12 ; 0x18c +00000110 : + while (!(TWI0.MSTATUS & TWI_WIF_bm)); + + 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 + 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: 1e c0 rjmp .+60 ; 0x1c8 - 18c: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 190: 8c 70 andi r24, 0x0C ; 12 - 192: 21 f0 breq .+8 ; 0x19c - 194: be df rcall .-132 ; 0x112 - 196: 81 e0 ldi r24, 0x01 ; 1 - 198: 90 e0 ldi r25, 0x00 ; 0 - 19a: 16 c0 rjmp .+44 ; 0x1c8 - 19c: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 1a0: 84 fd sbrc r24, 4 - 1a2: 07 c0 rjmp .+14 ; 0x1b2 - 1a4: 81 e0 ldi r24, 0x01 ; 1 - 1a6: c8 1a sub r12, r24 - 1a8: d1 08 sbc r13, r1 - 1aa: e1 08 sbc r14, r1 - 1ac: f1 08 sbc r15, r1 - 1ae: e9 01 movw r28, r18 - 1b0: c9 f6 brne .-78 ; 0x164 - 1b2: 83 e0 ldi r24, 0x03 ; 3 - 1b4: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - 1b8: 80 e0 ldi r24, 0x00 ; 0 - 1ba: 90 e0 ldi r25, 0x00 ; 0 - 1bc: 05 c0 rjmp .+10 ; 0x1c8 - 1be: 8f ef ldi r24, 0xFF ; 255 - 1c0: 9f ef ldi r25, 0xFF ; 255 - 1c2: 02 c0 rjmp .+4 ; 0x1c8 - 1c4: 8f ef ldi r24, 0xFF ; 255 - 1c6: 9f ef ldi r25, 0xFF ; 255 - 1c8: df 91 pop r29 - 1ca: cf 91 pop r28 - 1cc: ff 90 pop r15 - 1ce: ef 90 pop r14 - 1d0: df 90 pop r13 - 1d2: cf 90 pop r12 - 1d4: 08 95 ret + 18a: 08 95 ret -000001d6 : - 1d6: cf 92 push r12 - 1d8: df 92 push r13 - 1da: ef 92 push r14 - 1dc: ff 92 push r15 - 1de: cf 93 push r28 - 1e0: df 93 push r29 - 1e2: eb 01 movw r28, r22 - 1e4: 69 01 movw r12, r18 - 1e6: 7a 01 movw r14, r20 - 1e8: 23 2b or r18, r19 - 1ea: 24 2b or r18, r20 - 1ec: 25 2b or r18, r21 - 1ee: 69 f1 breq .+90 ; 0x24a - 1f0: 81 60 ori r24, 0x01 ; 1 - 1f2: 97 df rcall .-210 ; 0x122 - 1f4: 88 23 and r24, r24 - 1f6: c9 f0 breq .+50 ; 0x22a - 1f8: 2b c0 rjmp .+86 ; 0x250 - 1fa: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 1fe: 80 7c andi r24, 0xC0 ; 192 - 200: e1 f3 breq .-8 ; 0x1fa - 202: ce 01 movw r24, r28 - 204: 01 96 adiw r24, 0x01 ; 1 - 206: 20 91 18 08 lds r18, 0x0818 ; 0x800818 - 20a: 28 83 st Y, r18 - 20c: 41 15 cp r20, r1 - 20e: 51 05 cpc r21, r1 - 210: 61 05 cpc r22, r1 - 212: 71 05 cpc r23, r1 - 214: 21 f4 brne .+8 ; 0x21e - 216: 24 e0 ldi r18, 0x04 ; 4 - 218: 20 93 14 08 sts 0x0814, r18 ; 0x800814 - 21c: 03 c0 rjmp .+6 ; 0x224 - 21e: 22 e0 ldi r18, 0x02 ; 2 - 220: 20 93 14 08 sts 0x0814, r18 ; 0x800814 - 224: 6a 01 movw r12, r20 - 226: 7b 01 movw r14, r22 - 228: ec 01 movw r28, r24 - 22a: b7 01 movw r22, r14 - 22c: a6 01 movw r20, r12 - 22e: 41 50 subi r20, 0x01 ; 1 - 230: 51 09 sbc r21, r1 - 232: 61 09 sbc r22, r1 - 234: 71 09 sbc r23, r1 - 236: cd 28 or r12, r13 - 238: ce 28 or r12, r14 - 23a: cf 28 or r12, r15 - 23c: f1 f6 brne .-68 ; 0x1fa - 23e: 83 e0 ldi r24, 0x03 ; 3 - 240: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - 244: 80 e0 ldi r24, 0x00 ; 0 - 246: 90 e0 ldi r25, 0x00 ; 0 - 248: 05 c0 rjmp .+10 ; 0x254 - 24a: 81 e0 ldi r24, 0x01 ; 1 - 24c: 90 e0 ldi r25, 0x00 ; 0 - 24e: 02 c0 rjmp .+4 ; 0x254 - 250: 8f ef ldi r24, 0xFF ; 255 - 252: 9f ef ldi r25, 0xFF ; 255 - 254: df 91 pop r29 - 256: cf 91 pop r28 - 258: ff 90 pop r15 - 25a: ef 90 pop r14 - 25c: df 90 pop r13 - 25e: cf 90 pop r12 - 260: 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> + 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 -00000262 : - 262: 80 93 17 08 sts 0x0817, r24 ; 0x800817 - 266: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 26a: 86 ff sbrs r24, 6 - 26c: fc cf rjmp .-8 ; 0x266 - 26e: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 272: 84 ff sbrs r24, 4 - 274: 06 c0 rjmp .+12 ; 0x282 - 276: 83 e0 ldi r24, 0x03 ; 3 - 278: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - 27c: 81 e0 ldi r24, 0x01 ; 1 - 27e: 90 e0 ldi r25, 0x00 ; 0 - 280: 08 95 ret - 282: 83 e0 ldi r24, 0x03 ; 3 - 284: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - 288: 80 e0 ldi r24, 0x00 ; 0 - 28a: 90 e0 ldi r25, 0x00 ; 0 - 28c: 08 95 ret +0000020c : +} -0000028e : - 28e: e0 e0 ldi r30, 0x00 ; 0 - 290: f4 e0 ldi r31, 0x04 ; 4 - 292: 80 81 ld r24, Z - 294: 8b 7f andi r24, 0xFB ; 251 - 296: 80 83 st Z, r24 - 298: 80 81 ld r24, Z - 29a: 87 7f andi r24, 0xF7 ; 247 - 29c: 80 83 st Z, r24 - 29e: a0 e1 ldi r26, 0x10 ; 16 - 2a0: b8 e0 ldi r27, 0x08 ; 8 - 2a2: 8b e0 ldi r24, 0x0B ; 11 - 2a4: 16 96 adiw r26, 0x06 ; 6 - 2a6: 8c 93 st X, r24 - 2a8: 16 97 sbiw r26, 0x06 ; 6 - 2aa: 81 e0 ldi r24, 0x01 ; 1 - 2ac: 13 96 adiw r26, 0x03 ; 3 - 2ae: 8c 93 st X, r24 - 2b0: 13 97 sbiw r26, 0x03 ; 3 - 2b2: 15 96 adiw r26, 0x05 ; 5 - 2b4: 8c 93 st X, r24 - 2b6: 88 e0 ldi r24, 0x08 ; 8 - 2b8: 82 8b std Z+18, r24 ; 0x12 - 2ba: 83 8b std Z+19, r24 ; 0x13 - 2bc: 80 e0 ldi r24, 0x00 ; 0 - 2be: 90 e0 ldi r25, 0x00 ; 0 - 2c0: 08 95 ret -000002c2 : - 2c2: ef 92 push r14 - 2c4: ff 92 push r15 - 2c6: 0f 93 push r16 - 2c8: 1f 93 push r17 - 2ca: cf 93 push r28 - 2cc: 8c 01 movw r16, r24 - 2ce: 7b 01 movw r14, r22 - 2d0: c4 2f mov r28, r20 - 2d2: 84 2f mov r24, r20 - 2d4: 88 0f add r24, r24 - 2d6: c5 df rcall .-118 ; 0x262 - 2d8: 00 97 sbiw r24, 0x00 ; 0 - 2da: 49 f4 brne .+18 ; 0x2ee - 2dc: f8 01 movw r30, r16 - 2de: e0 82 st Z, r14 - 2e0: f1 82 std Z+1, r15 ; 0x01 - 2e2: 4c 2f mov r20, r28 - 2e4: 50 e0 ldi r21, 0x00 ; 0 - 2e6: 44 0f add r20, r20 - 2e8: 55 1f adc r21, r21 - 2ea: 42 83 std Z+2, r20 ; 0x02 - 2ec: 02 c0 rjmp .+4 ; 0x2f2 - 2ee: 8e ef ldi r24, 0xFE ; 254 - 2f0: 9f ef ldi r25, 0xFF ; 255 - 2f2: cf 91 pop r28 - 2f4: 1f 91 pop r17 - 2f6: 0f 91 pop r16 - 2f8: ff 90 pop r15 - 2fa: ef 90 pop r14 - 2fc: 08 95 ret +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 + 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 -000002fe : - 2fe: 0f 93 push r16 - 300: 00 97 sbiw r24, 0x00 ; 0 - 302: 81 f0 breq .+32 ; 0x324 - 304: fc 01 movw r30, r24 - 306: 00 23 and r16, r16 - 308: 19 f0 breq .+6 ; 0x310 - 30a: 01 30 cpi r16, 0x01 ; 1 - 30c: 31 f0 breq .+12 ; 0x31a - 30e: 0d c0 rjmp .+26 ; 0x32a - 310: 82 81 ldd r24, Z+2 ; 0x02 - 312: 61 df rcall .-318 ; 0x1d6 - 314: 80 e0 ldi r24, 0x00 ; 0 - 316: 90 e0 ldi r25, 0x00 ; 0 - 318: 0a c0 rjmp .+20 ; 0x32e - 31a: 82 81 ldd r24, Z+2 ; 0x02 - 31c: 13 df rcall .-474 ; 0x144 - 31e: 80 e0 ldi r24, 0x00 ; 0 - 320: 90 e0 ldi r25, 0x00 ; 0 - 322: 05 c0 rjmp .+10 ; 0x32e - 324: 8f ef ldi r24, 0xFF ; 255 - 326: 9f ef ldi r25, 0xFF ; 255 - 328: 02 c0 rjmp .+4 ; 0x32e - 32a: 80 e0 ldi r24, 0x00 ; 0 - 32c: 90 e0 ldi r25, 0x00 ; 0 - 32e: 0f 91 pop r16 - 330: 08 95 ret + // 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 -00000332 <__vector_22>: + // 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 + + /* Set bus state idle */ + TWI0.MSTATUS = TWI_BUSSTATE_IDLE_gc; + 230: 15 96 adiw r26, 0x05 ; 5 + 232: 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 + PORTA.PIN3CTRL = PORT_PULLUPEN_bm; + 238: 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 + +00000240 : + + + +int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ + 240: fc 01 movw r30, r24 + + //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; + + // 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 + 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 + + return CM_I2C_OK; + 278: 80 e0 ldi r24, 0x00 ; 0 + 27a: 90 e0 ldi r25, 0x00 ; 0 +} + 27c: 08 95 ret + +0000027e : + + +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 + + 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 + + // 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 + 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 + + 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 +} + + +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 + +000002cc <__vector_22>: #define BAUD_RATE 9600 static void *s_inst = NULL; get_UART_Event_fpt uart_rx_evt_fpt = NULL; ISR(USART0_RXC_vect) { - 332: 1f 92 push r1 - 334: 0f 92 push r0 - 336: 0f b6 in r0, 0x3f ; 63 - 338: 0f 92 push r0 - 33a: 11 24 eor r1, r1 - 33c: 2f 93 push r18 - 33e: 3f 93 push r19 - 340: 4f 93 push r20 - 342: 5f 93 push r21 - 344: 6f 93 push r22 - 346: 7f 93 push r23 - 348: 8f 93 push r24 - 34a: 9f 93 push r25 - 34c: af 93 push r26 - 34e: bf 93 push r27 - 350: ef 93 push r30 - 352: ff 93 push r31 + 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 // Read received data if(uart_rx_evt_fpt != NULL) uart_rx_evt_fpt(USART0.RXDATAL); - 354: e0 91 06 3f lds r30, 0x3F06 ; 0x803f06 <__data_end> - 358: f0 91 07 3f lds r31, 0x3F07 ; 0x803f07 <__data_end+0x1> - 35c: 30 97 sbiw r30, 0x00 ; 0 - 35e: 19 f0 breq .+6 ; 0x366 <__vector_22+0x34> - 360: 80 91 00 08 lds r24, 0x0800 ; 0x800800 - 364: 09 95 icall + 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 //cm_uart_send(USART0.RXDATAL); } - 366: ff 91 pop r31 - 368: ef 91 pop r30 - 36a: bf 91 pop r27 - 36c: af 91 pop r26 - 36e: 9f 91 pop r25 - 370: 8f 91 pop r24 - 372: 7f 91 pop r23 - 374: 6f 91 pop r22 - 376: 5f 91 pop r21 - 378: 4f 91 pop r20 - 37a: 3f 91 pop r19 - 37c: 2f 91 pop r18 - 37e: 0f 90 pop r0 - 380: 0f be out 0x3f, r0 ; 63 - 382: 0f 90 pop r0 - 384: 1f 90 pop r1 - 386: 18 95 reti + 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 -00000388 : +00000322 : void cm_uart_init(void *rtx_inst, get_UART_Event_fpt uart_rx_evt_fp){ - 388: cf 93 push r28 - 38a: df 93 push r29 - 38c: 1f 92 push r1 - 38e: cd b7 in r28, 0x3d ; 61 - 390: de b7 in r29, 0x3e ; 62 - 392: ac 01 movw r20, r24 + 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 //For interrupt-driven USART operation, global interrupts must be disabled during the initialization cli(); - 394: f8 94 cli + 32e: 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; - 396: e0 e0 ldi r30, 0x00 ; 0 - 398: f8 e0 ldi r31, 0x08 ; 8 - 39a: 2c e6 ldi r18, 0x6C ; 108 - 39c: 35 e0 ldi r19, 0x05 ; 5 - 39e: 20 87 std Z+8, r18 ; 0x08 - 3a0: 31 87 std Z+9, r19 ; 0x09 + 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> // Configure USART0 for 8-bit data, no parity, 1 stop bit USART0.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | // Asynchronous mode - 3a2: 93 e0 ldi r25, 0x03 ; 3 - 3a4: 97 83 std Z+7, r25 ; 0x07 + 33c: 93 e0 ldi r25, 0x03 ; 3 + 33e: 90 93 07 08 sts 0x0807, r25 ; 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 - 3a6: 90 ec ldi r25, 0xC0 ; 192 - 3a8: 96 83 std Z+6, r25 ; 0x06 + 342: 90 ec ldi r25, 0xC0 ; 192 + 344: 90 93 06 08 sts 0x0806, r25 ; 0x800806 <__RODATA_PM_OFFSET__+0x7f8806> USART_TXEN_bm; // Enable transmitter if((uart_rx_evt_fp != NULL) || (rtx_inst != NULL)){ - 3aa: 61 15 cp r22, r1 - 3ac: 71 05 cpc r23, r1 - 3ae: 11 f4 brne .+4 ; 0x3b4 - 3b0: 45 2b or r20, r21 - 3b2: 39 f0 breq .+14 ; 0x3c2 + 348: 61 15 cp r22, r1 + 34a: 71 05 cpc r23, r1 + 34c: d1 f0 breq .+52 ; 0x382 // Enable RX interrupt USART0.CTRLA = USART_RXCIE_bm; // Enable receive interrupt - 3b4: 80 e8 ldi r24, 0x80 ; 128 - 3b6: 80 93 05 08 sts 0x0805, r24 ; 0x800805 + 34e: 80 e8 ldi r24, 0x80 ; 128 + 350: 80 93 05 08 sts 0x0805, r24 ; 0x800805 <__RODATA_PM_OFFSET__+0x7f8805> s_inst = rtx_inst; uart_rx_evt_fpt = uart_rx_evt_fp; - 3ba: 60 93 06 3f sts 0x3F06, r22 ; 0x803f06 <__data_end> - 3be: 70 93 07 3f sts 0x3F07, r23 ; 0x803f07 <__data_end+0x1> + 354: 60 93 06 3f sts 0x3F06, r22 ; 0x803f06 <__data_end> + 358: 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) { - 3c2: 80 91 04 08 lds r24, 0x0804 ; 0x800804 - 3c6: 88 23 and r24, r24 - 3c8: 24 f4 brge .+8 ; 0x3d2 + 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 volatile uint8_t dummy = USART0.RXDATAL; // Read RXDATAL to clear the flag - 3ca: 80 91 00 08 lds r24, 0x0800 ; 0x800800 - 3ce: 89 83 std Y+1, r24 ; 0x01 + 364: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> + 368: 89 83 std Y+1, r24 ; 0x01 (void)dummy; // Silence unused variable warning - 3d0: 89 81 ldd r24, Y+1 ; 0x01 + 36a: 89 81 ldd r24, Y+1 ; 0x01 } PORTA.DIRSET = (1 << 6); // Set PA1 (TX) as output - 3d2: e0 e0 ldi r30, 0x00 ; 0 - 3d4: f4 e0 ldi r31, 0x04 ; 4 - 3d6: 80 e4 ldi r24, 0x40 ; 64 - 3d8: 81 83 std Z+1, r24 ; 0x01 + 36c: 80 e4 ldi r24, 0x40 ; 64 + 36e: 80 93 01 04 sts 0x0401, r24 ; 0x800401 <__RODATA_PM_OFFSET__+0x7f8401> PORTA.DIRCLR = (1 << 7); // Set PA2 (RX) as input - 3da: 80 e8 ldi r24, 0x80 ; 128 - 3dc: 82 83 std Z+2, r24 ; 0x02 + 372: 80 e8 ldi r24, 0x80 ; 128 + 374: 80 93 02 04 sts 0x0402, r24 ; 0x800402 <__RODATA_PM_OFFSET__+0x7f8402> // Enable global interrupts sei(); - 3de: 78 94 sei + 378: 78 94 sei } - 3e0: 0f 90 pop r0 - 3e2: df 91 pop r29 - 3e4: cf 91 pop r28 - 3e6: 08 95 ret + 37a: 0f 90 pop r0 + 37c: df 91 pop r29 + 37e: cf 91 pop r28 + 380: 08 95 ret -000003e8 : + // 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 : int cm_msgSync_Byte_DecodeSC(uint8_t rx_byte){ static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; switch (state) - 3e8: e0 91 41 3f lds r30, 0x3F41 ; 0x803f41 - 3ec: e2 30 cpi r30, 0x02 ; 2 - 3ee: 29 f1 breq .+74 ; 0x43a <__LOCK_REGION_LENGTH__+0x3a> - 3f0: 28 f4 brcc .+10 ; 0x3fc - 3f2: ee 23 and r30, r30 - 3f4: 41 f0 breq .+16 ; 0x406 <__LOCK_REGION_LENGTH__+0x6> - 3f6: e1 30 cpi r30, 0x01 ; 1 - 3f8: 91 f0 breq .+36 ; 0x41e <__LOCK_REGION_LENGTH__+0x1e> - 3fa: 40 c0 rjmp .+128 ; 0x47c <__LOCK_REGION_LENGTH__+0x7c> - 3fc: e3 30 cpi r30, 0x03 ; 3 - 3fe: 59 f1 breq .+86 ; 0x456 <__LOCK_REGION_LENGTH__+0x56> - 400: e4 30 cpi r30, 0x04 ; 4 - 402: b9 f1 breq .+110 ; 0x472 <__LOCK_REGION_LENGTH__+0x72> - 404: 3b c0 rjmp .+118 ; 0x47c <__LOCK_REGION_LENGTH__+0x7c> - { + 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; - 406: f0 e0 ldi r31, 0x00 ; 0 - 408: ee 54 subi r30, 0x4E ; 78 - 40a: f4 47 sbci r31, 0x74 ; 116 - 40c: 20 81 ld r18, Z - 40e: 91 e0 ldi r25, 0x01 ; 1 - 410: 28 13 cpse r18, r24 - 412: 90 e0 ldi r25, 0x00 ; 0 - 414: 90 93 41 3f sts 0x3F41, r25 ; 0x803f41 + 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; - 418: 81 e0 ldi r24, 0x01 ; 1 - 41a: 90 e0 ldi r25, 0x00 ; 0 + 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 + 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 + 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 + 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; + 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; - 41c: 08 95 ret - + 3de: 08 95 ret case CM_MSGSYNC_STATE_2: state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; - 41e: f0 e0 ldi r31, 0x00 ; 0 - 420: ee 54 subi r30, 0x4E ; 78 - 422: f4 47 sbci r31, 0x74 ; 116 - 424: 90 81 ld r25, Z - 426: 89 13 cpse r24, r25 - 428: 02 c0 rjmp .+4 ; 0x42e <__LOCK_REGION_LENGTH__+0x2e> - 42a: 82 e0 ldi r24, 0x02 ; 2 - 42c: 01 c0 rjmp .+2 ; 0x430 <__LOCK_REGION_LENGTH__+0x30> - 42e: 80 e0 ldi r24, 0x00 ; 0 - 430: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; break; - } - - return 1; - 434: 81 e0 ldi r24, 0x01 ; 1 - 436: 90 e0 ldi r25, 0x00 ; 0 + + 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; break; case CM_MSGSYNC_STATE_2: state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; - break; - 438: 08 95 ret - - case CM_MSGSYNC_STATE_3: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; - 43a: f0 e0 ldi r31, 0x00 ; 0 - 43c: ee 54 subi r30, 0x4E ; 78 - 43e: f4 47 sbci r31, 0x74 ; 116 - 440: 90 81 ld r25, Z - 442: 89 13 cpse r24, r25 - 444: 02 c0 rjmp .+4 ; 0x44a <__LOCK_REGION_LENGTH__+0x4a> - 446: 83 e0 ldi r24, 0x03 ; 3 - 448: 01 c0 rjmp .+2 ; 0x44c <__LOCK_REGION_LENGTH__+0x4c> - 44a: 80 e0 ldi r24, 0x00 ; 0 - 44c: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; - break; - } - - return 1; - 450: 81 e0 ldi r24, 0x01 ; 1 - 452: 90 e0 ldi r25, 0x00 ; 0 - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; - break; - - case CM_MSGSYNC_STATE_3: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; - break; - 454: 08 95 ret - - case CM_MSGSYNC_STATE_4: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; - 456: f0 e0 ldi r31, 0x00 ; 0 - 458: ee 54 subi r30, 0x4E ; 78 - 45a: f4 47 sbci r31, 0x74 ; 116 - 45c: 90 81 ld r25, Z - 45e: 89 13 cpse r24, r25 - 460: 02 c0 rjmp .+4 ; 0x466 <__LOCK_REGION_LENGTH__+0x66> - 462: 84 e0 ldi r24, 0x04 ; 4 - 464: 01 c0 rjmp .+2 ; 0x468 <__LOCK_REGION_LENGTH__+0x68> - 466: 80 e0 ldi r24, 0x00 ; 0 - 468: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; - break; - } - - return 1; - 46c: 81 e0 ldi r24, 0x01 ; 1 - 46e: 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; - 470: 08 95 ret - - case CM_MSGSYNC_STATE_5: - state = CM_MSGSYNC_STATE_INIT; - 472: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 - return 0; - 476: 80 e0 ldi r24, 0x00 ; 0 - 478: 90 e0 ldi r25, 0x00 ; 0 - 47a: 08 95 ret - break; - - default: - state = CM_MSGSYNC_STATE_INIT; - 47c: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 - break; - } - - return 1; - 480: 81 e0 ldi r24, 0x01 ; 1 - 482: 90 e0 ldi r25, 0x00 ; 0 - - -} - 484: 08 95 ret + 3e8: 82 e0 ldi r24, 0x02 ; 2 + 3ea: da cf rjmp .-76 ; 0x3a0 -00000486 : +000003ec : 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) - 486: 90 91 40 3f lds r25, 0x3F40 ; 0x803f40 - 48a: 93 30 cpi r25, 0x03 ; 3 - 48c: d1 f0 breq .+52 ; 0x4c2 - 48e: 28 f4 brcc .+10 ; 0x49a - 490: 99 23 and r25, r25 - 492: 41 f0 breq .+16 ; 0x4a4 - 494: 91 30 cpi r25, 0x01 ; 1 - 496: 79 f0 breq .+30 ; 0x4b6 - 498: 47 c0 rjmp .+142 ; 0x528 - 49a: 94 30 cpi r25, 0x04 ; 4 - 49c: d1 f0 breq .+52 ; 0x4d2 - 49e: 95 30 cpi r25, 0x05 ; 5 - 4a0: 29 f1 breq .+74 ; 0x4ec - 4a2: 42 c0 rjmp .+132 ; 0x528 - { - case CM_MSG_WAIT_FOR_STARTCODE: + 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> if(!cm_msgSync_Byte_DecodeSC(rx_byte)) state = CM_MSG_DECODE_STATE_GET_SIZE_BYTE; - 4a4: a1 df rcall .-190 ; 0x3e8 - 4a6: 89 2b or r24, r25 - 4a8: 19 f4 brne .+6 ; 0x4b0 - 4aa: 81 e0 ldi r24, 0x01 ; 1 - 4ac: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 data_bytes_idx = 0; - 4b0: 10 92 3f 3f sts 0x3F3F, r1 ; 0x803f3f break; - 4b4: 39 c0 rjmp .+114 ; 0x528 case CM_MSG_DECODE_STATE_GET_SIZE_BYTE: msg.msg_data_size = rx_byte; - 4b6: 80 93 08 3f sts 0x3F08, r24 ; 0x803f08 + 402: 80 93 08 3f sts 0x3F08, r24 ; 0x803f08 state = CM_MSG_DECODE_STATE_GET_CRC_BYTE1; - 4ba: 83 e0 ldi r24, 0x03 ; 3 - 4bc: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - - break; - 4c0: 33 c0 rjmp .+102 ; 0x528 - - case CM_MSG_DECODE_STATE_GET_CRC_BYTE1: - msg.msg_data_crc = (rx_byte << 8) & 0xff00; - 4c2: e8 e0 ldi r30, 0x08 ; 8 - 4c4: ff e3 ldi r31, 0x3F ; 63 - 4c6: 11 82 std Z+1, r1 ; 0x01 - 4c8: 82 83 std Z+2, r24 ; 0x02 - state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; - 4ca: 84 e0 ldi r24, 0x04 ; 4 - 4cc: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - break; - 4d0: 2b c0 rjmp .+86 ; 0x528 - - case CM_MSG_DECODE_STATE_GET_CRC_BYTE2: - msg.msg_data_crc |= rx_byte & 0xff; - 4d2: e8 e0 ldi r30, 0x08 ; 8 - 4d4: ff e3 ldi r31, 0x3F ; 63 - 4d6: 21 81 ldd r18, Z+1 ; 0x01 - 4d8: 32 81 ldd r19, Z+2 ; 0x02 - 4da: a9 01 movw r20, r18 - 4dc: 48 2b or r20, r24 - 4de: ca 01 movw r24, r20 - 4e0: 81 83 std Z+1, r24 ; 0x01 - 4e2: 92 83 std Z+2, r25 ; 0x02 - state = CM_MSG_DECODE_STATE_GET_DATA; - 4e4: 85 e0 ldi r24, 0x05 ; 5 - 4e6: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - break; - 4ea: 1e c0 rjmp .+60 ; 0x528 - - case CM_MSG_DECODE_STATE_GET_DATA: - msg.msg_data[data_bytes_idx] = rx_byte; - 4ec: 90 91 3f 3f lds r25, 0x3F3F ; 0x803f3f - 4f0: e9 2f mov r30, r25 - 4f2: f0 e0 ldi r31, 0x00 ; 0 - 4f4: e8 5f subi r30, 0xF8 ; 248 - 4f6: f0 4c sbci r31, 0xC0 ; 192 - 4f8: 83 83 std Z+3, r24 ; 0x03 - data_bytes_idx++; - 4fa: 81 e0 ldi r24, 0x01 ; 1 - 4fc: 89 0f add r24, r25 - 4fe: 80 93 3f 3f sts 0x3F3F, r24 ; 0x803f3f - if(data_bytes_idx >= msg.msg_data_size){ - 502: 90 91 08 3f lds r25, 0x3F08 ; 0x803f08 - 506: 89 17 cp r24, r25 - 508: 78 f0 brcs .+30 ; 0x528 - // calculate CRC.. - - // Run function pointer msg evt.. - s_msg_cmplete_evt_fpt(s_msg_cmplete_evt_inst,&(msg.msg_data[0])); - 50a: e0 91 44 3f lds r30, 0x3F44 ; 0x803f44 - 50e: f0 91 45 3f lds r31, 0x3F45 ; 0x803f45 - 512: 6b e0 ldi r22, 0x0B ; 11 - 514: 7f e3 ldi r23, 0x3F ; 63 - 516: 80 91 42 3f lds r24, 0x3F42 ; 0x803f42 - 51a: 90 91 43 3f lds r25, 0x3F43 ; 0x803f43 - 51e: 09 95 icall - state = CM_MSG_WAIT_FOR_STARTCODE; - 520: 10 92 40 3f sts 0x3F40, r1 ; 0x803f40 - data_bytes_idx = 0; - 524: 10 92 3f 3f sts 0x3F3F, r1 ; 0x803f3f + 406: 83 e0 ldi r24, 0x03 ; 3 + 408: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 } break; } return 0; } - 528: 80 e0 ldi r24, 0x00 ; 0 - 52a: 90 e0 ldi r25, 0x00 ; 0 - 52c: 08 95 ret + 40c: 80 e0 ldi r24, 0x00 ; 0 + 40e: 90 e0 ldi r25, 0x00 ; 0 + 410: 08 95 ret + + 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) + { + 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> + 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 + state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; + 494: 84 e0 ldi r24, 0x04 ; 4 + 496: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 + + } + break; + } + return 0; +} + 49a: 80 e0 ldi r24, 0x00 ; 0 + 49c: 90 e0 ldi r25, 0x00 ; 0 + 49e: 08 95 ret -0000052e : +000004a0 : 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; - 52e: 00 97 sbiw r24, 0x00 ; 0 - 530: 59 f0 breq .+22 ; 0x548 - 532: 61 15 cp r22, r1 - 534: 71 05 cpc r23, r1 - 536: 41 f0 breq .+16 ; 0x548 + 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 s_msg_cmplete_evt_inst = msg_cmplete_evt_inst; - 538: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 - 53c: 90 93 43 3f sts 0x3F43, r25 ; 0x803f43 + 4aa: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 + 4ae: 90 93 43 3f sts 0x3F43, r25 ; 0x803f43 s_msg_cmplete_evt_fpt = msg_cmplete_evt_fp; - 540: 60 93 44 3f sts 0x3F44, r22 ; 0x803f44 - 544: 70 93 45 3f sts 0x3F45, r23 ; 0x803f45 - 548: 08 95 ret + 4b2: 60 93 44 3f sts 0x3F44, r22 ; 0x803f44 + 4b6: 70 93 45 3f sts 0x3F45, r23 ; 0x803f45 + 4ba: 08 95 ret -0000054a : - //storno_pll_param_msg temp_msg; - //uint8_t *msg_ptr = (void*)&temp_msg; - -static uint8_t isStructValid(storno_xtal_app_t *inst){ - - if(inst->si5351_dev == NULL) return 1; - 54a: fc 01 movw r30, r24 - 54c: 22 81 ldd r18, Z+2 ; 0x02 - 54e: 33 81 ldd r19, Z+3 ; 0x03 - 550: 23 2b or r18, r19 - 552: 21 f0 breq .+8 ; 0x55c - if(inst == NULL)return 1; - 554: 89 2b or r24, r25 - 556: 21 f4 brne .+8 ; 0x560 - 558: 81 e0 ldi r24, 0x01 ; 1 - 55a: 08 95 ret - //storno_pll_param_msg temp_msg; - //uint8_t *msg_ptr = (void*)&temp_msg; - -static uint8_t isStructValid(storno_xtal_app_t *inst){ - - if(inst->si5351_dev == NULL) return 1; - 55c: 81 e0 ldi r24, 0x01 ; 1 - 55e: 08 95 ret - if(inst == NULL)return 1; - - return 0; - 560: 80 e0 ldi r24, 0x00 ; 0 -} - 562: 08 95 ret - -00000564 : - cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); +000004bc : + } } -uint8_t size = 0; -static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ - 564: cf 93 push r28 - 566: df 93 push r29 + +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 - size = sizeof(storno_pll_param_msg); - 568: 29 e1 ldi r18, 0x19 ; 25 - 56a: 20 93 46 3f sts 0x3F46, r18 ; 0x803f46 - - // Read settings for PLLA first - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,size); - 56e: ec 01 movw r28, r24 - 570: 24 96 adiw r28, 0x04 ; 4 - 572: 49 e1 ldi r20, 0x19 ; 25 - 574: be 01 movw r22, r28 - 576: 80 e0 ldi r24, 0x00 ; 0 - 578: 90 e0 ldi r25, 0x00 ; 0 - 57a: 96 dd rcall .-1236 ; 0xa8 + 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 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 57c: 81 e4 ldi r24, 0x41 ; 65 - 57e: 93 e0 ldi r25, 0x03 ; 3 - 580: 01 97 sbiw r24, 0x01 ; 1 - 582: f1 f7 brne .-4 ; 0x580 - 584: 00 00 nop - //cqm_setPLLParam(inst, SI5351_PLL_A, SI5351_OUTPUT_0); - //cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_CLK_POWER_UP); - //_delay_ms(1); - - - cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 586: 49 e1 ldi r20, 0x19 ; 25 - 588: be 01 movw r22, r28 - 58a: 80 e2 ldi r24, 0x20 ; 32 - 58c: 90 e0 ldi r25, 0x00 ; 0 - 58e: 8c dd rcall .-1256 ; 0xa8 - //cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_CLK_POWER_UP); - - //inst->pll_param_ptr = NULL; + 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 + _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 + _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 } - 590: df 91 pop r29 - 592: cf 91 pop r28 - 594: 08 95 ret + 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 + + 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 -00000596 : +00000548 : if(inst == NULL)return 1; return 0; } static void cqm6xx_app_updateOsc(storno_xtal_app_t *inst){ - 596: cf 93 push r28 - 598: df 93 push r29 - 59a: ec 01 movw r28, r24 + 548: cf 93 push r28 + 54a: df 93 push r29 + 54c: fc 01 movw r30, r24 + //storno_pll_param_msg temp_msg; + //uint8_t *msg_ptr = (void*)&temp_msg; + +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 + if(inst == NULL)return 1; + 556: 30 97 sbiw r30, 0x00 ; 0 + 558: f9 f0 breq .+62 ; 0x598 // Check Struct if(isStructValid(inst) != 0)return; - 59c: d6 df rcall .-84 ; 0x54a - 59e: 81 11 cpse r24, r1 - 5a0: 32 c0 rjmp .+100 ; 0x606 // 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; - 5a2: 89 81 ldd r24, Y+1 ; 0x01 - 5a4: 98 81 ld r25, Y - 5a6: 89 17 cp r24, r25 - 5a8: 71 f1 breq .+92 ; 0x606 + 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 switch(inst->state_next){ - 5aa: 81 30 cpi r24, 0x01 ; 1 - 5ac: 19 f0 breq .+6 ; 0x5b4 - 5ae: 82 30 cpi r24, 0x02 ; 2 - 5b0: b1 f0 breq .+44 ; 0x5de - 5b2: 29 c0 rjmp .+82 ; 0x606 - 5b4: 81 e4 ldi r24, 0x41 ; 65 - 5b6: 93 e0 ldi r25, 0x03 ; 3 - 5b8: 01 97 sbiw r24, 0x01 ; 1 - 5ba: f1 f7 brne .-4 ; 0x5b8 - 5bc: 00 00 nop - - case STORNO_APP_RX_MODE: - _delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_ENABLE); // RX - 5be: 40 e0 ldi r20, 0x00 ; 0 - 5c0: 60 e0 ldi r22, 0x00 ; 0 - 5c2: 8a 81 ldd r24, Y+2 ; 0x02 - 5c4: 9b 81 ldd r25, Y+3 ; 0x03 - 5c6: ec d0 rcall .+472 ; 0x7a0 - 5c8: 81 e4 ldi r24, 0x41 ; 65 - 5ca: 93 e0 ldi r25, 0x03 ; 3 - 5cc: 01 97 sbiw r24, 0x01 ; 1 - 5ce: f1 f7 brne .-4 ; 0x5cc - 5d0: 00 00 nop - _delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_DISABLE); // TX - 5d2: 41 e0 ldi r20, 0x01 ; 1 - 5d4: 61 e0 ldi r22, 0x01 ; 1 - 5d6: 8a 81 ldd r24, Y+2 ; 0x02 - 5d8: 9b 81 ldd r25, Y+3 ; 0x03 - 5da: e2 d0 rcall .+452 ; 0x7a0 + 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 break; - 5dc: 14 c0 rjmp .+40 ; 0x606 - 5de: 81 e4 ldi r24, 0x41 ; 65 - 5e0: 93 e0 ldi r25, 0x03 ; 3 - 5e2: 01 97 sbiw r24, 0x01 ; 1 - 5e4: f1 f7 brne .-4 ; 0x5e2 - 5e6: 00 00 nop case STORNO_APP_TX_MODE: _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX - 5e8: 41 e0 ldi r20, 0x01 ; 1 - 5ea: 60 e0 ldi r22, 0x00 ; 0 - 5ec: 8a 81 ldd r24, Y+2 ; 0x02 - 5ee: 9b 81 ldd r25, Y+3 ; 0x03 - 5f0: d7 d0 rcall .+430 ; 0x7a0 - 5f2: 81 e4 ldi r24, 0x41 ; 65 - 5f4: 93 e0 ldi r25, 0x03 ; 3 - 5f6: 01 97 sbiw r24, 0x01 ; 1 - 5f8: f1 f7 brne .-4 ; 0x5f6 - 5fa: 00 00 nop + 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 _delay_ms(1); cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 5fc: 40 e0 ldi r20, 0x00 ; 0 - 5fe: 61 e0 ldi r22, 0x01 ; 1 - 600: 8a 81 ldd r24, Y+2 ; 0x02 - 602: 9b 81 ldd r25, Y+3 ; 0x03 - 604: cd d0 rcall .+410 ; 0x7a0 + 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; } } - 606: df 91 pop r29 - 608: cf 91 pop r28 - 60a: 08 95 ret + 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 + + 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 + _delay_ms(1); + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_DISABLE); // TX + 5bc: 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 + break; + + } + + +} + 5c4: df 91 pop r29 + 5c6: 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 + +000005ca : -0000060c : - //inst->pll_param_ptr = NULL; } void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ - 60c: cf 93 push r28 - 60e: df 93 push r29 - 610: ec 01 movw r28, r24 + 5ca: 0f 93 push r16 + 5cc: 1f 93 push r17 + 5ce: cf 93 push r28 + 5d0: df 93 push r29 + //storno_pll_param_msg temp_msg; + //uint8_t *msg_ptr = (void*)&temp_msg; + +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 + if(inst == NULL)return 1; + 5dc: 00 97 sbiw r24, 0x00 ; 0 + 5de: 99 f0 breq .+38 ; 0x606 + 5e0: ec 01 movw r28, r24 +void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ // Check Struct if(isStructValid(inst) != 0)return; - 612: 9b df rcall .-202 ; 0x54a - 614: 81 11 cpse r24, r1 - 616: 24 c0 rjmp .+72 ; 0x660 switch (inst->state_next) - 618: 89 81 ldd r24, Y+1 ; 0x01 - 61a: 81 30 cpi r24, 0x01 ; 1 - 61c: 51 f0 breq .+20 ; 0x632 - 61e: 18 f0 brcs .+6 ; 0x626 - 620: 82 30 cpi r24, 0x02 ; 2 - 622: 99 f0 breq .+38 ; 0x64a - 624: 1d c0 rjmp .+58 ; 0x660 - { - case STORNO_APP_PROGRAM_OSC: - // Read PLL parameters from EEPROM and Program PLL values here: - inst->state_now = inst->state_next; - 626: 88 83 st Y, r24 - - cqm6xx_app_loadPLLParam(inst); - 628: ce 01 movw r24, r28 - 62a: 9c df rcall .-200 ; 0x564 - - - // if ok, then go to RX mode: - inst->state_next = STORNO_APP_RX_MODE; - 62c: 81 e0 ldi r24, 0x01 ; 1 - 62e: 89 83 std Y+1, r24 ; 0x01 - break; - 630: 17 c0 rjmp .+46 ; 0x660 - - - case STORNO_APP_RX_MODE: - // If we just came from another state, then Enable RX osc here.. - cqm6xx_app_updateOsc(inst); - 632: ce 01 movw r24, r28 - 634: b0 df rcall .-160 ; 0x596 - - // Update state now.. - inst->state_now = inst->state_next; - 636: 89 81 ldd r24, Y+1 ; 0x01 - 638: 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; - 63a: 63 e0 ldi r22, 0x03 ; 3 - 63c: 80 e0 ldi r24, 0x00 ; 0 - 63e: 57 dd rcall .-1362 ; 0xee - 640: 01 97 sbiw r24, 0x01 ; 1 - 642: 71 f4 brne .+28 ; 0x660 - 644: 82 e0 ldi r24, 0x02 ; 2 - 646: 89 83 std Y+1, r24 ; 0x01 - 648: 0b c0 rjmp .+22 ; 0x660 + 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); - 64a: ce 01 movw r24, r28 - 64c: a4 df rcall .-184 ; 0x596 + 5f0: ce 01 movw r24, r28 + 5f2: aa df rcall .-172 ; 0x548 // Update state now.. inst->state_now = inst->state_next; - 64e: 89 81 ldd r24, Y+1 ; 0x01 - 650: 88 83 st Y, r24 + 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; - 652: 63 e0 ldi r22, 0x03 ; 3 - 654: 80 e0 ldi r24, 0x00 ; 0 - 656: 4b dd rcall .-1386 ; 0xee - 658: 89 2b or r24, r25 - 65a: 11 f4 brne .+4 ; 0x660 - 65c: 81 e0 ldi r24, 0x01 ; 1 - 65e: 89 83 std Y+1, r24 ; 0x01 + 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; } } - 660: df 91 pop r29 - 662: cf 91 pop r28 - 664: 08 95 ret + 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 + 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 + + // Update state now.. + inst->state_now = inst->state_next; + 6a4: 89 81 ldd r24, Y+1 ; 0x01 + 6a6: 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 -00000666 : +000006ba : + } + + +} void programPLL_Parameters(storno_xtal_app_t *inst){ + 6ba: cf 93 push r28 + 6bc: df 93 push r29 + 6be: ec 01 movw r28, r24 //Burn settings into eeprom here: switch(inst->pll_param_data.PLL_Ident){ - 666: fc 01 movw r30, r24 - 668: 24 81 ldd r18, Z+4 ; 0x04 - 66a: 22 23 and r18, r18 - 66c: 19 f0 breq .+6 ; 0x674 - 66e: 21 30 cpi r18, 0x01 ; 1 - 670: 49 f0 breq .+18 ; 0x684 - 672: 08 95 ret - + 6c0: 8c 81 ldd r24, Y+4 ; 0x04 + 6c2: 88 23 and r24, r24 + 6c4: 69 f0 breq .+26 ; 0x6e0 + 6c6: 81 30 cpi r24, 0x01 ; 1 + 6c8: 39 f4 brne .+14 ; 0x6d8 case MSG_PLLA_PARAM: - cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 674: bc 01 movw r22, r24 - 676: 6c 5f subi r22, 0xFC ; 252 - 678: 7f 4f sbci r23, 0xFF ; 255 - 67a: 49 e1 ldi r20, 0x19 ; 25 - 67c: 80 e2 ldi r24, 0x20 ; 32 - 67e: 90 e0 ldi r25, 0x00 ; 0 - 680: f5 dc rcall .-1558 ; 0x6c + cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); break; - 682: 08 95 ret case MSG_PLLB_PARAM: cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 684: bc 01 movw r22, r24 - 686: 6c 5f subi r22, 0xFC ; 252 - 688: 7f 4f sbci r23, 0xFF ; 255 - 68a: 49 e1 ldi r20, 0x19 ; 25 - 68c: 80 e2 ldi r24, 0x20 ; 32 - 68e: 90 e0 ldi r25, 0x00 ; 0 - 690: ed dc rcall .-1574 ; 0x6c - 692: 08 95 ret + 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){ + + 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 + } + + // 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 + +} + 6f0: df 91 pop r29 + 6f2: cf 91 pop r28 + 6f4: 08 95 ret -00000694 : +000006f6 : } int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ memcpy(&inst->pll_param_data,rxData,sizeof(storno_pll_param_msg)); - 694: dc 01 movw r26, r24 - 696: 14 96 adiw r26, 0x04 ; 4 - 698: 29 e1 ldi r18, 0x19 ; 25 - 69a: fb 01 movw r30, r22 - 69c: 01 90 ld r0, Z+ - 69e: 0d 92 st X+, r0 - 6a0: 2a 95 dec r18 - 6a2: e1 f7 brne .-8 ; 0x69c + 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 programPLL_Parameters(inst); - 6a4: e0 df rcall .-64 ; 0x666 + 706: d9 df rcall .-78 ; 0x6ba return 0; } - 6a6: 80 e0 ldi r24, 0x00 ; 0 - 6a8: 90 e0 ldi r25, 0x00 ; 0 - 6aa: 08 95 ret + 708: 80 e0 ldi r24, 0x00 ; 0 + 70a: 90 e0 ldi r25, 0x00 ; 0 + 70c: 08 95 ret -000006ac : +0000070e : void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev){ - 6ac: cf 93 push r28 - 6ae: df 93 push r29 + 70e: 0f 93 push r16 + 710: 1f 93 push r17 + 712: cf 93 push r28 + 714: df 93 push r29 if(si5351_dev == NULL) return; - 6b0: 61 15 cp r22, r1 - 6b2: 71 05 cpc r23, r1 - 6b4: 71 f0 breq .+28 ; 0x6d2 + 716: 61 15 cp r22, r1 + 718: 71 05 cpc r23, r1 + 71a: 11 f1 breq .+68 ; 0x760 if(inst == NULL)return; - 6b6: 00 97 sbiw r24, 0x00 ; 0 - 6b8: 61 f0 breq .+24 ; 0x6d2 - 6ba: ec 01 movw r28, r24 + 71c: 00 97 sbiw r24, 0x00 ; 0 + 71e: 01 f1 breq .+64 ; 0x760 + 720: ec 01 movw r28, r24 inst->state_next = STORNO_APP_PROGRAM_OSC; - 6bc: 19 82 std Y+1, r1 ; 0x01 + 722: 19 82 std Y+1, r1 ; 0x01 inst->state_now = STORNO_APP_PROGRAM_OSC; - 6be: 18 82 st Y, r1 + 724: 18 82 st Y, r1 inst->si5351_dev = si5351_dev; - 6c0: 6a 83 std Y+2, r22 ; 0x02 - 6c2: 7b 83 std Y+3, r23 ; 0x03 + 726: 6a 83 std Y+2, r22 ; 0x02 + 728: 7b 83 std Y+3, r23 ; 0x03 - //cm_uart_init(inst,(get_UART_Event_fpt)uart_rx_event); cm_MsgCompleteEvt_Register(inst,(Get_msgComplete_Event_fpt)uart_rx_event); - 6c4: 6a e4 ldi r22, 0x4A ; 74 - 6c6: 73 e0 ldi r23, 0x03 ; 3 - 6c8: 32 df rcall .-412 ; 0x52e + 72a: 6b e7 ldi r22, 0x7B ; 123 + 72c: 73 e0 ldi r23, 0x03 ; 3 + 72e: b8 de rcall .-656 ; 0x4a0 cm_uart_init(inst,(get_UART_Event_fpt)cm_msg_DecodeMsg_Byte); - 6ca: 63 e4 ldi r22, 0x43 ; 67 - 6cc: 72 e0 ldi r23, 0x02 ; 2 - 6ce: ce 01 movw r24, r28 - 6d0: 5b de rcall .-842 ; 0x388 + 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 - 6d2: df 91 pop r29 - 6d4: cf 91 pop r28 - 6d6: 08 95 ret +} -000006d8
: - uint8_t data_set[25] = {0x55,56}; - //cm_EEPROM_write(0x00,data_set,1); - uint8_t data[25] = {0}; +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 + + 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); + } + + 760: df 91 pop r29 + 762: cf 91 pop r28 + 764: 1f 91 pop r17 + 766: 0f 91 pop r16 + 768: 08 95 ret +} + +static int writeDefaultSettingsEEprom(storno_xtal_app_t *inst){ + + + inst->pll_param_data.PLL_Ident = 0; + 76a: 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 + 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 + 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 + + 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 + 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 + 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 + + 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 + _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 + 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; + inst->pll_param_data.MSx_P3 = 1; + + 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 + +000007ea
: +#include "avr_eeprom_driver/avr_eeprom_driver.h" + +storno_xtal_app_t storno_xtal_app; int main(void) { - 6d8: cf 93 push r28 - 6da: df 93 push r29 - 6dc: cd b7 in r28, 0x3d ; 61 - 6de: de b7 in r29, 0x3e ; 62 - 6e0: cb 55 subi r28, 0x5B ; 91 - 6e2: d1 09 sbc r29, r1 - 6e4: cd bf out 0x3d, r28 ; 61 - 6e6: de bf out 0x3e, r29 ; 62 + 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 /* Replace with your application code */ // Init Periphials cm_i2c_init(NULL); - 6e8: 80 e0 ldi r24, 0x00 ; 0 - 6ea: 90 e0 ldi r25, 0x00 ; 0 - 6ec: d0 dd rcall .-1120 ; 0x28e + 7fa: 80 e0 ldi r24, 0x00 ; 0 + 7fc: 90 e0 ldi r25, 0x00 ; 0 + 7fe: 06 dd rcall .-1524 ; 0x20c // Add devices cm_i2c_device_t si5351_i2c; cm_i2c_addDev(&si5351_i2c,NULL,0x60); - 6ee: 40 e6 ldi r20, 0x60 ; 96 - 6f0: 60 e0 ldi r22, 0x00 ; 0 - 6f2: 70 e0 ldi r23, 0x00 ; 0 - 6f4: ce 01 movw r24, r28 - 6f6: 01 96 adiw r24, 0x01 ; 1 - 6f8: e4 dd rcall .-1080 ; 0x2c2 + 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 // Init Devices: si5351_driver si5351_dev; cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); - 6fa: 4f e7 ldi r20, 0x7F ; 127 - 6fc: 51 e0 ldi r21, 0x01 ; 1 - 6fe: be 01 movw r22, r28 - 700: 6f 5f subi r22, 0xFF ; 255 - 702: 7f 4f sbci r23, 0xFF ; 255 - 704: ce 01 movw r24, r28 - 706: 04 96 adiw r24, 0x04 ; 4 - 708: 6b d0 rcall .+214 ; 0x7e0 + 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 cqm6xx_app_init(&storno_xtal_app, &si5351_dev); - 70a: be 01 movw r22, r28 - 70c: 6c 5f subi r22, 0xFC ; 252 - 70e: 7f 4f sbci r23, 0xFF ; 255 - 710: 87 e4 ldi r24, 0x47 ; 71 - 712: 9f e3 ldi r25, 0x3F ; 63 - 714: cb df rcall .-106 ; 0x6ac + 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 while (1) { cqm6xx_app_statemachine(&storno_xtal_app); - 716: 87 e4 ldi r24, 0x47 ; 71 - 718: 9f e3 ldi r25, 0x3F ; 63 - 71a: 78 df rcall .-272 ; 0x60c - 71c: 2a e6 ldi r18, 0x6A ; 106 - 71e: 84 e0 ldi r24, 0x04 ; 4 - 720: 91 e0 ldi r25, 0x01 ; 1 - 722: 21 50 subi r18, 0x01 ; 1 - 724: 80 40 sbci r24, 0x00 ; 0 - 726: 90 40 sbci r25, 0x00 ; 0 - 728: e1 f7 brne .-8 ; 0x722 - 72a: 00 c0 rjmp .+0 ; 0x72c - 72c: f4 cf rjmp .-24 ; 0x716 + 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 -0000072e : - 72e: 8f 92 push r8 - 730: 9f 92 push r9 - 732: af 92 push r10 - 734: bf 92 push r11 - 736: cf 92 push r12 - 738: df 92 push r13 - 73a: ef 92 push r14 - 73c: ff 92 push r15 - 73e: 0f 93 push r16 - 740: 1f 93 push r17 - 742: cf 93 push r28 - 744: df 93 push r29 - 746: ec 01 movw r28, r24 - 748: 86 2e mov r8, r22 - 74a: 5a 01 movw r10, r20 - 74c: 68 01 movw r12, r16 - 74e: 79 01 movw r14, r18 - 750: c8 01 movw r24, r16 - 752: 01 96 adiw r24, 0x01 ; 1 - 754: e6 d0 rcall .+460 ; 0x922 - 756: 98 2e mov r9, r24 - 758: 19 2f mov r17, r25 - 75a: fc 01 movw r30, r24 - 75c: 81 92 st Z+, r8 - 75e: cf 01 movw r24, r30 - 760: a6 01 movw r20, r12 - 762: b5 01 movw r22, r10 - 764: ff d1 rcall .+1022 ; 0xb64 - 766: ea 81 ldd r30, Y+2 ; 0x02 - 768: fb 81 ldd r31, Y+3 ; 0x03 - 76a: a7 01 movw r20, r14 - 76c: 96 01 movw r18, r12 - 76e: 2f 5f subi r18, 0xFF ; 255 - 770: 3f 4f sbci r19, 0xFF ; 255 - 772: 4f 4f sbci r20, 0xFF ; 255 - 774: 5f 4f sbci r21, 0xFF ; 255 - 776: 01 e0 ldi r16, 0x01 ; 1 - 778: 69 2d mov r22, r9 - 77a: 71 2f mov r23, r17 - 77c: 88 81 ld r24, Y - 77e: 99 81 ldd r25, Y+1 ; 0x01 - 780: 09 95 icall - 782: 80 e0 ldi r24, 0x00 ; 0 - 784: 90 e0 ldi r25, 0x00 ; 0 - 786: df 91 pop r29 - 788: cf 91 pop r28 - 78a: 1f 91 pop r17 - 78c: 0f 91 pop r16 - 78e: ff 90 pop r15 - 790: ef 90 pop r14 - 792: df 90 pop r13 - 794: cf 90 pop r12 - 796: bf 90 pop r11 - 798: af 90 pop r10 - 79a: 9f 90 pop r9 - 79c: 8f 90 pop r8 - 79e: 08 95 ret +00000842 : -000007a0 : - 7a0: 0f 93 push r16 - 7a2: 1f 93 push r17 - 7a4: 66 23 and r22, r22 - 7a6: 19 f0 breq .+6 ; 0x7ae - 7a8: 61 30 cpi r22, 0x01 ; 1 - 7aa: 39 f0 breq .+14 ; 0x7ba - 7ac: 0b c0 rjmp .+22 ; 0x7c4 - 7ae: fc 01 movw r30, r24 - 7b0: 27 81 ldd r18, Z+7 ; 0x07 - 7b2: 40 fb bst r20, 0 - 7b4: 20 f9 bld r18, 0 - 7b6: 27 83 std Z+7, r18 ; 0x07 - 7b8: 05 c0 rjmp .+10 ; 0x7c4 - 7ba: fc 01 movw r30, r24 - 7bc: 27 81 ldd r18, Z+7 ; 0x07 - 7be: 40 fb bst r20, 0 - 7c0: 21 f9 bld r18, 1 - 7c2: 27 83 std Z+7, r18 ; 0x07 - 7c4: ac 01 movw r20, r24 - 7c6: 49 5f subi r20, 0xF9 ; 249 - 7c8: 5f 4f sbci r21, 0xFF ; 255 - 7ca: 01 e0 ldi r16, 0x01 ; 1 - 7cc: 10 e0 ldi r17, 0x00 ; 0 - 7ce: 20 e0 ldi r18, 0x00 ; 0 - 7d0: 30 e0 ldi r19, 0x00 ; 0 - 7d2: 63 e0 ldi r22, 0x03 ; 3 - 7d4: ac df rcall .-168 ; 0x72e - 7d6: 80 e0 ldi r24, 0x00 ; 0 - 7d8: 90 e0 ldi r25, 0x00 ; 0 - 7da: 1f 91 pop r17 - 7dc: 0f 91 pop r16 - 7de: 08 95 ret + // Read Device Status register: + readRegister(inst,0x00, (uint8_t *) &inst->device_data.deviceStatus, sizeof(si5351_deviceStat_t)); -000007e0 : - 7e0: ef 92 push r14 - 7e2: ff 92 push r15 - 7e4: 0f 93 push r16 - 7e6: 1f 93 push r17 - 7e8: cf 93 push r28 - 7ea: df 93 push r29 - 7ec: 1f 92 push r1 - 7ee: cd b7 in r28, 0x3d ; 61 - 7f0: de b7 in r29, 0x3e ; 62 - 7f2: 00 97 sbiw r24, 0x00 ; 0 - 7f4: 09 f4 brne .+2 ; 0x7f8 - 7f6: 85 c0 rjmp .+266 ; 0x902 - 7f8: 61 15 cp r22, r1 - 7fa: 71 05 cpc r23, r1 - 7fc: 09 f4 brne .+2 ; 0x800 - 7fe: 84 c0 rjmp .+264 ; 0x908 - 800: 41 15 cp r20, r1 - 802: 51 05 cpc r21, r1 - 804: 09 f4 brne .+2 ; 0x808 - 806: 83 c0 rjmp .+262 ; 0x90e - 808: 7c 01 movw r14, r24 - 80a: dc 01 movw r26, r24 - 80c: 6d 93 st X+, r22 - 80e: 7c 93 st X, r23 - 810: 11 97 sbiw r26, 0x01 ; 1 - 812: 12 96 adiw r26, 0x02 ; 2 - 814: 4d 93 st X+, r20 - 816: 5c 93 st X, r21 - 818: 13 97 sbiw r26, 0x03 ; 3 - 81a: fc 01 movw r30, r24 - 81c: 34 96 adiw r30, 0x04 ; 4 - 81e: 84 e5 ldi r24, 0x54 ; 84 - 820: df 01 movw r26, r30 - 822: 1d 92 st X+, r1 - 824: 8a 95 dec r24 - 826: e9 f7 brne .-6 ; 0x822 - 828: 8f ef ldi r24, 0xFF ; 255 - 82a: 89 83 std Y+1, r24 ; 0x01 - 82c: 01 e0 ldi r16, 0x01 ; 1 - 82e: 10 e0 ldi r17, 0x00 ; 0 - 830: 20 e0 ldi r18, 0x00 ; 0 - 832: 30 e0 ldi r19, 0x00 ; 0 - 834: ae 01 movw r20, r28 - 836: 4f 5f subi r20, 0xFF ; 255 - 838: 5f 4f sbci r21, 0xFF ; 255 - 83a: 63 e0 ldi r22, 0x03 ; 3 - 83c: c7 01 movw r24, r14 - 83e: 77 df rcall .-274 ; 0x72e - 840: 80 e8 ldi r24, 0x80 ; 128 - 842: 89 83 std Y+1, r24 ; 0x01 - 844: 01 e0 ldi r16, 0x01 ; 1 - 846: 10 e0 ldi r17, 0x00 ; 0 - 848: 20 e0 ldi r18, 0x00 ; 0 - 84a: 30 e0 ldi r19, 0x00 ; 0 - 84c: ae 01 movw r20, r28 - 84e: 4f 5f subi r20, 0xFF ; 255 - 850: 5f 4f sbci r21, 0xFF ; 255 - 852: 60 e1 ldi r22, 0x10 ; 16 - 854: c7 01 movw r24, r14 - 856: 6b df rcall .-298 ; 0x72e - 858: 01 e0 ldi r16, 0x01 ; 1 - 85a: 10 e0 ldi r17, 0x00 ; 0 - 85c: 20 e0 ldi r18, 0x00 ; 0 - 85e: 30 e0 ldi r19, 0x00 ; 0 - 860: ae 01 movw r20, r28 - 862: 4f 5f subi r20, 0xFF ; 255 - 864: 5f 4f sbci r21, 0xFF ; 255 - 866: 61 e1 ldi r22, 0x11 ; 17 - 868: c7 01 movw r24, r14 - 86a: 61 df rcall .-318 ; 0x72e - 86c: 01 e0 ldi r16, 0x01 ; 1 - 86e: 10 e0 ldi r17, 0x00 ; 0 - 870: 20 e0 ldi r18, 0x00 ; 0 - 872: 30 e0 ldi r19, 0x00 ; 0 - 874: ae 01 movw r20, r28 - 876: 4f 5f subi r20, 0xFF ; 255 - 878: 5f 4f sbci r21, 0xFF ; 255 - 87a: 62 e1 ldi r22, 0x12 ; 18 - 87c: c7 01 movw r24, r14 - 87e: 57 df rcall .-338 ; 0x72e - 880: 01 e0 ldi r16, 0x01 ; 1 - 882: 10 e0 ldi r17, 0x00 ; 0 - 884: 20 e0 ldi r18, 0x00 ; 0 - 886: 30 e0 ldi r19, 0x00 ; 0 - 888: ae 01 movw r20, r28 - 88a: 4f 5f subi r20, 0xFF ; 255 + 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: 63 e1 ldi r22, 0x13 ; 19 - 890: c7 01 movw r24, r14 - 892: 4d df rcall .-358 ; 0x72e + 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: 10 e0 ldi r17, 0x00 ; 0 - 898: 20 e0 ldi r18, 0x00 ; 0 - 89a: 30 e0 ldi r19, 0x00 ; 0 - 89c: ae 01 movw r20, r28 - 89e: 4f 5f subi r20, 0xFF ; 255 - 8a0: 5f 4f sbci r21, 0xFF ; 255 - 8a2: 64 e1 ldi r22, 0x14 ; 20 - 8a4: c7 01 movw r24, r14 - 8a6: 43 df rcall .-378 ; 0x72e - 8a8: 01 e0 ldi r16, 0x01 ; 1 - 8aa: 10 e0 ldi r17, 0x00 ; 0 - 8ac: 20 e0 ldi r18, 0x00 ; 0 - 8ae: 30 e0 ldi r19, 0x00 ; 0 - 8b0: ae 01 movw r20, r28 - 8b2: 4f 5f subi r20, 0xFF ; 255 - 8b4: 5f 4f sbci r21, 0xFF ; 255 - 8b6: 65 e1 ldi r22, 0x15 ; 21 - 8b8: c7 01 movw r24, r14 - 8ba: 39 df rcall .-398 ; 0x72e - 8bc: 01 e0 ldi r16, 0x01 ; 1 - 8be: 10 e0 ldi r17, 0x00 ; 0 - 8c0: 20 e0 ldi r18, 0x00 ; 0 - 8c2: 30 e0 ldi r19, 0x00 ; 0 - 8c4: ae 01 movw r20, r28 - 8c6: 4f 5f subi r20, 0xFF ; 255 - 8c8: 5f 4f sbci r21, 0xFF ; 255 - 8ca: 66 e1 ldi r22, 0x16 ; 22 - 8cc: c7 01 movw r24, r14 - 8ce: 2f df rcall .-418 ; 0x72e - 8d0: 01 e0 ldi r16, 0x01 ; 1 - 8d2: 10 e0 ldi r17, 0x00 ; 0 - 8d4: 20 e0 ldi r18, 0x00 ; 0 - 8d6: 30 e0 ldi r19, 0x00 ; 0 - 8d8: ae 01 movw r20, r28 - 8da: 4f 5f subi r20, 0xFF ; 255 - 8dc: 5f 4f sbci r21, 0xFF ; 255 - 8de: 67 e1 ldi r22, 0x17 ; 23 - 8e0: c7 01 movw r24, r14 - 8e2: 25 df rcall .-438 ; 0x72e - 8e4: 80 ec ldi r24, 0xC0 ; 192 - 8e6: 89 83 std Y+1, r24 ; 0x01 - 8e8: 01 e0 ldi r16, 0x01 ; 1 - 8ea: 10 e0 ldi r17, 0x00 ; 0 - 8ec: 20 e0 ldi r18, 0x00 ; 0 - 8ee: 30 e0 ldi r19, 0x00 ; 0 - 8f0: ae 01 movw r20, r28 - 8f2: 4f 5f subi r20, 0xFF ; 255 - 8f4: 5f 4f sbci r21, 0xFF ; 255 - 8f6: 67 eb ldi r22, 0xB7 ; 183 - 8f8: c7 01 movw r24, r14 - 8fa: 19 df rcall .-462 ; 0x72e - 8fc: 80 e0 ldi r24, 0x00 ; 0 - 8fe: 90 e0 ldi r25, 0x00 ; 0 - 900: 08 c0 rjmp .+16 ; 0x912 - 902: 8f ef ldi r24, 0xFF ; 255 - 904: 9f ef ldi r25, 0xFF ; 255 - 906: 05 c0 rjmp .+10 ; 0x912 - 908: 8f ef ldi r24, 0xFF ; 255 - 90a: 9f ef ldi r25, 0xFF ; 255 - 90c: 02 c0 rjmp .+4 ; 0x912 - 90e: 8f ef ldi r24, 0xFF ; 255 - 910: 9f ef ldi r25, 0xFF ; 255 - 912: 0f 90 pop r0 - 914: df 91 pop r29 - 916: cf 91 pop r28 - 918: 1f 91 pop r17 - 91a: 0f 91 pop r16 - 91c: ff 90 pop r15 - 91e: ef 90 pop r14 - 920: 08 95 ret + 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 -00000922 : - 922: 0f 93 push r16 - 924: 1f 93 push r17 - 926: cf 93 push r28 - 928: df 93 push r29 - 92a: 82 30 cpi r24, 0x02 ; 2 - 92c: 91 05 cpc r25, r1 - 92e: 10 f4 brcc .+4 ; 0x934 - 930: 82 e0 ldi r24, 0x02 ; 2 - 932: 90 e0 ldi r25, 0x00 ; 0 - 934: e0 91 66 3f lds r30, 0x3F66 ; 0x803f66 <__flp> - 938: f0 91 67 3f lds r31, 0x3F67 ; 0x803f67 <__flp+0x1> - 93c: 20 e0 ldi r18, 0x00 ; 0 - 93e: 30 e0 ldi r19, 0x00 ; 0 - 940: a0 e0 ldi r26, 0x00 ; 0 - 942: b0 e0 ldi r27, 0x00 ; 0 - 944: 30 97 sbiw r30, 0x00 ; 0 - 946: 19 f1 breq .+70 ; 0x98e - 948: 40 81 ld r20, Z - 94a: 51 81 ldd r21, Z+1 ; 0x01 - 94c: 02 81 ldd r16, Z+2 ; 0x02 - 94e: 13 81 ldd r17, Z+3 ; 0x03 - 950: 48 17 cp r20, r24 - 952: 59 07 cpc r21, r25 - 954: c8 f0 brcs .+50 ; 0x988 - 956: 84 17 cp r24, r20 - 958: 95 07 cpc r25, r21 - 95a: 69 f4 brne .+26 ; 0x976 - 95c: 10 97 sbiw r26, 0x00 ; 0 - 95e: 31 f0 breq .+12 ; 0x96c - 960: 12 96 adiw r26, 0x02 ; 2 - 962: 0c 93 st X, r16 - 964: 12 97 sbiw r26, 0x02 ; 2 - 966: 13 96 adiw r26, 0x03 ; 3 - 968: 1c 93 st X, r17 - 96a: 27 c0 rjmp .+78 ; 0x9ba - 96c: 00 93 66 3f sts 0x3F66, r16 ; 0x803f66 <__flp> - 970: 10 93 67 3f sts 0x3F67, r17 ; 0x803f67 <__flp+0x1> - 974: 22 c0 rjmp .+68 ; 0x9ba - 976: 21 15 cp r18, r1 - 978: 31 05 cpc r19, r1 - 97a: 19 f0 breq .+6 ; 0x982 - 97c: 42 17 cp r20, r18 - 97e: 53 07 cpc r21, r19 - 980: 18 f4 brcc .+6 ; 0x988 - 982: 9a 01 movw r18, r20 - 984: bd 01 movw r22, r26 - 986: ef 01 movw r28, r30 - 988: df 01 movw r26, r30 - 98a: f8 01 movw r30, r16 - 98c: db cf rjmp .-74 ; 0x944 - 98e: 21 15 cp r18, r1 - 990: 31 05 cpc r19, r1 - 992: f9 f0 breq .+62 ; 0x9d2 - 994: 28 1b sub r18, r24 - 996: 39 0b sbc r19, r25 - 998: 24 30 cpi r18, 0x04 ; 4 - 99a: 31 05 cpc r19, r1 - 99c: 80 f4 brcc .+32 ; 0x9be - 99e: 8a 81 ldd r24, Y+2 ; 0x02 - 9a0: 9b 81 ldd r25, Y+3 ; 0x03 - 9a2: 61 15 cp r22, r1 - 9a4: 71 05 cpc r23, r1 - 9a6: 21 f0 breq .+8 ; 0x9b0 - 9a8: fb 01 movw r30, r22 - 9aa: 82 83 std Z+2, r24 ; 0x02 - 9ac: 93 83 std Z+3, r25 ; 0x03 - 9ae: 04 c0 rjmp .+8 ; 0x9b8 - 9b0: 80 93 66 3f sts 0x3F66, r24 ; 0x803f66 <__flp> - 9b4: 90 93 67 3f sts 0x3F67, r25 ; 0x803f67 <__flp+0x1> - 9b8: fe 01 movw r30, r28 - 9ba: 32 96 adiw r30, 0x02 ; 2 - 9bc: 44 c0 rjmp .+136 ; 0xa46 - 9be: fe 01 movw r30, r28 - 9c0: e2 0f add r30, r18 - 9c2: f3 1f adc r31, r19 - 9c4: 81 93 st Z+, r24 - 9c6: 91 93 st Z+, r25 - 9c8: 22 50 subi r18, 0x02 ; 2 - 9ca: 31 09 sbc r19, r1 - 9cc: 28 83 st Y, r18 - 9ce: 39 83 std Y+1, r19 ; 0x01 - 9d0: 3a c0 rjmp .+116 ; 0xa46 - 9d2: 20 91 64 3f lds r18, 0x3F64 ; 0x803f64 <__brkval> - 9d6: 30 91 65 3f lds r19, 0x3F65 ; 0x803f65 <__brkval+0x1> - 9da: 23 2b or r18, r19 - 9dc: 41 f4 brne .+16 ; 0x9ee - 9de: 20 91 02 3f lds r18, 0x3F02 ; 0x803f02 <__malloc_heap_start> - 9e2: 30 91 03 3f lds r19, 0x3F03 ; 0x803f03 <__malloc_heap_start+0x1> - 9e6: 20 93 64 3f sts 0x3F64, r18 ; 0x803f64 <__brkval> - 9ea: 30 93 65 3f sts 0x3F65, r19 ; 0x803f65 <__brkval+0x1> - 9ee: 20 91 00 3f lds r18, 0x3F00 ; 0x803f00 <__DATA_REGION_ORIGIN__> - 9f2: 30 91 01 3f lds r19, 0x3F01 ; 0x803f01 <__DATA_REGION_ORIGIN__+0x1> - 9f6: 21 15 cp r18, r1 - 9f8: 31 05 cpc r19, r1 - 9fa: 41 f4 brne .+16 ; 0xa0c - 9fc: 2d b7 in r18, 0x3d ; 61 - 9fe: 3e b7 in r19, 0x3e ; 62 - a00: 40 91 04 3f lds r20, 0x3F04 ; 0x803f04 <__malloc_margin> - a04: 50 91 05 3f lds r21, 0x3F05 ; 0x803f05 <__malloc_margin+0x1> - a08: 24 1b sub r18, r20 - a0a: 35 0b sbc r19, r21 - a0c: e0 91 64 3f lds r30, 0x3F64 ; 0x803f64 <__brkval> - a10: f0 91 65 3f lds r31, 0x3F65 ; 0x803f65 <__brkval+0x1> - a14: e2 17 cp r30, r18 - a16: f3 07 cpc r31, r19 - a18: a0 f4 brcc .+40 ; 0xa42 - a1a: 2e 1b sub r18, r30 - a1c: 3f 0b sbc r19, r31 - a1e: 28 17 cp r18, r24 - a20: 39 07 cpc r19, r25 - a22: 78 f0 brcs .+30 ; 0xa42 - a24: ac 01 movw r20, r24 - a26: 4e 5f subi r20, 0xFE ; 254 - a28: 5f 4f sbci r21, 0xFF ; 255 - a2a: 24 17 cp r18, r20 - a2c: 35 07 cpc r19, r21 - a2e: 48 f0 brcs .+18 ; 0xa42 - a30: 4e 0f add r20, r30 - a32: 5f 1f adc r21, r31 - a34: 40 93 64 3f sts 0x3F64, r20 ; 0x803f64 <__brkval> - a38: 50 93 65 3f sts 0x3F65, r21 ; 0x803f65 <__brkval+0x1> - a3c: 81 93 st Z+, r24 - a3e: 91 93 st Z+, r25 - a40: 02 c0 rjmp .+4 ; 0xa46 - a42: e0 e0 ldi r30, 0x00 ; 0 - a44: f0 e0 ldi r31, 0x00 ; 0 - a46: cf 01 movw r24, r30 - a48: df 91 pop r29 - a4a: cf 91 pop r28 - a4c: 1f 91 pop r17 - a4e: 0f 91 pop r16 - a50: 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 -00000a52 : - a52: cf 93 push r28 - a54: df 93 push r29 - a56: 00 97 sbiw r24, 0x00 ; 0 - a58: 09 f4 brne .+2 ; 0xa5c - a5a: 81 c0 rjmp .+258 ; 0xb5e - a5c: fc 01 movw r30, r24 - a5e: 32 97 sbiw r30, 0x02 ; 2 - a60: 12 82 std Z+2, r1 ; 0x02 - a62: 13 82 std Z+3, r1 ; 0x03 - a64: a0 91 66 3f lds r26, 0x3F66 ; 0x803f66 <__flp> - a68: b0 91 67 3f lds r27, 0x3F67 ; 0x803f67 <__flp+0x1> - a6c: 10 97 sbiw r26, 0x00 ; 0 - a6e: 81 f4 brne .+32 ; 0xa90 - a70: 20 81 ld r18, Z - a72: 31 81 ldd r19, Z+1 ; 0x01 - a74: 82 0f add r24, r18 - a76: 93 1f adc r25, r19 - a78: 20 91 64 3f lds r18, 0x3F64 ; 0x803f64 <__brkval> - a7c: 30 91 65 3f lds r19, 0x3F65 ; 0x803f65 <__brkval+0x1> - a80: 28 17 cp r18, r24 - a82: 39 07 cpc r19, r25 - a84: 51 f5 brne .+84 ; 0xada - a86: e0 93 64 3f sts 0x3F64, r30 ; 0x803f64 <__brkval> - a8a: f0 93 65 3f sts 0x3F65, r31 ; 0x803f65 <__brkval+0x1> - a8e: 67 c0 rjmp .+206 ; 0xb5e - a90: ed 01 movw r28, r26 - a92: 20 e0 ldi r18, 0x00 ; 0 - a94: 30 e0 ldi r19, 0x00 ; 0 - a96: ce 17 cp r28, r30 - a98: df 07 cpc r29, r31 - a9a: 40 f4 brcc .+16 ; 0xaac - a9c: 4a 81 ldd r20, Y+2 ; 0x02 - a9e: 5b 81 ldd r21, Y+3 ; 0x03 - aa0: 9e 01 movw r18, r28 - aa2: 41 15 cp r20, r1 - aa4: 51 05 cpc r21, r1 - aa6: f1 f0 breq .+60 ; 0xae4 - aa8: ea 01 movw r28, r20 - aaa: f5 cf rjmp .-22 ; 0xa96 - aac: c2 83 std Z+2, r28 ; 0x02 - aae: d3 83 std Z+3, r29 ; 0x03 - ab0: 40 81 ld r20, Z - ab2: 51 81 ldd r21, Z+1 ; 0x01 - ab4: 84 0f add r24, r20 - ab6: 95 1f adc r25, r21 - ab8: c8 17 cp r28, r24 - aba: d9 07 cpc r29, r25 - abc: 59 f4 brne .+22 ; 0xad4 - abe: 88 81 ld r24, Y - ac0: 99 81 ldd r25, Y+1 ; 0x01 - ac2: 84 0f add r24, r20 - ac4: 95 1f adc r25, r21 - ac6: 02 96 adiw r24, 0x02 ; 2 - ac8: 80 83 st Z, r24 - aca: 91 83 std Z+1, r25 ; 0x01 - acc: 8a 81 ldd r24, Y+2 ; 0x02 - ace: 9b 81 ldd r25, Y+3 ; 0x03 - ad0: 82 83 std Z+2, r24 ; 0x02 - ad2: 93 83 std Z+3, r25 ; 0x03 - ad4: 21 15 cp r18, r1 - ad6: 31 05 cpc r19, r1 - ad8: 29 f4 brne .+10 ; 0xae4 - ada: e0 93 66 3f sts 0x3F66, r30 ; 0x803f66 <__flp> - ade: f0 93 67 3f sts 0x3F67, r31 ; 0x803f67 <__flp+0x1> - ae2: 3d c0 rjmp .+122 ; 0xb5e - ae4: e9 01 movw r28, r18 - ae6: ea 83 std Y+2, r30 ; 0x02 - ae8: fb 83 std Y+3, r31 ; 0x03 - aea: 49 91 ld r20, Y+ - aec: 59 91 ld r21, Y+ - aee: c4 0f add r28, r20 - af0: d5 1f adc r29, r21 - af2: ec 17 cp r30, r28 - af4: fd 07 cpc r31, r29 - af6: 61 f4 brne .+24 ; 0xb10 - af8: 80 81 ld r24, Z - afa: 91 81 ldd r25, Z+1 ; 0x01 - afc: 84 0f add r24, r20 - afe: 95 1f adc r25, r21 - b00: 02 96 adiw r24, 0x02 ; 2 - b02: e9 01 movw r28, r18 - b04: 88 83 st Y, r24 - b06: 99 83 std Y+1, r25 ; 0x01 - b08: 82 81 ldd r24, Z+2 ; 0x02 - b0a: 93 81 ldd r25, Z+3 ; 0x03 - b0c: 8a 83 std Y+2, r24 ; 0x02 - b0e: 9b 83 std Y+3, r25 ; 0x03 - b10: e0 e0 ldi r30, 0x00 ; 0 - b12: f0 e0 ldi r31, 0x00 ; 0 - b14: 12 96 adiw r26, 0x02 ; 2 - b16: 8d 91 ld r24, X+ - b18: 9c 91 ld r25, X - b1a: 13 97 sbiw r26, 0x03 ; 3 - b1c: 00 97 sbiw r24, 0x00 ; 0 - b1e: 19 f0 breq .+6 ; 0xb26 - b20: fd 01 movw r30, r26 - b22: dc 01 movw r26, r24 - b24: f7 cf rjmp .-18 ; 0xb14 - b26: 8d 91 ld r24, X+ - b28: 9c 91 ld r25, X - b2a: 11 97 sbiw r26, 0x01 ; 1 - b2c: 9d 01 movw r18, r26 - b2e: 2e 5f subi r18, 0xFE ; 254 - b30: 3f 4f sbci r19, 0xFF ; 255 - b32: 82 0f add r24, r18 - b34: 93 1f adc r25, r19 - b36: 20 91 64 3f lds r18, 0x3F64 ; 0x803f64 <__brkval> - b3a: 30 91 65 3f lds r19, 0x3F65 ; 0x803f65 <__brkval+0x1> - b3e: 28 17 cp r18, r24 - b40: 39 07 cpc r19, r25 - b42: 69 f4 brne .+26 ; 0xb5e - b44: 30 97 sbiw r30, 0x00 ; 0 - b46: 29 f4 brne .+10 ; 0xb52 - b48: 10 92 66 3f sts 0x3F66, r1 ; 0x803f66 <__flp> - b4c: 10 92 67 3f sts 0x3F67, r1 ; 0x803f67 <__flp+0x1> - b50: 02 c0 rjmp .+4 ; 0xb56 - b52: 12 82 std Z+2, r1 ; 0x02 - b54: 13 82 std Z+3, r1 ; 0x03 - b56: a0 93 64 3f sts 0x3F64, r26 ; 0x803f64 <__brkval> - b5a: b0 93 65 3f sts 0x3F65, r27 ; 0x803f65 <__brkval+0x1> - b5e: df 91 pop r29 - b60: cf 91 pop r28 - b62: 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 -00000b64 : - b64: fb 01 movw r30, r22 - b66: dc 01 movw r26, r24 - b68: 02 c0 rjmp .+4 ; 0xb6e - b6a: 01 90 ld r0, Z+ - b6c: 0d 92 st X+, r0 - b6e: 41 50 subi r20, 0x01 ; 1 - b70: 50 40 sbci r21, 0x00 ; 0 - b72: d8 f7 brcc .-10 ; 0xb6a - b74: 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 + 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 -00000b76 : - b76: 03 d0 rcall .+6 ; 0xb7e - b78: 80 81 ld r24, Z - b7a: 99 27 eor r25, r25 - b7c: 08 95 ret +00000b42 : + b42: ef 92 push r14 + b44: ff 92 push r15 + b46: 0f 93 push r16 + b48: 1f 93 push r17 + 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 -00000b7e : - b7e: fc 01 movw r30, r24 - b80: e0 50 subi r30, 0x00 ; 0 - b82: fc 4e sbci r31, 0xEC ; 236 - b84: 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 -00000b86 : - b86: 26 2f mov r18, r22 +00000c38 : -00000b88 : - b88: af 93 push r26 - b8a: bf 93 push r27 - b8c: e0 e0 ldi r30, 0x00 ; 0 - b8e: f0 e1 ldi r31, 0x10 ; 16 - b90: 32 81 ldd r19, Z+2 ; 0x02 - b92: 31 fd sbrc r19, 1 - b94: fd cf rjmp .-6 ; 0xb90 - b96: dc 01 movw r26, r24 - b98: a0 50 subi r26, 0x00 ; 0 - b9a: bc 4e sbci r27, 0xEC ; 236 - b9c: 2c 93 st X, r18 - b9e: 2d e9 ldi r18, 0x9D ; 157 - ba0: 24 bf out 0x34, r18 ; 52 - ba2: 23 e0 ldi r18, 0x03 ; 3 - ba4: 20 83 st Z, r18 - ba6: 01 96 adiw r24, 0x01 ; 1 - ba8: bf 91 pop r27 - baa: af 91 pop r26 - bac: 08 95 ret +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 -00000bae <_exit>: - bae: f8 94 cli + if(inst == NULL)return -1; + c52: 00 97 sbiw r24, 0x00 ; 0 + c54: 09 f4 brne .+2 ; 0xc58 + c56: 83 c0 rjmp .+262 ; 0xd5e + 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 + 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 -00000bb0 <__stop_program>: - bb0: ff cf rjmp .-2 ; 0xbb0 <__stop_program> + 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 + 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 + + 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 + + /* 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 + 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 + + /* Power down all output drivers */ + temp = 0x80; + caa: 80 e8 ldi r24, 0x80 ; 128 + cac: 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + + temp = SI5351_CRYSTAL_LOAD_10PF; + d1e: 80 ec ldi r24, 0xC0 ; 192 + d20: 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 + + temp = 0b01000000; + d30: 80 e4 ldi r24, 0x40 ; 64 + d32: 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 + 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 + 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 + +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 + 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 + 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 + +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> 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 1d945ee..fc2a234 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map @@ -42,8 +42,6 @@ c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/.. si5351_driver/si5351_driver.o (__udivmodsi4) 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) C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o (exit) -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(_copy_data.o) - main.o (__do_copy_data) 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(_clear_bss.o) avr_uart_driver/avr_uart.o (__do_clear_bss) 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) @@ -54,6 +52,8 @@ C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/ avr_eeprom_driver/avr_eeprom_driver.o (eeprom_read_byte) 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) avr_eeprom_driver/avr_eeprom_driver.o (eeprom_write_byte) +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(_copy_data.o) + 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) (__do_copy_data) Allocating common symbols Common symbol size file @@ -73,16 +73,22 @@ 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 0x34 avr_gpio_driver/avr_gpio.o + 0x00000000 0x28 avr_gpio_driver/avr_gpio.o .text.gpio_init - 0x00000000 0x34 avr_gpio_driver/avr_gpio.o + 0x00000000 0x28 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 0x48 avr_i2c_driver/avr_i2c.o + 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 @@ -101,30 +107,17 @@ Discarded input sections .text 0x00000000 0x0 main.o .data 0x00000000 0x0 main.o .bss 0x00000000 0x0 main.o - .bss.data 0x00000000 0x19 main.o - .data.data_set - 0x00000000 0x19 main.o .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.readRegister - 0x00000000 0x80 si5351_driver/si5351_driver.o - .text.cm_setOutputMultiSynthRaw - 0x00000000 0xcc si5351_driver/si5351_driver.o - .text.cm_setOutputMultiSynth - 0x00000000 0x116 si5351_driver/si5351_driver.o - .text.cm_setCLKControl - 0x00000000 0x5c si5351_driver/si5351_driver.o - .text.cm_setInputSource - 0x00000000 0x3e si5351_driver/si5351_driver.o - .text.cm_resetPLLs - 0x00000000 0x48 si5351_driver/si5351_driver.o - .text.cm_setPllParamRaw - 0x00000000 0xbc si5351_driver/si5351_driver.o .text.cm_setPLLParameters - 0x00000000 0x2ce si5351_driver/si5351_driver.o + 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 .text.cm_si5351_getRevisionNumber - 0x00000000 0x2a si5351_driver/si5351_driver.o + 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) .data 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) .bss 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) @@ -252,22 +245,6 @@ Discarded input sections 0x00000000 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) .text.libgcc.fixed 0x00000000 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) - .text 0x00000000 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(_copy_data.o) - .data 0x00000000 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(_copy_data.o) - .bss 0x00000000 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(_copy_data.o) - .text.libgcc.mul - 0x00000000 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(_copy_data.o) - .text.libgcc.div - 0x00000000 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(_copy_data.o) - .text.libgcc 0x00000000 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(_copy_data.o) - .text.libgcc.prologue - 0x00000000 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(_copy_data.o) - .text.libgcc.builtins - 0x00000000 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(_copy_data.o) - .text.libgcc.fmul - 0x00000000 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(_copy_data.o) - .text.libgcc.fixed - 0x00000000 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(_copy_data.o) .text 0x00000000 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(_clear_bss.o) .data 0x00000000 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(_clear_bss.o) .bss 0x00000000 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(_clear_bss.o) @@ -295,6 +272,22 @@ Discarded input sections .text 0x00000000 0x0 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) .data 0x00000000 0x0 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) .bss 0x00000000 0x0 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) + .text 0x00000000 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(_copy_data.o) + .data 0x00000000 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(_copy_data.o) + .bss 0x00000000 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(_copy_data.o) + .text.libgcc.mul + 0x00000000 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(_copy_data.o) + .text.libgcc.div + 0x00000000 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(_copy_data.o) + .text.libgcc 0x00000000 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(_copy_data.o) + .text.libgcc.prologue + 0x00000000 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(_copy_data.o) + .text.libgcc.builtins + 0x00000000 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(_copy_data.o) + .text.libgcc.fmul + 0x00000000 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(_copy_data.o) + .text.libgcc.fixed + 0x00000000 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(_copy_data.o) Memory Configuration @@ -431,7 +424,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x00000000 0xbb2 +.text 0x00000000 0xff4 *(.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 @@ -472,10 +465,10 @@ END GROUP *(.init3) *(.init3) *(.init4) - .init4 0x00000040 0x16 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(_copy_data.o) - 0x00000040 __do_copy_data - .init4 0x00000056 0x10 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(_clear_bss.o) - 0x00000056 __do_clear_bss + .init4 0x00000040 0x10 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(_clear_bss.o) + 0x00000040 __do_clear_bss + .init4 0x00000050 0x16 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(_copy_data.o) + 0x00000050 __do_copy_data *(.init4) *(.init5) *(.init5) @@ -518,100 +511,102 @@ END GROUP 0x0000006c . = ALIGN (0x2) *(.text.*) .text.cm_EEPROM_write - 0x0000006c 0x3c avr_eeprom_driver/avr_eeprom_driver.o + 0x0000006c 0x42 avr_eeprom_driver/avr_eeprom_driver.o 0x0000006c cm_EEPROM_write .text.cm_EEPROM_read - 0x000000a8 0x46 avr_eeprom_driver/avr_eeprom_driver.o - 0x000000a8 cm_EEPROM_read + 0x000000ae 0x42 avr_eeprom_driver/avr_eeprom_driver.o + 0x000000ae cm_EEPROM_read .text.gpio_get_level - 0x000000ee 0x24 avr_gpio_driver/avr_gpio.o - 0x000000ee gpio_get_level - .text.i2c_reset - 0x00000112 0x10 avr_i2c_driver/avr_i2c.o - .text.i2c_write_devAddr - 0x00000122 0x22 avr_i2c_driver/avr_i2c.o - 0x00000122 i2c_write_devAddr - .text.i2c_write - 0x00000144 0x92 avr_i2c_driver/avr_i2c.o - 0x00000144 i2c_write + 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 .text.i2c_read - 0x000001d6 0x8c avr_i2c_driver/avr_i2c.o - 0x000001d6 i2c_read - .text.i2c_IsDeviceReady - 0x00000262 0x2c avr_i2c_driver/avr_i2c.o - 0x00000262 i2c_IsDeviceReady + 0x0000018c 0x80 avr_i2c_driver/avr_i2c.o + 0x0000018c i2c_read .text.cm_i2c_init - 0x0000028e 0x34 avr_i2c_driver/avr_i2c.o - 0x0000028e cm_i2c_init + 0x0000020c 0x34 avr_i2c_driver/avr_i2c.o + 0x0000020c cm_i2c_init .text.cm_i2c_addDev - 0x000002c2 0x3c avr_i2c_driver/avr_i2c.o - 0x000002c2 cm_i2c_addDev + 0x00000240 0x3e avr_i2c_driver/avr_i2c.o + 0x00000240 cm_i2c_addDev .text.cm_i2c_transfer - 0x000002fe 0x34 avr_i2c_driver/avr_i2c.o - 0x000002fe cm_i2c_transfer + 0x0000027e 0x4e avr_i2c_driver/avr_i2c.o + 0x0000027e cm_i2c_transfer .text.__vector_22 - 0x00000332 0x56 avr_uart_driver/avr_uart.o - 0x00000332 __vector_22 + 0x000002cc 0x56 avr_uart_driver/avr_uart.o + 0x000002cc __vector_22 .text.cm_uart_init - 0x00000388 0x60 avr_uart_driver/avr_uart.o - 0x00000388 cm_uart_init + 0x00000322 0x66 avr_uart_driver/avr_uart.o + 0x00000322 cm_uart_init .text.cm_msgSync_Byte_DecodeSC - 0x000003e8 0x9e cm_msg/cm_msg.o - 0x000003e8 cm_msgSync_Byte_DecodeSC + 0x00000388 0x64 cm_msg/cm_msg.o + 0x00000388 cm_msgSync_Byte_DecodeSC .text.cm_msg_DecodeMsg_Byte - 0x00000486 0xa8 cm_msg/cm_msg.o - 0x00000486 cm_msg_DecodeMsg_Byte + 0x000003ec 0xb4 cm_msg/cm_msg.o + 0x000003ec cm_msg_DecodeMsg_Byte .text.cm_MsgCompleteEvt_Register - 0x0000052e 0x1c cm_msg/cm_msg.o - 0x0000052e cm_MsgCompleteEvt_Register - .text.isStructValid - 0x0000054a 0x1a cqm6xx_app.o - .text.cqm6xx_app_loadPLLParam - 0x00000564 0x32 cqm6xx_app.o + 0x000004a0 0x1c cm_msg/cm_msg.o + 0x000004a0 cm_MsgCompleteEvt_Register + .text.cqm_setPLLParam + 0x000004bc 0x8c cqm6xx_app.o .text.cqm6xx_app_updateOsc - 0x00000596 0x76 cqm6xx_app.o + 0x00000548 0x82 cqm6xx_app.o .text.cqm6xx_app_statemachine - 0x0000060c 0x5a cqm6xx_app.o - 0x0000060c cqm6xx_app_statemachine + 0x000005ca 0xf0 cqm6xx_app.o + 0x000005ca cqm6xx_app_statemachine .text.programPLL_Parameters - 0x00000666 0x2e cqm6xx_app.o - 0x00000666 programPLL_Parameters + 0x000006ba 0x3c cqm6xx_app.o + 0x000006ba programPLL_Parameters .text.uart_rx_event - 0x00000694 0x18 cqm6xx_app.o - 0x00000694 uart_rx_event + 0x000006f6 0x18 cqm6xx_app.o + 0x000006f6 uart_rx_event .text.cqm6xx_app_init - 0x000006ac 0x2c cqm6xx_app.o - 0x000006ac cqm6xx_app_init - .text.main 0x000006d8 0x56 main.o - 0x000006d8 main - .text.writeRegister - 0x0000072e 0x72 si5351_driver/si5351_driver.o + 0x0000070e 0xdc cqm6xx_app.o + 0x0000070e 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 + .text.cm_setOutputMultiSynthRaw + 0x000009c0 0x128 si5351_driver/si5351_driver.o + 0x000009c0 cm_setOutputMultiSynthRaw .text.cm_setOutputEnable - 0x000007a0 0x40 si5351_driver/si5351_driver.o - 0x000007a0 cm_setOutputEnable + 0x00000ae8 0x5a si5351_driver/si5351_driver.o + 0x00000ae8 cm_setOutputEnable + .text.cm_setCLKControl + 0x00000b42 0xac si5351_driver/si5351_driver.o + 0x00000b42 cm_setCLKControl + .text.cm_setInputSource + 0x00000bee 0x4a si5351_driver/si5351_driver.o + 0x00000bee cm_setInputSource .text.cm_si5351_init - 0x000007e0 0x142 si5351_driver/si5351_driver.o - 0x000007e0 cm_si5351_init + 0x00000c38 0x12c si5351_driver/si5351_driver.o + 0x00000c38 cm_si5351_init .text.avr-libc - 0x00000922 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) - 0x00000922 malloc - 0x00000a52 free + 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 .text.avr-libc - 0x00000b64 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) - 0x00000b64 memcpy + 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 .text.avr-libc - 0x00000b76 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) - 0x00000b76 eeprom_read_byte - 0x00000b7e eeprom_mapen + 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 .text.avr-libc - 0x00000b86 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) - 0x00000b86 eeprom_write_byte - 0x00000b88 eeprom_write_r18 - 0x00000bae . = ALIGN (0x2) + 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) *(.fini9) - .fini9 0x00000bae 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) - 0x00000bae _exit - 0x00000bae exit + .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) *(.fini8) *(.fini8) @@ -630,18 +625,16 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000bae 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 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) - 0x00000bb2 _etext = . + 0x00000ff4 _etext = . -.rodata 0x00008bb2 0x5 load address 0x00000bb2 +.rodata *(.rodata) *(.rodata*) - .rodata.startCode - 0x00008bb2 0x5 cm_msg/cm_msg.o *(.gnu.linkonce.r*) -.data 0x00803f00 0x6 load address 0x00000bb7 +.data 0x00803f00 0x6 load address 0x00000ff4 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) @@ -654,7 +647,7 @@ END GROUP 0x00803f06 _edata = . 0x00803f06 PROVIDE (__data_end, .) -.bss 0x00803f06 0x62 +.bss 0x00803f06 0x61 0x00803f06 PROVIDE (__bss_start, .) *(.bss) *(.bss*) @@ -674,24 +667,22 @@ END GROUP .bss.s_msg_cmplete_evt_fpt 0x00803f44 0x2 cm_msg/cm_msg.o 0x00803f44 s_msg_cmplete_evt_fpt - .bss.size 0x00803f46 0x1 cqm6xx_app.o - 0x00803f46 size *(COMMON) - COMMON 0x00803f47 0x1d main.o - 0x00803f47 storno_xtal_app - COMMON 0x00803f64 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) - 0x00803f64 __brkval - 0x00803f66 __flp - 0x00803f68 PROVIDE (__bss_end, .) - 0x00000bb7 __data_load_start = LOADADDR (.data) - 0x00000bbd __data_load_end = (__data_load_start + SIZEOF (.data)) + COMMON 0x00803f46 0x1d 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)) -.noinit 0x00803f68 0x0 +.noinit 0x00803f67 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00803f68 _end = . - 0x00803f68 PROVIDE (__heap_start, .) + 0x00803f67 _end = . + 0x00803f67 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -763,7 +754,7 @@ END GROUP .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x258 +.debug_aranges 0x00000000 0x248 *(.debug_aranges) .debug_aranges 0x00000000 0x28 avr_eeprom_driver/avr_eeprom_driver.o @@ -776,102 +767,102 @@ END GROUP .debug_aranges 0x00000100 0x30 cm_msg/cm_msg.o .debug_aranges - 0x00000130 0x50 cqm6xx_app.o + 0x00000130 0x48 cqm6xx_app.o .debug_aranges - 0x00000180 0x20 main.o + 0x00000178 0x20 main.o .debug_aranges - 0x000001a0 0x78 si5351_driver/si5351_driver.o + 0x00000198 0x70 si5351_driver/si5351_driver.o .debug_aranges - 0x00000218 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) + 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) .debug_aranges - 0x00000238 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) + 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) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x5174 +.debug_info 0x00000000 0x5ba3 *(.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 0x16b avr_eeprom_driver/avr_eeprom_driver.o - .debug_info 0x00001341 0x320 avr_gpio_driver/avr_gpio.o - .debug_info 0x00001661 0x6da avr_i2c_driver/avr_i2c.o - .debug_info 0x00001d3b 0x4fc avr_uart_driver/avr_uart.o - .debug_info 0x00002237 0x2b4 cm_msg/cm_msg.o - .debug_info 0x000024eb 0x767 cqm6xx_app.o - .debug_info 0x00002c52 0xd12 main.o - .debug_info 0x00003964 0x16b6 si5351_driver/si5351_driver.o - .debug_info 0x0000501a 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 0x000050c7 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 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_abbrev 0x00000000 0x1d9f +.debug_abbrev 0x00000000 0x1f08 *(.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 0xa0 avr_eeprom_driver/avr_eeprom_driver.o - .debug_abbrev 0x0000117e 0x107 avr_gpio_driver/avr_gpio.o - .debug_abbrev 0x00001285 0x1bb avr_i2c_driver/avr_i2c.o - .debug_abbrev 0x00001440 0x1e0 avr_uart_driver/avr_uart.o - .debug_abbrev 0x00001620 0x14b cm_msg/cm_msg.o - .debug_abbrev 0x0000176b 0x1e1 cqm6xx_app.o - .debug_abbrev 0x0000194c 0x1ec main.o - .debug_abbrev 0x00001b38 0x23f si5351_driver/si5351_driver.o - .debug_abbrev 0x00001d77 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 0x00001d8b 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 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_line 0x00000000 0x184c +.debug_line 0x00000000 0x19ae *(.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 0x186 avr_eeprom_driver/avr_eeprom_driver.o - .debug_line 0x000002bc 0x196 avr_gpio_driver/avr_gpio.o - .debug_line 0x00000452 0x3ff avr_i2c_driver/avr_i2c.o - .debug_line 0x00000851 0x21b avr_uart_driver/avr_uart.o - .debug_line 0x00000a6c 0x21a cm_msg/cm_msg.o - .debug_line 0x00000c86 0x39e cqm6xx_app.o - .debug_line 0x00001024 0x18f main.o - .debug_line 0x000011b3 0x559 si5351_driver/si5351_driver.o - .debug_line 0x0000170c 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 0x00001788 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 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 0x47e cqm6xx_app.o + .debug_line 0x000010f2 0x18f main.o + .debug_line 0x00001281 0x5ed si5351_driver/si5351_driver.o + .debug_line 0x0000186e 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 0x000018ea 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 0x64c +.debug_frame 0x00000000 0x61c *(.debug_frame) - .debug_frame 0x00000000 0x7c avr_eeprom_driver/avr_eeprom_driver.o - .debug_frame 0x0000007c 0x44 avr_gpio_driver/avr_gpio.o - .debug_frame 0x000000c0 0x118 avr_i2c_driver/avr_i2c.o - .debug_frame 0x000001d8 0xbc avr_uart_driver/avr_uart.o - .debug_frame 0x00000294 0x44 cm_msg/cm_msg.o - .debug_frame 0x000002d8 0xb4 cqm6xx_app.o - .debug_frame 0x0000038c 0x34 main.o - .debug_frame 0x000003c0 0x28c si5351_driver/si5351_driver.o + .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_str 0x00000000 0x22b5 +.debug_str 0x00000000 0x22c2 *(.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 0x1d5 avr_eeprom_driver/avr_eeprom_driver.o 0x21b (size before relaxing) .debug_str 0x0000097e 0x16e avr_gpio_driver/avr_gpio.o 0x315 (size before relaxing) - .debug_str 0x00000aec 0x310 avr_i2c_driver/avr_i2c.o - 0x506 (size before relaxing) - .debug_str 0x00000dfc 0x283 avr_uart_driver/avr_uart.o + .debug_str 0x00000aec 0x2ab avr_i2c_driver/avr_i2c.o + 0x502 (size before relaxing) + .debug_str 0x00000d97 0x283 avr_uart_driver/avr_uart.o 0x4f4 (size before relaxing) - .debug_str 0x0000107f 0x23a cm_msg/cm_msg.o + .debug_str 0x0000101a 0x23a cm_msg/cm_msg.o 0x3fa (size before relaxing) - .debug_str 0x000012b9 0x2b7 cqm6xx_app.o - 0x514 (size before relaxing) - .debug_str 0x00001570 0x908 main.o - 0xc62 (size before relaxing) - .debug_str 0x00001e78 0x43d si5351_driver/si5351_driver.o - 0xfbf (size before relaxing) + .debug_str 0x00001254 0x3da cqm6xx_app.o + 0x639 (size before relaxing) + .debug_str 0x0000162e 0x8ff main.o + 0xc54 (size before relaxing) + .debug_str 0x00001f2d 0x395 si5351_driver/si5351_driver.o + 0xff5 (size before relaxing) -.debug_loc 0x00000000 0x223e +.debug_loc 0x00000000 0x2855 *(.debug_loc) - .debug_loc 0x00000000 0x24e avr_eeprom_driver/avr_eeprom_driver.o - .debug_loc 0x0000024e 0xae avr_gpio_driver/avr_gpio.o - .debug_loc 0x000002fc 0x73d avr_i2c_driver/avr_i2c.o - .debug_loc 0x00000a39 0x13b avr_uart_driver/avr_uart.o - .debug_loc 0x00000b74 0x179 cm_msg/cm_msg.o - .debug_loc 0x00000ced 0x446 cqm6xx_app.o - .debug_loc 0x00001133 0x48 main.o - .debug_loc 0x0000117b 0x10c3 si5351_driver/si5351_driver.o + .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_macinfo *(.debug_macinfo) @@ -891,16 +882,16 @@ END GROUP .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x198 +.debug_ranges 0x00000000 0x230 *(.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 0x58 avr_i2c_driver/avr_i2c.o - .debug_ranges 0x00000090 0x30 avr_uart_driver/avr_uart.o - .debug_ranges 0x000000c0 0x20 cm_msg/cm_msg.o - .debug_ranges 0x000000e0 0x40 cqm6xx_app.o - .debug_ranges 0x00000120 0x10 main.o - .debug_ranges 0x00000130 0x68 si5351_driver/si5351_driver.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_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 75ddb78..6e082e5 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec @@ -1,192 +1,259 @@ S022000073746F726E6F5F6371703678785F6469676974616C5F7874616C2E737265633F S113000019C033C032C031C030C02FC02EC02DC083 S11300102CC02BC02AC029C028C027C026C025C098 -S113002024C023C022C021C020C01FC082C11DC063 +S113002024C023C022C021C020C01FC04FC11DC096 S11300301CC01BC011241FBECFEFCDBFDFE3DEBF4A -S11300401FE3A0E0BFE3E7EBFBE002C005900D92E5 -S1130050A630B107D9F72FE3A6E0BFE301C01D9294 -S1130060A836B207E1F738D3A2C5CACFEF92FF9200 -S11300700F931F93CF93DF937C018B01D42FC0E0A8 -S11300800AC08C2F90E0F801E80FF91F60818E0DF3 -S11300909F1D79D5CF5FCD17A0F3DF91CF911F912D -S11300A00F91FF90EF900895CF92DF92EF92FF921D -S11300B00F931F93CF93DF936C017B01D42FC0E088 -S11300C00BC08C2F90E08701080F191F8C0D9D1D0C -S11300D052D5F8018083CF5FCD1798F3DF91CF918C -S11300E01F910F91FF90EF90DF90CF9008958111B1 -S11300F00DC02091080430E002C0359527956A951B -S1130100E2F781E020FF80E090E0089580E090E055 -S11301100895E0E1F8E084818860848381E0858348 -S113012008958093170880911508807CE1F39091DD -S11301301508892F807194FF04C083E0809314080C -S113014081E00895CF92DF92EF92FF92CF93DF93F5 -S1130150EB0169017A01232B242B252B81F1E1DFAB -S1130160811130C09E012F5F3F4F88818093180812 -S11301708091150886FFFCCF8091150884FF06C086 -S113018083E08093140881E090E01EC080911508FC -S11301908C7021F0BEDF81E090E016C080911508DC -S11301A084FD07C081E0C81AD108E108F108E9011B -S11301B0C9F683E08093140880E090E005C08FEFD7 -S11301C09FEF02C08FEF9FEFDF91CF91FF90EF90F1 -S11301D0DF90CF900895CF92DF92EF92FF92CF936A -S11301E0DF93EB0169017A01232B242B252B69F181 -S11301F0816097DF8823C9F02BC080911508807C2B -S1130200E1F3CE0101962091180828834115510588 -S11302106105710521F424E02093140803C022E051 -S1130220209314086A017B01EC01B701A601415037 -S1130230510961097109CD28CE28CF28F1F683E050 -S11302408093140880E090E005C081E090E002C053 -S11302508FEF9FEFDF91CF91FF90EF90DF90CF90E2 -S11302600895809317088091150886FFFCCF80912C -S1130270150884FF06C083E08093140881E090E0B1 -S1130280089583E08093140880E090E00895E0E00E -S1130290F4E080818B7F80838081877F8083A0E1ED -S11302A0B8E08BE016968C93169781E013968C93A6 -S11302B0139715968C9388E0828B838B80E090E073 -S11302C00895EF92FF920F931F93CF938C017B01BC -S11302D0C42F842F880FC5DF009749F4F801E0820A -S11302E0F1824C2F50E0440F551F428302C08EEF21 -S11302F09FEFCF911F910F91FF90EF9008950F936F -S1130300009781F0FC01002319F0013031F00DC099 -S1130310828161DF80E090E00AC0828113DF80E0A7 -S113032090E005C08FEF9FEF02C080E090E00F9156 -S113033008951F920F920FB60F9211242F933F939B -S11303404F935F936F937F938F939F93AF93BF93D9 -S1130350EF93FF93E091063FF091073F309719F038 -S1130360809100080995FF91EF91BF91AF919F9102 -S11303708F917F916F915F914F913F912F910F904A -S11303800FBE0F901F901895CF93DF931F92CDB798 -S1130390DEB7AC01F894E0E0F8E02CE635E0208725 -S11303A0318793E0978390EC96836115710511F47E -S11303B0452B39F080E8809305086093063F7093DD -S11303C0073F80910408882324F4809100088983DE -S11303D08981E0E0F4E080E4818380E8828378949A -S11303E00F90DF91CF910895E091413FE23029F1E0 -S11303F028F4EE2341F0E13091F040C0E33059F1AC -S1130400E430B9F13BC0F0E0EE54F447208191E0D0 -S1130410281390E09093413F81E090E00895F0E04C -S1130420EE54F4479081891302C082E001C080E059 -S11304308093413F81E090E00895F0E0EE54F4476A -S11304409081891302C083E001C080E08093413F22 -S113045081E090E00895F0E0EE54F4479081891330 -S113046002C084E001C080E08093413F81E090E0DD -S113047008951092413F80E090E008951092413F2A -S113048081E090E008959091403F9330D1F028F4BA -S1130490992341F0913079F047C09430D1F09530F0 -S11304A029F142C0A1DF892B19F481E08093403FF8 -S11304B010923F3F39C08093083F83E08093403FD0 -S11304C033C0E8E0FFE31182828384E08093403FFD -S11304D02BC0E8E0FFE321813281A901482BCA0146 -S11304E08183928385E08093403F1EC090913F3F7B -S11304F0E92FF0E0E85FF04C838381E0890F80937B -S11305003F3F9091083F891778F0E091443FF09184 -S1130510453F6BE07FE38091423F9091433F0995D3 -S11305201092403F10923F3F80E090E00895009782 -S113053059F06115710541F08093423F9093433F18 -S11305406093443F7093453F0895FC0122813381B9 -S1130550232B21F0892B21F481E0089581E0089573 -S113056080E00895CF93DF9329E12093463FEC0187 -S1130570249649E1BE0180E090E096DD81E493E0B9 -S11305800197F1F7000049E1BE0180E290E08CDDC3 -S1130590DF91CF910895CF93DF93EC01D6DF8111E2 -S11305A032C089819881891771F1813019F08230C4 -S11305B0B1F029C081E493E00197F1F7000040E035 -S11305C060E08A819B81ECD081E493E00197F1F7AC -S11305D0000041E061E08A819B81E2D014C081E4A3 -S11305E093E00197F1F7000041E060E08A819B818C -S11305F0D7D081E493E00197F1F7000040E061E097 -S11306008A819B81CDD0DF91CF910895CF93DF93E1 -S1130610EC019BDF811124C08981813051F018F0F5 -S1130620823099F01DC08883CE019CDF81E08983EC -S113063017C0CE01B0DF8981888363E080E057DD95 -S1130640019771F482E089830BC0CE01A4DF898114 -S1130650888363E080E04BDD892B11F481E089839A -S1130660DF91CF910895FC012481222319F02130D8 -S113067049F00895BC016C5F7F4F49E180E290E04E -S1130680F5DC0895BC016C5F7F4F49E180E290E0A6 -S1130690EDDC0895DC01149629E1FB0101900D9233 -S11306A02A95E1F7E0DF80E090E00895CF93DF93AF -S11306B06115710571F0009761F0EC0119821882DF -S11306C06A837B836AE473E032DF63E472E0CE0121 -S11306D05BDEDF91CF910895CF93DF93CDB7DEB783 -S11306E0CB55D109CDBFDEBF80E090E0D0DD40E640 -S11306F060E070E0CE010196E4DD4FE751E0BE0119 -S11307006F5F7F4FCE0104966BD0BE016C5F7F4F4D -S113071087E49FE3CBDF87E49FE378DF2AE684E086 -S113072091E0215080409040E1F700C0F4CF8F92D7 -S11307309F92AF92BF92CF92DF92EF92FF920F936C -S11307401F93CF93DF93EC01862E5A016801790140 -S1130750C8010196E6D0982E192FFC018192CF0191 -S1130760A601B501FFD1EA81FB81A70196012F5FA4 -S11307703F4F4F4F5F4F01E0692D712F8881998161 -S1130780099580E090E0DF91CF911F910F91FF9048 -S1130790EF90DF90CF90BF90AF909F908F9008958F -S11307A00F931F93662319F0613039F00BC0FC01DD -S11307B0278140FB20F9278305C0FC01278140FBEA -S11307C021F92783AC01495F5F4F01E010E020E08D -S11307D030E063E0ACDF80E090E01F910F9108957A -S11307E0EF92FF920F931F93CF93DF931F92CDB796 -S11307F0DEB7009709F485C06115710509F484C05A -S11308004115510509F483C07C01DC016D937C938F -S1130810119712964D935C931397FC01349684E5DB -S1130820DF011D928A95E9F78FEF898301E010E0DB -S113083020E030E0AE014F5F5F4F63E0C70177DF38 -S113084080E8898301E010E020E030E0AE014F5FF2 -S11308505F4F60E1C7016BDF01E010E020E030E0B2 -S1130860AE014F5F5F4F61E1C70161DF01E010E05E -S113087020E030E0AE014F5F5F4F62E1C70157DF18 -S113088001E010E020E030E0AE014F5F5F4F63E134 -S1130890C7014DDF01E010E020E030E0AE014F5F22 -S11308A05F4F64E1C70143DF01E010E020E030E086 -S11308B0AE014F5F5F4F65E1C70139DF01E010E032 -S11308C020E030E0AE014F5F5F4F66E1C7012FDFEC -S11308D001E010E020E030E0AE014F5F5F4F67E1E0 -S11308E0C70125DF80EC898301E010E020E030E0DF -S11308F0AE014F5F5F4F67EBC70119DF80E090E007 -S113090008C08FEF9FEF05C08FEF9FEF02C08FEFFE -S11309109FEF0F90DF91CF911F910F91FF90EF9078 -S113092008950F931F93CF93DF938230910510F4B2 -S113093082E090E0E091663FF091673F20E030E094 -S1130940A0E0B0E0309719F1408151810281138118 -S113095048175907C8F08417950769F4109731F0C0 -S113096012960C93129713961C9327C00093663F1C -S11309701093673F22C02115310519F04217530720 -S113098018F49A01BD01EF01DF01F801DBCF211555 -S11309903105F9F0281B390B2430310580F48A81A4 -S11309A09B816115710521F0FB018283938304C04F -S11309B08093663F9093673FFE01329644C0FE01E8 -S11309C0E20FF31F819391932250310928833983D5 -S11309D03AC02091643F3091653F232B41F420912C -S11309E0023F3091033F2093643F3093653F209151 -S11309F0003F3091013F2115310541F42DB73EB739 -S1130A004091043F5091053F241B350BE091643F16 -S1130A10F091653FE217F307A0F42E1B3F0B281754 -S1130A20390778F0AC014E5F5F4F2417350748F063 -S1130A304E0F5F1F4093643F5093653F81939193A2 -S1130A4002C0E0E0F0E0CF01DF91CF911F910F9160 -S1130A500895CF93DF93009709F481C0FC01329786 -S1130A6012821382A091663FB091673F109781F480 -S1130A7020813181820F931F2091643F3091653F23 -S1130A802817390751F5E093643FF093653F67C039 -S1130A90ED0120E030E0CE17DF0740F44A815B81AE -S1130AA09E0141155105F1F0EA01F5CFC283D383CC -S1130AB040815181840F951FC817D90759F4888143 -S1130AC09981840F951F0296808391838A819B81EB -S1130AD0828393832115310529F4E093663FF093D3 -S1130AE0673F3DC0E901EA83FB8349915991C40FF3 -S1130AF0D51FEC17FD0761F480819181840F951F48 -S1130B000296E90188839983828193818A839B83F6 -S1130B10E0E0F0E012968D919C911397009719F004 -S1130B20FD01DC01F7CF8D919C9111979D012E5F02 -S1130B303F4F820F931F2091643F3091653F2817E8 -S1130B40390769F4309729F41092663F1092673F91 -S1130B5002C012821382A093643FB093653FDF9179 -S1130B60CF910895FB01DC0102C001900D92415028 -S1130B705040D8F7089503D0808199270895FC0147 -S1130B80E050FC4E0895262FAF93BF93E0E0F0E1D0 -S1130B90328131FDFDCFDC01A050BC4E2C932DE9F8 -S1130BA024BF23E020830196BF91AF910895F89468 -S1050BB0FFCF71 -S1080BB24F5A31434DD0 -S1090BB70000683F20006D +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 S9030000FC diff --git a/storno_cqp6xx_digital_xtal/avr_i2c_driver b/storno_cqp6xx_digital_xtal/avr_i2c_driver index e53bc5b..9c0dcfd 160000 --- a/storno_cqp6xx_digital_xtal/avr_i2c_driver +++ b/storno_cqp6xx_digital_xtal/avr_i2c_driver @@ -1 +1 @@ -Subproject commit e53bc5b7fa923a96db6244baf556261cef28ac1e +Subproject commit 9c0dcfdb3174cfbfd1e1c4aa2c1efb49956e8e37 diff --git a/storno_cqp6xx_digital_xtal/cm_msg b/storno_cqp6xx_digital_xtal/cm_msg index 8a8fe0f..7afa6fe 160000 --- a/storno_cqp6xx_digital_xtal/cm_msg +++ b/storno_cqp6xx_digital_xtal/cm_msg @@ -1 +1 @@ -Subproject commit 8a8fe0f12f61b6405eaca04884571b1c0100cb94 +Subproject commit 7afa6fe99a29e9540ca46bd4594be23b39f44dba diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.c b/storno_cqp6xx_digital_xtal/cqm6xx_app.c index b6fb2e5..3ae7a9a 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.c +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.c @@ -72,30 +72,30 @@ static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351 } -uint8_t size = 0; static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ - size = sizeof(storno_pll_param_msg); - // Read settings for PLLA first - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,size); - - //cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + _delay_ms(1); + cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); _delay_ms(1); - - //cqm_setPLLParam(inst, SI5351_PLL_A, SI5351_OUTPUT_0); - //cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_CLK_POWER_UP); - //_delay_ms(1); + cqm_setPLLParam(inst, SI5351_PLL_A, SI5351_OUTPUT_0); + _delay_ms(1); cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - //inst->pll_param_ptr = &temp_msg; - //cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); - //cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_CLK_POWER_UP); + _delay_ms(1); + cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); - //inst->pll_param_ptr = NULL; + + // Set third output to crystal freq for calibration! + cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_2); + cm_setCLKControl(inst->si5351_dev, SI5351_OUTPUT_2,SI5351_CLK_POWER_UP); + _delay_ms(1); + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_2,SI5351_OUTPUT_ENABLE); + } @@ -161,7 +161,7 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ switch(inst->pll_param_data.PLL_Ident){ case MSG_PLLA_PARAM: - cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); + cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); break; case MSG_PLLB_PARAM: @@ -173,7 +173,46 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ // Send status back maybe.. //Force state machine to load new settings from eeprom: - //inst->state_next = STORNO_APP_PROGRAM_OSC; + inst->state_next = STORNO_APP_PROGRAM_OSC; + +} + +static int writeDefaultSettingsEEprom(storno_xtal_app_t *inst){ + + + inst->pll_param_data.PLL_Ident = 0; + inst->pll_param_data.MSNx_P1 = 3395; + inst->pll_param_data.MSNx_P2 = 11510; + inst->pll_param_data.MSNx_P3 = 1067099; + + inst->pll_param_data.MSx_P1 = 18; + inst->pll_param_data.MSx_P2 = 0; + inst->pll_param_data.MSx_P3 = 1; + + 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)); + return 0; + +} + +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)); + + uint8_t *ptr = (void*)&inst->pll_param_data; + + for (uint32_t idx = 0; idx < sizeof(storno_pll_param_msg); idx++ ) + { + if ((*ptr != 0xff) && (*ptr != 0x00)) + { + return 1; + } + ptr++; + } + + return 0; + } @@ -198,8 +237,13 @@ void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev){ inst->si5351_dev = si5351_dev; - //cm_uart_init(inst,(get_UART_Event_fpt)uart_rx_event); cm_MsgCompleteEvt_Register(inst,(Get_msgComplete_Event_fpt)uart_rx_event); cm_uart_init(inst,(get_UART_Event_fpt)cm_msg_DecodeMsg_Byte); + // Check if data is vaild (if this is a new mcu) + if(!isEEPROMValid(inst)){ + // If settings are somehow unvalid, then write default settings.. + writeDefaultSettingsEEprom(inst); + } + } \ No newline at end of file diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.h b/storno_cqp6xx_digital_xtal/cqm6xx_app.h index eca660e..a97d830 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.h +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.h @@ -32,7 +32,7 @@ typedef struct { -}storno_pll_param_msg; +}__attribute__((packed))storno_pll_param_msg; typedef enum { @@ -54,7 +54,7 @@ typedef struct { -}storno_xtal_app_t; +}__attribute__((packed))storno_xtal_app_t; void cqm6xx_app_statemachine(storno_xtal_app_t *inst); void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev); diff --git a/storno_cqp6xx_digital_xtal/si5351_driver b/storno_cqp6xx_digital_xtal/si5351_driver index 06a0eda..4576085 160000 --- a/storno_cqp6xx_digital_xtal/si5351_driver +++ b/storno_cqp6xx_digital_xtal/si5351_driver @@ -1 +1 @@ -Subproject commit 06a0eda9071b77b92938f71a34a016b52e59252f +Subproject commit 4576085237f3156e1fea04d69f0df1fcc4e52407 diff --git a/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj b/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj index a1a80e8..c629999 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 debugging experience (-Og) + Optimize more (-O2) True True Default (-g2)

l#VcNm}aj4`hZ!a>g z-B5D|2vdKE@Nh7H2SlB5U_Rp}vyS+Tn_L2(L_SW}#Z=*V$cu%0f%zK@>Li2tjGIjR zbA;*Jd|~>wM0hfIg>V(PPIxw$&$wx437Eh0A+HB-5xyRLtMHxRJB1$w?+|_g{IKvI z@J`_m!F&!*o1cPT6#gE}-!@Qw2)sv_WB5D599KUO=6L?GFz05hZjqTOU)8fHq zo?k<`=*%JG+Rg1^{FyobLtvxB@|gMmPU^&=Zjsl1OXnLh#zt-|gSi(N13hCWhuli3 zsNbBM`+_Bw&T_KMbytDSJp#viV`n=VeTUoK)B&?EylClg+&A+{K94l_4*M;gZ^-SG z8TC6#b05L^gUPEs8SRi;N3gl4;2gl{j3T4HxQ(F>xF2jgiPdvw*5psazNSj=OAOT% z&8cw``H~|iaawgX|NG*y{6tC`Gu-pTr)enH;Ykhje>wh;2R&qjyC zZP+f_xyU;i8=Y^x4x-U9`^^xc2fdd>=wNuSgJ}G!h|n`b-Ws6-Qpi^b21?6|D-dbL z`O~IV70s5CXc6DitPP0@-gP^@$W(}yH6bc1Eyr8=^tOHiM-Q z*!Id`uMRTWV;qdVda!NpP4rpL#mr{xt%1O{cL?@4hS6SgImYtdi$B{QzthBdjM)s{ z0fB9A489CK4l>%K9pm4tVB6m32*xDH%x3KEg21+SJ?xEwjP@`@2kjjI+xE`H_eQou zW;SE*3kYm`A6xb~Y#aZ0{ju#GfIZF?%x3Jx0Bm~$C*xikO7xGzx3SkZ%-*S}tQ=zu zdt;B+I@{h<*z1ntwAT)Q#-94VGt#CX@jE0XNSn>rD+uQ{QEpiFBbzH$4;{uy&px-$d^EGxm9n>m)p0{ zv;Av-1@7e`qklc{XZ&joHe)!@x#>!*XIb``FE{Qju@j5IB?l+=fjl06wATuM2tkOw N$rE+H5Ub7D`+vO&%JKjJ literal 38220 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 BWhnpv diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.elf b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.elf index 6f5f4e0d013bd50a97a0ec7e1dd42d8a82ac6826..0f91a83be1f1b3974ac17e302b4960ac54713e87 100644 GIT binary patch literal 69992 zcmdqK34B!5`96Nn+*z|sHb}xA2%EBGVYk(gO^5=CNx-#^fdq(##Uv#4BfZai1Ey8`Gm1Eh~Xe-SM%KXb60o)IysE-F}7e16< zmx@bKo6Pef>3o>S&t=H>BA*}r)!{=P=Jo5I&|TPF(4F6%*FC;_T=&@SG2KUZAJsj& zdsO$x?h)O?yK}pTbr0>%=^oNu`RJhTf!zbT(}oXuc-OvX9@+Eun~&tZeRIzvZ;S3h zTYfe9H@>|GhrGQL^gH{$>v45^I+C~CoPUq+wS$ko_@^hH+O==XcUw}rhIH-f+S65* z+u8e(*d&Up-Wk7t?B;#%_y02C-QdB&jh#=5D_=KxLU()nG- zz7GG^SPh%RM{ydS6z9IOzUy!r+S3xd+dBR34%oMK>)NenZ++`v`|>MC`M0+9boBVQ z=5+S;=lp!{XS@&p¥KM0;mjSGKA7sCk5&P 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 O)6H7;u4G5LzyAZz%c`>g literal 64040 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 P`j*%Eo%3iSy}rKzo 28: 20 c0 rjmp .+64 ; 0x6a <__bad_interrupt> 2a: 1f c0 rjmp .+62 ; 0x6a <__bad_interrupt> - 2c: 82 c1 rjmp .+772 ; 0x332 <__vector_22> + 2c: 4f c1 rjmp .+670 ; 0x2cc <__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> @@ -70,34 +68,34 @@ Disassembly of section .text: 3c: df e3 ldi r29, 0x3F ; 63 3e: de bf out 0x3e, r29 ; 62 -00000040 <__do_copy_data>: - 40: 1f e3 ldi r17, 0x3F ; 63 - 42: a0 e0 ldi r26, 0x00 ; 0 +00000040 <__do_clear_bss>: + 40: 2f e3 ldi r18, 0x3F ; 63 + 42: a6 e0 ldi r26, 0x06 ; 6 44: bf e3 ldi r27, 0x3F ; 63 - 46: e7 eb ldi r30, 0xB7 ; 183 - 48: fb e0 ldi r31, 0x0B ; 11 - 4a: 02 c0 rjmp .+4 ; 0x50 <__do_copy_data+0x10> - 4c: 05 90 lpm r0, Z+ - 4e: 0d 92 st X+, r0 - 50: a6 30 cpi r26, 0x06 ; 6 - 52: b1 07 cpc r27, r17 - 54: d9 f7 brne .-10 ; 0x4c <__do_copy_data+0xc> + 46: 01 c0 rjmp .+2 ; 0x4a <.do_clear_bss_start> -00000056 <__do_clear_bss>: - 56: 2f e3 ldi r18, 0x3F ; 63 - 58: a6 e0 ldi r26, 0x06 ; 6 - 5a: bf e3 ldi r27, 0x3F ; 63 - 5c: 01 c0 rjmp .+2 ; 0x60 <.do_clear_bss_start> +00000048 <.do_clear_bss_loop>: + 48: 1d 92 st X+, r1 -0000005e <.do_clear_bss_loop>: - 5e: 1d 92 st X+, r1 +0000004a <.do_clear_bss_start>: + 4a: a7 36 cpi r26, 0x67 ; 103 + 4c: b2 07 cpc r27, r18 + 4e: e1 f7 brne .-8 ; 0x48 <.do_clear_bss_loop> -00000060 <.do_clear_bss_start>: - 60: a8 36 cpi r26, 0x68 ; 104 - 62: b2 07 cpc r27, r18 - 64: e1 f7 brne .-8 ; 0x5e <.do_clear_bss_loop> - 66: 38 d3 rcall .+1648 ; 0x6d8