Dos2Unix...

This commit is contained in:
klaute 2016-08-23 19:10:37 +02:00
parent 105a43aa5f
commit 3c6bfbfa39
3 changed files with 983 additions and 984 deletions

View file

@ -82,6 +82,7 @@ int main(void)
cc_init(); cc_init();
SET_ERR_MASK(ERRMASK_USB_NOTREADY); SET_ERR_MASK(ERRMASK_USB_NOTREADY);
GlobalInterruptEnable(); GlobalInterruptEnable();
for (;;) for (;;)

File diff suppressed because it is too large Load diff

View file

@ -1,207 +1,207 @@
#ifndef UART_H #ifndef UART_H
#define UART_H #define UART_H
/************************************************************************ /************************************************************************
Title: Interrupt UART library with receive/transmit circular buffers Title: Interrupt UART library with receive/transmit circular buffers
Author: Peter Fleury <pfleury@gmx.ch> http://tinyurl.com/peterfleury Author: Peter Fleury <pfleury@gmx.ch> http://tinyurl.com/peterfleury
File: $Id: uart.h,v 1.13 2015/01/11 13:53:25 peter Exp $ File: $Id: uart.h,v 1.13 2015/01/11 13:53:25 peter Exp $
Software: AVR-GCC 4.x, AVR Libc 1.4 or higher Software: AVR-GCC 4.x, AVR Libc 1.4 or higher
Hardware: any AVR with built-in UART/USART Hardware: any AVR with built-in UART/USART
Usage: see Doxygen manual Usage: see Doxygen manual
LICENSE: LICENSE:
Copyright (C) 2015 Peter Fleury, GNU General Public License Version 3 Copyright (C) 2015 Peter Fleury, GNU General Public License Version 3
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
any later version. any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
************************************************************************/ ************************************************************************/
/** /**
* @file * @file
* @defgroup pfleury_uart UART Library <uart.h> * @defgroup pfleury_uart UART Library <uart.h>
* @code #include <uart.h> @endcode * @code #include <uart.h> @endcode
* *
* @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers. * @brief Interrupt UART library using the built-in UART with transmit and receive circular buffers.
* *
* This library can be used to transmit and receive data through the built in UART. * This library can be used to transmit and receive data through the built in UART.
* *
* An interrupt is generated when the UART has finished transmitting or * An interrupt is generated when the UART has finished transmitting or
* receiving a byte. The interrupt handling routines use circular buffers * receiving a byte. The interrupt handling routines use circular buffers
* for buffering received and transmitted data. * for buffering received and transmitted data.
* *
* The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define * The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE constants define
* the size of the circular buffers in bytes. Note that these constants must be a power of 2. * the size of the circular buffers in bytes. Note that these constants must be a power of 2.
* You may need to adapt these constants to your target and your application by adding * You may need to adapt these constants to your target and your application by adding
* CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_TX_BUFFER_SIZE=nn to your Makefile. * CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_TX_BUFFER_SIZE=nn to your Makefile.
* *
* @note Based on Atmel Application Note AVR306 * @note Based on Atmel Application Note AVR306
* @author Peter Fleury pfleury@gmx.ch http://tinyurl.com/peterfleury * @author Peter Fleury pfleury@gmx.ch http://tinyurl.com/peterfleury
* @copyright (C) 2015 Peter Fleury, GNU General Public License Version 3 * @copyright (C) 2015 Peter Fleury, GNU General Public License Version 3
*/ */
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#if (__GNUC__ * 100 + __GNUC_MINOR__) < 405 #if (__GNUC__ * 100 + __GNUC_MINOR__) < 405
#error "This library requires AVR-GCC 4.5 or later, update to newer AVR-GCC compiler !" #error "This library requires AVR-GCC 4.5 or later, update to newer AVR-GCC compiler !"
#endif #endif
/**@{*/ /**@{*/
/* /*
** constants and macros ** constants and macros
*/ */
/** @brief UART Baudrate Expression /** @brief UART Baudrate Expression
* @param xtalCpu system clock in Mhz, e.g. 4000000UL for 4Mhz * @param xtalCpu system clock in Mhz, e.g. 4000000UL for 4Mhz
* @param baudRate baudrate in bps, e.g. 1200, 2400, 9600 * @param baudRate baudrate in bps, e.g. 1200, 2400, 9600
*/ */
#define UART_BAUD_SELECT(baudRate,xtalCpu) (((xtalCpu) + 8UL * (baudRate)) / (16UL * (baudRate)) -1UL) #define UART_BAUD_SELECT(baudRate,xtalCpu) (((xtalCpu) + 8UL * (baudRate)) / (16UL * (baudRate)) -1UL)
/** @brief UART Baudrate Expression for ATmega double speed mode /** @brief UART Baudrate Expression for ATmega double speed mode
* @param xtalCpu system clock in Mhz, e.g. 4000000UL for 4Mhz * @param xtalCpu system clock in Mhz, e.g. 4000000UL for 4Mhz
* @param baudRate baudrate in bps, e.g. 1200, 2400, 9600 * @param baudRate baudrate in bps, e.g. 1200, 2400, 9600
*/ */
#define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) ( ((((xtalCpu) + 4UL * (baudRate)) / (8UL * (baudRate)) -1UL)) | 0x8000) #define UART_BAUD_SELECT_DOUBLE_SPEED(baudRate,xtalCpu) ( ((((xtalCpu) + 4UL * (baudRate)) / (8UL * (baudRate)) -1UL)) | 0x8000)
/** @brief Size of the circular receive buffer, must be power of 2 /** @brief Size of the circular receive buffer, must be power of 2
* *
* You may need to adapt this constant to your target and your application by adding * You may need to adapt this constant to your target and your application by adding
* CDEFS += -DUART_RX_BUFFER_SIZE=nn to your Makefile. * CDEFS += -DUART_RX_BUFFER_SIZE=nn to your Makefile.
*/ */
#ifndef UART_RX_BUFFER_SIZE #ifndef UART_RX_BUFFER_SIZE
#define UART_RX_BUFFER_SIZE 32 #define UART_RX_BUFFER_SIZE 32
#endif #endif
/** @brief Size of the circular transmit buffer, must be power of 2 /** @brief Size of the circular transmit buffer, must be power of 2
* *
* You may need to adapt this constant to your target and your application by adding * You may need to adapt this constant to your target and your application by adding
* CDEFS += -DUART_TX_BUFFER_SIZE=nn to your Makefile. * CDEFS += -DUART_TX_BUFFER_SIZE=nn to your Makefile.
*/ */
#ifndef UART_TX_BUFFER_SIZE #ifndef UART_TX_BUFFER_SIZE
#define UART_TX_BUFFER_SIZE 32 #define UART_TX_BUFFER_SIZE 32
#endif #endif
/* test if the size of the circular buffers fits into SRAM */ /* test if the size of the circular buffers fits into SRAM */
#if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) ) #if ( (UART_RX_BUFFER_SIZE+UART_TX_BUFFER_SIZE) >= (RAMEND-0x60 ) )
#error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than size of SRAM" #error "size of UART_RX_BUFFER_SIZE + UART_TX_BUFFER_SIZE larger than size of SRAM"
#endif #endif
/* /*
** high byte error return code of uart_getc() ** high byte error return code of uart_getc()
*/ */
#define UART_FRAME_ERROR 0x1000 /**< @brief Framing Error by UART */ #define UART_FRAME_ERROR 0x1000 /**< @brief Framing Error by UART */
#define UART_OVERRUN_ERROR 0x0800 /**< @brief Overrun condition by UART */ #define UART_OVERRUN_ERROR 0x0800 /**< @brief Overrun condition by UART */
#define UART_PARITY_ERROR 0x0400 /**< @brief Parity Error by UART */ #define UART_PARITY_ERROR 0x0400 /**< @brief Parity Error by UART */
#define UART_BUFFER_OVERFLOW 0x0200 /**< @brief receive ringbuffer overflow */ #define UART_BUFFER_OVERFLOW 0x0200 /**< @brief receive ringbuffer overflow */
#define UART_NO_DATA 0x0100 /**< @brief no receive data available */ #define UART_NO_DATA 0x0100 /**< @brief no receive data available */
/* /*
** function prototypes ** function prototypes
*/ */
/** /**
@brief Initialize UART and set baudrate @brief Initialize UART and set baudrate
@param baudrate Specify baudrate using macro UART_BAUD_SELECT() @param baudrate Specify baudrate using macro UART_BAUD_SELECT()
@return none @return none
*/ */
extern void uart_init(unsigned int baudrate); extern void uart_init(unsigned int baudrate);
/** /**
* @brief Get received byte from ringbuffer * @brief Get received byte from ringbuffer
* *
* Returns in the lower byte the received character and in the * Returns in the lower byte the received character and in the
* higher byte the last receive error. * higher byte the last receive error.
* UART_NO_DATA is returned when no data is available. * UART_NO_DATA is returned when no data is available.
* *
* @return lower byte: received byte from ringbuffer * @return lower byte: received byte from ringbuffer
* @return higher byte: last receive status * @return higher byte: last receive status
* - \b 0 successfully received data from UART * - \b 0 successfully received data from UART
* - \b UART_NO_DATA * - \b UART_NO_DATA
* <br>no receive data available * <br>no receive data available
* - \b UART_BUFFER_OVERFLOW * - \b UART_BUFFER_OVERFLOW
* <br>Receive ringbuffer overflow. * <br>Receive ringbuffer overflow.
* We are not reading the receive buffer fast enough, * We are not reading the receive buffer fast enough,
* one or more received character have been dropped * one or more received character have been dropped
* - \b UART_OVERRUN_ERROR * - \b UART_OVERRUN_ERROR
* <br>Overrun condition by UART. * <br>Overrun condition by UART.
* A character already present in the UART UDR register was * A character already present in the UART UDR register was
* not read by the interrupt handler before the next character arrived, * not read by the interrupt handler before the next character arrived,
* one or more received characters have been dropped. * one or more received characters have been dropped.
* - \b UART_FRAME_ERROR * - \b UART_FRAME_ERROR
* <br>Framing Error by UART * <br>Framing Error by UART
*/ */
extern unsigned int uart_getc(void); extern unsigned int uart_getc(void);
/** /**
* @brief Put byte to ringbuffer for transmitting via UART * @brief Put byte to ringbuffer for transmitting via UART
* @param data byte to be transmitted * @param data byte to be transmitted
* @return none * @return none
*/ */
extern void uart_putc(unsigned char data); extern void uart_putc(unsigned char data);
/** /**
* @brief Put string to ringbuffer for transmitting via UART * @brief Put string to ringbuffer for transmitting via UART
* *
* The string is buffered by the uart library in a circular buffer * The string is buffered by the uart library in a circular buffer
* and one character at a time is transmitted to the UART using interrupts. * and one character at a time is transmitted to the UART using interrupts.
* Blocks if it can not write the whole string into the circular buffer. * Blocks if it can not write the whole string into the circular buffer.
* *
* @param s string to be transmitted * @param s string to be transmitted
* @return none * @return none
*/ */
extern void uart_puts(const char *s ); extern void uart_puts(const char *s );
/** /**
* @brief Put string from program memory to ringbuffer for transmitting via UART. * @brief Put string from program memory to ringbuffer for transmitting via UART.
* *
* The string is buffered by the uart library in a circular buffer * The string is buffered by the uart library in a circular buffer
* and one character at a time is transmitted to the UART using interrupts. * and one character at a time is transmitted to the UART using interrupts.
* Blocks if it can not write the whole string into the circular buffer. * Blocks if it can not write the whole string into the circular buffer.
* *
* @param s program memory string to be transmitted * @param s program memory string to be transmitted
* @return none * @return none
* @see uart_puts_P * @see uart_puts_P
*/ */
extern void uart_puts_p(const char *s ); extern void uart_puts_p(const char *s );
/** /**
* @brief Macro to automatically put a string constant into program memory * @brief Macro to automatically put a string constant into program memory
*/ */
#define uart_puts_P(__s) uart_puts_p(PSTR(__s)) #define uart_puts_P(__s) uart_puts_p(PSTR(__s))
/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */ /** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */
extern void uart1_init(unsigned int baudrate); extern void uart1_init(unsigned int baudrate);
/** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */ /** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */
extern unsigned int uart1_getc(void); extern unsigned int uart1_getc(void);
/** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */ /** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */
extern void uart1_putc(unsigned char data); extern void uart1_putc(unsigned char data);
/** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */ /** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */
extern void uart1_puts(const char *s ); extern void uart1_puts(const char *s );
/** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */ /** @brief Put string from program memory to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts_p */
extern void uart1_puts_p(const char *s ); extern void uart1_puts_p(const char *s );
/** @brief Macro to automatically put a string constant into program memory */ /** @brief Macro to automatically put a string constant into program memory */
#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s)) #define uart1_puts_P(__s) uart1_puts_p(PSTR(__s))
/**@}*/ /**@}*/
#endif // UART_H #endif // UART_H