From 4aede093f156dc46d38a8ccd2cd7ed27c5992666 Mon Sep 17 00:00:00 2001 From: "Christian L. V. Madsen" Date: Sat, 12 Apr 2025 19:57:48 +0200 Subject: [PATCH] commit --- .gitmodules | 4 + .vs/storno_cqp6xx_digital_xtal/v14/.atsuo | Bin 107520 -> 107520 bytes storno_cqp6xx_digital_xtal/Debug/Makefile | 13 ++ .../Debug/cm_task_manager/cm_task_manager.d | 14 ++ .../Debug/cm_task_manager/cm_task_manager.o | Bin 0 -> 9688 bytes storno_cqp6xx_digital_xtal/Debug/makedep.mk | 2 + storno_cqp6xx_digital_xtal/cm_task_manager | 1 + storno_cqp6xx_digital_xtal/cqm6xx_app.c | 219 ++++++------------ storno_cqp6xx_digital_xtal/cqm6xx_app.h | 16 +- storno_cqp6xx_digital_xtal/main.c | 7 +- .../storno_cqp6xx_digital_xtal.cproj | 95 ++++---- 11 files changed, 175 insertions(+), 196 deletions(-) create mode 100644 storno_cqp6xx_digital_xtal/Debug/cm_task_manager/cm_task_manager.d create mode 100644 storno_cqp6xx_digital_xtal/Debug/cm_task_manager/cm_task_manager.o create mode 160000 storno_cqp6xx_digital_xtal/cm_task_manager diff --git a/.gitmodules b/.gitmodules index af041ee..280e6e5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,7 @@ [submodule "storno_cqp6xx_digital_xtal/avr_eeprom_driver"] path = storno_cqp6xx_digital_xtal/avr_eeprom_driver url = https://OZ1CM@bitbucket.org/oz1cm/avr_eeprom_driver.git +[submodule "storno_cqp6xx_digital_xtal/cm_task_manager"] + path = storno_cqp6xx_digital_xtal/cm_task_manager + url = https://OZ1CM@bitbucket.org/oz1cm/cm_task_manager.git + branch = master diff --git a/.vs/storno_cqp6xx_digital_xtal/v14/.atsuo b/.vs/storno_cqp6xx_digital_xtal/v14/.atsuo index d2540d2c13c19aa2a5de05828f425d949181938c..cf9665d6145c812e24ccb39361c87de2c5aa87e5 100644 GIT binary patch delta 900 zcmaivO-NKx7>3Vxy>lI7tSJYbQPZo2S=M-UlM8<)Ga<2s_TwxvN5-gd%Cr_P`WY=E zXp?iIOG&1;P35NML}C~WjtdtdLn~bgwTvJHp(3sK#7u}4U3l*Medm1VJ?{z6Y2i8T zP7Q5;QCp#CiL-qpi3#4X43Q~Tlmp}`XN>*8R|#E%dZ0z1jJK*;{t{GqU>nE*8qh&I zkkebCxxfvIK`F=w($RocBa!V!>WU5iO*B?){bu^;oQE6|`4cXCz0f zq5G1x3@d|5dl_^S_!acn#-KLr=pYqTo>(7L_A=;huoK9jUa&rBDW9?z(iX93Ka!^2 z!zMQzdn!jz+y@Up6pVp~U=%z86JQ)zK)z#bxT`SYP{nh{W%}(xYocRw+{SgiB$Mhf zxgW?(d{EzEyMV^czq)pDtGi7zWk+V;ZEEJT`gGJ4CmXB9BG(&qZYYk7CNxgMPpszH z>_RD+A%_pG4pOG7%p$%N*_DVspd|gotX@M_X||QE@R?5oJho_vCv|?Ck%jkWQ-o66<0YSq~Gj<35Tuhtq8x*&mkJaBG%1)=S0ayhR%3$y0B>SINbn zCA_@hu&mHY-?bgPP2brPppNrHdA zCoXj5&BVg`9NrX@@JRj?Cm~d!vq2nD6h$XO#6BX1gK98;h_W`Knb=7jCT!v&!LPy; zcM$=CCv{S6ujZ`dl(!OFiFMK@#RP$iYCG)46}21o%I(@E(9OWrmw%k;ap>Zi8nK@^ zN^}#vzvhZfkB?vs;eryymv4TC3;w0KW3=kzdt=;Q6CM<>i<# zqEL||+nzwdi2hqz(xlzH3T{$(t-^;QG7f9S8xP=&T#h8c4GX$)J1wtc8H^OIwX3V~ zOG~7XR2xb1!MES3Q4PROxkgsCNoyK3vBW_b=e%eqV8Q9Q^nq zYs%X>AJlDi&kI;Y2+gB2ZHU-0SsF-#o7anLD(t|y&oRsl-3@31Q?r@uyKh13UbzMx?tAbqI}LRQPmVqvh4dx_TJ0AA diff --git a/storno_cqp6xx_digital_xtal/Debug/Makefile b/storno_cqp6xx_digital_xtal/Debug/Makefile index a211d0f..61fb183 100644 --- a/storno_cqp6xx_digital_xtal/Debug/Makefile +++ b/storno_cqp6xx_digital_xtal/Debug/Makefile @@ -38,6 +38,7 @@ SUBDIRS := \ ../avr_i2c_driver/ \ ../avr_uart_driver/ \ ../cm_msg/ \ +../cm_task_manager/ \ ../si5351_driver/ @@ -48,6 +49,7 @@ C_SRCS += \ ../avr_i2c_driver/avr_i2c.c \ ../avr_uart_driver/avr_uart.c \ ../cm_msg/cm_msg.c \ +../cm_task_manager/cm_task_manager.c \ ../cqm6xx_app.c \ ../main.c \ ../si5351_driver/si5351_driver.c @@ -65,6 +67,7 @@ avr_gpio_driver/avr_gpio.o \ avr_i2c_driver/avr_i2c.o \ avr_uart_driver/avr_uart.o \ cm_msg/cm_msg.o \ +cm_task_manager/cm_task_manager.o \ cqm6xx_app.o \ main.o \ si5351_driver/si5351_driver.o @@ -75,6 +78,7 @@ avr_gpio_driver/avr_gpio.o \ avr_i2c_driver/avr_i2c.o \ avr_uart_driver/avr_uart.o \ cm_msg/cm_msg.o \ +cm_task_manager/cm_task_manager.o \ cqm6xx_app.o \ main.o \ si5351_driver/si5351_driver.o @@ -85,6 +89,7 @@ avr_gpio_driver/avr_gpio.d \ avr_i2c_driver/avr_i2c.d \ avr_uart_driver/avr_uart.d \ cm_msg/cm_msg.d \ +cm_task_manager/cm_task_manager.d \ cqm6xx_app.d \ main.d \ si5351_driver/si5351_driver.d @@ -95,6 +100,7 @@ avr_gpio_driver/avr_gpio.d \ avr_i2c_driver/avr_i2c.d \ avr_uart_driver/avr_uart.d \ cm_msg/cm_msg.d \ +cm_task_manager/cm_task_manager.d \ cqm6xx_app.d \ main.d \ si5351_driver/si5351_driver.d @@ -148,6 +154,13 @@ cm_msg/cm_msg.o: ../cm_msg/cm_msg.c @echo Finished building: $< +cm_task_manager/cm_task_manager.o: ../cm_task_manager/cm_task_manager.c + @echo Building file: $< + @echo Invoking: AVR/GNU C Compiler : 5.4.0 + $(QUOTE)E:\cm_programs\microchip_studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"E:\cm_programs\microchip_studio\7.0\Packs\atmel\ATtiny_DFP\1.10.348\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny402 -B "E:\cm_programs\microchip_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 diff --git a/storno_cqp6xx_digital_xtal/Debug/cm_task_manager/cm_task_manager.d b/storno_cqp6xx_digital_xtal/Debug/cm_task_manager/cm_task_manager.d new file mode 100644 index 0000000..2e8172e --- /dev/null +++ b/storno_cqp6xx_digital_xtal/Debug/cm_task_manager/cm_task_manager.d @@ -0,0 +1,14 @@ +cm_task_manager/cm_task_manager.d cm_task_manager/cm_task_manager.o: \ + ../cm_task_manager/cm_task_manager.c \ + ../cm_task_manager/cm_task_manager.h \ + e:\cm_programs\microchip_studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h \ + e:\cm_programs\microchip_studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h \ + e:\cm_programs\microchip_studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h + +../cm_task_manager/cm_task_manager.h: + +e:\cm_programs\microchip_studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdint.h: + +e:\cm_programs\microchip_studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdint.h: + +e:\cm_programs\microchip_studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: diff --git a/storno_cqp6xx_digital_xtal/Debug/cm_task_manager/cm_task_manager.o b/storno_cqp6xx_digital_xtal/Debug/cm_task_manager/cm_task_manager.o new file mode 100644 index 0000000000000000000000000000000000000000..dd6a0c231b521916c0bd5883a08397c0127848d6 GIT binary patch literal 9688 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 +#include "cm_task_manager/cm_task_manager.h" + #define PLLA_SETTINGS_EEPROM_ADDR 0x00 // addr 0 #define PLLB_SETTINGS_EEPROM_ADDR 0x20 // addr 32 (64 bytes total memory) @@ -24,136 +25,45 @@ static uint8_t isStructValid(storno_xtal_app_t *inst){ return 0; } -static void cqm6xx_app_updateOsc(storno_xtal_app_t *inst){ +void setRTXOscMode(storno_xtal_app_t *inst){ + + if(inst->rtx_mode != STORNO_APP_TX_MODE){ + + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_ENABLE); // RX + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_DISABLE); // TX + + }else{ + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX + } + +} + +void cqm6xx_app_taskHandler(storno_xtal_app_t *inst){ // Check Struct if(isStructValid(inst) != 0)return; - // We will only do this once, aka when transisioning from RX to TX and TX to RX.. - if(inst->state_next == inst->state_now)return; + // Run next task: + cm_taskManager_run_tasks(&inst->storno_xtal_task); - switch(inst->state_next){ + // Find out if we are in RX or TX + + // If TX pin is not set, then turn on RX output on PLL and disable TX clock. Run setRTXOscMode once, so pll isnt constantly written to!! + if((gpio_get_level(GPIO_PORTA,GPIO_PIN_PTT) != GPIO_LEVEL_SET) && (inst->rtx_mode != STORNO_APP_RX_MODE )){ - case STORNO_APP_RX_MODE: - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_ENABLE); // RX - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_DISABLE); // TX - - break; - - 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 - - break; + inst->rtx_mode = STORNO_APP_RX_MODE; + cm_taskManager_addTaskToList(&inst->storno_xtal_task,setRTXOscMode,inst); + + }else if (inst->rtx_mode != STORNO_APP_TX_MODE){ + inst->rtx_mode = STORNO_APP_TX_MODE; + cm_taskManager_addTaskToList(&inst->storno_xtal_task,setRTXOscMode,inst); - default: - break; - } - } -static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351_Outputs output){ - - cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->plla_param_data.MSNx_P1, inst->plla_param_data.MSNx_P2, inst->plla_param_data.MSNx_P3); - //_delay_ms(1); - cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->plla_param_data.MSx_P1, inst->plla_param_data.MSx_P2, inst->plla_param_data.MSx_P3); - //_delay_ms(1); - cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); - - -} -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->plla_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); - //_delay_ms(1); - - - cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->plla_param_data,sizeof(storno_pll_param_msg)); - //_delay_ms(1); - cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); - - - // 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); - - - -} - -void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ - - // Check Struct - if(isStructValid(inst) != 0)return; - - 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; - - cqm6xx_app_loadPLLParam(inst); - - - // if ok, then go to RX mode: - inst->state_next = STORNO_APP_RX_MODE; - break; - - - case STORNO_APP_RX_MODE: - // If we just came from another state, then Enable RX osc here.. - cqm6xx_app_updateOsc(inst); - - // Update state now.. - inst->state_now = inst->state_next; - - - // 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; - - break; - - case STORNO_APP_TX_MODE: - // If we just came from another state, then Enable TX osc here.. - cqm6xx_app_updateOsc(inst); - - // Update state now.. - inst->state_now = inst->state_next; - - // If PTT is released, then disable TX osc, and go to STORNO_APP_RX_MODE, to enable rx osc. - if(gpio_get_level(GPIO_PORTA,GPIO_PIN_PTT) == GPIO_LEVEL_RESET) inst->state_next = STORNO_APP_RX_MODE; - break; - - - case STORNO_APP_RST_TO_BOOTLOADER: - - break; - - default: - break; - } - - -} - -void programPLL_Parameters(storno_xtal_app_t *inst){ - - //uint8_t *data_ptr = (void *)&inst->plla_param_data; +void EepromWritePLLParameters(storno_xtal_app_t *inst){ //Burn settings into eeprom here: switch(inst->plla_param_data.header.PLL_Ident){ @@ -180,25 +90,6 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ } - /*if((inst->plla_param_data.PLL_Ident == MSG_GET_PLLA_PARAM) && (inst->plla_param_data.PLL_Ident == MSG_GET_PLLB_PARAM)){ - - cm_uart_send('O'); - cm_uart_send('Z'); - cm_uart_send('1'); - cm_uart_send('C'); - cm_uart_send('M'); - - - for(uint8_t idx = 0; idx < sizeof(storno_pll_param_msg);idx++){ - cm_uart_send(data_ptr[idx]); - } - }*/ - - // Send status back maybe.. - - //Force state machine to load new settings from eeprom: - inst->state_next = STORNO_APP_PROGRAM_OSC; - } static int writeDefaultSettingsEEprom(storno_xtal_app_t *inst){ @@ -239,6 +130,44 @@ static int isEEPROMValid(storno_xtal_app_t *inst){ return 0; +} + +static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351_Outputs output){ + + cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->plla_param_data.MSNx_P1, inst->plla_param_data.MSNx_P2, inst->plla_param_data.MSNx_P3); + //_delay_ms(1); + cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->plla_param_data.MSx_P1, inst->plla_param_data.MSx_P2, inst->plla_param_data.MSx_P3); + //_delay_ms(1); + cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); + + +} +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->plla_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); + //_delay_ms(1); + + + cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->plla_param_data,sizeof(storno_pll_param_msg)); + //_delay_ms(1); + cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); + + + // 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); + + + } int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ @@ -257,6 +186,11 @@ int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ } + // Add EepromWritePLLParameters to trigger to write setting to eeprom as soon as we can after ISR! + cm_taskManager_addTaskToList(&inst->storno_xtal_task,(void*)EepromWritePLLParameters,inst); + + // Add write pll to list.. so the settings are updated immitialy + return 0; } @@ -265,14 +199,11 @@ void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev){ if(si5351_dev == NULL) return; if(inst == NULL)return; - - inst->state_next = STORNO_APP_PROGRAM_OSC; - inst->state_now = STORNO_APP_PROGRAM_OSC; - inst->si5351_dev = si5351_dev; cm_MsgCompleteEvt_Register(inst,(Get_msgComplete_Event_fpt)uart_rx_event); cm_uart_init(inst,(get_UART_Event_fpt)cm_msg_DecodeMsg_Byte); + cm_taskManager_init(&inst->storno_xtal_task); // Check if data is vaild (if this is a new mcu) if(!isEEPROMValid(inst)){ @@ -280,4 +211,6 @@ void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev){ writeDefaultSettingsEEprom(inst); } + cqm6xx_app_loadPLLParam(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 eee3a76..839fa65 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.h +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.h @@ -46,28 +46,24 @@ typedef struct { typedef enum { - - STORNO_APP_PROGRAM_OSC = 0, - STORNO_APP_RX_MODE = 1, - STORNO_APP_TX_MODE = 2, - STORNO_APP_RST_TO_BOOTLOADER = 5, + STORNO_APP_RX_MODE = 0, + STORNO_APP_TX_MODE = 1, -}storno_app_states; +}storno_app_modes; typedef struct { - storno_app_states state_now; - storno_app_states state_next; - + storno_app_modes rtx_mode; void *si5351_dev; storno_pll_param_msg plla_param_data; storno_pll_param_msg pllb_param_data; + cm_task_manager_t storno_xtal_task; }__attribute__((packed))storno_xtal_app_t; -void cqm6xx_app_statemachine(storno_xtal_app_t *inst); +void cqm6xx_app_taskHandler(storno_xtal_app_t *inst); void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev); diff --git a/storno_cqp6xx_digital_xtal/main.c b/storno_cqp6xx_digital_xtal/main.c index 9ed8c82..7a6f426 100644 --- a/storno_cqp6xx_digital_xtal/main.c +++ b/storno_cqp6xx_digital_xtal/main.c @@ -13,6 +13,7 @@ #include "cqm6xx_app.h" #include "avr_eeprom_driver/avr_eeprom_driver.h" + storno_xtal_app_t storno_xtal_app; int main(void) @@ -30,11 +31,13 @@ int main(void) si5351_driver si5351_dev; cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); cqm6xx_app_init(&storno_xtal_app, &si5351_dev); + + while (1) { - cqm6xx_app_statemachine(&storno_xtal_app); - //_delay_ms(100); + cqm6xx_app_taskHandler(&storno_xtal_app); + } } diff --git a/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj b/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj index 276f558..ea518f3 100644 --- a/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj +++ b/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj @@ -103,47 +103,47 @@ - -mmcu=attiny402 -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" - True - True - True - True - False - True - True - - - DEBUG - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.10.348\include\ - - - Optimize (-O1) - True - True - Default (-g2) - True - - - libm - - - - - D:\cm_projects\microchip_studio_projects\storno_cqp6xx_digital_xtal\storno_cqp6xx_digital_xtal\si5351_driver\include - ../avr_uart_driver - - - - - %24(PackRepoDir)\atmel\ATtiny_DFP\1.10.348\include\ - - - Default (-Wa,-g) - + -mmcu=attiny402 -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.10.348\gcc\dev\attiny402" + True + True + True + True + False + True + True + + + DEBUG + + + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.10.348\include\ + + + Optimize (-O1) + True + True + Default (-g2) + True + + + libm + + + + + D:\cm_projects\microchip_studio_projects\storno_cqp6xx_digital_xtal\storno_cqp6xx_digital_xtal\si5351_driver\include + ../avr_uart_driver + + + + + %24(PackRepoDir)\atmel\ATtiny_DFP\1.10.348\include\ + + + Default (-Wa,-g) + @@ -180,6 +180,12 @@ compile + + compile + + + compile + compile @@ -205,6 +211,7 @@ + @@ -244,6 +251,12 @@ compile + + compile + + + compile + compile