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.mapdefaultYESMakefileatmega644p11
bacnet.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.mapdefaultYESMakefileatmega644p11
bacnet.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();
}