|
@@ -1,306 +1,310 @@
|
|
|
-#include "main.h"
|
|
|
-
|
|
|
-
|
|
|
-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);
|
|
|
-
|
|
|
-//
|
|
|
-int main(void)
|
|
|
-{
|
|
|
- __disable_irq();
|
|
|
- nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x08021000);
|
|
|
- nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
|
|
|
- __enable_irq();
|
|
|
-
|
|
|
- extend_SRAM();
|
|
|
-
|
|
|
- system_clock_config();
|
|
|
-
|
|
|
- delay_init();
|
|
|
-
|
|
|
- // -------------------------------------------------------------------------
|
|
|
- // Debug
|
|
|
- uart_print_init(115200);
|
|
|
-
|
|
|
-
|
|
|
- //usb_clock48m_select(USB_CLK_HEXT);
|
|
|
-
|
|
|
- crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, TRUE);
|
|
|
-
|
|
|
-
|
|
|
- //printf("\n\n\n\nModule universal IO [FW %s] loading....\r\n\n", VERSION);
|
|
|
-
|
|
|
- //
|
|
|
- //usb_init();
|
|
|
-
|
|
|
-
|
|
|
-#if 1
|
|
|
- taskENTER_CRITICAL();
|
|
|
-
|
|
|
- xTaskCreate(soft_wdt, "soft_wdt", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL);
|
|
|
-
|
|
|
- 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(button_task, "button_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
-
|
|
|
- //xTaskCreate(adc_task, "adc_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
-
|
|
|
- taskEXIT_CRITICAL();
|
|
|
-
|
|
|
- vTaskStartScheduler();
|
|
|
-#endif
|
|
|
-
|
|
|
- while (1) {}
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void init_task(void *argument)
|
|
|
-{
|
|
|
- // Для теста
|
|
|
- //sys_clear();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Загрузка и проверка настроек
|
|
|
-
|
|
|
- crm_periph_clock_enable(CRM_CRC_PERIPH_CLOCK, TRUE);
|
|
|
-
|
|
|
- // Мьютекс для работы с настройками
|
|
|
- init_settings();
|
|
|
-
|
|
|
- // Системные настройки
|
|
|
- sys_settings_load(&sys_settings);
|
|
|
-
|
|
|
- // Основные настройки
|
|
|
- settings_load(&settings);
|
|
|
-
|
|
|
-#if 0
|
|
|
- settings_set_all_default();
|
|
|
- settings_save(&settings);
|
|
|
-#endif
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Безопасный режим, входы, выходы
|
|
|
-
|
|
|
- save_mode_init();
|
|
|
- // TODO Для теста отключаем безопасный режим работы
|
|
|
- save_mode_set(false);
|
|
|
-
|
|
|
- io_port_init();
|
|
|
-
|
|
|
- //in_exint_init();
|
|
|
-
|
|
|
- gpio_wdt_init();
|
|
|
- gpio_mbaddr_init();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Кнопки
|
|
|
-
|
|
|
- button_init();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Uptime
|
|
|
-
|
|
|
- uptime_init();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// RTC
|
|
|
-
|
|
|
- TM_RTC_Init();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Мультиплексор
|
|
|
-
|
|
|
- mux_gpio_init();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Modbus
|
|
|
-
|
|
|
- mb_init();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Базовая инициализация входов/выходов
|
|
|
-// TODO потом брать значения из настроек
|
|
|
-
|
|
|
- //io_init();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Сброс счетчика попыток загрузок
|
|
|
-
|
|
|
- update_reset_boot_try();
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// Тесты
|
|
|
- //pwm_test(); // тесы PWM
|
|
|
- gpio_get_rev();
|
|
|
-
|
|
|
- sh_init();
|
|
|
-
|
|
|
-
|
|
|
-// -------------------------------------------------------------------------- //
|
|
|
-// RNDIS
|
|
|
-
|
|
|
- //usb_eth_init();
|
|
|
-
|
|
|
- // Тесты таймеров
|
|
|
- //mux_led_test_init();
|
|
|
-
|
|
|
-#if 0
|
|
|
- // Тесты SPI flash
|
|
|
- common_spi_init();
|
|
|
- InitFS(PRIM_DRIVE);
|
|
|
- spi_flash_test();
|
|
|
-#endif
|
|
|
-
|
|
|
- // Тесты USB
|
|
|
- //usb_eth_init();
|
|
|
-
|
|
|
-
|
|
|
- //vTaskDelete(NULL);
|
|
|
-
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- mux_led_proc();
|
|
|
- }
|
|
|
-
|
|
|
-// -----------------------------------------------------------------------------
|
|
|
-
|
|
|
- //taskYIELD();
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void test_hw_task(void *argument)
|
|
|
-{
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- vTaskDelay(100);
|
|
|
-
|
|
|
-#if 0
|
|
|
- vTaskDelay(100);
|
|
|
-
|
|
|
- mux_led_blink();
|
|
|
-#endif
|
|
|
-
|
|
|
- //adc_test();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void soft_wdt(void *params)
|
|
|
-{
|
|
|
- (void)params;
|
|
|
-
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- extern_wdt_togle(); // extern WDT
|
|
|
- vTaskDelay(100);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-void test_gpio(void *params)
|
|
|
-{
|
|
|
- (void)params;
|
|
|
-
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- vTaskDelay(1000);
|
|
|
-
|
|
|
- sh_test(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;
|
|
|
-
|
|
|
- for (;;)
|
|
|
- {
|
|
|
- vTaskDelay(1000);
|
|
|
- eMBSetSlaveAddr(gpio_get_mbaddr());
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-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;
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+#include "main.h"
|
|
|
+
|
|
|
+
|
|
|
+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);
|
|
|
+
|
|
|
+//
|
|
|
+int main(void)
|
|
|
+{
|
|
|
+ __disable_irq();
|
|
|
+ nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x08021000);
|
|
|
+ nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
|
|
|
+ __enable_irq();
|
|
|
+
|
|
|
+ extend_SRAM();
|
|
|
+
|
|
|
+ system_clock_config();
|
|
|
+
|
|
|
+ delay_init();
|
|
|
+
|
|
|
+ // -------------------------------------------------------------------------
|
|
|
+ // Debug
|
|
|
+ uart_print_init(115200);
|
|
|
+
|
|
|
+
|
|
|
+ //usb_clock48m_select(USB_CLK_HEXT);
|
|
|
+
|
|
|
+ crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, TRUE);
|
|
|
+
|
|
|
+
|
|
|
+ //printf("\n\n\n\nModule universal IO [FW %s] loading....\r\n\n", VERSION);
|
|
|
+
|
|
|
+ //
|
|
|
+ //usb_init();
|
|
|
+
|
|
|
+
|
|
|
+#if 1
|
|
|
+ taskENTER_CRITICAL();
|
|
|
+
|
|
|
+ xTaskCreate(soft_wdt, "soft_wdt", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, NULL);
|
|
|
+
|
|
|
+ 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(button_task, "button_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
+
|
|
|
+ //xTaskCreate(adc_task, "adc_task", 2*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
|
|
|
+
|
|
|
+ taskEXIT_CRITICAL();
|
|
|
+
|
|
|
+ vTaskStartScheduler();
|
|
|
+#endif
|
|
|
+
|
|
|
+ while (1) {}
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void init_task(void *argument)
|
|
|
+{
|
|
|
+ // Для теста
|
|
|
+ //sys_clear();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Загрузка и проверка настроек
|
|
|
+
|
|
|
+ crm_periph_clock_enable(CRM_CRC_PERIPH_CLOCK, TRUE);
|
|
|
+
|
|
|
+ // Мьютекс для работы с настройками
|
|
|
+ init_settings();
|
|
|
+
|
|
|
+ // Системные настройки
|
|
|
+ sys_settings_load(&sys_settings);
|
|
|
+
|
|
|
+ // Основные настройки
|
|
|
+ settings_load(&settings);
|
|
|
+
|
|
|
+#if 0
|
|
|
+ settings_set_all_default();
|
|
|
+ settings_save(&settings);
|
|
|
+#endif
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Безопасный режим, входы, выходы
|
|
|
+
|
|
|
+ save_mode_init();
|
|
|
+ // TODO Для теста отключаем безопасный режим работы
|
|
|
+ save_mode_set(false);
|
|
|
+
|
|
|
+ io_port_init();
|
|
|
+
|
|
|
+ //in_exint_init();
|
|
|
+
|
|
|
+ gpio_wdt_init();
|
|
|
+ gpio_mbaddr_init();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Кнопки
|
|
|
+
|
|
|
+ button_init();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Uptime
|
|
|
+
|
|
|
+ uptime_init();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// RTC
|
|
|
+
|
|
|
+ TM_RTC_Init();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Мультиплексор
|
|
|
+
|
|
|
+ mux_gpio_init();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Modbus
|
|
|
+
|
|
|
+ mb_init();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Базовая инициализация входов/выходов
|
|
|
+// TODO потом брать значения из настроек
|
|
|
+
|
|
|
+ //io_init();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Сброс счетчика попыток загрузок
|
|
|
+
|
|
|
+ update_reset_boot_try();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// Тесты
|
|
|
+ //pwm_test(); // тесы PWM
|
|
|
+ gpio_get_rev();
|
|
|
+
|
|
|
+ sh_init();
|
|
|
+
|
|
|
+// Тесты аналоговых входов
|
|
|
+ ai_connect_test();
|
|
|
+
|
|
|
+// -------------------------------------------------------------------------- //
|
|
|
+// RNDIS
|
|
|
+
|
|
|
+ //usb_eth_init();
|
|
|
+
|
|
|
+ // Тесты таймеров
|
|
|
+ //mux_led_test_init();
|
|
|
+
|
|
|
+#if 0
|
|
|
+ // Тесты SPI flash
|
|
|
+ common_spi_init();
|
|
|
+ InitFS(PRIM_DRIVE);
|
|
|
+ spi_flash_test();
|
|
|
+#endif
|
|
|
+
|
|
|
+ // Тесты USB
|
|
|
+ //usb_eth_init();
|
|
|
+
|
|
|
+
|
|
|
+ //vTaskDelete(NULL);
|
|
|
+
|
|
|
+ for (;;)
|
|
|
+ {
|
|
|
+ mux_led_proc();
|
|
|
+ }
|
|
|
+
|
|
|
+// -----------------------------------------------------------------------------
|
|
|
+
|
|
|
+ //taskYIELD();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void test_hw_task(void *argument)
|
|
|
+{
|
|
|
+ for (;;)
|
|
|
+ {
|
|
|
+ vTaskDelay(100);
|
|
|
+
|
|
|
+#if 0
|
|
|
+ vTaskDelay(100);
|
|
|
+
|
|
|
+ mux_led_blink();
|
|
|
+#endif
|
|
|
+
|
|
|
+ //adc_test();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void soft_wdt(void *params)
|
|
|
+{
|
|
|
+ (void)params;
|
|
|
+
|
|
|
+ for (;;)
|
|
|
+ {
|
|
|
+ extern_wdt_togle(); // extern WDT
|
|
|
+ vTaskDelay(100);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+void test_gpio(void *params)
|
|
|
+{
|
|
|
+ (void)params;
|
|
|
+
|
|
|
+ for (;;)
|
|
|
+ {
|
|
|
+ vTaskDelay(1000);
|
|
|
+
|
|
|
+ //en_crnt_alrm_in(0x02);
|
|
|
+
|
|
|
+ an_inp(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;
|
|
|
+
|
|
|
+ for (;;)
|
|
|
+ {
|
|
|
+ vTaskDelay(1000);
|
|
|
+ eMBSetSlaveAddr(gpio_get_mbaddr());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+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;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|