/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ | |
/*This file is prepared for Doxygen automatic documentation generation.*/ | |
/*! \file ********************************************************************* | |
* | |
* \brief NEWLIB_ADDONS USART include file for AVR32. | |
* | |
* - Compiler: GNU GCC for AVR32 | |
* - Supported devices: All AVR32 devices can be used. | |
* - AppNote: | |
* | |
* \author Atmel Corporation: http://www.atmel.com \n | |
* Support and FAQ: http://support.atmel.no/ | |
* | |
******************************************************************************/ | |
/* Copyright (c) 2009 Atmel Corporation. All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* 1. Redistributions of source code must retain the above copyright notice, this | |
* list of conditions and the following disclaimer. | |
* | |
* 2. Redistributions in binary form must reproduce the above copyright notice, | |
* this list of conditions and the following disclaimer in the documentation | |
* and/or other materials provided with the distribution. | |
* | |
* 3. The name of Atmel may not be used to endorse or promote products derived | |
* from this software without specific prior written permission. | |
* | |
* 4. This software may only be redistributed and used in connection with an Atmel | |
* AVR product. | |
* | |
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED | |
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE | |
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR | |
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE | |
* | |
*/ | |
#ifndef __AVR32_NEWLIB_ADDONS_USART_H__ | |
#define __AVR32_NEWLIB_ADDONS_USART_H__ | |
#include <_ansi.h> | |
#include "nlao_io.h" | |
_BEGIN_STD_C | |
struct usart3 { | |
volatile u32 us_cr; | |
volatile u32 us_mr; | |
volatile u32 us_ier; | |
volatile u32 us_idr; | |
volatile u32 us_imr; | |
volatile u32 us_csr; | |
volatile u32 us_rhr; | |
volatile u32 us_thr; | |
volatile u32 us_brgr; | |
volatile u32 us_rtor; | |
volatile u32 us_ttgr; | |
volatile u32 us_reserved[5]; | |
volatile u32 us_fidi; | |
volatile u32 us_ner; | |
volatile u32 us_xxr; | |
volatile u32 us_if; | |
}; | |
/* Register offsets */ | |
#define US_CR 0x0000 | |
#define US_MR 0x0004 | |
#define US_IER 0x0008 | |
#define US_IDR 0x000c | |
#define US_IMR 0x0010 | |
#define US_CSR 0x0014 | |
#define US_RHR 0x0018 | |
#define US_THR 0x001c | |
#define US_BRGR 0x0020 | |
#define US_RTOR 0x0024 | |
#define US_TTGR 0x0028 | |
#define US_FIDI 0x0040 | |
#define US_NER 0x0044 | |
#define US_XXR 0x0048 | |
#define US_IF 0x004c | |
#define US_RPR 0x0100 | |
#define US_RCR 0x0104 | |
#define US_TPR 0x0108 | |
#define US_TCR 0x010c | |
#define US_RNPR 0x0110 | |
#define US_RNCR 0x0114 | |
#define US_TNPR 0x0118 | |
#define US_TNCR 0x011c | |
#define US_PTCR 0x0120 | |
#define US_PTSR 0x0124 | |
/* USART3 Control Register */ | |
#define US_CR_RSTRX (1 << 2) | |
#define US_CR_RSTTX (1 << 3) | |
#define US_CR_RXEN (1 << 4) | |
#define US_CR_RXDIS (1 << 5) | |
#define US_CR_TXEN (1 << 6) | |
#define US_CR_TXDIS (1 << 7) | |
#define US_CR_RSTSTA (1 << 8) | |
#define US_CR_STTBRK (1 << 9) | |
#define US_CR_STPBRK (1 << 10) | |
#define US_CR_DTREN (1 << 16) | |
#define US_CR_DTRDIS (1 << 17) | |
#define US_CR_RTSEN (1 << 18) | |
#define US_CR_RTSDIS (1 << 19) | |
/* USART3 Mode Register */ | |
#define US_MR_MODE (15 << 0) | |
#define US_MR_MODE_NORMAL ( 0 << 0) | |
#define US_MR_MODE_HWFLOW ( 2 << 0) | |
#define US_MR_CLKS ( 3 << 4) | |
#define US_MR_CLKS_CLOCK ( 0 << 4) | |
#define US_MR_CLKS_FDIV1 ( 1 << 4) | |
#define US_MR_CLKS_SLOW ( 2 << 4) | |
#define US_MR_CLKS_EXT ( 3 << 4) | |
#define US_MR_CHRL_5BITS ( 0 << 6) | |
#define US_MR_CHRL_6BITS ( 1 << 6) | |
#define US_MR_CHRL_7BITS ( 2 << 6) | |
#define US_MR_CHRL_8BITS ( 3 << 6) | |
#define US_MR_SYNC ( 1 << 8) | |
#define US_MR_PAR_EVEN ( 0 << 9) | |
#define US_MR_PAR_ODD ( 1 << 9) | |
#define US_MR_PAR_SPACE ( 2 << 9) | |
#define US_MR_PAR_MARK ( 3 << 9) | |
#define US_MR_PAR_NONE ( 4 << 9) | |
#define US_MR_PAR_MDROP ( 6 << 9) | |
#define US_MR_NBSTOP_1BIT ( 0 << 12) | |
#define US_MR_NBSTOP_1_5BIT ( 1 << 12) | |
#define US_MR_NBSTOP_2BITS ( 2 << 12) | |
#define US_MR_OVER ( 1 << 19) | |
#define US_MR_OVER_X16 ( 0 << 19) | |
#define US_MR_OVER_X8 ( 1 << 19) | |
/* USART3 Channel Status Register */ | |
#define US_CSR_RXRDY (1 << 0) | |
#define US_CSR_TXRDY (1 << 1) | |
#define US_CSR_RXBRK (1 << 2) | |
#define US_CSR_ENDRX (1 << 3) | |
#define US_CSR_ENDTX (1 << 4) | |
#define US_CSR_OVRE (1 << 5) | |
#define US_CSR_FRAME (1 << 6) | |
#define US_CSR_PARE (1 << 7) | |
#define US_CSR_TXEMPTY (1 << 9) | |
#define US_CSR_TXBUFE (1 << 11) | |
#define US_CSR_RXBUFF (1 << 12) | |
#define US_CSR_RIIC (1 << 16) | |
#define US_CSR_DSRIC (1 << 17) | |
#define US_CSR_DCDIC (1 << 18) | |
#define US_CSR_CTSIC (1 << 19) | |
#define US_CSR_RI (1 << 20) | |
#define US_CSR_DSR (1 << 21) | |
#define US_CSR_DCD (1 << 22) | |
#define US_CSR_CTS (1 << 23) | |
/* USART3 Baud Rate Generator Register */ | |
#define US_BRGR_CD_OFFSET 0 | |
#define US_BRGR_FP_OFFSET 16 | |
#define US_BRGR_CD_SIZE 16 | |
#define US_BRGR_FP_SIZE 3 | |
#define US_BRGR_CD (0xFFFF << 0) | |
#define US_BRGR_FP ( 7 << 16) | |
/*USART3 PDC Transfer Control Register */ | |
#define US_PTCR_RXTEN (1 << 0) | |
#define US_PTCR_RXTDIS (1 << 1) | |
#define US_PTCR_TXTEN (1 << 8) | |
#define US_PTCR_TXTDIS (1 << 9) | |
/*USART3 PDC Transfer Status Register */ | |
#define US_PTSR_RXTEN (1 << 0) | |
#define US_PTSR_TXTEN (1 << 8) | |
int usart_init(int baudrate); | |
void usart_putc(char c); | |
void usart_puts(const char *s); | |
int usart_getc(void); | |
int usart_tstc(void); | |
void usart_setbrg(int baudrate, int cpu_clock); | |
void set_usart_base(void *usart_base); | |
_END_STD_C | |
#endif /* MERLIN_USART3_H */ |