You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.1 KiB
C
142 lines
4.1 KiB
C
/**
|
|
* \file
|
|
*
|
|
* \brief USART Serial wrapper service for the SAM D/L/C/R devices.
|
|
*
|
|
* Copyright (c) 2009-2018 Microchip Technology Inc. and its subsidiaries.
|
|
*
|
|
* \asf_license_start
|
|
*
|
|
* \page License
|
|
*
|
|
* Subject to your compliance with these terms, you may use Microchip
|
|
* software and any derivatives exclusively with Microchip products.
|
|
* It is your responsibility to comply with third party license terms applicable
|
|
* to your use of third party software (including open source software) that
|
|
* may accompany Microchip software.
|
|
*
|
|
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
|
|
* WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
|
|
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
|
|
* AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
|
|
* LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
|
|
* LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
|
|
* SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
|
|
* POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
|
|
* ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
|
|
* RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
|
|
* THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
|
|
*
|
|
* \asf_license_stop
|
|
*
|
|
*/
|
|
/*
|
|
* Support and FAQ: visit <a href="https://www.microchip.com/support/">Microchip Support</a>
|
|
*/
|
|
#ifndef _USART_SERIAL_H_
|
|
#define _USART_SERIAL_H_
|
|
|
|
#include "compiler.h"
|
|
#include "status_codes.h"
|
|
#include "usart.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \name Serial Management Configuration */
|
|
|
|
typedef Sercom * usart_inst_t;
|
|
|
|
//struct usart_module usart;
|
|
|
|
/*! \brief Initializes the Usart in serial mode.
|
|
*
|
|
* \param[in,out] module Software instance of the USART to initialize.
|
|
* \param[in] hw Base address of the hardware USART.
|
|
* \param[in] config Configuration settings for the USART.
|
|
*
|
|
* \retval true if the initialization was successful
|
|
* \retval false if initialization failed (error in baud rate calculation)
|
|
*/
|
|
static inline bool usart_serial_init(
|
|
struct usart_module *const module,
|
|
usart_inst_t const hw,
|
|
const struct usart_config *const config)
|
|
{
|
|
if (usart_init(module, hw, config) == STATUS_OK) {
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/** \brief Sends a character with the USART.
|
|
*
|
|
* \param[in,out] module Software instance of the USART.
|
|
* \param[in] c Character to write.
|
|
*
|
|
* \return Status code
|
|
*/
|
|
static inline enum status_code usart_serial_putchar(
|
|
struct usart_module *const module,
|
|
uint8_t c)
|
|
{
|
|
while(STATUS_OK !=usart_write_wait(module, c));
|
|
|
|
return STATUS_OK;
|
|
}
|
|
|
|
/** \brief Waits until a character is received, and returns it.
|
|
*
|
|
* \param[in,out] module Software instance of the USART.
|
|
* \param[out] c Destination for the read character.
|
|
*/
|
|
static inline void usart_serial_getchar(
|
|
struct usart_module *const module,
|
|
uint8_t *c)
|
|
{
|
|
uint16_t temp = 0;
|
|
|
|
while(STATUS_OK != usart_read_wait(module, &temp));
|
|
|
|
*c = temp;
|
|
}
|
|
|
|
/**
|
|
* \brief Send a sequence of bytes to USART device
|
|
*
|
|
* \param[in,out] module Software instance of the USART.
|
|
* \param[in] tx_data Data buffer to read the data to write from.
|
|
* \param[in] length Length of data to write.
|
|
*/
|
|
static inline enum status_code usart_serial_write_packet(
|
|
struct usart_module *const module,
|
|
const uint8_t *tx_data,
|
|
uint16_t length)
|
|
{
|
|
return usart_write_buffer_wait(module, tx_data, length);
|
|
}
|
|
|
|
/**
|
|
* \brief Receive a sequence of bytes from USART device
|
|
*
|
|
* \param[in,out] module Software instance of the USART.
|
|
* \param[out] rx_data Data buffer to store the read data into.
|
|
* \param[in] length Length of data to read.
|
|
*/
|
|
static inline enum status_code usart_serial_read_packet(
|
|
struct usart_module *const module,
|
|
uint8_t *rx_data,
|
|
uint16_t length)
|
|
{
|
|
return usart_read_buffer_wait(module, rx_data, length);
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // _USART_SERIAL_H_
|