Files
Steve Karg 4781582204 Changed ATmega168 port to ATmega328 on Uno R3 with DFR0259 RS485 shield (#784)
* Changed ATmega168 example for ATmega328 on Arduino Uno R3 with DFR0259 RS485 shield. Added ADC interface from BDK port and mapped to some AV objects. Removed MS/TP MAC address DIP switch GPIO and moved MS/TP configuration to AV objects. Added AV units property. Added some Uno R3 Digital Inputs and outputs mapped to some BV. Added AVR EEPROM from BDK port and mapped some non-volatile data including MAC address and max manager and baud rate, device ID and names and description and location.
2024-09-27 14:42:47 -05:00

290 lines
7.3 KiB
C

/**
* @brief This module manages the common IAR and GCC compiler differences
* @author Steve Karg <skarg@users.sourceforge.net>
* @date 2007
* @copyright SPDX-License-Identifier: MIT
*/
#ifndef IAR2GCC_H
#define IAR2GCC_H
#if !defined(F_CPU)
#error You must define F_CPU - clock frequency!
#endif
/* IAR */
#if defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ASM__)
#include <inavr.h>
#include <ioavr.h>
#include <intrinsics.h>
#include <stdint.h>
/* BitValue is used alot in GCC examples */
#ifndef _BV
#define _BV(bit_num) (1 << (bit_num))
#endif
/* inline function */
static inline void _delay_us(uint8_t microseconds)
{
do {
__delay_cycles(F_CPU / 1000000UL);
} while (microseconds--);
}
#if (__VER__ > 700)
#define DDA0 DDRA0
#define DDA1 DDRA1
#define DDA2 DDRA2
#define DDA3 DDRA3
#define DDA4 DDRA4
#define DDA5 DDRA5
#define DDA6 DDRA6
#define DDA7 DDRA7
#define DDB0 DDRB0
#define DDB1 DDRB1
#define DDB2 DDRB2
#define DDB3 DDRB3
#define DDB4 DDRB4
#define DDB5 DDRB5
#define DDB6 DDRB6
#define DDB7 DDRB7
#define DDC0 DDRC0
#define DDC1 DDRC1
#define DDC2 DDRC2
#define DDC3 DDRC3
#define DDC4 DDRC4
#define DDC5 DDRC5
#define DDC6 DDRC6
#define DDC7 DDRC7
#define DDD0 DDRD0
#define DDD1 DDRD1
#define DDD2 DDRD2
#define DDD3 DDRD3
#define DDD4 DDRD4
#define DDD5 DDRD5
#define DDD6 DDRD6
#define DDD7 DDRD7
#endif
#endif
#if defined(__GNUC__)
#include <util/delay.h>
#endif
/* adjust some definitions to common versions */
#if defined(__CROSSWORKS_AVR)
#if (__TARGET_PROCESSOR == ATmega644P)
#define PRR PRR0
#define UBRR0 UBRR0W
#define UBRR1 UBRR1W
#define PA0 PORTA0
#define PA1 PORTA1
#define PA2 PORTA2
#define PA3 PORTA3
#define PA4 PORTA4
#define PA5 PORTA5
#define PA6 PORTA6
#define PA7 PORTA7
#define PB0 PORTB0
#define PB1 PORTB1
#define PB2 PORTB2
#define PB3 PORTB3
#define PB4 PORTB4
#define PB5 PORTB5
#define PB6 PORTB6
#define PB7 PORTB7
#define PC0 PORTC0
#define PC1 PORTC1
#define PC2 PORTC2
#define PC3 PORTC3
#define PC4 PORTC4
#define PC5 PORTC5
#define PC6 PORTC6
#define PC7 PORTC7
#define PD0 PORTD0
#define PD1 PORTD1
#define PD2 PORTD2
#define PD3 PORTD3
#define PD4 PORTD4
#define PD5 PORTD5
#define PD6 PORTD6
#define PD7 PORTD7
#endif
#endif
/* Input/Output Registers */
#if defined(__GNUC__)
#include <avr/io.h>
typedef struct {
unsigned char bit0 : 1;
unsigned char bit1 : 1;
unsigned char bit2 : 1;
unsigned char bit3 : 1;
unsigned char bit4 : 1;
unsigned char bit5 : 1;
unsigned char bit6 : 1;
unsigned char bit7 : 1;
} BitRegisterType;
#ifndef true
#define true 1
#endif
#ifndef false
#define false 0
#endif
#define GPIO_BITREG(port, bitnum) \
((volatile BitRegisterType *)_SFR_MEM_ADDR(port))->bit##bitnum
#define PINA_Bit0 GPIO_BITREG(PINA, 0)
#define PINA_Bit1 GPIO_BITREG(PINA, 1)
#define PINA_Bit2 GPIO_BITREG(PINA, 2)
#define PINA_Bit3 GPIO_BITREG(PINA, 3)
#define PINA_Bit4 GPIO_BITREG(PINA, 4)
#define PINA_Bit5 GPIO_BITREG(PINA, 5)
#define PINA_Bit6 GPIO_BITREG(PINA, 6)
#define PINA_Bit7 GPIO_BITREG(PINA, 7)
#define PORTA_Bit0 GPIO_BITREG(PORTA, 0)
#define PORTA_Bit1 GPIO_BITREG(PORTA, 1)
#define PORTA_Bit2 GPIO_BITREG(PORTA, 2)
#define PORTA_Bit3 GPIO_BITREG(PORTA, 3)
#define PORTA_Bit4 GPIO_BITREG(PORTA, 4)
#define PORTA_Bit5 GPIO_BITREG(PORTA, 5)
#define PORTA_Bit6 GPIO_BITREG(PORTA, 6)
#define PORTA_Bit7 GPIO_BITREG(PORTA, 7)
#define PINB_Bit0 GPIO_BITREG(PINB, 0)
#define PINB_Bit1 GPIO_BITREG(PINB, 1)
#define PINB_Bit2 GPIO_BITREG(PINB, 2)
#define PINB_Bit3 GPIO_BITREG(PINB, 3)
#define PINB_Bit4 GPIO_BITREG(PINB, 4)
#define PINB_Bit5 GPIO_BITREG(PINB, 5)
#define PINB_Bit6 GPIO_BITREG(PINB, 6)
#define PINB_Bit7 GPIO_BITREG(PINB, 7)
#define PORTB_Bit0 GPIO_BITREG(PORTB, 0)
#define PORTB_Bit1 GPIO_BITREG(PORTB, 1)
#define PORTB_Bit2 GPIO_BITREG(PORTB, 2)
#define PORTB_Bit3 GPIO_BITREG(PORTB, 3)
#define PORTB_Bit4 GPIO_BITREG(PORTB, 4)
#define PORTB_Bit5 GPIO_BITREG(PORTB, 5)
#define PORTB_Bit6 GPIO_BITREG(PORTB, 6)
#define PORTB_Bit7 GPIO_BITREG(PORTB, 7)
#define PINC_Bit0 GPIO_BITREG(PINC, 0)
#define PINC_Bit1 GPIO_BITREG(PINC, 1)
#define PINC_Bit2 GPIO_BITREG(PINC, 2)
#define PINC_Bit3 GPIO_BITREG(PINC, 3)
#define PINC_Bit4 GPIO_BITREG(PINC, 4)
#define PINC_Bit5 GPIO_BITREG(PINC, 5)
#define PINC_Bit6 GPIO_BITREG(PINC, 6)
#define PINC_Bit7 GPIO_BITREG(PINC, 7)
#define PORTC_Bit0 GPIO_BITREG(PORTC, 0)
#define PORTC_Bit1 GPIO_BITREG(PORTC, 1)
#define PORTC_Bit2 GPIO_BITREG(PORTC, 2)
#define PORTC_Bit3 GPIO_BITREG(PORTC, 3)
#define PORTC_Bit4 GPIO_BITREG(PORTC, 4)
#define PORTC_Bit5 GPIO_BITREG(PORTC, 5)
#define PORTC_Bit6 GPIO_BITREG(PORTC, 6)
#define PORTC_Bit7 GPIO_BITREG(PORTC, 7)
#define PIND_Bit0 GPIO_BITREG(PIND, 0)
#define PIND_Bit1 GPIO_BITREG(PIND, 1)
#define PIND_Bit2 GPIO_BITREG(PIND, 2)
#define PIND_Bit3 GPIO_BITREG(PIND, 3)
#define PIND_Bit4 GPIO_BITREG(PIND, 4)
#define PIND_Bit5 GPIO_BITREG(PIND, 5)
#define PIND_Bit6 GPIO_BITREG(PIND, 6)
#define PIND_Bit7 GPIO_BITREG(PIND, 7)
#define PORTD_Bit0 GPIO_BITREG(PORTD, 0)
#define PORTD_Bit1 GPIO_BITREG(PORTD, 1)
#define PORTD_Bit2 GPIO_BITREG(PORTD, 2)
#define PORTD_Bit3 GPIO_BITREG(PORTD, 3)
#define PORTD_Bit4 GPIO_BITREG(PORTD, 4)
#define PORTD_Bit5 GPIO_BITREG(PORTD, 5)
#define PORTD_Bit6 GPIO_BITREG(PORTD, 6)
#define PORTD_Bit7 GPIO_BITREG(PORTD, 7)
#define GPIOR0_Bit0 GPIO_BITREG(GPIOR0, 0)
#define GPIOR0_Bit1 GPIO_BITREG(GPIOR0, 1)
#define GPIOR0_Bit2 GPIO_BITREG(GPIOR0, 2)
#define GPIOR0_Bit3 GPIO_BITREG(GPIOR0, 3)
#define GPIOR0_Bit4 GPIO_BITREG(GPIOR0, 4)
#define GPIOR0_Bit5 GPIO_BITREG(GPIOR0, 5)
#define GPIOR0_Bit6 GPIO_BITREG(GPIOR0, 6)
#define GPIOR0_Bit7 GPIO_BITREG(GPIOR0, 7)
#define GPIOR1_Bit0 GPIO_BITREG(GPIOR1, 0)
#define GPIOR1_Bit1 GPIO_BITREG(GPIOR1, 1)
#define GPIOR1_Bit2 GPIO_BITREG(GPIOR1, 2)
#define GPIOR1_Bit3 GPIO_BITREG(GPIOR1, 3)
#define GPIOR1_Bit4 GPIO_BITREG(GPIOR1, 4)
#define GPIOR1_Bit5 GPIO_BITREG(GPIOR1, 5)
#define GPIOR1_Bit6 GPIO_BITREG(GPIOR1, 6)
#define GPIOR1_Bit7 GPIO_BITREG(GPIOR1, 7)
#define GPIOR2_Bit0 GPIO_BITREG(GPIOR2, 0)
#define GPIOR2_Bit1 GPIO_BITREG(GPIOR2, 1)
#define GPIOR2_Bit2 GPIO_BITREG(GPIOR2, 2)
#define GPIOR2_Bit3 GPIO_BITREG(GPIOR2, 3)
#define GPIOR2_Bit4 GPIO_BITREG(GPIOR2, 4)
#define GPIOR2_Bit5 GPIO_BITREG(GPIOR2, 5)
#define GPIOR2_Bit6 GPIO_BITREG(GPIOR2, 6)
#define GPIOR2_Bit7 GPIO_BITREG(GPIOR2, 7)
#endif
/* Global Interrupts */
#if defined(__GNUC__)
#define __enable_interrupt() sei()
#define __disable_interrupt() cli()
#endif
/* Interrupts */
#if defined(__ICCAVR__)
#define PRAGMA(x) _Pragma(#x)
#define ISR(vec) \
/* function prototype for use with "require protoptypes" option. */ \
PRAGMA(vector = vec) __interrupt void handler_##vec(void); \
PRAGMA(vector = vec) __interrupt void handler_##vec(void)
#elif defined(__GNUC__)
#include <avr/interrupt.h>
#endif
/* Flash */
#if defined(__ICCAVR__)
#define FLASH_DECLARE(x) __flash x
#elif defined(__GNUC__)
#define FLASH_DECLARE(x) x __attribute__((__progmem__))
#endif
/* EEPROM */
#if defined(__ICCAVR__)
#define EEPROM_DECLARE(x) __eeprom x
#endif
#if defined(__GNUC__)
#include <avr/eeprom.h>
#define EEPROM_DECLARE(x) x __attribute__((section(".eeprom")))
#endif
/* IAR intrinsic routines */
#if defined(__GNUC__)
/* FIXME: intrinsic routines: map to assembler for size/speed */
#define __multiply_unsigned(x, y) ((x) * (y))
/* FIXME: __root means to not optimize or strip */
#define __root
#endif
#endif