|
@@ -34,6 +34,10 @@ extern "C" {
|
|
|
#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 "terminal_sbs.h"
|
|
|
#include "terminal_usartbridge.h"
|
|
@@ -44,12 +48,6 @@ extern "C" {
|
|
|
|
|
|
|
|
|
void init_task(void *argument);
|
|
|
-void test_hw_task(void *argument);
|
|
|
-void soft_wdt(void *params);
|
|
|
-void test_gpio(void *params);
|
|
|
-void misc_task(void *params); // TODO перенести в другой модуль
|
|
|
-
|
|
|
-void usb_clock48m_select(usb_clk48_s clk_s);
|
|
|
|
|
|
|
|
|
//
|
|
@@ -60,42 +58,26 @@ int main(void)
|
|
|
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();
|
|
|
|
|
|
- // -------------------------------------------------------------------------
|
|
|
- // CLI
|
|
|
- sbsTerminal.configure();
|
|
|
- terminalUsartBridge.configure();
|
|
|
-
|
|
|
- // -------------------------------------------------------------------------
|
|
|
- // USB
|
|
|
-#ifdef USB_RNDIS
|
|
|
- usb_clock48m_select(USB_CLK_HEXT);
|
|
|
- crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, TRUE);
|
|
|
- usb_init();
|
|
|
-#endif
|
|
|
-
|
|
|
-#if 1
|
|
|
- taskENTER_CRITICAL();
|
|
|
-
|
|
|
- xTaskCreate(soft_wdt, "soft_wdt", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL);
|
|
|
|
|
|
+ //taskENTER_CRITICAL();
|
|
|
+
|
|
|
xTaskCreate(init_task, "init_task", 10*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
|
|
|
- //xTaskCreate(test_hw_task, "hw_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
-
|
|
|
- xTaskCreate(test_gpio, "gpio_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
|
|
|
xTaskCreate(input_task, "input_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
|
|
|
- xTaskCreate(misc_task, "misc_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
+ xTaskCreate(mux_task, "mux_task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- xTaskCreate(button_task, "button_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
-
|
|
|
#if defined (MAI_12)
|
|
|
xTaskCreate(adc_task, "adc_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
#endif
|
|
@@ -104,11 +86,10 @@ int main(void)
|
|
|
xTaskCreate(dac_task, "dac_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
#endif
|
|
|
|
|
|
- taskEXIT_CRITICAL();
|
|
|
+ //taskEXIT_CRITICAL();
|
|
|
|
|
|
vTaskStartScheduler();
|
|
|
-#endif
|
|
|
-
|
|
|
+
|
|
|
while (1) {}
|
|
|
}
|
|
|
|
|
@@ -116,14 +97,20 @@ int main(void)
|
|
|
void init_task(void *argument)
|
|
|
{
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
-// Для теста
|
|
|
- //sys_clear();
|
|
|
+// Software watchdog
|
|
|
+
|
|
|
+ gpio_wdt_init();
|
|
|
+ xTaskCreate(soft_wdt, "soft_wdt", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL);
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------
|
|
|
+// CLI
|
|
|
+
|
|
|
+ sbsTerminal.configure();
|
|
|
+ terminalUsartBridge.configure();
|
|
|
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
-// Загрузка и проверка настроек
|
|
|
+// Настройки. Загрузка и проверка.
|
|
|
|
|
|
- crm_periph_clock_enable(CRM_CRC_PERIPH_CLOCK, TRUE);
|
|
|
-
|
|
|
// Мьютекс для работы с настройками
|
|
|
init_settings();
|
|
|
|
|
@@ -137,13 +124,9 @@ void init_task(void *argument)
|
|
|
// Настройки параметров порта Modbus
|
|
|
settings_set_modbus_params(settings.com_settings.mb_port);
|
|
|
|
|
|
-#if 0
|
|
|
- settings_set_all_default();
|
|
|
- settings_save(&settings);
|
|
|
-#endif
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
// Безопасный режим, входы, выходы
|
|
|
-
|
|
|
+
|
|
|
save_mode_init();
|
|
|
// TODO Для теста отключаем безопасный режим работы
|
|
|
save_mode_set(false);
|
|
@@ -152,19 +135,17 @@ void init_task(void *argument)
|
|
|
|
|
|
//in_exint_init();
|
|
|
|
|
|
- gpio_wdt_init();
|
|
|
- gpio_mbaddr_init();
|
|
|
-
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
-// Кнопки
|
|
|
+// Кнопки [SET, RESET]
|
|
|
|
|
|
button_init();
|
|
|
+ xTaskCreate(button_task, "button_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
// Uptime
|
|
|
|
|
|
uptime_init();
|
|
|
-
|
|
|
+
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
// RTC
|
|
|
|
|
@@ -227,28 +208,27 @@ void init_task(void *argument)
|
|
|
*/
|
|
|
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
-// RNDIS
|
|
|
-
|
|
|
- //usb_eth_init();
|
|
|
-
|
|
|
- // Тесты таймеров
|
|
|
- //mux_led_test_init();
|
|
|
+// 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
|
|
|
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
-// SPI flash
|
|
|
-#if 1
|
|
|
- // Тесты SPI flash
|
|
|
+// SPI flash, журнал событий, архив
|
|
|
+
|
|
|
common_spi_init();
|
|
|
spi_flash_init();
|
|
|
- //InitFS(PRIM_DRIVE);
|
|
|
- //spi_flash_test();
|
|
|
-#endif
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// LOG
|
|
|
|
|
|
log_init(false);
|
|
|
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Статистика FreeRTOS
|
|
|
+
|
|
|
+ utl_stat_timer_init();
|
|
|
+
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
// EVENT. Обновление FW.
|
|
|
|
|
@@ -263,160 +243,34 @@ void init_task(void *argument)
|
|
|
|
|
|
// -------------------------------------------------------------------------- //
|
|
|
// EVENT. Включение питания/перезагрузка.
|
|
|
+
|
|
|
log_add_entry(LOG_SYSTEM_BOOT, (log_event_state_t)0, 0, 0);
|
|
|
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Тесты USB
|
|
|
-
|
|
|
- //usb_eth_init();
|
|
|
-
|
|
|
-
|
|
|
- //vTaskDelete(NULL);
|
|
|
-
|
|
|
- settings_is_changed(&settings);
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- mux_led_proc();
|
|
|
- }
|
|
|
-
|
|
|
-// -----------------------------------------------------------------------------
|
|
|
+// Удаляем стартовую задачу
|
|
|
+ vTaskDelete(NULL);
|
|
|
|
|
|
- //taskYIELD();
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void test_hw_task(void *argument)
|
|
|
-{
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- vTaskDelay(1000);
|
|
|
-
|
|
|
-
|
|
|
- printf("\r\n");
|
|
|
- for (uint8_t i = 0; i < 8; i++)
|
|
|
- {
|
|
|
- printf("Channel: %u, state = %u\r\n", i + 1, in_get(i));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-#if 0
|
|
|
- vTaskDelay(100);
|
|
|
-
|
|
|
- mux_led_blink();
|
|
|
-#endif
|
|
|
-
|
|
|
- //adc_test();
|
|
|
- }
|
|
|
-}
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Тесты
|
|
|
|
|
|
+ //usb_eth_init();
|
|
|
+ //sys_clear();
|
|
|
+ //mux_led_test_init();
|
|
|
|
|
|
-//
|
|
|
-void soft_wdt(void *params)
|
|
|
-{
|
|
|
- (void)params;
|
|
|
+#if 0
|
|
|
+ // Настройки по умолчанию
|
|
|
+ settings_set_all_default();
|
|
|
+ settings_save(&settings);
|
|
|
+#endif
|
|
|
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- extern_wdt_togle(); // extern WDT
|
|
|
- vTaskDelay(100);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-void test_gpio(void *params)
|
|
|
-{
|
|
|
- (void)params;
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Отдельный таск для предварительных тестов
|
|
|
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- vTaskDelay(100);
|
|
|
-
|
|
|
- //printf("%" PRId64 " \r\n", rtc_get_ms());
|
|
|
-
|
|
|
- //en_crnt_alrm_in(0x02);
|
|
|
-
|
|
|
- //io_test();
|
|
|
- //out_test();
|
|
|
- //load_test();
|
|
|
-
|
|
|
- //printf("HW rev: %u\r\n", cm_gpio_get_rev());
|
|
|
- //printf("Save mode: %u\r\n", save_mode_get());
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-void misc_task(void *params)
|
|
|
-{
|
|
|
- (void)params;
|
|
|
+ // Разное
|
|
|
+ //xTaskCreate(test_hw_task, "hw_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- vTaskDelay(1000);
|
|
|
- eMBSetSlaveAddr(gpio_get_mbaddr());
|
|
|
- }
|
|
|
+ // Тесты GPIO
|
|
|
+ //xTaskCreate(test_gpio, "gpio_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
}
|
|
|
|
|
|
-//
|
|
|
-void usb_clock48m_select(usb_clk48_s clk_s)
|
|
|
-{
|
|
|
- if(clk_s == USB_CLK_HICK)
|
|
|
- {
|
|
|
- crm_usb_clock_source_select(CRM_USB_CLOCK_SOURCE_HICK);
|
|
|
-
|
|
|
- /* enable the acc calibration ready interrupt */
|
|
|
- crm_periph_clock_enable(CRM_ACC_PERIPH_CLOCK, TRUE);
|
|
|
-
|
|
|
- /* update the c1\c2\c3 value */
|
|
|
- acc_write_c1(7980);
|
|
|
- acc_write_c2(8000);
|
|
|
- acc_write_c3(8020);
|
|
|
-
|
|
|
- /* open acc calibration */
|
|
|
- acc_calibration_mode_enable(ACC_CAL_HICKTRIM, TRUE);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- switch(system_core_clock)
|
|
|
- {
|
|
|
- /* 48MHz */
|
|
|
- case 48000000:
|
|
|
- crm_usb_clock_div_set(CRM_USB_DIV_1);
|
|
|
- break;
|
|
|
-
|
|
|
- /* 72MHz */
|
|
|
- case 72000000:
|
|
|
- crm_usb_clock_div_set(CRM_USB_DIV_1_5);
|
|
|
- break;
|
|
|
-
|
|
|
- /* 96MHz */
|
|
|
- case 96000000:
|
|
|
- crm_usb_clock_div_set(CRM_USB_DIV_2);
|
|
|
- break;
|
|
|
-
|
|
|
- /* 120MHz */
|
|
|
- case 120000000:
|
|
|
- crm_usb_clock_div_set(CRM_USB_DIV_2_5);
|
|
|
- break;
|
|
|
-
|
|
|
- /* 144MHz */
|
|
|
- case 144000000:
|
|
|
- crm_usb_clock_div_set(CRM_USB_DIV_3);
|
|
|
- break;
|
|
|
-
|
|
|
- /* 168MHz */
|
|
|
- case 168000000:
|
|
|
- crm_usb_clock_div_set(CRM_USB_DIV_3_5);
|
|
|
- break;
|
|
|
-
|
|
|
- /* 192MHz */
|
|
|
- case 192000000:
|
|
|
- crm_usb_clock_div_set(CRM_USB_DIV_4);
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- break;
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-}
|