#include "at32f403a_407.h" #include "io.h" #include "FreeRTOS.h" #include "task.h" #include "input.h" #include "output.h" #include uint16_t input_state[DI_NUMBER]; // состояние входа uint16_t input_state_bit; // -------------------------------------------------------------------------- // // Текущие параметры //uint16_t input_state[DI_NUMBER]; // состояние входа uint32_t input_cnt[DI_NUMBER]; // счетчики входов // void io_port_init(void) { crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_BPR_PERIPH_CLOCK, TRUE); pwc_battery_powered_domain_access(TRUE); io_tim_init(); } // void io_init(void) { for (int i = 0; i < DI_NUMBER; i++) { in_init(&inputs[i]); } for (int i = 0; i < OUTPUT_NUMBER; i++) { out_init(&outputs[i]); load_sens_init(&load_sens[i]); } } // Таймер для антидребезга void io_tim_init(void) { crm_clocks_freq_type crm_clocks_freq_struct = {0}; crm_clocks_freq_get(&crm_clocks_freq_struct); nvic_irq_disable(TMR8_BRK_TMR12_IRQn); crm_periph_clock_enable(CRM_TMR12_PERIPH_CLOCK, TRUE); // 1 Hz tmr_base_init(TMR12, 9, (crm_clocks_freq_struct.ahb_freq / 10000) - 1); tmr_cnt_dir_set(TMR12, TMR_COUNT_UP); NVIC_ClearPendingIRQ(TMR8_BRK_TMR12_IRQn); nvic_irq_enable(TMR8_BRK_TMR12_IRQn, 5, 0); tmr_flag_clear(TMR12, TMR_OVF_FLAG); tmr_interrupt_enable(TMR12, TMR_OVF_INT, TRUE); tmr_counter_value_set(TMR12, 0); tmr_counter_enable(TMR12, TRUE); } void TMR8_BRK_TMR12_IRQHandler(void) { //static int i = 0; //static int cnt = 0; if(tmr_flag_get(TMR12, TMR_OVF_FLAG) != RESET) { tmr_flag_clear(TMR12, TMR_OVF_FLAG); debounce(); #if 0 if (i++ == 1000) { i = 0; cnt++; printf("CNT: %u\r\n"); } #endif } }