From 751dde0799ad6190c21e8699b2f6e989b01acdd5 Mon Sep 17 00:00:00 2001 From: bg Date: Wed, 29 Jul 2009 10:24:05 +0000 Subject: [PATCH] forgotten files --- test_src/avr-asm-macros.S | 183 ++++++++++++++++++++++++++++++++++++++ test_src/config.h | 66 ++++++++++++++ test_src/setbaud_asm.inc | 80 +++++++++++++++++ 3 files changed, 329 insertions(+) create mode 100644 test_src/avr-asm-macros.S create mode 100644 test_src/config.h create mode 100644 test_src/setbaud_asm.inc diff --git a/test_src/avr-asm-macros.S b/test_src/avr-asm-macros.S new file mode 100644 index 0000000..14f907c --- /dev/null +++ b/test_src/avr-asm-macros.S @@ -0,0 +1,183 @@ +/* avr-asm-macros.S */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + 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 3 of the License, or + (at your option) 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. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* + * File: avr-asm-macros.S + * Author: Daniel Otte + * Date: 2008-08-13 + * License: GPLv3 or later + * Description: some macros which are quite usefull + * + */ + +#include + +/******************************************************************************* +* MACRO SECTION * +*******************************************************************************/ + +.macro push_ p1:req, p2:vararg + push \p1 +.ifnb \p2 + push_ \p2 +.endif +.endm + +.macro pop_ p1:req, p2:vararg + pop \p1 +.ifnb \p2 + pop_ \p2 +.endif +.endm + +.macro push_range from:req, to:req + push \from +.if \to-\from + push_range "(\from+1)",\to +.endif +.endm + +.macro pop_range from:req, to:req + pop \to +.if \to-\from + pop_range \from,"(\to-1)" +.endif +.endm + +.macro stack_alloc size:req, reg1=r30, reg2=r31 + in r0, _SFR_IO_ADDR(SREG) + in \reg1, _SFR_IO_ADDR(SPL) + in \reg2, _SFR_IO_ADDR(SPH) + sbiw \reg1, \size + cli + out _SFR_IO_ADDR(SPH), \reg2 + out _SFR_IO_ADDR(SREG), r0 + out _SFR_IO_ADDR(SPL), \reg1 +.endm + +.macro stack_free size:req, reg1=r30, reg2=r31 + in r0, _SFR_IO_ADDR(SREG) + in \reg1, _SFR_IO_ADDR(SPL) + in \reg2, _SFR_IO_ADDR(SPH) + adiw \reg1, \size + cli + out _SFR_IO_ADDR(SPH), \reg2 + out _SFR_IO_ADDR(SREG), r0 + out _SFR_IO_ADDR(SPL), \reg1 +.endm + + +.macro stack_alloc_large size:req, reg1=r30, reg2=r31 + in r0, _SFR_IO_ADDR(SREG) + in \reg1, _SFR_IO_ADDR(SPL) + in \reg2, _SFR_IO_ADDR(SPH) + subi \reg1, lo8(\size) + sbci \reg2, hi8(\size) + cli + out _SFR_IO_ADDR(SPH), \reg2 + out _SFR_IO_ADDR(SREG), r0 + out _SFR_IO_ADDR(SPL), \reg1 +.endm + +.macro stack_free_large size:req, reg1=r30, reg2=r31 + in r0, _SFR_IO_ADDR(SREG) + in \reg1, _SFR_IO_ADDR(SPL) + in \reg2, _SFR_IO_ADDR(SPH) + adiw \reg1, 63 + adiw \reg1, (\size-63) + cli + out _SFR_IO_ADDR(SPH), \reg2 + out _SFR_IO_ADDR(SREG), r0 + out _SFR_IO_ADDR(SPL), \reg1 +.endm + +.macro stack_free_large2 size:req, reg1=r30, reg2=r31 + in r0, _SFR_IO_ADDR(SREG) + in \reg1, _SFR_IO_ADDR(SPL) + in \reg2, _SFR_IO_ADDR(SPH) + adiw \reg1, 63 + adiw \reg1, 63 + adiw \reg1, (\size-63*2) + cli + out _SFR_IO_ADDR(SPH), \reg2 + out _SFR_IO_ADDR(SREG), r0 + out _SFR_IO_ADDR(SPL), \reg1 +.endm + +.macro stack_free_large3 size:req, reg1=r30, reg2=r31 + in r0, _SFR_IO_ADDR(SREG) + in \reg1, _SFR_IO_ADDR(SPL) + in \reg2, _SFR_IO_ADDR(SPH) + push r16 + push r17 + ldi r16, lo8(\size) + ldi r17, hi8(\size) + add \reg1, r16 + adc \reg2, r17 + pop r17 + pop r16 + cli + out _SFR_IO_ADDR(SPH), \reg2 + out _SFR_IO_ADDR(SREG), r0 + out _SFR_IO_ADDR(SPL), \reg1 +.endm + +.macro LOAD_IO reg:req io:req +.if _SFR_IO_REG_P(\io) + in \reg, _SFR_IO_ADDR(\io) +.else + lds \reg, _SFR_MEM_ADDR(\io) +.endif +.endm + +.macro STORE_IO io:req reg:req +.if _SFR_IO_REG_P(\io) + out _SFR_IO_ADDR(\io), \reg +.else + sts _SFR_MEM_ADDR(\io), \reg +.endif +.endm + + +.macro CLEAR_BIT_IO io:req bit:req reg:req +.if _SFR_IO_REG_P(\io) + cbi _SFR_IO_ADDR(\io), bit +.else + lds \reg, _SFR_MEM_ADDR(\io) + andi \reg, ~_BV(\bit) + sts _SFR_MEM_ADDR(\io), \reg +.endif +.endm + +.macro SET_BIT_IO io:req bit:req reg:req +.if _SFR_IO_REG_P(\io) + sbi _SFR_IO_ADDR(\io),bit +.else + lds \reg, _SFR_MEM_ADDR(\io) + ori \reg, _BV(\bit) + sts _SFR_MEM_ADDR(\io), \reg +.endif +.endm + +/******************************************************************************* +* END of MACRO SECTION * +*******************************************************************************/ + + + diff --git a/test_src/config.h b/test_src/config.h new file mode 100644 index 0000000..252a924 --- /dev/null +++ b/test_src/config.h @@ -0,0 +1,66 @@ +/* config.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + 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 3 of the License, or + (at your option) 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. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#ifndef __CONFIG_H__ +#define __CONFIG_H__ +#include +// #define F_CPU 20000000 + #define F_CPU 16000000 /* Oszillator-Frequenz in Hz */ +// #define F_CPU 14745600 + + +#include "uart_defs.h" + +#define DEBUG uart + +/* uart.[ch] defines */ +#define UART_INTERRUPT 1 +#define UART_BAUD_RATE 38400 +#define UART_RXBUFSIZE 64 +#define UART_TXBUFSIZE 64 +#define UART_LINE_BUFFER_SIZE 40 +#define UART_XON_XOFF +#define UART_XON_XOFF_THRESHOLD_1 (UART_RXBUFSIZE - 24) +#define UART_XON_XOFF_THRESHOLD_2 (UART_RXBUFSIZE - 60) + +#undef UART_LEDS + +#define UART0_I 1 +#define UART0_BAUD_RATE 38400 +#define UART0_PARATY UART_PARATY_NONE +#define UART0_STOPBITS UART_STOPBITS_1 +#define UART0_DATABITS UART_DATABITS_8 +#define UART0_RXBUFFER_SIZE 64 +#define UART0_TXBUFFER_SIZE 64 +#define UART0_SWFLOWCTRL 1 +#define UART0_THRESH_LOW 10 +#define UART0_THRESH_HIGH 48 +/* +#define UART_HWFLOWCONTROL +#define UART_RTS_PORT PORTA +#define UART_RTS_DDR DDRA +#define UART_CTS_PIN PINA +#define UART_CTS_DDR DDRA +#define UART_RTS_BIT 0 +#define UART_CTS_BIT 1 +*/ +//#define TWISTER_MUL_TABLE +#define CLI_AUTO_HELP + +#endif + diff --git a/test_src/setbaud_asm.inc b/test_src/setbaud_asm.inc new file mode 100644 index 0000000..a68832e --- /dev/null +++ b/test_src/setbaud_asm.inc @@ -0,0 +1,80 @@ +/* + This file is part of the AVR-uart_ni. + Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de) + + 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 3 of the License, or + (at your option) 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. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* #include */ +/* we use a modifyed version of util/setbaud where the UL suffix is removed + * since the preprocessor can not handle that. + */ + +#ifndef F_CPU +# error "uart_ni requires F_CPU to be defined" +#endif + +#ifndef BAUD +# error "uart_ni requires UART0_BAUD_RATE to be defined" +#endif + +#if !(F_CPU) +# error "F_CPU must be a constant value" +#endif + +#if !(BAUD) +# error "UART0_BAUD_RATE must be a constant value" +#endif + +#undef USE_2X + +/* Baud rate tolerance is 2 % unless previously defined */ +#ifndef BAUD_TOL +# define BAUD_TOL 2 +#endif + +#define UBRR_VALUE (((F_CPU) + 8 * (BAUD)) / (16 * (BAUD)) -1) + +#if 100 * (F_CPU) > \ + (16 * ((UBRR_VALUE) + 1)) * (100 * (BAUD) + (BAUD) * (BAUD_TOL)) +# define USE_2X 1 +#elif 100 * (F_CPU) < \ + (16 * ((UBRR_VALUE) + 1)) * (100 * (BAUD) - (BAUD) * (BAUD_TOL)) +# define USE_2X 1 +#else +# define USE_2X 0 +#endif + +#if USE_2X +/* U2X required, recalculate */ +#undef UBRR_VALUE +#define UBRR_VALUE (((F_CPU) + 4 * (BAUD)) / (8 * (BAUD)) -1) + +#if 100 * (F_CPU) > \ + (8 * ((UBRR_VALUE) + 1)) * (100 * (BAUD) + (BAUD) * (BAUD_TOL)) +# warning "Baud rate achieved is higher than allowed" +#endif + +#if 100 * (F_CPU) < \ + (8 * ((UBRR_VALUE) + 1)) * (100 * (BAUD) - (BAUD) * (BAUD_TOL)) +# warning "Baud rate achieved is lower than allowed" +#endif + +#endif /* USE_U2X */ + +#ifdef UBRR_VALUE +# define UBRRL_VALUE ((UBRR_VALUE) & 0xff) +# define UBRRH_VALUE ((UBRR_VALUE) >> 8) +#endif + -- 2.39.2