1 /** 2 * \file 3 * 4 * \brief SAM Serial Peripheral Interface Driver 5 * 6 * Copyright (C) 2012-2015 Atmel Corporation. All rights reserved. 7 * 8 * \asf_license_start 9 * 10 * \page License 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions are met: 14 * 15 * 1. Redistributions of source code must retain the above copyright notice, 16 * this list of conditions and the following disclaimer. 17 * 18 * 2. Redistributions in binary form must reproduce the above copyright notice, 19 * this list of conditions and the following disclaimer in the documentation 20 * and/or other materials provided with the distribution. 21 * 22 * 3. The name of Atmel may not be used to endorse or promote products derived 23 * from this software without specific prior written permission. 24 * 25 * 4. This software may only be redistributed and used in connection with an 26 * Atmel microcontroller product. 27 * 28 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED 29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 31 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR 32 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 37 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38 * POSSIBILITY OF SUCH DAMAGE. 39 * 40 * \asf_license_stop 41 * 42 */ 43 /* 44 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a> 45 */ 46 47 #ifndef SERCOM_H_INCLUDED 48 #define SERCOM_H_INCLUDED 49 50 #include <compiler.h> 51 #include <system.h> 52 #include <clock.h> 53 #include <system_interrupt.h> 54 #include "sercom_pinout.h" 55 56 #ifdef __cplusplus 57 extern "C" { 58 #endif 59 60 /* SERCOM modules should share same slow GCLK channel ID */ 61 #define SERCOM_GCLK_ID SERCOM0_GCLK_ID_SLOW 62 63 #if (0x1ff >= REV_SERCOM) 64 # define FEATURE_SERCOM_SYNCBUSY_SCHEME_VERSION_1 65 #elif (0x400 >= REV_SERCOM) 66 # define FEATURE_SERCOM_SYNCBUSY_SCHEME_VERSION_2 67 #else 68 # error "Unknown SYNCBUSY scheme for this SERCOM revision" 69 #endif 70 71 /** 72 * \brief sercom asynchronous operation mode 73 * 74 * Select sercom asynchronous operation mode 75 */ 76 enum sercom_asynchronous_operation_mode { 77 SERCOM_ASYNC_OPERATION_MODE_ARITHMETIC = 0, 78 SERCOM_ASYNC_OPERATION_MODE_FRACTIONAL, 79 }; 80 81 /** 82 * \brief sercom asynchronous samples per bit 83 * 84 * Select number of samples per bit 85 */ 86 enum sercom_asynchronous_sample_num { 87 SERCOM_ASYNC_SAMPLE_NUM_3 = 3, 88 SERCOM_ASYNC_SAMPLE_NUM_8 = 8, 89 SERCOM_ASYNC_SAMPLE_NUM_16 = 16, 90 }; 91 92 enum status_code sercom_set_gclk_generator( 93 const enum gclk_generator generator_source, 94 const bool force_change); 95 96 enum status_code _sercom_get_sync_baud_val( 97 const uint32_t baudrate, 98 const uint32_t external_clock, 99 uint16_t *const baudval); 100 101 enum status_code _sercom_get_async_baud_val( 102 const uint32_t baudrate, 103 const uint32_t peripheral_clock, 104 uint16_t *const baudval, 105 enum sercom_asynchronous_operation_mode mode, 106 enum sercom_asynchronous_sample_num sample_num); 107 108 uint32_t _sercom_get_default_pad( 109 Sercom *const sercom_module, 110 const uint8_t pad); 111 112 uint8_t _sercom_get_sercom_inst_index( 113 Sercom *const sercom_instance); 114 #ifdef __cplusplus 115 } 116 #endif 117 118 #endif //__SERCOM_H_INCLUDED 119