From cde2d61d924429e85cdb302ce087ed12ffcaeb92 Mon Sep 17 00:00:00 2001 From: skarg Date: Wed, 31 Oct 2012 04:06:18 +0000 Subject: [PATCH] Added support for Atmega1284p. --- bacnet-stack/ports/bdk-atxx4-mstp/Makefile | 27 ++++++++++++++++--- bacnet-stack/ports/bdk-atxx4-mstp/adc.c | 3 +-- bacnet-stack/ports/bdk-atxx4-mstp/bacnet.aps | 2 +- bacnet-stack/ports/bdk-atxx4-mstp/hardware.h | 9 +++++-- bacnet-stack/ports/bdk-atxx4-mstp/input.c | 28 ++++++++++---------- bacnet-stack/ports/bdk-atxx4-mstp/rs485.c | 3 +-- bacnet-stack/ports/bdk-atxx4-mstp/serial.c | 3 +-- bacnet-stack/ports/bdk-atxx4-mstp/timer2.c | 3 +-- 8 files changed, 50 insertions(+), 28 deletions(-) diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/Makefile b/bacnet-stack/ports/bdk-atxx4-mstp/Makefile index 37efb335..db7d1a0c 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/Makefile +++ b/bacnet-stack/ports/bdk-atxx4-mstp/Makefile @@ -3,11 +3,18 @@ ############################################################################### ## General Flags +ifeq (${MCU},atmega1284p) +MCU = atmega1284p +AVRDUDE_MCU = m1284p +LINT_MCU = __AVR_ATmega1284p__ +else MCU = atmega644p AVRDUDE_MCU = m644p # ATmega644 bootload is at word address 7000h, 7800h, 7C00h, or 7E00h # Double that value to get the byte address BOOTLOAD = 0xF800 +LINT_MCU = __AVR_ATmega644p__ +endif TARGET = bacnet ## Tools CC = avr-gcc @@ -17,7 +24,6 @@ OBJDUMP = avr-objdump SIZE = avr-size AVRDUDE = avrdude LINT = splint -LINT_MCU = __AVR_ATmega644p__ SIZE_OPTIONS = -t #SIZE_OPTIONS = -C --mcu=${MCU} @@ -30,11 +36,24 @@ SIZE_OPTIONS = -t # jtag2slow = Atmel JTAG ICE mkII, running at 19200 Bd # avrispmkII = AVR ISP MKII # avr109 = bootloader -#AVRDUDE_PROGRAMMERID = avr109 -#AVRDUDE_PROGRAMMERID = jtag2fast +ifeq (${JTAG},avr109) +AVRDUDE_PROGRAMMERID = avr109 +endif +ifeq (${JTAG},avrispmkII) #AVRDUDE_PROGRAMMERID = avrispmkII +endif +ifeq (${JTAG},dragon_isp) #AVRDUDE_PROGRAMMERID = dragon_isp +endif +ifeq (${JTAG},dragon_jtag) AVRDUDE_PROGRAMMERID = dragon_jtag +endif +ifeq (${JTAG},jtag2fast) +AVRDUDE_PROGRAMMERID = jtag2fast +endif +ifndef JTAG +AVRDUDE_PROGRAMMERID = jtag2fast +endif # # port--serial or parallel port to which your # hardware programmer is attached @@ -218,7 +237,9 @@ LDFLAGS = $(COMMON) #dead code removal #LDFLAGS += -Wl,-nostartfiles,-nostdlib LDFLAGS += -Wl,--gc-sections,-static +ifneq (${MCU},atmega1284p) LDFLAGS += -Wl,--section-start=.bootloader=$(BOOTLOAD) +endif LDFLAGS += -Wl,-Map=$(TARGET).map LDFLAGS += -Wl,-L.,-l$(TARGET) diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/adc.c b/bacnet-stack/ports/bdk-atxx4-mstp/adc.c index e8b59a6c..bdec4ad3 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/adc.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/adc.c @@ -167,6 +167,5 @@ void adc_init( 1 1 1 Timer/Counter1 Capture Event */ ADCSRB = (0 << ADTS2) | (0 << ADTS1) | (0 << ADTS0); - /* Clear the Power Reduction bit */ - BIT_CLEAR(PRR, PRADC); + power_adc_enable(); } diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/bacnet.aps b/bacnet-stack/ports/bdk-atxx4-mstp/bacnet.aps index 5de4d5a3..11fa6d07 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/bacnet.aps +++ b/bacnet-stack/ports/bdk-atxx4-mstp/bacnet.aps @@ -1 +1 @@ -bacnet29-Apr-2009 08:16:5307-Oct-2010 10:30:19241029-Apr-2009 08:16:5344, 15, 0, 623AVR GCCbacnet.elfD:\code\bacnet-stack\ports\bdk-atxx4-mstp\JTAGICE mkIIATmega644P.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto00char_stringapdupkt0main.ctimer2.ceeprom.cinit.cinput.cled.crs485.cseeprom.cserial.cstack.cdlmstp.cbo.cbi.cai.cdevice.cwatchdog.cadc.cbacnet.cfuses.ctest.ctimer.cD:\code\bacnet-stack\demo\handler\noserv.cD:\code\bacnet-stack\demo\handler\s_iam.cD:\code\bacnet-stack\demo\handler\s_ihave.cD:\code\bacnet-stack\demo\handler\txbuf.cD:\code\bacnet-stack\demo\handler\h_dcc.cD:\code\bacnet-stack\demo\handler\h_npdu.cD:\code\bacnet-stack\demo\handler\h_rd.cD:\code\bacnet-stack\demo\handler\h_rp.cD:\code\bacnet-stack\demo\handler\h_rpm.cD:\code\bacnet-stack\demo\handler\h_whohas.cD:\code\bacnet-stack\demo\handler\h_whois.cD:\code\bacnet-stack\demo\handler\h_wp.cD:\code\bacnet-stack\src\reject.cD:\code\bacnet-stack\src\ringbuf.cD:\code\bacnet-stack\src\rp.cD:\code\bacnet-stack\src\rpm.cD:\code\bacnet-stack\src\whohas.cD:\code\bacnet-stack\src\whois.cD:\code\bacnet-stack\src\wp.cD:\code\bacnet-stack\src\abort.cD:\code\bacnet-stack\src\apdu.cD:\code\bacnet-stack\src\bacaddr.cD:\code\bacnet-stack\src\bacapp.cD:\code\bacnet-stack\src\bacdcode.cD:\code\bacnet-stack\src\bacerror.cD:\code\bacnet-stack\src\bacint.cD:\code\bacnet-stack\src\bacreal.cD:\code\bacnet-stack\src\bacstr.cD:\code\bacnet-stack\src\crc.cD:\code\bacnet-stack\src\dcc.cD:\code\bacnet-stack\src\fifo.cD:\code\bacnet-stack\src\iam.cD:\code\bacnet-stack\src\ihave.cD:\code\bacnet-stack\src\npdu.cD:\code\bacnet-stack\src\rd.cD:\code\bacnet-stack\src\memcopy.cav.ctimer.heeprom.hhardware.hiar2gcc.hinit.hinput.hled.hnvdata.hrs485.hseeprom.hserial.hwatchdog.hadc.hbacnet.hstack.htest.hdefault\bacnet.lssdefault\bacnet.mapdefaultYESMakefileatmega644p111bacnet.elfdefault\0.\..\..\include\-Wall -gdwarf-2 -std=gnu99 -mcall-prologues -finline-functions-called-once -ffunction-sections -fdata-sections -Wstrict-prototypes -Wmissing-prototypes -DBACDL_MSTP -DMAX_APDU=128 -DBIG_ENDIAN=0 -DMAX_TSM_TRANSACTIONS=0 -DBACAPP_BOOLEAN -DBACAPP_REAL -DBACAPP_OBJECT_ID -DBACAPP_UNSIGNED -DBACAPP_ENUMERATED -DBACAPP_CHARACTER_STRING -DWRITE_PROPERTY -g -DF_CPU=18432000UL -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums-Wl,--gc-sections,-staticdefault1C:\WinAVR-20090313\bin\avr-gcc.exeC:\WinAVR-20090313\utils\bin\make.exe00000main.c25900001rs485.c25800002bacnet.c25800003device.c25800004D:\code\bacnet-stack\src\fifo.c25800005timer.c25800006timer2.c25800007hardware.h100008adc.c259 +bacnet29-Apr-2009 08:16:5307-Oct-2010 10:30:19241029-Apr-2009 08:16:5344, 15, 0, 623AVR GCCbacnet.elfC:\code\bacnet-stack\ports\bdk-atxx4-mstp\JTAGICE mkIIATmega644P.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto00char_stringapdupkt0main.ctimer2.ceeprom.cinit.cinput.cled.crs485.cseeprom.cserial.cstack.cdlmstp.cbo.cbi.cai.cdevice.cwatchdog.cadc.cbacnet.cfuses.ctest.ctimer.cC:\code\bacnet-stack\demo\handler\noserv.cC:\code\bacnet-stack\demo\handler\s_iam.cC:\code\bacnet-stack\demo\handler\s_ihave.cC:\code\bacnet-stack\demo\handler\txbuf.cC:\code\bacnet-stack\demo\handler\h_dcc.cC:\code\bacnet-stack\demo\handler\h_npdu.cC:\code\bacnet-stack\demo\handler\h_rd.cC:\code\bacnet-stack\demo\handler\h_rp.cC:\code\bacnet-stack\demo\handler\h_rpm.cC:\code\bacnet-stack\demo\handler\h_whohas.cC:\code\bacnet-stack\demo\handler\h_whois.cC:\code\bacnet-stack\demo\handler\h_wp.cC:\code\bacnet-stack\src\reject.cC:\code\bacnet-stack\src\ringbuf.cC:\code\bacnet-stack\src\rp.cC:\code\bacnet-stack\src\rpm.cC:\code\bacnet-stack\src\whohas.cC:\code\bacnet-stack\src\whois.cC:\code\bacnet-stack\src\wp.cC:\code\bacnet-stack\src\abort.cC:\code\bacnet-stack\src\apdu.cC:\code\bacnet-stack\src\bacaddr.cC:\code\bacnet-stack\src\bacapp.cC:\code\bacnet-stack\src\bacdcode.cC:\code\bacnet-stack\src\bacerror.cC:\code\bacnet-stack\src\bacint.cC:\code\bacnet-stack\src\bacreal.cC:\code\bacnet-stack\src\bacstr.cC:\code\bacnet-stack\src\crc.cC:\code\bacnet-stack\src\dcc.cC:\code\bacnet-stack\src\fifo.cC:\code\bacnet-stack\src\iam.cC:\code\bacnet-stack\src\ihave.cC:\code\bacnet-stack\src\npdu.cC:\code\bacnet-stack\src\rd.cC:\code\bacnet-stack\src\memcopy.cav.ctimer.heeprom.hhardware.hiar2gcc.hinit.hinput.hled.hnvdata.hrs485.hseeprom.hserial.hwatchdog.hadc.hbacnet.hstack.htest.hdefault\bacnet.lssdefault\bacnet.mapdefaultYESMakefileatmega644p111bacnet.elfdefault\0.\..\..\include\-Wall -gdwarf-2 -std=gnu99 -mcall-prologues -finline-functions-called-once -ffunction-sections -fdata-sections -Wstrict-prototypes -Wmissing-prototypes -DBACDL_MSTP -DMAX_APDU=128 -DBIG_ENDIAN=0 -DMAX_TSM_TRANSACTIONS=0 -DBACAPP_BOOLEAN -DBACAPP_REAL -DBACAPP_OBJECT_ID -DBACAPP_UNSIGNED -DBACAPP_ENUMERATED -DBACAPP_CHARACTER_STRING -DWRITE_PROPERTY -g -DF_CPU=18432000UL -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums-Wl,--gc-sections,-staticdefault1C:\WinAVR-20090313\bin\avr-gcc.exeC:\WinAVR-20090313\utils\bin\make.exe00000main.c25900001rs485.c25800002bacnet.c25800003device.c25800004C:\code\bacnet-stack\src\fifo.c25800005timer.c25800006timer2.c25800007hardware.h100008adc.c259 diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/hardware.h b/bacnet-stack/ports/bdk-atxx4-mstp/hardware.h index 25e97c77..74b4ff83 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/hardware.h +++ b/bacnet-stack/ports/bdk-atxx4-mstp/hardware.h @@ -39,8 +39,13 @@ #if defined(__GNUC__) #include #include -#if !defined(__AVR_ATmega644P__) -#error Firmware is configured for ATmega644P only (-mmcu=atmega644p) +#include +#if defined(__AVR_ATmega644P__) +/* defined for ATmega644p */ +#elif defined(__AVR_ATmega1284P__) +/* defined for ATmega1284p */ +#else +#error For ATmega644P or ATmega1284p only (-mmcu=atmega644p -mmcu=atmega1284p) #endif #endif diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/input.c b/bacnet-stack/ports/bdk-atxx4-mstp/input.c index c68e24c6..58932115 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/input.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/input.c @@ -51,13 +51,13 @@ static void input_switch_workaround( BIT_SET(DDRA, DDA5); BIT_SET(DDRA, DDA6); /* turn off the outputs */ - BIT_CLEAR(PORTA, PA0); - BIT_CLEAR(PORTA, PA1); - BIT_CLEAR(PORTA, PA2); - BIT_CLEAR(PORTA, PA3); - BIT_CLEAR(PORTA, PA4); - BIT_CLEAR(PORTA, PA5); - BIT_CLEAR(PORTA, PA6); + BIT_CLEAR(PORTA, PORTA0); + BIT_CLEAR(PORTA, PORTA1); + BIT_CLEAR(PORTA, PORTA2); + BIT_CLEAR(PORTA, PORTA3); + BIT_CLEAR(PORTA, PORTA4); + BIT_CLEAR(PORTA, PORTA5); + BIT_CLEAR(PORTA, PORTA6); /* configure the port pins for the switch - as inputs */ BIT_CLEAR(DDRA, DDA0); BIT_CLEAR(DDRA, DDA1); @@ -156,13 +156,13 @@ void input_init( BIT_CLEAR(DDRA, DDA5); BIT_CLEAR(DDRA, DDA6); /* activate the internal pull up resistors */ - BIT_SET(PORTA, PA0); - BIT_SET(PORTA, PA1); - BIT_SET(PORTA, PA2); - BIT_SET(PORTA, PA3); - BIT_SET(PORTA, PA4); - BIT_SET(PORTA, PA5); - BIT_SET(PORTA, PA6); + BIT_SET(PORTA, PORTA0); + BIT_SET(PORTA, PORTA1); + BIT_SET(PORTA, PORTA2); + BIT_SET(PORTA, PORTA3); + BIT_SET(PORTA, PORTA4); + BIT_SET(PORTA, PORTA5); + BIT_SET(PORTA, PORTA6); /* configure the port pins for binary inputs */ BIT_CLEAR(DDRB, DDB1); BIT_CLEAR(DDRB, DDB2); diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/rs485.c b/bacnet-stack/ports/bdk-atxx4-mstp/rs485.c index 34a67d2c..b1a6239f 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/rs485.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/rs485.c @@ -310,8 +310,7 @@ static void rs485_usart_init( /* Set Character Size: UCSZn2 UCSZn1 UCSZn0 = 011 for 8-bit */ /* Clock Polarity: UCPOLn = 0 when asynchronous mode is used. */ UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); - /* Clear Power Reduction */ - BIT_CLEAR(PRR, PRUSART0); + power_usart0_enable(); } /**************************************************************************** diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/serial.c b/bacnet-stack/ports/bdk-atxx4-mstp/serial.c index 281517e3..f18bdd57 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/serial.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/serial.c @@ -178,8 +178,7 @@ static void serial_usart_init( /* Set Character Size: UCSZn2 UCSZn1 UCSZn0 = 011 for 8-bit */ /* Clock Polarity: UCPOLn = 0 when asynchronous mode is used. */ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); - /* Clear Power Reduction */ - BIT_CLEAR(PRR, PRUSART1); + power_usart1_enable(); } void serial_init( diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/timer2.c b/bacnet-stack/ports/bdk-atxx4-mstp/timer2.c index 47c4032e..c25375fe 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/timer2.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/timer2.c @@ -161,6 +161,5 @@ void timer_init( TCNT2 = TIMER2_COUNT; /* Enable the overflow interrupt */ BIT_SET(TIMSK2, TOIE2); - /* Clear the Power Reduction Timer/Counter0 */ - BIT_CLEAR(PRR, PRTIM2); + power_timer2_enable(); }