Skip to content
Snippets Groups Projects

Example samd20 code

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by arn2
    gs_puppet_master.c 3.19 KiB
    /*
     * gs_puppet_master.c
     *
     * Created: 3/9/2018 11:02:32 PM
     *  Author: adnew
     */ 
    
    #include <asf.h>
    #include <stdio.h>
    #include <string.h>
    #include "gs_puppet_master.h"
    
    void usart_read_callback(struct usart_module *const usart_module);
    void usart_write_callback(struct usart_module *const usart_module);
    
    void configure_usart(void);
    void configure_usart_callbacks(void);
    
    struct usart_module usart_instance;
    
    #define MAX_RX_BUFFER_LENGTH   2
    
    char newline = '\n';
    
    volatile uint8_t rx_buffer[MAX_RX_BUFFER_LENGTH];
    
    volatile int rf_switch_state = sdr_a;
    volatile int amp_state = amp_rx;
    volatile int curr_command = rx;
    
    void usart_read_callback(struct usart_module *const usart_module)
    {
    	//usart_write_buffer_job(&usart_instance, (uint8_t *)rx_buffer, MAX_RX_BUFFER_LENGTH);
    	read_command();
    }
    
    void usart_write_callback(struct usart_module *const usart_module)
    {
    	port_pin_toggle_output_level(LED_0_PIN);
    }
    
    void configure_usart(void)
    {
    	struct usart_config config_usart;
    	usart_get_config_defaults(&config_usart);
    
    	config_usart.baudrate    = 115200;
    	config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING;
    	config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0;
    	config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1;
    	config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2;
    	config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3;
    
    	while (usart_init(&usart_instance,
    			EDBG_CDC_MODULE, &config_usart) != STATUS_OK) {
    	}
    
    	usart_enable(&usart_instance);
    }
    
    void configure_usart_callbacks(void)
    {
    	usart_register_callback(&usart_instance,
    			usart_write_callback, USART_CALLBACK_BUFFER_TRANSMITTED);
    	usart_register_callback(&usart_instance,
    			usart_read_callback, USART_CALLBACK_BUFFER_RECEIVED);
    
    	usart_enable_callback(&usart_instance, USART_CALLBACK_BUFFER_TRANSMITTED);
    	usart_enable_callback(&usart_instance, USART_CALLBACK_BUFFER_RECEIVED);
    }
    
    void read_command(void) {
    	for(volatile uint8_t i=0; i < sizeof(command_strs)-1; i++) {
    		if(strcmp) {
    			//usart_write_buffer_wait(&usart_instance, amp_state_strs[amp_state], sizeof(amp_state_strs[amp_state])+2);
    			curr_command = i;
    			*rx_buffer = 0;
    			return;
    		}
    	}
    }
    
    void send_status(void) {
    	usart_write_buffer_wait(&usart_instance, rf_switch_strs[rf_switch_state], sizeof(rf_switch_strs[rf_switch_state])+1);
    	usart_write_buffer_wait(&usart_instance, amp_state_strs[amp_state], sizeof(amp_state_strs[amp_state])+2);
    	curr_command = wt;
    }
    
    void run_command(void) {
    	switch(curr_command) {
    		case tx:
    			port_pin_set_output_level(LED_0_PIN, 1);
    			amp_state = tx;
    			curr_command = wt;
    			break;
    		case rx:
    			port_pin_set_output_level(LED_0_PIN, 0);
    			amp_state = rx;
    			curr_command = wt;
    			break;
    		case st:
    			send_status();
    			curr_command = wt;
    			break;
    		case ra:
    			rf_switch_state = sdr_a;
    			curr_command = wt;
    			break;
    		case rb:
    			rf_switch_state = sdr_b;
    			curr_command = wt;
    			break;
    		default:
    			break;			
    	}
    }
    
    int main(void)
    {
    	system_init();
    
    	configure_usart();
    	configure_usart_callbacks();
    
    	system_interrupt_enable_global();
    
    	//uint8_t string[] = "Hello World!\r\n";
    	//usart_write_buffer_wait(&usart_instance, string, sizeof(string));
    	while (true) {
    		usart_read_buffer_job(&usart_instance, (uint8_t *)rx_buffer, MAX_RX_BUFFER_LENGTH);
    		run_command();
    	}
    }
    
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment