|
@@ -1,77 +1,77 @@
|
|
|
-#include "at32f403a_407.h"
|
|
|
-#include "tim_delay.h"
|
|
|
-#include "mux.h"
|
|
|
-
|
|
|
-
|
|
|
-static bool tx_enable = false;
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void mb_helper_tim_init(uint32_t baudrate)
|
|
|
-{
|
|
|
- float foo;
|
|
|
-
|
|
|
- foo = 1.0/((float)baudrate / 11.0);
|
|
|
- foo *= 2000.0; // время в мс (длительность в два символа)
|
|
|
-
|
|
|
- crm_clocks_freq_type crm_clocks_freq_struct = {0};
|
|
|
-
|
|
|
- crm_clocks_freq_get(&crm_clocks_freq_struct);
|
|
|
-
|
|
|
- nvic_irq_disable(TMR6_GLOBAL_IRQn);
|
|
|
-
|
|
|
- crm_periph_clock_enable(CRM_TMR6_PERIPH_CLOCK, TRUE);
|
|
|
-
|
|
|
- tmr_base_init(TMR6, (uint32_t)(foo * 1000) - 1, (crm_clocks_freq_struct.ahb_freq / 1000000) - 1);
|
|
|
- tmr_cnt_dir_set(TMR6, TMR_COUNT_UP);
|
|
|
-
|
|
|
- NVIC_ClearPendingIRQ(TMR6_GLOBAL_IRQn);
|
|
|
- nvic_irq_enable(TMR6_GLOBAL_IRQn, 5, 0);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void mb_helper_tim_enable(void)
|
|
|
-{
|
|
|
- tmr_flag_clear(TMR6, TMR_OVF_FLAG);
|
|
|
- tmr_interrupt_enable(TMR6, TMR_OVF_INT, TRUE);
|
|
|
- tmr_counter_value_set(TMR6, 0);
|
|
|
- tmr_counter_enable(TMR6, TRUE);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void mb_helper_tim_disable(void)
|
|
|
-{
|
|
|
- tmr_flag_clear(TMR6, TMR_OVF_FLAG);
|
|
|
- tmr_interrupt_enable(TMR6, TMR_OVF_INT, FALSE);
|
|
|
- tmr_counter_value_set(TMR6, 0);
|
|
|
- tmr_counter_enable(TMR6, FALSE);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void mb_helper_set_tx_state(bool state)
|
|
|
-{
|
|
|
- tx_enable = state;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void TMR6_GLOBAL_IRQHandler(void)
|
|
|
-{
|
|
|
- if(tmr_flag_get(TMR6, TMR_OVF_FLAG) != RESET)
|
|
|
- {
|
|
|
- tmr_flag_clear(TMR6, TMR_OVF_FLAG);
|
|
|
- if (tx_enable) {
|
|
|
- usart_interrupt_enable(USART3, USART_TDBE_INT, TRUE);
|
|
|
- leds[TX_R].state = LED_ON;
|
|
|
- }
|
|
|
- else {
|
|
|
- gpio_bits_reset(GPIOD, GPIO_PINS_10);
|
|
|
- leds[TX_R].state = LED_OFF;
|
|
|
- }
|
|
|
- mb_helper_tim_disable();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
+#include "at32f403a_407.h"
|
|
|
+#include "tim_delay.h"
|
|
|
+#include "mux.h"
|
|
|
+
|
|
|
+
|
|
|
+static bool tx_enable = false;
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void mb_helper_tim_init(uint32_t baudrate)
|
|
|
+{
|
|
|
+ float foo;
|
|
|
+
|
|
|
+ foo = 1.0/((float)baudrate / 11.0);
|
|
|
+ foo *= 2000.0; // время в мс (длительность в два символа)
|
|
|
+
|
|
|
+ crm_clocks_freq_type crm_clocks_freq_struct = {0};
|
|
|
+
|
|
|
+ crm_clocks_freq_get(&crm_clocks_freq_struct);
|
|
|
+
|
|
|
+ nvic_irq_disable(TMR6_GLOBAL_IRQn);
|
|
|
+
|
|
|
+ crm_periph_clock_enable(CRM_TMR6_PERIPH_CLOCK, TRUE);
|
|
|
+
|
|
|
+ tmr_base_init(TMR6, (uint32_t)(foo * 1000) - 1, (crm_clocks_freq_struct.ahb_freq / 1000000) - 1);
|
|
|
+ tmr_cnt_dir_set(TMR6, TMR_COUNT_UP);
|
|
|
+
|
|
|
+ NVIC_ClearPendingIRQ(TMR6_GLOBAL_IRQn);
|
|
|
+ nvic_irq_enable(TMR6_GLOBAL_IRQn, 5, 0);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void mb_helper_tim_enable(void)
|
|
|
+{
|
|
|
+ tmr_flag_clear(TMR6, TMR_OVF_FLAG);
|
|
|
+ tmr_interrupt_enable(TMR6, TMR_OVF_INT, TRUE);
|
|
|
+ tmr_counter_value_set(TMR6, 0);
|
|
|
+ tmr_counter_enable(TMR6, TRUE);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void mb_helper_tim_disable(void)
|
|
|
+{
|
|
|
+ tmr_flag_clear(TMR6, TMR_OVF_FLAG);
|
|
|
+ tmr_interrupt_enable(TMR6, TMR_OVF_INT, FALSE);
|
|
|
+ tmr_counter_value_set(TMR6, 0);
|
|
|
+ tmr_counter_enable(TMR6, FALSE);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void mb_helper_set_tx_state(bool state)
|
|
|
+{
|
|
|
+ tx_enable = state;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void TMR6_GLOBAL_IRQHandler(void)
|
|
|
+{
|
|
|
+ if(tmr_flag_get(TMR6, TMR_OVF_FLAG) != RESET)
|
|
|
+ {
|
|
|
+ tmr_flag_clear(TMR6, TMR_OVF_FLAG);
|
|
|
+ if (tx_enable) {
|
|
|
+ usart_interrupt_enable(USART3, USART_TDBE_INT, TRUE);
|
|
|
+ leds[TX_R].state = LED_ON;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ gpio_bits_reset(GPIOD, GPIO_PINS_10);
|
|
|
+ leds[TX_R].state = LED_OFF;
|
|
|
+ }
|
|
|
+ mb_helper_tim_disable();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|