| 
					
				 | 
			
			
				@@ -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(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |