| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 | #include "at32f403a_407.h"#include "at32f403a_407_board.h"#include "at32f403a_407_clock.h"#include "common_config.h"#include "FreeRTOS.h"#include "task.h"#include "queue.h"#include "semphr.h"extern "C" {#include "usb_eth.h"#include "mux.h"#include "misc.h"#include "spi_common.h"#include "user_fatfs.h"#include "spi_flash.h"#include "usb_eth.h"#include "extended_sram.h"#include "modbus.h"#include "common_gpio.h"#include "io.h"#include "sys_api.h"#include "settings_api.h"#include "update.h"#include "uptime.h"#include "rtc.h"#include "mb.h"#include "io_utils.h"#include "digital_input.h"#include "digital_output.h"#include "buttons.h"#include "adc_transport.h"#include "shift_reg.h"#include "analog_input.h"#include "analog_output.h"#include "dac_transport.h"#include "log.h"#include "swap.h"#include "utility.h"#include "soft_test.h"#include "soft_wdt.h"#include "usb_clock.h"#include "filter.h"#include "modbus_ai_params.h"#include "rtc_battery.h"#include "monitoring.h"#include "factors.h"}#include "terminal_sbs.h"#include "terminal_usartbridge.h"#include <stdio.h>#include <stdbool.h>#include <string.h>#include <stdlib.h>void init_task(void *argument);//int main(void){    __disable_irq();    nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x08021000);    nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);	__enable_irq();      crm_periph_clock_enable(CRM_CRC_PERIPH_CLOCK, TRUE);        extend_SRAM();      system_clock_config();    delay_init();                        xTaskCreate(init_task, "init_task", 10*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);            vTaskStartScheduler();         while (1) {}}void init_task(void *argument){    test_tim_init();  // -------------------------------------------------------------------------- //    // Software watchdog      gpio_wdt_init();    xTaskCreate(soft_wdt, "soft_wdt", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL);        // -------------------------------------------------------------------------// CLI        sbsTerminal.configure();    terminalUsartBridge.configure();        // -------------------------------------------------------------------------- //    // Настройки. Загрузка и проверка.    // Мьютекс для работы с настройками    init_settings();         // Системные настройки и копия    sys_settings_load(&sys_settings);    memcpy(&temp_sys_settings, &sys_settings, sizeof(sys_settings_t));        // Основные настройки    settings_load(&settings);        // Настройки параметров порта Modbus    settings_set_modbus_params(settings.com_settings.mb_port);    #if 0// Только для теста        settings_set_all_default();    settings_save(&settings);#endif    // -------------------------------------------------------------------------- //    // Безопасный режим, входы, выходы    #if defined (MDIO_88) || (MAO_4)    //settings.save_mode = false;    save_mode_init();#endif    // -------------------------------------------------------------------------- //// Включить тактирование портов        io_port_enable();// -------------------------------------------------------------------------- //            // Цифровые входы/выходы#if defined (MDIO_88)        di_init();    do_init();    xTaskCreate(di_task, "input_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);    xTaskCreate(di_load_task, "load_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);    xTaskCreate(do_task, "output_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);#endif    #if defined (MAI_12)            factors_load(&ai_factors);    preset_init();    ai_init();        xTaskCreate(adc_task, "adc_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);    xTaskCreate(adc_alarm_task, "adc_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);#endif        #if defined (MAO_4)            ao_init();    xTaskCreate(dac_task, "dac_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);#endif     // -------------------------------------------------------------------------- //// Кнопки [SET, RESET]        button_init();    xTaskCreate(button_task, "button_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);    // -------------------------------------------------------------------------- //// Uptime            uptime_init();    // -------------------------------------------------------------------------- //// RTC, ADC для измерения напряжения батареи.    TM_RTC_Init();    if (bpr_data_read(BACKUP_RTC_UPDATE) != 0x1234)         mon_set_err(MON_RTC, 1);    else        mon_set_err(MON_RTC, 0);    rtc_subtim_init();        adc_battery_init();    xTaskCreate(adc_battery_task, "adc_battery_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);    // -------------------------------------------------------------------------- //    // Мультиплексор#if 1        mux_gpio_init();    xTaskCreate(mux_task, "mux_task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);#endif    // -------------------------------------------------------------------------- //        // Modbus            mb_init();    // -------------------------------------------------------------------------- //        // Сброс счетчика попыток загрузок        update_reset_boot_try();        // -------------------------------------------------------------------------- //    // Считать ревизию платы (состояние пинов)        gpio_update_rev();    // -------------------------------------------------------------------------- //    // SPI flash, журнал событий, архив#if 1    common_spi_init();    spi_flash_init();        log_init(false);#endif    // -------------------------------------------------------------------------- //// Статистика FreeRTOS        utl_stat_timer_init();    // -------------------------------------------------------------------------- //// EVENT. Обновление FW.#if 0        uint16_t update_status = bpr_data_read(BACKUP_UPDATE_STATUS);        if (update_status == IAP_UPDATE_OK)        log_add_entry(LOG_UPDATE_FW, LOG_EVENT_STATE_OK, 0, atof(FW_VERSION));    else if (update_status == IAP_UPDATE_ERROR)        log_add_entry(LOG_UPDATE_FW, LOG_EVENT_STATE_ERR, 0, atof(FW_VERSION));            bpr_data_write(BACKUP_UPDATE_STATUS, IAP_UPDATE_NO);// -------------------------------------------------------------------------- //// EVENT. Включение питания/перезагрузка.            log_add_entry(LOG_SYSTEM_BOOT, (log_event_state_t)0, 0, 0);#endif   // -------------------------------------------------------------------------- //    // USB (RNDIS class)#ifdef USB_RNDIS        usb_clock48m_select(USB_CLK_HEXT);    crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, TRUE);    usb_init();    usb_eth_init();#endif         // -------------------------------------------------------------------------- //        // Тесты            //xTaskCreate(test_signal_task, "signal_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);            //usb_eth_init();    //sys_clear();    //mux_led_test_init();    //pwm_test();        // -------------------------------------------------------------------------- //    // Сдвиговые регистры и мультиплексоры        //sh_init();    // Тесты аналоговых входов        //ai_connect_test();    //ai_mode_test();    //ai_connect_channel(V_ISO);      //ai_connect_channel(AN_INP_1);      //ai_connect_channel(AN_INP_7);      // -------------------------------------------------------------------------- //    // DAC    /*        dac_gpio_init();    dac_test(CH_DAC_1, 30000);  */    /*        dac_test(CH_DAC_2, 10000);      dac_test(CH_DAC_3, 10000);    dac_test(CH_DAC_4, 10000);  */    /*        dac_test(CH_DAC_1, 10000);      dac_test(CH_DAC_2, 10000);      dac_test(CH_DAC_3, 10000);    dac_test(CH_DAC_4, 10000);  */      #if 0    // Настройки по умолчанию     settings_set_all_default();    settings_save(&settings);#endif        // -------------------------------------------------------------------------- //        // Отдельный таск для предварительных тестов        // Разное    //xTaskCreate(test_hw_task, "hw_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);        // Тесты GPIO    //xTaskCreate(test_gpio, "gpio_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);        //ai_processing();        //average_filter_init();    // -------------------------------------------------------------------------- //// Удаляем стартовую задачу                vTaskDelete(NULL);}
 |