Microchip® Advanced Software Framework

interrupt_usart_example.c File Reference

Example of an interrupt-driven USART communication.

Copyright (c) 2009-2018 Microchip Technology Inc. and its subsidiaries.

#include <avr32/io.h>
#include "compiler.h"
#include "board.h"
#include "print_funcs.h"
#include "intc.h"
#include "power_clocks_lib.h"
#include "gpio.h"
#include "usart.h"
#include "conf_example.h"

Macros

#define EXAMPLE_TARGET_PBACLK_FREQ_HZ   FOSC0
 
#define EXAMPLE_USART   (&AVR32_USART1)
 
#define EXAMPLE_USART_BAUDRATE   115200
 
#define EXAMPLE_USART_IRQ   AVR32_USART1_IRQ
 
#define EXAMPLE_USART_RX_FUNCTION   AVR32_USART1_RXD_0_FUNCTION
 
#define EXAMPLE_USART_RX_PIN   AVR32_USART1_RXD_0_PIN
 
#define EXAMPLE_USART_TX_FUNCTION   AVR32_USART1_TXD_0_FUNCTION
 
#define EXAMPLE_USART_TX_PIN   AVR32_USART1_TXD_0_PIN
 

Functions

int main (void)
 The main function. More...
 
static void usart_int_handler (void)
 The USART interrupt handler. More...
 

#define EXAMPLE_TARGET_PBACLK_FREQ_HZ   FOSC0

Referenced by at45dbx_resources_init(), and main().

#define EXAMPLE_USART   (&AVR32_USART1)

Referenced by main(), and usart_int_handler().

#define EXAMPLE_USART_BAUDRATE   115200

Referenced by main().

#define EXAMPLE_USART_IRQ   AVR32_USART1_IRQ

Referenced by main().

#define EXAMPLE_USART_RX_FUNCTION   AVR32_USART1_RXD_0_FUNCTION

Referenced by main().

#define EXAMPLE_USART_RX_PIN   AVR32_USART1_RXD_0_PIN

Referenced by main().

#define EXAMPLE_USART_TX_FUNCTION   AVR32_USART1_TXD_0_FUNCTION

Referenced by main().

#define EXAMPLE_USART_TX_PIN   AVR32_USART1_TXD_0_PIN

Referenced by main().

int main ( void  )

The main function.

It sets up the USART module on EXAMPLE_USART. The terminal settings are 57600 8N1. Then it sets up the interrupt handler and waits for a USART interrupt to trigger.

We have nothing left to do in the main, so we may switch to a device sleep mode: we just need to be sure that the USART module will be still be active in the chosen sleep mode. The sleep mode to use is the FROZEN sleep mode: in this mode the PB clocks are still active (so the USART module which is on the Peripheral Bus will still be

active while the CPU and HSB will be stopped).

Modules communicating with external circuits should normally be disabled before entering a sleep mode that will stop the module

operation: this is not the case for the FROZEN sleep mode.

When the USART interrupt occurs, this will wake the CPU up which will then execute the interrupt handler code then come back to the while(1) loop below to execute the sleep instruction again.

References usart_options_t::baudrate, Disable_global_interrupt, Enable_global_interrupt, EXAMPLE_TARGET_PBACLK_FREQ_HZ, EXAMPLE_USART, EXAMPLE_USART_BAUDRATE, EXAMPLE_USART_IRQ, EXAMPLE_USART_RX_FUNCTION, EXAMPLE_USART_RX_PIN, EXAMPLE_USART_TX_FUNCTION, EXAMPLE_USART_TX_PIN, FOSC0, gpio_enable_module(), INTC_init_interrupts(), INTC_register_interrupt(), OSC0_STARTUP, pcl_configure_clocks(), pcl_dfll_freq_param, PCL_OSC0, pcl_switch_to_osc(), print(), SLEEP, USART_1_STOPBIT, usart_init_rs232(), usart_int_handler(), USART_NO_PARITY, and USART_NORMAL_CHMODE.

static void usart_int_handler ( void  )
static

The USART interrupt handler.

Note
The `__attribute__((interrupt))' (under GNU GCC for AVR32) and `__interrupt' (under IAR Embedded Workbench for Atmel AVR32) C function attributes are used to manage the `rete' instruction.

References c, EXAMPLE_USART, usart_read_char(), and usart_write_char().

Referenced by main().