From 5227e9c16191c8fdcfe2d060cd8b8ac9e1bcb20d Mon Sep 17 00:00:00 2001 From: WarL0ck Date: Mon, 9 Dec 2013 21:06:29 +0700 Subject: [PATCH] Merge --- Rmodule/Rmodule.aps | 2 +- Rmodule/default/Makefile | 9 +- Rmodule/main.c | 101 ++---- Rmodule/res/strings.h | 17 - Rmodule/rmodule.aws | 2 +- Rmodule/uart/uart.c | 663 -------------------------------------- Rmodule/uart/uart.h | 195 ----------- Rmodule/uart/uart_addon.c | 118 ------- Rmodule/uart/uart_addon.h | 121 ------- boot/boot.aps | 2 +- boot/boot.aws | 2 +- boot/makefile | 2 +- 12 files changed, 41 insertions(+), 1193 deletions(-) delete mode 100755 Rmodule/res/strings.h delete mode 100755 Rmodule/uart/uart.c delete mode 100755 Rmodule/uart/uart.h delete mode 100755 Rmodule/uart/uart_addon.c delete mode 100755 Rmodule/uart/uart_addon.h diff --git a/Rmodule/Rmodule.aps b/Rmodule/Rmodule.aps index f98c53f..a232a43 100755 --- a/Rmodule/Rmodule.aps +++ b/Rmodule/Rmodule.aps @@ -1 +1 @@ -Rmodule14-Nov-2013 11:48:5718-Nov-2013 21:18:20241014-Nov-2013 11:48:5744, 19, 0, 730AVR GCCdefault\Rmodule.elfc:\Hard\Rmodule\AVR SimulatorATmega8.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000main.cuart\uart.conewire\onewire.cC:\Hard\Git\Rmodule\uart\uart_addon.cuart\uart.hres\strings.honewire\onewire.hC:\Hard\Git\Rmodule\uart\uart_addon.hdefault\Rmodule.lssdefault\Rmodule.mapdefaultNOatmega8111Rmodule.elfdefault\1-Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault1C:\Program Files\Atmel\AVR Tools\AVR Toolchain\bin\avr-gcc.exeC:\Program Files\Atmel\AVR Tools\AVR Toolchain\bin\make.exec:\Hard\Rmodule\uart\uart.hc:\Hard\Rmodule\res\strings.hc:\Hard\Rmodule\onewire\onewire.hC:\Hard\Git\Rmodule\uart\uart_addon.hc:\Hard\Rmodule\main.cc:\Hard\Rmodule\uart\uart.cc:\Hard\Rmodule\onewire\onewire.cC:\Hard\Git\Rmodule\uart\uart_addon.c00000main.c100001res\strings.h1 +Rmodule14-Nov-2013 11:48:5708-Dec-2013 20:52:55241014-Nov-2013 11:48:5744, 19, 0, 730AVR GCCdefault\Rmodule.elfC:\Hard\Git\Rmodule\AVR SimulatorATmega8.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000main.cC:\Hard\Git\Rmodule\nrf24l01\radioPinFunctions.cC:\Hard\Git\Rmodule\nrf24l01\nrf24.cC:\Hard\Git\Rmodule\nrf24l01\nRF24L01.hC:\Hard\Git\Rmodule\nrf24l01\nrf24.hdefault\Rmodule.lssdefault\Rmodule.mapdefaultNOatmega8111Rmodule.elfdefault\1-Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault1C:\Program Files\Atmel\AVR Tools\AVR Toolchain\bin\avr-gcc.exeC:\Program Files\Atmel\AVR Tools\AVR Toolchain\bin\make.exeC:\Hard\Git\Rmodule\nrf24l01\nRF24L01.hC:\Hard\Git\Rmodule\nrf24l01\nrf24.hC:\Hard\Git\Rmodule\main.cC:\Hard\Git\Rmodule\nrf24l01\radioPinFunctions.cC:\Hard\Git\Rmodule\nrf24l01\nrf24.c00000main.c1 diff --git a/Rmodule/default/Makefile b/Rmodule/default/Makefile index 12f6b4f..8b056c5 100755 --- a/Rmodule/default/Makefile +++ b/Rmodule/default/Makefile @@ -37,7 +37,7 @@ HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings ## Objects that must be built in order to link -OBJECTS = main.o uart.o onewire.o uart_addon.o +OBJECTS = main.o radioPinFunctions.o nrf24.o ## Objects explicitly added by the user LINKONLYOBJECTS = @@ -49,13 +49,10 @@ all: $(TARGET) Rmodule.hex Rmodule.eep Rmodule.lss size main.o: ../main.c $(CC) $(INCLUDES) $(CFLAGS) -c $< -uart.o: ../uart/uart.c +radioPinFunctions.o: ../nrf24l01/radioPinFunctions.c $(CC) $(INCLUDES) $(CFLAGS) -c $< -onewire.o: ../onewire/onewire.c - $(CC) $(INCLUDES) $(CFLAGS) -c $< - -uart_addon.o: ../../Git/Rmodule/uart/uart_addon.c +nrf24.o: ../nrf24l01/nrf24.c $(CC) $(INCLUDES) $(CFLAGS) -c $< ##Link diff --git a/Rmodule/main.c b/Rmodule/main.c index 21dfab6..47edfd3 100755 --- a/Rmodule/main.c +++ b/Rmodule/main.c @@ -3,81 +3,46 @@ #include #include #include -#include "uart/uart.h" -#include "uart/uart_addon.h" -#include "onewire/onewire.h" -#include "res/strings.h" +#include +#include "nrf24l01/nrf24.h" -#define UART_BAUD_RATE 19200 +typedef struct data_arr{ + uint8_t buffer[32]; +}data_array; -unsigned char get_uart_char(void){ - unsigned int res; - do{ - res = uart_getc(); - } while(res & UART_NO_DATA); - return (unsigned char) res; -} - -static int get_uart_line(char *pbuf, int len_ln){ - int i = 0; - unsigned char c; - len_ln=len_ln-1; - - while((c=get_uart_char()) != 0x0D && i0){ - if (strcmp_P(cmd, CmdLD)==0){ - getListDevices(); - } - if (strcmp_P(cmd, CmdHelp)==0){ - uart_puts_p(HelpTitle); - uart_puts_p(HelpItem1); - uart_puts_p(HelpItem2); - } - } + if(nrf24_dataReady()){ + nrf24_getData((uint8_t *) &buff); + nrf24_send((uint8_t*) &buff); + /* Wait for transmission to end */ + while(nrf24_isSending()); + /* Optionally, go back to RX mode ... */ + nrf24_powerUpRx(); + + /* Wait a little ... */ + _delay_ms(10); + } } } diff --git a/Rmodule/res/strings.h b/Rmodule/res/strings.h deleted file mode 100755 index cea7272..0000000 --- a/Rmodule/res/strings.h +++ /dev/null @@ -1,17 +0,0 @@ -#include - -#define CRLF "\r\n" - -// -const char CmdLD[] PROGMEM = "ld"; -const char CmdHelp[] PROGMEM = "h"; - -// Список команд -const char HelpTitle[] PROGMEM = CRLF "Command list:"; -const char HelpItem1[] PROGMEM = CRLF "ld - List devices"; -const char HelpItem2[] PROGMEM = CRLF "h - Show this help"; -const char CmdPrompt[] PROGMEM = CRLF "$ "; - -// Разные нужные строки -const char ScanStr[] PROGMEM = CRLF "Scanning 1-wire bus" CRLF; - diff --git a/Rmodule/rmodule.aws b/Rmodule/rmodule.aws index f836f76..cec2df8 100755 --- a/Rmodule/rmodule.aws +++ b/Rmodule/rmodule.aws @@ -1 +1 @@ - + diff --git a/Rmodule/uart/uart.c b/Rmodule/uart/uart.c deleted file mode 100755 index 3cb2a81..0000000 --- a/Rmodule/uart/uart.c +++ /dev/null @@ -1,663 +0,0 @@ -/************************************************************************* -Title: Interrupt UART library with receive/transmit circular buffers -Author: Peter Fleury http://jump.to/fleury -File: $Id: uart.c,v 1.10 2013/06/02 07:27:04 peter Exp $ -Software: AVR-GCC 4.1, AVR Libc 1.4.6 or higher -Hardware: any AVR with built-in UART, -License: GNU General Public License - -DESCRIPTION: - An interrupt is generated when the UART has finished transmitting or - receiving a byte. The interrupt handling routines use circular buffers - for buffering received and transmitted data. - - The UART_RX_BUFFER_SIZE and UART_TX_BUFFER_SIZE variables define - the buffer size in bytes. Note that these variables must be a - power of 2. - -USAGE: - Refere to the header file uart.h for a description of the routines. - See also example test_uart.c. - -NOTES: - Based on Atmel Application Note AVR306 - -LICENSE: - Copyright (C) 2006 Peter Fleury - - 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 - the Free Software Foundation; either version 2 of the License, or - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - -*************************************************************************/ -#include -#include -#include -#include "uart.h" - - -/* - * constants and macros - */ - -/* size of RX/TX buffers */ -#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1) -#define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1) - -#if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK ) -#error RX buffer size is not a power of 2 -#endif -#if ( UART_TX_BUFFER_SIZE & UART_TX_BUFFER_MASK ) -#error TX buffer size is not a power of 2 -#endif - -#if defined(__AVR_AT90S2313__) \ - || defined(__AVR_AT90S4414__) || defined(__AVR_AT90S4434__) \ - || defined(__AVR_AT90S8515__) || defined(__AVR_AT90S8535__) \ - || defined(__AVR_ATmega103__) - /* old AVR classic or ATmega103 with one UART */ - #define AT90_UART - #define UART0_RECEIVE_INTERRUPT UART_RX_vect - #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect - #define UART0_STATUS USR - #define UART0_CONTROL UCR - #define UART0_DATA UDR - #define UART0_UDRIE UDRIE -#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__) - /* old AVR classic with one UART */ - #define AT90_UART - #define UART0_RECEIVE_INTERRUPT UART_RX_vect - #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect - #define UART0_STATUS UCSRA - #define UART0_CONTROL UCSRB - #define UART0_DATA UDR - #define UART0_UDRIE UDRIE -#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \ - || defined(__AVR_ATmega323__) - /* ATmega with one USART */ - #define ATMEGA_USART - #define UART0_RECEIVE_INTERRUPT USART_RXC_vect - #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect - #define UART0_STATUS UCSRA - #define UART0_CONTROL UCSRB - #define UART0_DATA UDR - #define UART0_UDRIE UDRIE -#elif defined (__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) - #define ATMEGA_USART - #define UART0_RECEIVE_INTERRUPT USART_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect - #define UART0_STATUS UCSRA - #define UART0_CONTROL UCSRB - #define UART0_DATA UDR - #define UART0_UDRIE UDRIE -#elif defined(__AVR_ATmega163__) - /* ATmega163 with one UART */ - #define ATMEGA_UART - #define UART0_RECEIVE_INTERRUPT UART_RX_vect - #define UART0_TRANSMIT_INTERRUPT UART_UDRE_vect - #define UART0_STATUS UCSRA - #define UART0_CONTROL UCSRB - #define UART0_DATA UDR - #define UART0_UDRIE UDRIE -#elif defined(__AVR_ATmega162__) - /* ATmega with two USART */ - #define ATMEGA_USART0 - #define ATMEGA_USART1 - #define UART0_RECEIVE_INTERRUPT USART0_RXC_vect - #define UART1_RECEIVE_INTERRUPT USART1_RXC_vect - #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect - #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect - #define UART0_STATUS UCSR0A - #define UART0_CONTROL UCSR0B - #define UART0_DATA UDR0 - #define UART0_UDRIE UDRIE0 - #define UART1_STATUS UCSR1A - #define UART1_CONTROL UCSR1B - #define UART1_DATA UDR1 - #define UART1_UDRIE UDRIE1 -#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) - /* ATmega with two USART */ - #define ATMEGA_USART0 - #define ATMEGA_USART1 - #define UART0_RECEIVE_INTERRUPT USART0_RX_vect - #define UART1_RECEIVE_INTERRUPT USART1_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect - #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect - #define UART0_STATUS UCSR0A - #define UART0_CONTROL UCSR0B - #define UART0_DATA UDR0 - #define UART0_UDRIE UDRIE0 - #define UART1_STATUS UCSR1A - #define UART1_CONTROL UCSR1B - #define UART1_DATA UDR1 - #define UART1_UDRIE UDRIE1 -#elif defined(__AVR_ATmega161__) - /* ATmega with UART */ - #error "AVR ATmega161 currently not supported by this libaray !" -#elif defined(__AVR_ATmega169__) - /* ATmega with one USART */ - #define ATMEGA_USART - #define UART0_RECEIVE_INTERRUPT USART0_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect - #define UART0_STATUS UCSRA - #define UART0_CONTROL UCSRB - #define UART0_DATA UDR - #define UART0_UDRIE UDRIE -#elif defined(__AVR_ATmega48__) || defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega48P__) || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__) \ - || defined(__AVR_ATmega3250__) || defined(__AVR_ATmega3290__) ||defined(__AVR_ATmega6450__) || defined(__AVR_ATmega6490__) - /* ATmega with one USART */ - #define ATMEGA_USART0 - #define UART0_RECEIVE_INTERRUPT USART_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect - #define UART0_STATUS UCSR0A - #define UART0_CONTROL UCSR0B - #define UART0_DATA UDR0 - #define UART0_UDRIE UDRIE0 -#elif defined(__AVR_ATtiny2313__) - #define ATMEGA_USART - #define UART0_RECEIVE_INTERRUPT USART_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART_UDRE_vect - #define UART0_STATUS UCSRA - #define UART0_CONTROL UCSRB - #define UART0_DATA UDR - #define UART0_UDRIE UDRIE -#elif defined(__AVR_ATmega329__) || \ - defined(__AVR_ATmega649__) || \ - defined(__AVR_ATmega325__) || \ - defined(__AVR_ATmega645__) - /* ATmega with one USART */ - #define ATMEGA_USART0 - #define UART0_RECEIVE_INTERRUPT USART0_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect - #define UART0_STATUS UCSR0A - #define UART0_CONTROL UCSR0B - #define UART0_DATA UDR0 - #define UART0_UDRIE UDRIE0 -#elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega640__) -/* ATmega with two USART */ - #define ATMEGA_USART0 - #define ATMEGA_USART1 - #define UART0_RECEIVE_INTERRUPT USART0_RX_vect - #define UART1_RECEIVE_INTERRUPT USART1_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect - #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect - #define UART0_STATUS UCSR0A - #define UART0_CONTROL UCSR0B - #define UART0_DATA UDR0 - #define UART0_UDRIE UDRIE0 - #define UART1_STATUS UCSR1A - #define UART1_CONTROL UCSR1B - #define UART1_DATA UDR1 - #define UART1_UDRIE UDRIE1 -#elif defined(__AVR_ATmega644__) - /* ATmega with one USART */ - #define ATMEGA_USART0 - #define UART0_RECEIVE_INTERRUPT USART0_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect - #define UART0_STATUS UCSR0A - #define UART0_CONTROL UCSR0B - #define UART0_DATA UDR0 - #define UART0_UDRIE UDRIE0 -#elif defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega644P__) - /* ATmega with two USART */ - #define ATMEGA_USART0 - #define ATMEGA_USART1 - #define UART0_RECEIVE_INTERRUPT USART0_RX_vect - #define UART1_RECEIVE_INTERRUPT USART1_RX_vect - #define UART0_TRANSMIT_INTERRUPT USART0_UDRE_vect - #define UART1_TRANSMIT_INTERRUPT USART1_UDRE_vect - #define UART0_STATUS UCSR0A - #define UART0_CONTROL UCSR0B - #define UART0_DATA UDR0 - #define UART0_UDRIE UDRIE0 - #define UART1_STATUS UCSR1A - #define UART1_CONTROL UCSR1B - #define UART1_DATA UDR1 - #define UART1_UDRIE UDRIE1 -#else - #error "no UART definition for MCU available" -#endif - - -/* - * module global variables - */ -static volatile unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE]; -static volatile unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE]; -static volatile unsigned char UART_TxHead; -static volatile unsigned char UART_TxTail; -static volatile unsigned char UART_RxHead; -static volatile unsigned char UART_RxTail; -static volatile unsigned char UART_LastRxError; - -#if defined( ATMEGA_USART1 ) -static volatile unsigned char UART1_TxBuf[UART_TX_BUFFER_SIZE]; -static volatile unsigned char UART1_RxBuf[UART_RX_BUFFER_SIZE]; -static volatile unsigned char UART1_TxHead; -static volatile unsigned char UART1_TxTail; -static volatile unsigned char UART1_RxHead; -static volatile unsigned char UART1_RxTail; -static volatile unsigned char UART1_LastRxError; -#endif - - - -ISR (UART0_RECEIVE_INTERRUPT) -/************************************************************************* -Function: UART Receive Complete interrupt -Purpose: called when the UART has received a character -**************************************************************************/ -{ - unsigned char tmphead; - unsigned char data; - unsigned char usr; - unsigned char lastRxError; - - - /* read UART status register and UART data register */ - usr = UART0_STATUS; - data = UART0_DATA; - - /* */ -#if defined( AT90_UART ) - lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); -#elif defined( ATMEGA_USART ) - lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); -#elif defined( ATMEGA_USART0 ) - lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) ); -#elif defined ( ATMEGA_UART ) - lastRxError = (usr & (_BV(FE)|_BV(DOR)) ); -#endif - - /* calculate buffer index */ - tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK; - - if ( tmphead == UART_RxTail ) { - /* error: receive buffer overflow */ - lastRxError = UART_BUFFER_OVERFLOW >> 8; - }else{ - /* store new index */ - UART_RxHead = tmphead; - /* store received data in buffer */ - UART_RxBuf[tmphead] = data; - } - UART_LastRxError |= lastRxError; -} - - -ISR (UART0_TRANSMIT_INTERRUPT) -/************************************************************************* -Function: UART Data Register Empty interrupt -Purpose: called when the UART is ready to transmit the next byte -**************************************************************************/ -{ - unsigned char tmptail; - - - if ( UART_TxHead != UART_TxTail) { - /* calculate and store new buffer index */ - tmptail = (UART_TxTail + 1) & UART_TX_BUFFER_MASK; - UART_TxTail = tmptail; - /* get one byte from buffer and write it to UART */ - UART0_DATA = UART_TxBuf[tmptail]; /* start transmission */ - }else{ - /* tx buffer empty, disable UDRE interrupt */ - UART0_CONTROL &= ~_BV(UART0_UDRIE); - } -} - - -/************************************************************************* -Function: uart_init() -Purpose: initialize UART and set baudrate -Input: baudrate using macro UART_BAUD_SELECT() -Returns: none -**************************************************************************/ -void uart_init(unsigned int baudrate) -{ - UART_TxHead = 0; - UART_TxTail = 0; - UART_RxHead = 0; - UART_RxTail = 0; - -#if defined( AT90_UART ) - /* set baud rate */ - UBRR = (unsigned char)baudrate; - - /* enable UART receiver and transmmitter and receive complete interrupt */ - UART0_CONTROL = _BV(RXCIE)|_BV(RXEN)|_BV(TXEN); - -#elif defined (ATMEGA_USART) - /* Set baud rate */ - if ( baudrate & 0x8000 ) - { - UART0_STATUS = (1<>8); - UBRRL = (unsigned char) baudrate; - - /* Enable USART receiver and transmitter and receive complete interrupt */ - UART0_CONTROL = _BV(RXCIE)|(1<>8); - UBRR0L = (unsigned char) baudrate; - - /* Enable USART receiver and transmitter and receive complete interrupt */ - UART0_CONTROL = _BV(RXCIE0)|(1<>8); - UBRR = (unsigned char) baudrate; - - /* Enable UART receiver and transmitter and receive complete interrupt */ - UART0_CONTROL = _BV(RXCIE)|(1<> 8; - }else{ - /* store new index */ - UART1_RxHead = tmphead; - /* store received data in buffer */ - UART1_RxBuf[tmphead] = data; - } - UART1_LastRxError |= lastRxError; -} - - -ISR(UART1_TRANSMIT_INTERRUPT) -/************************************************************************* -Function: UART1 Data Register Empty interrupt -Purpose: called when the UART1 is ready to transmit the next byte -**************************************************************************/ -{ - unsigned char tmptail; - - - if ( UART1_TxHead != UART1_TxTail) { - /* calculate and store new buffer index */ - tmptail = (UART1_TxTail + 1) & UART_TX_BUFFER_MASK; - UART1_TxTail = tmptail; - /* get one byte from buffer and write it to UART */ - UART1_DATA = UART1_TxBuf[tmptail]; /* start transmission */ - }else{ - /* tx buffer empty, disable UDRE interrupt */ - UART1_CONTROL &= ~_BV(UART1_UDRIE); - } -} - - -/************************************************************************* -Function: uart1_init() -Purpose: initialize UART1 and set baudrate -Input: baudrate using macro UART_BAUD_SELECT() -Returns: none -**************************************************************************/ -void uart1_init(unsigned int baudrate) -{ - UART1_TxHead = 0; - UART1_TxTail = 0; - UART1_RxHead = 0; - UART1_RxTail = 0; - - - /* Set baud rate */ - if ( baudrate & 0x8000 ) - { - UART1_STATUS = (1<>8); - UBRR1L = (unsigned char) baudrate; - - /* Enable USART receiver and transmitter and receive complete interrupt */ - UART1_CONTROL = _BV(RXCIE1)|(1< http://jump.to/fleury -File: $Id: uart.h,v 1.12 2012/11/19 19:52:27 peter Exp $ -Software: AVR-GCC 4.1, AVR Libc 1.4 -Hardware: any AVR with built-in UART, tested on AT90S8515 & ATmega8 at 4 Mhz -License: GNU General Public License -Usage: see Doxygen manual - -LICENSE: - Copyright (C) 2006 Peter Fleury - - 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 - the Free Software Foundation; either version 2 of the License, or - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - -************************************************************************/ - -/** - * @defgroup pfleury_uart UART Library - * @code #include @endcode - * - * @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. - * - * An interrupt is generated when the UART has finished transmitting or - * receiving a byte. The interrupt handling routines use circular buffers - * for buffering received and transmitted data. - * - * 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. - * You may need to adapt this constants to your target and your application by adding - * CDEFS += -DUART_RX_BUFFER_SIZE=nn -DUART_RX_BUFFER_SIZE=nn to your Makefile. - * - * @note Based on Atmel Application Note AVR306 - * @author Peter Fleury pfleury@gmx.ch http://jump.to/fleury - */ - -/**@{*/ - - -#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304 -#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !" -#endif - - -/* -** constants and macros -*/ - -/** @brief UART Baudrate Expression - * @param xtalcpu system clock in Mhz, e.g. 4000000UL for 4Mhz - * @param baudrate baudrate in bps, e.g. 1200, 2400, 9600 - */ -#define UART_BAUD_SELECT(baudRate,xtalCpu) (((xtalCpu) + 8UL * (baudRate)) / (16UL * (baudRate)) -1UL) - -/** @brief UART Baudrate Expression for ATmega double speed mode - * @param xtalcpu system clock in Mhz, e.g. 4000000UL for 4Mhz - * @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) - - -/** Size of the circular receive buffer, must be power of 2 */ -#ifndef UART_RX_BUFFER_SIZE -#define UART_RX_BUFFER_SIZE 32 -#endif -/** Size of the circular transmit buffer, must be power of 2 */ -#ifndef UART_TX_BUFFER_SIZE -#define UART_TX_BUFFER_SIZE 32 -#endif - -/* test if the size of the circular buffers fits into SRAM */ -#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" -#endif - -/* -** high byte error return code of uart_getc() -*/ -#define UART_FRAME_ERROR 0x1000 /* Framing Error by UART */ -#define UART_OVERRUN_ERROR 0x0800 /* Overrun condition by UART */ -#define UART_PARITY_ERROR 0x0400 /* Parity Error by UART */ -#define UART_BUFFER_OVERFLOW 0x0200 /* receive ringbuffer overflow */ -#define UART_NO_DATA 0x0100 /* no receive data available */ - - -/* -** function prototypes -*/ - -/** - @brief Initialize UART and set baudrate - @param baudrate Specify baudrate using macro UART_BAUD_SELECT() - @return none -*/ -extern void uart_init(unsigned int baudrate); - - -/** - * @brief Get received byte from ringbuffer - * - * Returns in the lower byte the received character and in the - * higher byte the last receive error. - * UART_NO_DATA is returned when no data is available. - * - * @param void - * @return lower byte: received byte from ringbuffer - * @return higher byte: last receive status - * - \b 0 successfully received data from UART - * - \b UART_NO_DATA - *
no receive data available - * - \b UART_BUFFER_OVERFLOW - *
Receive ringbuffer overflow. - * We are not reading the receive buffer fast enough, - * one or more received character have been dropped - * - \b UART_OVERRUN_ERROR - *
Overrun condition by UART. - * A character already present in the UART UDR register was - * not read by the interrupt handler before the next character arrived, - * one or more received characters have been dropped. - * - \b UART_FRAME_ERROR - *
Framing Error by UART - */ -extern unsigned int uart_getc(void); - - -/** - * @brief Put byte to ringbuffer for transmitting via UART - * @param data byte to be transmitted - * @return none - */ -extern void uart_putc(unsigned char data); - - -/** - * @brief Put string to ringbuffer for transmitting via UART - * - * 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. - * Blocks if it can not write the whole string into the circular buffer. - * - * @param s string to be transmitted - * @return none - */ -extern void uart_puts(const char *s ); - - -/** - * @brief Put string from program memory to ringbuffer for transmitting via UART. - * - * 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. - * Blocks if it can not write the whole string into the circular buffer. - * - * @param s program memory string to be transmitted - * @return none - * @see uart_puts_P - */ -extern void uart_puts_p(const char *s ); - -/** - * @brief Macro to automatically put a string constant into program memory - */ -#define uart_puts_P(__s) uart_puts_p(PSTR(__s)) - - - -/** @brief Initialize USART1 (only available on selected ATmegas) @see uart_init */ -extern void uart1_init(unsigned int baudrate); -/** @brief Get received byte of USART1 from ringbuffer. (only available on selected ATmega) @see uart_getc */ -extern unsigned int uart1_getc(void); -/** @brief Put byte to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_putc */ -extern void uart1_putc(unsigned char data); -/** @brief Put string to ringbuffer for transmitting via USART1 (only available on selected ATmega) @see uart_puts */ -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 */ -extern void uart1_puts_p(const char *s ); -/** @brief Macro to automatically put a string constant into program memory */ -#define uart1_puts_P(__s) uart1_puts_p(PSTR(__s)) - -/**@}*/ - - -#endif // UART_H - diff --git a/Rmodule/uart/uart_addon.c b/Rmodule/uart/uart_addon.c deleted file mode 100755 index b2544da..0000000 --- a/Rmodule/uart/uart_addon.c +++ /dev/null @@ -1,118 +0,0 @@ -/************************************************************************* -Title: UART addon-library -Author: Martin Thomas - http://www.siwawi.arubi.uni-kl.de/avr_projects -Software: AVR-GCC 3.3/3.4, Peter Fleury's UART-Library - -DESCRIPTION: - -USAGE: - Refere to the header file uart_addon.h for a description of the routines. - -*************************************************************************/ - -#include - -#include -#include "uart.h" - - -/************************************************************************* -Function: uart_put_int() -Purpose: transmit integer as ASCII to UART -Input: integer value -Returns: none -**************************************************************************/ -void uart_put_int( const int val ) -{ - char buffer[10]; - uart_puts( itoa( val, buffer, 10 ) ); -} /* uart_puti */ - -/************************************************************************* -Function: uart_put_longint() -Purpose: transmit long integer as ASCII to UART -Input: integer value -Returns: none -**************************************************************************/ -void uart_put_longint( const long int val ) -{ - char buffer[15]; - uart_puts( ltoa( val, buffer, 10 ) ); -} /* uart_puti */ - -/************************************************************************* -Function: uart_put_ulongint() -Purpose: transmit long integer as ASCII to UART -Input: integer value -Returns: none -**************************************************************************/ -void uart_put_ulongint( const unsigned long int val ) -{ - char buffer[15]; - uart_puts( utoa( val, buffer, 10 ) ); -} /* uart_puti */ - -/************************************************************************* -Function: uart_puthex_nibble() -Purpose: transmit lower nibble as ASCII-hex to UART -Input: byte value -Returns: none -**************************************************************************/ -void uart_puthex_nibble(const unsigned char b) -{ - unsigned char c = b & 0x0f; - if ( c > 9 ) { - c += 'A'-10; - } - else { - c += '0'; - } - uart_putc(c); -} /* uart_puthex_nibble */ - -/************************************************************************* -Function: uart_puthex_byte() -Purpose: transmit upper and lower nibble as ASCII-hex to UART -Input: byte value -Returns: none -**************************************************************************/ -void uart_puthex_byte( const unsigned char b ) -{ - uart_puthex_nibble( b >> 4 ); - uart_puthex_nibble( b ); -} /* uart_puthex_byte */ - -/************************************************************************* -Function: uart_puthex_long() -Purpose: transmit unsigned long as ASCII-hex to UART -Input: uint32_t value -Returns: none -**************************************************************************/ -void uart_puthex_long( const unsigned long l ) -{ - uart_puthex_byte( (unsigned char)( l >> 24 ) ); - uart_puthex_byte( (unsigned char)( l >> 16 ) ); - uart_puthex_byte( (unsigned char)( l >> 8 ) ); - uart_puthex_byte( (unsigned char)( l ) ); -} /* uart_puthex_byte */ - - -/************************************************************************* -Function: uart_putbin_byte() -Purpose: transmit byte as ASCII-bin to UART -Input: byte value -Returns: none -**************************************************************************/ -void uart_putbin_byte( const unsigned char b ) -{ - signed char i; - for ( i= 7;i >= 0;i-- ) { - if ( b & ( 1 << i ) ) { - uart_putc( '1' ); - } - else { - uart_putc( '0' ); - } - } -} /* uart_putbin_byte */ diff --git a/Rmodule/uart/uart_addon.h b/Rmodule/uart/uart_addon.h deleted file mode 100755 index 3c4ff91..0000000 --- a/Rmodule/uart/uart_addon.h +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef UART_ADDON_H -#define UART_ADDON_H -/************************************************************************ -Title: UART addon-library -Author: Martin Thomas - http://www.siwawi.arubi.uni-kl.de/avr_projects -Software: AVR-GCC 3.3/3.4, Peter Fleury's UART-Library -************************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup UART library-addon - * @code #include @endcode - * - * @brief Additional functions for send numbers as decimal and hex to UART - * - * @note needs Peter Fleury's UART-Library http://jump.to/fleury - * @author Martin Thomas eversmith@heizung-thomas.de - */ - -/*@{*/ - -/** - * @brief Put long integer to ringbuffer for transmitting via UART. - * - * The integer is converted to a string which is buffered by the uart - * library in a circular buffer and one character at a time is transmitted - * to the UART using interrupts. - * - * @param value to transfer - * @return none - * @see uart_puts_p - */ -extern void uart_put_longint( long int i ); - - -/** - * @brief Put unsigned long integer to ringbuffer for transmitting via UART. - * - * The integer is converted to a string which is buffered by the uart - * library in a circular buffer and one character at a time is transmitted - * to the UART using interrupts. - * - * @param value to transfer - * @return none - * @see uart_puts_p - */ -extern void uart_put_ulongint( unsigned long int i ); - - -/** - * @brief Put integer to ringbuffer for transmitting via UART. - * - * The integer is converted to a string which is buffered by the uart - * library in a circular buffer and one character at a time is transmitted - * to the UART using interrupts. - * - * @param value to transfer - * @return none - * @see uart_puts_p - */ -extern void uart_put_int( int i ); - - -/** - * @brief Put nibble as hex to ringbuffer for transmit via UART. - * - * The lower nibble of the parameter is convertet to correspondig - * hex-char and put in a circular buffer and one character at a time - * is transmitted to the UART using interrupts. - * - * @param value to transfer (byte, only lower nibble converted) - * @return none - * @see uart_putc - */ -extern void uart_puthex_nibble( const unsigned char b ); - -/** - * @brief Put byte as hex to ringbuffer for transmit via UART. - * - * The upper and lower nibble of the parameter are convertet to - * correspondig hex-chars and put in a circular buffer and one - * character at a time is transmitted to the UART using interrupts. - * - * @param value to transfer - * @return none - * @see uart_puthex_nibble - */ -extern void uart_puthex_byte( const unsigned char b ); - -/** - * @brief Put unsigned long as ASCII to ringbuffer for transmit via UART. - * - * @param value to transfer - * @return none - * @see none - */ -extern void uart_puthex_long( unsigned long l ); - -/** - * @brief Put byte as bin to ringbuffer for transmit via UART. - * - * @param value to transfer - * @return none - * @see uart_putc - */ -extern void uart_putbin_byte( const unsigned char b ); - - -/*@}*/ - -#ifdef __cplusplus -} -#endif - - -#endif /* UART_ADDON_H */ - diff --git a/boot/boot.aps b/boot/boot.aps index 2e0e98c..1c6ccec 100755 --- a/boot/boot.aps +++ b/boot/boot.aps @@ -1 +1 @@ -boot12-Nov-2013 16:48:0114-Nov-2013 10:36:05241012-Nov-2013 16:48:0144, 19, 0, 730AVR GCCC:\Hard\boot\AVR SimulatorATmega8.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000main.cmakefiledefaultYESmakefileatmega8111boot.elfdefault\0-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault0C:\Hard\WinAVR-20100110\bin\avr-gcc.exeC:\Hard\WinAVR-20100110\utils\bin\make.exeC:\Hard\boot\main.c00000main.c1 +boot12-Nov-2013 16:48:0108-Dec-2013 20:52:26241012-Nov-2013 16:48:0144, 19, 0, 730AVR GCCc:\Hard\Git\boot\AVR SimulatorATmega8.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000main.cmakefiledefaultYESC:\Hard\boot\makefileatmega8111boot.elfdefault\0-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault0C:\WinAVR\bin\avr-gcc.exeC:\WinAVR\utils\bin\make.exec:\Hard\Git\boot\main.c00000main.c1 diff --git a/boot/boot.aws b/boot/boot.aws index 1a002cb..3567b1d 100755 --- a/boot/boot.aws +++ b/boot/boot.aws @@ -1 +1 @@ - + diff --git a/boot/makefile b/boot/makefile index 19887e3..47a23e0 100755 --- a/boot/makefile +++ b/boot/makefile @@ -433,7 +433,7 @@ AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) # --------------------------------------------------------------------------- # Define directories, if needed. -DIRAVR = c:/Hard/WinAVR-20100110 +DIRAVR = c:/WinAVR DIRAVRBIN = $(DIRAVR)/bin DIRAVRUTILS = $(DIRAVR)/utils/bin DIRINC = .