Browse Source

adding hardware files for OMC

for ide 1.0.6
Bo Herrmannsen 9 years ago
parent
commit
b17b8583af

+ 23
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/boards.txt View File

@@ -0,0 +1,23 @@
1
+##############################################################
2
+
3
+omc.name=OMC with Atmega644 at 20Mhz
4
+
5
+omc.upload.maximum_size=63488
6
+omc.upload.maximum_data_size=4096
7
+
8
+omc.upload.protocol=stk500v2
9
+omc.upload.speed=115200
10
+omc.bootloader.path=OMC
11
+omc.bootloader.file=bootloader-644-20MHz.hex
12
+
13
+omc.bootloader.low_fuses=0xE7
14
+omc.bootloader.high_fuses=0xD4
15
+omc.bootloader.extended_fuses=0xFC
16
+omc.bootloader.unlock_bits=0x3F
17
+omc.bootloader.lock_bits=0x0F
18
+
19
+omc.build.mcu=atmega644
20
+omc.build.f_cpu=20000000L
21
+omc.build.board=AVR_OMC
22
+omc.build.core=arduino:arduino
23
+omc.build.variant=sanguino

+ 75
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/bootloaders/OMC/bootloader-644-20MHz.hex View File

@@ -0,0 +1,75 @@
1
+:10F800008FEF90E19EBF8DBF11241FBE5A9A00C09A
2
+:10F81000CDB7DEB7CD51D140DEBFCDBF1092C50010
3
+:10F820008AE08093C40088E18093C100EE24FF2425
4
+:10F8300020E0552400E010E039E0432E9BE0292E23
5
+:10F84000312C2C0E3D1ECFC14150504060407040C5
6
+:10F8500011F43FE206C08091C00087FFF5CF3091E0
7
+:10F86000C600933021F1943028F4913099F0923011
8
+:10F87000C8F407C0953049F1953000F19630D1F5C4
9
+:10F8800035C03B3119F491E02BE134C03F3291F5A2
10
+:10F890003983BBC1313011F0351559F52327532E6B
11
+:10F8A00092E028C0B32FA0E0232793E023C0832F4A
12
+:10F8B00090E0A82BB92B232794E01CC03E30C9F45C
13
+:10F8C000232795E0EE24FF2415C0E1E0F0E0EC0FE3
14
+:10F8D000FD1FEE0DFF1D30830894E11CF11C232752
15
+:10F8E000EA16FB0639F4D70196E004C0321709F492
16
+:10F8F0008CC190E041ED5AE363E570E0ACCF90E05D
17
+:10F9000044C08D81803311F090E00AC08F8188233C
18
+:10F9100011F49EE105C0813011F099E001C096E933
19
+:10F920001A821B828D818C838E818D839E831F82A0
20
+:10F9300047E050E0F4C01A8288E08B8381E48C8336
21
+:10F9400086E58D8382E58E8389E48F8383E58887CE
22
+:10F9500080E589878FE58A8782E38B874BE050E0DB
23
+:10F96000DEC08A81813941F0823941F0803911F459
24
+:10F970008FE005C080E003C082E001C08AE01A8207
25
+:10F980008B8343E050E0CBC091E01A8242E050E02C
26
+:10F99000C7C08D81882311F48EE124C0813011F01D
27
+:10F9A00089E020C086E91EC01A82E1E0F0E04092C2
28
+:10F9B0005700849118C08B81803579F48C81883010
29
+:10F9C00031F4E2E0F0E04092570084910BC0E0E0B7
30
+:10F9D000F0E040925700849105C0E3E0F0E04092EF
31
+:10F9E000570084911A828B831C8244E050E097C0B8
32
+:10F9F000BC80AA248D81082F10E00A291B29000F42
33
+:10FA0000111F1A828AC09A8088248B81682F70E027
34
+:10FA100068297929933109F033C0F7EF0F3F1F07A9
35
+:10FA200010F0A8013FC023E0F80120935700E895AB
36
+:10FA300007B600FCFDCFA801D1018C9111962C9145
37
+:10FA400011971296D22ECC2490E08C299D2921E08A
38
+:10FA5000FA010C0120935700E89511244E5F5F4F87
39
+:10FA60006250704051F725E0F80120935700E89567
40
+:10FA700007B600FCFDCF81E180935700E89512C0E6
41
+:10FA8000A801FB01D10141BD52BD4F5F5F4F8D9178
42
+:10FA900080BDFA9AF99AF999FECF3197A1F7A8019A
43
+:10FAA000460F571F1A828A0138C07A8066248B81DC
44
+:10FAB000A82FB0E0A629B7291A828981843191F450
45
+:10FAC000BD019E012D5F3F4FF80185919491F90191
46
+:10FAD000808391832E5F3F4F0E5F1F4F62507040B7
47
+:10FAE00099F713C0A801BD019E012D5F3F4F41BD95
48
+:10FAF00052BD4F5F5F4FF89A80B5F90181939F0126
49
+:10FB000061507040A1F70A0F1B1FAD014D5F5F4FA1
50
+:10FB1000F901108204C080EC8A8342E050E090E05A
51
+:10FB2000FBE1F093C6008091C00086FFFCCF80917E
52
+:10FB3000C00080648093C0005092C6008091C000D5
53
+:10FB400086FFFCCF8091C00080648093C000652F49
54
+:10FB50005093C6008091C00086FFFCCF8091C0000A
55
+:10FB600080648093C000342F4093C6008091C00011
56
+:10FB700086FFFCCF8091C00080648093C0008EE03F
57
+:10FB80008093C6008091C00086FFFCCF8091C000AA
58
+:10FB900080648093C00025E1252523272627FE01C8
59
+:10FBA000319610C030813093C6008091C00086FF2E
60
+:10FBB000FCCF31968091C00080648093C0002327E1
61
+:10FBC000415050404115510569F72093C60080917E
62
+:10FBD000C00086FFFCCF8091C00080648093C0008D
63
+:10FBE000992349F4539441ED5AE363E570E090E0C2
64
+:10FBF000A0E0B0E030CE5A9881E180935700E895BC
65
+:10FC000011241F921F920895FFCF9981933109F417
66
+:10FC1000FACE9431C8F4963009F4EACE973050F415
67
+:10FC2000923009F46CCE933009F49BCE913009F0F8
68
+:10FC300072CF81CE913109F4A7CE923108F0E1CE96
69
+:10FC4000903109F068CF5BCE983109F4B4CE993188
70
+:10FC500050F4953109F4D7CE953108F426CF96317A
71
+:10FC600009F059CF22CF9B3109F493CE9C3120F477
72
+:10FC70009A3109F050CF98CE9D3109F442CE9F328F
73
+:06FC800009F049CFB8CFE6
74
+:040000030000F80001
75
+:00000001FF

+ 713
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/bootloaders/atmega644p/ATmegaBOOT.c View File

@@ -0,0 +1,713 @@
1
+/**********************************************************/
2
+/* Serial Bootloader for Atmel megaAVR Controllers        */
3
+/*                                                        */
4
+/* tested with ATmega644 and ATmega644P                   */
5
+/* should work with other mega's, see code for details    */
6
+/*                                                        */
7
+/* ATmegaBOOT.c                                           */
8
+/*                                                        */
9
+/* 20090131: Added 324P support from Alex Leone           */
10
+/*           Marius Kintel                                */
11
+/* 20080915: applied ADABoot mods for Sanguino 644P       */
12
+/*           Brian Riley                                  */
13
+/* 20080711: hacked for Sanguino by Zach Smith            */
14
+/*           and Justin Day                               */
15
+/* 20070626: hacked for Arduino Diecimila (which auto-    */
16
+/*           resets when a USB connection is made to it)  */
17
+/*           by D. Mellis                                 */
18
+/* 20060802: hacked for Arduino by D. Cuartielles         */
19
+/*           based on a previous hack by D. Mellis        */
20
+/*           and D. Cuartielles                           */
21
+/*                                                        */
22
+/* Monitor and debug functions were added to the original */
23
+/* code by Dr. Erik Lins, chip45.com. (See below)         */
24
+/*                                                        */
25
+/* Thanks to Karl Pitrich for fixing a bootloader pin     */
26
+/* problem and more informative LED blinking!             */
27
+/*                                                        */
28
+/* For the latest version see:                            */
29
+/* http://www.chip45.com/                                 */
30
+/*                                                        */
31
+/* ------------------------------------------------------ */
32
+/*                                                        */
33
+/* based on stk500boot.c                                  */
34
+/* Copyright (c) 2003, Jason P. Kyle                      */
35
+/* All rights reserved.                                   */
36
+/* see avr1.org for original file and information         */
37
+/*                                                        */
38
+/* This program is free software; you can redistribute it */
39
+/* and/or modify it under the terms of the GNU General    */
40
+/* Public License as published by the Free Software       */
41
+/* Foundation; either version 2 of the License, or        */
42
+/* (at your option) any later version.                    */
43
+/*                                                        */
44
+/* This program is distributed in the hope that it will   */
45
+/* be useful, but WITHOUT ANY WARRANTY; without even the  */
46
+/* implied warranty of MERCHANTABILITY or FITNESS FOR A   */
47
+/* PARTICULAR PURPOSE.  See the GNU General Public        */
48
+/* License for more details.                              */
49
+/*                                                        */
50
+/* You should have received a copy of the GNU General     */
51
+/* Public License along with this program; if not, write  */
52
+/* to the Free Software Foundation, Inc.,                 */
53
+/* 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA */
54
+/*                                                        */
55
+/* Licence can be viewed at                               */
56
+/* http://www.fsf.org/licenses/gpl.txt                    */
57
+/*                                                        */
58
+/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */
59
+/* m8515,m8535. ATmega161 has a very small boot block so  */
60
+/* isn't supported.                                       */
61
+/*                                                        */
62
+/* Tested with m168                                       */
63
+/**********************************************************/
64
+
65
+/* $Id$ */
66
+
67
+
68
+/* some includes */
69
+#include <inttypes.h>
70
+#include <avr/io.h>
71
+#include <avr/pgmspace.h>
72
+#include <avr/interrupt.h>
73
+#include <avr/wdt.h>
74
+#include <avr/boot.h>
75
+
76
+#ifdef ADABOOT
77
+    #define NUM_LED_FLASHES 3
78
+    #define ADABOOT_VER	1
79
+#endif
80
+
81
+
82
+/* 20070707: hacked by David A. Mellis - after this many errors give up and launch application */
83
+#define MAX_ERROR_COUNT 5
84
+
85
+/* set the UART baud rate */
86
+/* 20080711: hack by Zach Hoeken */
87
+#define BAUD_RATE   38400
88
+
89
+/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */
90
+/* never allow AVR Studio to do an update !!!! */
91
+#define HW_VER	 0x02
92
+#define SW_MAJOR 0x01
93
+#define SW_MINOR 0x10
94
+
95
+/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */
96
+/* if monitor functions are included, LED goes on after monitor was entered */
97
+#define LED_DDR  DDRB
98
+#define LED_PORT PORTB
99
+#define LED_PIN  PINB
100
+#define LED      PINB0
101
+
102
+/* define various device id's */
103
+/* manufacturer byte is always the same */
104
+#define SIG1	0x1E	// Yep, Atmel is the only manufacturer of AVR micros.  Single source :(
105
+#if defined(__AVR_ATmega644P__)
106
+#define SIG2	0x96
107
+#define SIG3	0x0A
108
+#elif defined(__AVR_ATmega644__)
109
+#define SIG2	0x96
110
+#define SIG3	0x09
111
+#elif defined(__AVR_ATmega324P__)
112
+#define SIG2	0x95
113
+#define SIG3	0x08
114
+#endif
115
+#define PAGE_SIZE		0x080U   //128 words
116
+#define PAGE_SIZE_BYTES	0x100U   //256 bytes
117
+
118
+/* function prototypes */
119
+void putch(char);
120
+char getch(void);
121
+void getNch(uint8_t);
122
+void byte_response(uint8_t);
123
+void nothing_response(void);
124
+char gethex(void);
125
+void puthex(char);
126
+void flash_led(uint8_t);
127
+
128
+/* some variables */
129
+union address_union
130
+{
131
+    uint16_t word;
132
+    uint8_t  byte[2];
133
+} address;
134
+
135
+union length_union
136
+{
137
+    uint16_t word;
138
+    uint8_t  byte[2];
139
+} length;
140
+
141
+struct flags_struct
142
+{
143
+    unsigned eeprom : 1;
144
+    unsigned rampz  : 1;
145
+} flags;
146
+
147
+uint8_t buff[256];
148
+
149
+uint8_t error_count = 0;
150
+uint8_t sreg;
151
+
152
+void (*app_start)(void) = 0x0000;
153
+
154
+/* main program starts here */
155
+int main(void)
156
+{
157
+    uint8_t ch,ch2;
158
+    uint16_t w;
159
+	uint16_t i;
160
+	
161
+    asm volatile("nop\n\t");
162
+
163
+#ifdef ADABOOT		// BBR/LF 10/8/2007 & 9/13/2008
164
+    ch = MCUSR;
165
+    MCUSR = 0;
166
+
167
+    WDTCSR |= _BV(WDCE) | _BV(WDE);
168
+    WDTCSR = 0;
169
+
170
+    // Check if the WDT was used to reset, in which case we dont bootload and skip straight to the code. woot.
171
+    if (! (ch &  _BV(EXTRF))) // if its a not an external reset...
172
+      app_start();  // skip bootloader
173
+#endif
174
+
175
+
176
+	//initialize our serial port.
177
+    UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
178
+    UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
179
+    UCSR0B = (1<<RXEN0) | (1<<TXEN0);
180
+    UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);
181
+
182
+    /* Enable internal pull-up resistor on pin D0 (RX), in order
183
+    to supress line noise that prevents the bootloader from
184
+    timing out (DAM: 20070509) */
185
+    DDRD &= ~_BV(PIND0);
186
+    PORTD |= _BV(PIND0);
187
+
188
+    /* set LED pin as output */
189
+    LED_DDR |= _BV(LED);
190
+
191
+	    /* flash onboard LED to signal entering of bootloader                   */
192
+	    /* ADABOOT will do two series of flashes. first 4 - signifying ADABOOT  */
193
+	    /* then a pause and another flash series signifying ADABOOT sub-version */
194
+
195
+
196
+	flash_led(NUM_LED_FLASHES);
197
+
198
+	#ifdef	ADABOOT
199
+		flash_led(ADABOOT_VER);		// BBR 9/13/2008
200
+	#endif 
201
+
202
+    /* forever loop */
203
+    for (;;)
204
+	{
205
+		/* get character from UART */
206
+		ch = getch();
207
+
208
+		/* A bunch of if...else if... gives smaller code than switch...case ! */
209
+
210
+		/* Hello is anyone home ? */ 
211
+		if(ch=='0')
212
+		    nothing_response();
213
+
214
+
215
+		/* Request programmer ID */
216
+		/* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundry  */
217
+		/* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares.  */
218
+		else if(ch=='1')
219
+		{
220
+		    if (getch() == ' ')
221
+			{
222
+				putch(0x14);
223
+				putch('A');
224
+				putch('V');
225
+				putch('R');
226
+				putch(' ');
227
+				putch('I');
228
+				putch('S');
229
+				putch('P');
230
+				putch(0x10);
231
+		    }
232
+			else
233
+			{
234
+				if (++error_count == MAX_ERROR_COUNT)
235
+				    app_start();
236
+		    }
237
+		}
238
+
239
+
240
+		/* AVR ISP/STK500 board commands  DON'T CARE so default nothing_response */
241
+		else if(ch=='@')
242
+		{
243
+		    ch2 = getch();
244
+		    if (ch2 > 0x85)
245
+				getch();
246
+		    nothing_response();
247
+		}
248
+
249
+
250
+		/* AVR ISP/STK500 board requests */
251
+		else if(ch=='A')
252
+		{
253
+		    ch2 = getch();
254
+		    if(ch2 == 0x80)
255
+				byte_response(HW_VER);		// Hardware version
256
+		    else if(ch2==0x81)
257
+				byte_response(SW_MAJOR);	// Software major version
258
+		    else if(ch2==0x82)
259
+				byte_response(SW_MINOR);	// Software minor version
260
+		    else if(ch2==0x98)
261
+				byte_response(0x03);		// Unknown but seems to be required by avr studio 3.56
262
+		    else
263
+				byte_response(0x00);		// Covers various unnecessary responses we don't care about
264
+		}
265
+
266
+
267
+		/* Device Parameters  DON'T CARE, DEVICE IS FIXED  */
268
+		else if(ch=='B')
269
+		{
270
+		    getNch(20);
271
+		    nothing_response();
272
+		}
273
+
274
+
275
+		/* Parallel programming stuff  DON'T CARE  */
276
+		else if(ch=='E')
277
+		{
278
+		    getNch(5);
279
+		    nothing_response();
280
+		}
281
+
282
+
283
+		/* Enter programming mode  */
284
+		else if(ch=='P')
285
+		{
286
+		    nothing_response();
287
+		}
288
+
289
+
290
+		/* Leave programming mode  */
291
+		else if(ch=='Q')
292
+		{
293
+		    nothing_response();
294
+#ifdef ADABOOT		
295
+			// autoreset via watchdog (sneaky!) BBR/LF 9/13/2008
296
+	  		WDTCSR = _BV(WDE);
297
+	  		while (1); // 16 ms
298
+#endif		
299
+		}
300
+
301
+
302
+		/* Erase device, don't care as we will erase one page at a time anyway.  */
303
+		else if(ch=='R')
304
+		{
305
+		    nothing_response();
306
+		}
307
+
308
+
309
+		/* Set address, little endian. EEPROM in bytes, FLASH in words  */
310
+		/* Perhaps extra address bytes may be added in future to support > 128kB FLASH.  */
311
+		/* This might explain why little endian was used here, big endian used everywhere else.  */
312
+		else if(ch=='U')
313
+		{
314
+		    address.byte[0] = getch();
315
+		    address.byte[1] = getch();
316
+		    nothing_response();
317
+		}
318
+
319
+
320
+		/* Universal SPI programming command, disabled.  Would be used for fuses and lock bits.  */
321
+		else if(ch=='V')
322
+		{
323
+		    getNch(4);
324
+		    byte_response(0x00);
325
+		}
326
+
327
+
328
+		/* Write memory, length is big endian and is in bytes  */
329
+		else if(ch=='d')
330
+		{
331
+		    length.byte[1] = getch();
332
+		    length.byte[0] = getch();
333
+	
334
+		    flags.eeprom = 0;
335
+		    if (getch() == 'E')
336
+				flags.eeprom = 1;
337
+
338
+			for (i=0; i<PAGE_SIZE; i++)
339
+				buff[i] = 0;
340
+		
341
+		    for (w = 0; w < length.word; w++)
342
+			{
343
+				// Store data in buffer, can't keep up with serial data stream whilst programming pages
344
+				buff[w] = getch();
345
+		    }
346
+	
347
+		    if (getch() == ' ')
348
+			{
349
+				if (flags.eeprom)
350
+				{		                
351
+					//Write to EEPROM one byte at a time
352
+				    for(w=0;w<length.word;w++)
353
+					{
354
+						while(EECR & (1<<EEPE));
355
+					
356
+						EEAR = (uint16_t)(void *)address.word;
357
+						EEDR = buff[w];
358
+						EECR |= (1<<EEMPE);
359
+						EECR |= (1<<EEPE);
360
+
361
+						address.word++;
362
+				    }			
363
+				}
364
+				else
365
+				{
366
+					//address * 2 -> byte location
367
+				    address.word = address.word << 1;
368
+			    
369
+					//Even up an odd number of bytes
370
+					if ((length.byte[0] & 0x01))
371
+						length.word++;
372
+				
373
+					// HACKME: EEPE used to be EEWE
374
+				    //Wait for previous EEPROM writes to complete
375
+					//while(bit_is_set(EECR,EEPE));
376
+					while(EECR & (1<<EEPE));
377
+				
378
+				    asm volatile(
379
+						 "clr	r17		\n\t"	//page_word_count
380
+						 "lds	r30,address	\n\t"	//Address of FLASH location (in bytes)
381
+						 "lds	r31,address+1	\n\t"
382
+						 "ldi	r28,lo8(buff)	\n\t"	//Start of buffer array in RAM
383
+						 "ldi	r29,hi8(buff)	\n\t"
384
+						 "lds	r24,length	\n\t"	//Length of data to be written (in bytes)
385
+						 "lds	r25,length+1	\n\t"
386
+						 "length_loop:		\n\t"	//Main loop, repeat for number of words in block							 							 
387
+						 "cpi	r17,0x00	\n\t"	//If page_word_count=0 then erase page
388
+						 "brne	no_page_erase	\n\t"						 
389
+						 "wait_spm1:		\n\t"
390
+						 "lds	r16,%0		\n\t"	//Wait for previous spm to complete
391
+						 "andi	r16,1           \n\t"
392
+						 "cpi	r16,1           \n\t"
393
+						 "breq	wait_spm1       \n\t"
394
+						 "ldi	r16,0x03	\n\t"	//Erase page pointed to by Z
395
+						 "sts	%0,r16		\n\t"
396
+						 "spm			\n\t"							 
397
+						 "wait_spm2:		\n\t"
398
+						 "lds	r16,%0		\n\t"	//Wait for previous spm to complete
399
+						 "andi	r16,1           \n\t"
400
+						 "cpi	r16,1           \n\t"
401
+						 "breq	wait_spm2       \n\t"									 
402
+
403
+						 "ldi	r16,0x11	\n\t"	//Re-enable RWW section
404
+						 "sts	%0,r16		\n\t"						 			 
405
+						 "spm			\n\t"
406
+						 "no_page_erase:		\n\t"							 
407
+						 "ld	r0,Y+		\n\t"	//Write 2 bytes into page buffer
408
+						 "ld	r1,Y+		\n\t"							 
409
+							 
410
+						 "wait_spm3:		\n\t"
411
+						 "lds	r16,%0		\n\t"	//Wait for previous spm to complete
412
+						 "andi	r16,1           \n\t"
413
+						 "cpi	r16,1           \n\t"
414
+						 "breq	wait_spm3       \n\t"
415
+						 "ldi	r16,0x01	\n\t"	//Load r0,r1 into FLASH page buffer
416
+						 "sts	%0,r16		\n\t"
417
+						 "spm			\n\t"
418
+							 
419
+						 "inc	r17		\n\t"	//page_word_count++
420
+						 "cpi r17,%1	        \n\t"
421
+						 "brlo	same_page	\n\t"	//Still same page in FLASH
422
+						 "write_page:		\n\t"
423
+						 "clr	r17		\n\t"	//New page, write current one first
424
+						 "wait_spm4:		\n\t"
425
+						 "lds	r16,%0		\n\t"	//Wait for previous spm to complete
426
+						 "andi	r16,1           \n\t"
427
+						 "cpi	r16,1           \n\t"
428
+						 "breq	wait_spm4       \n\t"						 							 
429
+						 "ldi	r16,0x05	\n\t"	//Write page pointed to by Z
430
+						 "sts	%0,r16		\n\t"
431
+						 "spm			\n\t"
432
+						 "wait_spm5:		\n\t"
433
+						 "lds	r16,%0		\n\t"	//Wait for previous spm to complete
434
+						 "andi	r16,1           \n\t"
435
+						 "cpi	r16,1           \n\t"
436
+						 "breq	wait_spm5       \n\t"									 
437
+						 "ldi	r16,0x11	\n\t"	//Re-enable RWW section
438
+						 "sts	%0,r16		\n\t"						 			 
439
+						 "spm			\n\t"					 		 
440
+						 "same_page:		\n\t"							 
441
+						 "adiw	r30,2		\n\t"	//Next word in FLASH
442
+						 "sbiw	r24,2		\n\t"	//length-2
443
+						 "breq	final_write	\n\t"	//Finished
444
+						 "rjmp	length_loop	\n\t"
445
+						 "final_write:		\n\t"
446
+						 "cpi	r17,0		\n\t"
447
+						 "breq	block_done	\n\t"
448
+						 "adiw	r24,2		\n\t"	//length+2, fool above check on length after short page write
449
+						 "rjmp	write_page	\n\t"
450
+						 "block_done:		\n\t"
451
+						 "clr	__zero_reg__	\n\t"	//restore zero register
452
+						 : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31"
453
+
454
+						 );
455
+				}
456
+				putch(0x14);
457
+				putch(0x10);
458
+		    }
459
+			else
460
+			{
461
+				if (++error_count == MAX_ERROR_COUNT)
462
+				    app_start();
463
+		    }		
464
+		}
465
+    
466
+		/* Read memory block mode, length is big endian.  */
467
+		else if(ch=='t')
468
+		{
469
+			length.byte[1] = getch();
470
+			length.byte[0] = getch();
471
+
472
+			if (getch() == 'E')
473
+				flags.eeprom = 1;
474
+			else
475
+			{
476
+				flags.eeprom = 0;
477
+				address.word = address.word << 1;	        // address * 2 -> byte location
478
+			}
479
+
480
+			// Command terminator
481
+			if (getch() == ' ')
482
+			{
483
+				putch(0x14);
484
+				for (w=0; w<length.word; w++)
485
+				{
486
+					// Can handle odd and even lengths okay
487
+				    if (flags.eeprom) 
488
+					{
489
+						// Byte access EEPROM read
490
+						while(EECR & (1<<EEPE));
491
+						EEAR = (uint16_t)(void *)address.word;
492
+						EECR |= (1<<EERE);
493
+						putch(EEDR);
494
+
495
+						address.word++;
496
+				    }
497
+				    else
498
+					{
499
+						if (!flags.rampz)
500
+							putch(pgm_read_byte_near(address.word));
501
+
502
+						address.word++;
503
+				    }
504
+				}
505
+				putch(0x10);
506
+		    }
507
+		}
508
+
509
+
510
+		/* Get device signature bytes  */
511
+		else if(ch=='u')
512
+		{
513
+			if (getch() == ' ')
514
+			{
515
+				putch(0x14);
516
+				putch(SIG1);
517
+				putch(SIG2);
518
+				putch(SIG3);
519
+				putch(0x10);
520
+			}
521
+			else
522
+			{
523
+				if (++error_count == MAX_ERROR_COUNT)
524
+					app_start();
525
+			}
526
+		}
527
+
528
+
529
+		/* Read oscillator calibration byte */
530
+		else if(ch=='v')
531
+			byte_response(0x00);
532
+
533
+		else if (++error_count == MAX_ERROR_COUNT)
534
+		    app_start();
535
+
536
+	}
537
+    /* end of forever loop */
538
+}
539
+
540
+
541
+char gethex(void)
542
+{
543
+    char ah,al;
544
+
545
+    ah = getch();
546
+	putch(ah);
547
+    al = getch();
548
+	putch(al);
549
+    
550
+	if(ah >= 'a')
551
+		ah = ah - 'a' + 0x0a;
552
+	else if(ah >= '0')
553
+		ah -= '0';
554
+    if(al >= 'a')
555
+		al = al - 'a' + 0x0a;
556
+	else if(al >= '0')
557
+		al -= '0';
558
+
559
+    return (ah << 4) + al;
560
+}
561
+
562
+
563
+void puthex(char ch)
564
+{
565
+    char ah,al;
566
+
567
+    ah = (ch & 0xf0) >> 4;
568
+	if(ah >= 0x0a)
569
+		ah = ah - 0x0a + 'a';
570
+	else
571
+		ah += '0';
572
+
573
+    al = (ch & 0x0f);
574
+	if(al >= 0x0a)
575
+		al = al - 0x0a + 'a';
576
+	else
577
+		al += '0';
578
+
579
+    putch(ah);
580
+    putch(al);
581
+}
582
+
583
+
584
+void putch(char ch)
585
+{
586
+    while (!(UCSR0A & _BV(UDRE0)));
587
+    UDR0 = ch;
588
+}
589
+
590
+
591
+
592
+
593
+char getch(void)
594
+{
595
+    uint32_t count = 0;
596
+
597
+#ifdef ADABOOT
598
+	LED_PORT &= ~_BV(LED);          // toggle LED to show activity - BBR/LF 10/3/2007 & 9/13/2008
599
+#endif
600
+
601
+    while(!(UCSR0A & _BV(RXC0)))
602
+	{
603
+    	/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/               
604
+    	/* HACKME:: here is a good place to count times*/
605
+    	count++;
606
+    	if (count > MAX_TIME_COUNT)
607
+    		app_start();
608
+     }
609
+
610
+#ifdef ADABOOT
611
+	LED_PORT |= _BV(LED);          // toggle LED to show activity - BBR/LF 10/3/2007 & 9/13/2008
612
+#endif
613
+
614
+    return UDR0;
615
+}
616
+
617
+
618
+void getNch(uint8_t count)
619
+{
620
+    uint8_t i;
621
+    for(i=0;i<count;i++)
622
+	{
623
+		while(!(UCSR0A & _BV(RXC0)));
624
+		UDR0;
625
+    }
626
+}
627
+
628
+
629
+void byte_response(uint8_t val)
630
+{
631
+    if (getch() == ' ')
632
+	{
633
+		putch(0x14);
634
+		putch(val);
635
+		putch(0x10);
636
+    }
637
+	else
638
+	{
639
+		if (++error_count == MAX_ERROR_COUNT)
640
+		    app_start();
641
+    }
642
+}
643
+
644
+
645
+void nothing_response(void)
646
+{
647
+    if (getch() == ' ')
648
+	{
649
+		putch(0x14);
650
+		putch(0x10);
651
+    }
652
+	else
653
+	{
654
+		if (++error_count == MAX_ERROR_COUNT)
655
+		    app_start();
656
+    }
657
+}
658
+
659
+#ifdef ADABOOT
660
+
661
+void flash_led(uint8_t count)
662
+{
663
+    /* flash onboard LED count times to signal entering of bootloader */
664
+	/* l needs to be volatile or the delay loops below might get      */
665
+	/* optimized away if compiling with optimizations (DAM).          */
666
+	
667
+    volatile uint32_t l;
668
+
669
+    if (count == 0) {
670
+      count = ADABOOT;
671
+    }
672
+    
673
+
674
+	int8_t i;
675
+    for (i = 0; i < count; ++i) {
676
+		LED_PORT |= _BV(LED);					// LED on
677
+		for(l = 0; l < (F_CPU / 1000); ++l);		// delay NGvalue was 1000 for both loops - BBR
678
+		LED_PORT &= ~_BV(LED);					// LED off
679
+		for(l = 0; l < (F_CPU / 250); ++l);		// delay asymmteric for ADA BOOT BBR 
680
+	}
681
+
682
+	for(l = 0; l < (F_CPU / 100); ++l);		    // pause ADA BOOT BBR 
683
+		
684
+}
685
+
686
+#else
687
+
688
+void flash_led(uint8_t count)
689
+{
690
+    /* flash onboard LED three times to signal entering of bootloader */
691
+	/* l needs to be volatile or the delay loops below might get
692
+	optimized away if compiling with optimizations (DAM). */
693
+    volatile uint32_t l;
694
+
695
+    if (count == 0) {
696
+      count = 3;
697
+    }
698
+    
699
+	int8_t i;
700
+    for (i = 0; i < count; ++i) {
701
+		LED_PORT |= _BV(LED);
702
+		for(l = 0; l < (F_CPU / 1000); ++l);
703
+		LED_PORT &= ~_BV(LED);
704
+		for(l = 0; l < (F_CPU / 1000); ++l); 
705
+	}
706
+		
707
+}
708
+
709
+
710
+#endif
711
+
712
+
713
+/* end of file ATmegaBOOT.c */

+ 121
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/bootloaders/atmega644p/ATmegaBOOT_324P.hex View File

@@ -0,0 +1,121 @@
1
+:10F800000C943E7C0C945B7C0C945B7C0C945B7C39
2
+:10F810000C945B7C0C945B7C0C945B7C0C945B7C0C
3
+:10F820000C945B7C0C945B7C0C945B7C0C945B7CFC
4
+:10F830000C945B7C0C945B7C0C945B7C0C945B7CEC
5
+:10F840000C945B7C0C945B7C0C945B7C0C945B7CDC
6
+:10F850000C945B7C0C945B7C0C945B7C0C945B7CCC
7
+:10F860000C945B7C0C945B7C0C945B7C0C945B7CBC
8
+:10F870000C945B7C0C945B7C0C945B7C11241FBE11
9
+:10F88000CFEFD8E0DEBFCDBF11E0A0E0B1E0E6E60B
10
+:10F89000FFEF02C005900D92A030B107D9F712E03A
11
+:10F8A000A0E0B1E001C01D92A930B107E1F70E94CC
12
+:10F8B000537D0C94B27F0C94007CCF93DF93CDB733
13
+:10F8C000DEB724970FB6F894DEBF0FBECDBF8823F6
14
+:10F8D00009F481E020E0482F55274115510509F42E
15
+:10F8E0003DC0289A19821A821B821C820BC0898112
16
+:10F8F0009A81AB81BC810196A11DB11D89839A8338
17
+:10F90000AB83BC8389819A81AB81BC8180589E4343
18
+:10F91000A040B04060F3289819821A821B821C8292
19
+:10F920000BC089819A81AB81BC810196A11DB11D5B
20
+:10F9300089839A83AB83BC8389819A81AB81BC81A3
21
+:10F9400080509A4FA040B04060F32F5F822F9927DC
22
+:10F9500087FD9095841795070CF4C3CF19821A82FE
23
+:10F960001B821C8289819A81AB81BC818050914726
24
+:10F97000A240B040A0F489819A81AB81BC810196FC
25
+:10F98000A11DB11D89839A83AB83BC8389819A8130
26
+:10F99000AB81BC8180509147A240B04060F3249677
27
+:10F9A0000FB6F894DEBF0FBECDBFDF91CF910895A3
28
+:10F9B000EF92FF920F931F93EE24FF248701289864
29
+:10F9C0008091C00087FD17C00894E11CF11C011D47
30
+:10F9D000111D81E0E81689E0F8068DE3080780E054
31
+:10F9E000180770F3E0910001F091010109958091F1
32
+:10F9F000C00087FFE9CF289A8091C600992787FD2C
33
+:10FA000090951F910F91FF90EF900895982F8091FE
34
+:10FA1000C00085FFFCCF9093C60008950E94D87C5B
35
+:10FA2000803271F0809102018F5F809302018530F6
36
+:10FA300009F00895E0910001F09101010995089500
37
+:10FA400084E10E94067D80E10E94067D0895CF93A7
38
+:10FA5000C82F0E94D87C803241F0809102018F5FD4
39
+:10FA600080930201853081F40AC084E10E94067D02
40
+:10FA70008C2F0E94067D80E10E94067D05C0E091EA
41
+:10FA80000001F09101010995CF910895282F90E090
42
+:10FA900007C08091C0008823E4F78091C6009F5F73
43
+:10FAA0009217B8F30895CFEFD8E0DEBFCDBF0000C6
44
+:10FAB00094B714BE809160008861809360001092BA
45
+:10FAC000600091FF74C189E18093C4001092C50069
46
+:10FAD00088E18093C10086E08093C2005098589AD4
47
+:10FAE000209A83E00E945D7C81E00E945D7C0E9400
48
+:10FAF000D87C8033B9F18133C1F1803409F456C028
49
+:10FB0000813409F45CC0823409F46EC0853409F490
50
+:10FB100071C0803539F1813509F4F3C0823511F1B6
51
+:10FB2000853509F4D3C0863509F4CBC0843609F491
52
+:10FB300065C0843709F4EBC0853709F4D2C0863735
53
+:10FB400009F44AC0809102018F5F809302018530E1
54
+:10FB500071F6E0910001F091010109950E94D87CB5
55
+:10FB6000803349F60E940E7DC2CF0E94D87CC82FF8
56
+:10FB7000803241F784E10E94067D81E40E94067D87
57
+:10FB800086E50E94067D82E50E94067D8C2F0E94FC
58
+:10FB9000067D89E40E94067D83E50E94067D80E55E
59
+:10FBA0000E94067D80E10E94067DA1CF0E94D87C44
60
+:10FBB0008638C0F20E94D87C0E940E7D98CF0E94A9
61
+:10FBC000D87C803809F407C1813809F400C1823833
62
+:10FBD00009F4F9C0883921F080E00E94277D87CFA1
63
+:10FBE00083E00E94277D83CF84E10E94467D0E94AE
64
+:10FBF0000E7D7DCF85E00E94467DF9CF0E94D87CA6
65
+:10FC0000809306020E94D87C8093050280910802AE
66
+:10FC10008E7F809308020E94D87C853409F44BC003
67
+:10FC2000E5E0F1E0119281E0E438F807D9F3D0F390
68
+:10FC3000C0E0D0E0809105029091060218161906E6
69
+:10FC400078F405E011E00E94D87CF80181938F01DF
70
+:10FC500021968091050290910602C817D90798F362
71
+:10FC60000E94D87C803209F06DCF8091080280FF1D
72
+:10FC7000B6C0C0E0D0E02091050230910602121615
73
+:10FC80001306B8F4E0910301F0910401A5E0B1E09E
74
+:10FC9000F999FECFF2BDE1BD8D9180BDFA9AF99A36
75
+:10FCA00031962196C217D30798F3F0930401E0939D
76
+:10FCB000030184E175CF809108028160809308027E
77
+:10FCC000AFCF84E00E94467D80E087CF0E94D87C41
78
+:10FCD000809303010E94D87C809304010E940E7DD2
79
+:10FCE00006CF0E94D87C803209F02CCF84E10E949C
80
+:10FCF000067D8EE10E94067D85E90E94067D88E0F2
81
+:10FD00004FCF0E940E7D88E080936000FFCF0E945D
82
+:10FD1000D87C809306020E94D87C809305020E94C2
83
+:10FD2000D87C853409F449C0809108028E7F809385
84
+:10FD300008028091030190910401880F991F90930C
85
+:10FD40000401809303010E94D87C803209F0CFCE59
86
+:10FD500084E10E94067DC0E0D0E020910502309150
87
+:10FD600006021216130608F01DCFE0910301F09170
88
+:10FD700004018091080280FF96C0F999FECFF2BD80
89
+:10FD8000E1BDF89A80B50E94067DE0910301F091F3
90
+:10FD900004013196F0930401E093030120910502E0
91
+:10FDA000309106022196C217D30718F3FBCEE091DB
92
+:10FDB0000001F0910101099586CE809108028160D1
93
+:10FDC00080930802C0CF80E10E94277D90CE81E021
94
+:10FDD0000E94277D8CCE82E00E94277D88CE809174
95
+:10FDE000030190910401880F991F9093040180935F
96
+:10FDF00003018091050280FF09C080910502909166
97
+:10FE0000060201969093060280930502F999FECFAF
98
+:10FE10001127E0910301F0910401C5E0D1E0809148
99
+:10FE2000050290910602103091F400915700017084
100
+:10FE30000130D9F303E000935700E8950091570093
101
+:10FE400001700130D9F301E100935700E895099062
102
+:10FE500019900091570001700130D9F301E000932F
103
+:10FE60005700E8951395103898F011270091570026
104
+:10FE700001700130D9F305E000935700E895009137
105
+:10FE8000570001700130D9F301E100935700E89564
106
+:10FE90003296029709F0C7CF103011F00296E5CFE5
107
+:10FEA000112484E17DCE869580FF06C03196F093C3
108
+:10FEB0000401E093030176CF84910E94067D209196
109
+:10FEC000050230910602E0910301F0910401EECFAA
110
+:10FED0001F93CF930E94D87CC82F0E94067D0E945A
111
+:10FEE000D87C182F0E94067DC1362CF0C7551136DC
112
+:10FEF0003CF0175508C0C033D4F3C0531136CCF7CB
113
+:10FF000010330CF01053C295C07FC10F8C2F99276E
114
+:10FF100087FD9095CF911F910895CF93282F992712
115
+:10FF200087FD9095807F907095958795959587959D
116
+:10FF300095958795959587958A303CF0895AC22F7B
117
+:10FF4000CF70CA303CF0C95A06C0805DC22FCF7056
118
+:10FF5000CA30CCF7C05D0E94067D8C2F0E94067DC2
119
+:06FF6000CF910895FFCFD0
120
+:040000030000F80001
121
+:00000001FF

+ 120
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/bootloaders/atmega644p/ATmegaBOOT_644.hex View File

@@ -0,0 +1,120 @@
1
+:10F800000C94387C0C94557C0C94557C0C94557C51
2
+:10F810000C94557C0C94557C0C94557C0C94557C24
3
+:10F820000C94557C0C94557C0C94557C0C94557C14
4
+:10F830000C94557C0C94557C0C94557C0C94557C04
5
+:10F840000C94557C0C94557C0C94557C0C94557CF4
6
+:10F850000C94557C0C94557C0C94557C0C94557CE4
7
+:10F860000C94557C0C94557C0C94557C0C94557CD4
8
+:10F8700011241FBECFEFD0E1DEBFCDBF11E0A0E06D
9
+:10F88000B1E0EAE5FFEF02C005900D92A030B107AC
10
+:10F89000D9F712E0A0E0B1E001C01D92A930B10794
11
+:10F8A000E1F70E944D7D0C94AC7F0C94007CCF93CB
12
+:10F8B000DF93CDB7DEB724970FB6F894DEBF0FBE47
13
+:10F8C000CDBF882309F481E020E0482F552741155A
14
+:10F8D000510509F43DC0289A19821A821B821C82A4
15
+:10F8E0000BC089819A81AB81BC810196A11DB11D9C
16
+:10F8F00089839A83AB83BC8389819A81AB81BC81E4
17
+:10F9000080589E43A040B04060F3289819821A8224
18
+:10F910001B821C820BC089819A81AB81BC810196BC
19
+:10F92000A11DB11D89839A83AB83BC8389819A8190
20
+:10F93000AB81BC8180509A4FA040B04060F32F5FF4
21
+:10F94000822F992787FD9095841795070CF4C3CFD4
22
+:10F9500019821A821B821C8289819A81AB81BC81A7
23
+:10F9600080509147A240B040A0F489819A81AB8138
24
+:10F97000BC810196A11DB11D89839A83AB83BC8391
25
+:10F9800089819A81AB81BC8180509147A240B0406F
26
+:10F9900060F324960FB6F894DEBF0FBECDBFDF91A3
27
+:10F9A000CF910895EF92FF920F931F93EE24FF24BF
28
+:10F9B000870128988091C00087FD17C00894E11C3A
29
+:10F9C000F11C011D111D81E0E81689E0F8068DE3A8
30
+:10F9D000080780E0180770F3E0910001F091010141
31
+:10F9E00009958091C00087FFE9CF289A8091C600D1
32
+:10F9F000992787FD90951F910F91FF90EF900895A3
33
+:10FA0000982F8091C00085FFFCCF9093C600089589
34
+:10FA10000E94D27C803271F0809102018F5F8093CE
35
+:10FA20000201853009F00895E0910001F091010193
36
+:10FA30000995089584E10E94007D80E10E94007D87
37
+:10FA40000895CF93C82F0E94D27C803241F08091DC
38
+:10FA500002018F5F80930201853081F40AC084E146
39
+:10FA60000E94007D8C2F0E94007D80E10E94007D1D
40
+:10FA700005C0E0910001F09101010995CF91089531
41
+:10FA8000282F90E007C08091C0008823E4F7809180
42
+:10FA9000C6009F5F9217B8F30895CFEFD0E1DEBFA5
43
+:10FAA000CDBF000094B714BE809160008861809340
44
+:10FAB00060001092600091FF74C189E18093C400DE
45
+:10FAC0001092C50088E18093C10086E08093C20057
46
+:10FAD0005098589A209A83E00E94577C81E00E94B7
47
+:10FAE000577C0E94D27C8033B9F18133C1F18034DC
48
+:10FAF00009F456C0813409F45CC0823409F46EC044
49
+:10FB0000853409F471C0803539F1813509F4F3C0C9
50
+:10FB1000823511F1853509F4D3C0863509F4CBC09F
51
+:10FB2000843609F465C0843709F4EBC0853709F4DD
52
+:10FB3000D2C0863709F44AC0809102018F5F80935A
53
+:10FB40000201853071F6E0910001F0910101099503
54
+:10FB50000E94D27C803349F60E94087DC2CF0E9469
55
+:10FB6000D27CC82F803241F784E10E94007D81E47D
56
+:10FB70000E94007D86E50E94007D82E50E94007D56
57
+:10FB80008C2F0E94007D89E40E94007D83E50E9405
58
+:10FB9000007D80E50E94007D80E10E94007DA1CF74
59
+:10FBA0000E94D27C8638C0F20E94D27C0E94087DDE
60
+:10FBB00098CF0E94D27C803809F407C1813809F4BB
61
+:10FBC00000C1823809F4F9C0883921F080E00E9430
62
+:10FBD000217D87CF83E00E94217D83CF84E10E9435
63
+:10FBE000407D0E94087D7DCF85E00E94407DF9CF59
64
+:10FBF0000E94D27C809306020E94D27C80930502F0
65
+:10FC0000809108028E7F809308020E94D27C853406
66
+:10FC100009F44BC0E5E0F1E0119281E0E438F80727
67
+:10FC2000D9F3D0F3C0E0D0E08091050290910602B4
68
+:10FC30001816190678F405E011E00E94D27CF8014C
69
+:10FC400081938F0121968091050290910602C81739
70
+:10FC5000D90798F30E94D27C803209F06DCF809151
71
+:10FC6000080280FFB6C0C0E0D0E0209105023091CC
72
+:10FC7000060212161306B8F4E0910301F091040194
73
+:10FC8000A5E0B1E0F999FECFF2BDE1BD8D9180BD57
74
+:10FC9000FA9AF99A31962196C217D30798F3F093FE
75
+:10FCA0000401E093030184E175CF80910802816033
76
+:10FCB00080930802AFCF84E00E94407D80E087CF30
77
+:10FCC0000E94D27C809303010E94D27C8093040125
78
+:10FCD0000E94087D06CF0E94D27C803209F02CCF92
79
+:10FCE00084E10E94007D8EE10E94007D86E90E94F1
80
+:10FCF000007D89E04FCF0E94087D88E080936000FE
81
+:10FD0000FFCF0E94D27C809306020E94D27C809317
82
+:10FD100005020E94D27C853409F449C08091080212
83
+:10FD20008E7F809308028091030190910401880FD7
84
+:10FD3000991F90930401809303010E94D27C80322A
85
+:10FD400009F0CFCE84E10E94007DC0E0D0E0209198
86
+:10FD50000502309106021216130608F01DCFE0913D
87
+:10FD60000301F09104018091080280FF96C0F99987
88
+:10FD7000FECFF2BDE1BDF89A80B50E94007DE09112
89
+:10FD80000301F09104013196F0930401E093030123
90
+:10FD900020910502309106022196C217D30718F36D
91
+:10FDA000FBCEE0910001F0910101099586CE809192
92
+:10FDB0000802816080930802C0CF80E10E94217D0B
93
+:10FDC00090CE81E00E94217D8CCE82E00E94217D38
94
+:10FDD00088CE8091030190910401880F991F909320
95
+:10FDE0000401809303018091050280FF09C0809186
96
+:10FDF00005029091060201969093060280930502F7
97
+:10FE0000F999FECF1127E0910301F0910401C5E0BB
98
+:10FE1000D1E08091050290910602103091F400919A
99
+:10FE2000570001700130D9F303E000935700E895C3
100
+:10FE30000091570001700130D9F301E100935700A0
101
+:10FE4000E895099019900091570001700130D9F39D
102
+:10FE500001E000935700E8951395103898F01127AA
103
+:10FE60000091570001700130D9F305E0009357006D
104
+:10FE7000E8950091570001700130D9F301E100933A
105
+:10FE80005700E8953296029709F0C7CF103011F06D
106
+:10FE90000296E5CF112484E17DCE869580FF06C0D1
107
+:10FEA0003196F0930401E093030176CF84910E9490
108
+:10FEB000007D2091050230910602E0910301F0914E
109
+:10FEC0000401EECF1F93CF930E94D27CC82F0E94D3
110
+:10FED000007D0E94D27C182F0E94007DC1362CF03C
111
+:10FEE000C75511363CF0175508C0C033D4F3C05382
112
+:10FEF0001136CCF710330CF01053C295C07FC10FF0
113
+:10FF00008C2F992787FD9095CF911F910895CF93BE
114
+:10FF1000282F992787FD9095807F907095958795DC
115
+:10FF20009595879595958795959587958A303CF019
116
+:10FF3000895AC22FCF70CA303CF0C95A06C0805DC2
117
+:10FF4000C22FCF70CA30CCF7C05D0E94007D8C2FCD
118
+:0AFF50000E94007DCF910895FFCFBD
119
+:040000030000F80001
120
+:00000001FF

+ 121
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/bootloaders/atmega644p/ATmegaBOOT_644P.hex View File

@@ -0,0 +1,121 @@
1
+:10F800000C943E7C0C945B7C0C945B7C0C945B7C39
2
+:10F810000C945B7C0C945B7C0C945B7C0C945B7C0C
3
+:10F820000C945B7C0C945B7C0C945B7C0C945B7CFC
4
+:10F830000C945B7C0C945B7C0C945B7C0C945B7CEC
5
+:10F840000C945B7C0C945B7C0C945B7C0C945B7CDC
6
+:10F850000C945B7C0C945B7C0C945B7C0C945B7CCC
7
+:10F860000C945B7C0C945B7C0C945B7C0C945B7CBC
8
+:10F870000C945B7C0C945B7C0C945B7C11241FBE11
9
+:10F88000CFEFD0E1DEBFCDBF11E0A0E0B1E0E6E612
10
+:10F89000FFEF02C005900D92A030B107D9F712E03A
11
+:10F8A000A0E0B1E001C01D92A930B107E1F70E94CC
12
+:10F8B000537D0C94B27F0C94007CCF93DF93CDB733
13
+:10F8C000DEB724970FB6F894DEBF0FBECDBF8823F6
14
+:10F8D00009F481E020E0482F55274115510509F42E
15
+:10F8E0003DC0289A19821A821B821C820BC0898112
16
+:10F8F0009A81AB81BC810196A11DB11D89839A8338
17
+:10F90000AB83BC8389819A81AB81BC8180589E4343
18
+:10F91000A040B04060F3289819821A821B821C8292
19
+:10F920000BC089819A81AB81BC810196A11DB11D5B
20
+:10F9300089839A83AB83BC8389819A81AB81BC81A3
21
+:10F9400080509A4FA040B04060F32F5F822F9927DC
22
+:10F9500087FD9095841795070CF4C3CF19821A82FE
23
+:10F960001B821C8289819A81AB81BC818050914726
24
+:10F97000A240B040A0F489819A81AB81BC810196FC
25
+:10F98000A11DB11D89839A83AB83BC8389819A8130
26
+:10F99000AB81BC8180509147A240B04060F3249677
27
+:10F9A0000FB6F894DEBF0FBECDBFDF91CF910895A3
28
+:10F9B000EF92FF920F931F93EE24FF248701289864
29
+:10F9C0008091C00087FD17C00894E11CF11C011D47
30
+:10F9D000111D81E0E81689E0F8068DE3080780E054
31
+:10F9E000180770F3E0910001F091010109958091F1
32
+:10F9F000C00087FFE9CF289A8091C600992787FD2C
33
+:10FA000090951F910F91FF90EF900895982F8091FE
34
+:10FA1000C00085FFFCCF9093C60008950E94D87C5B
35
+:10FA2000803271F0809102018F5F809302018530F6
36
+:10FA300009F00895E0910001F09101010995089500
37
+:10FA400084E10E94067D80E10E94067D0895CF93A7
38
+:10FA5000C82F0E94D87C803241F0809102018F5FD4
39
+:10FA600080930201853081F40AC084E10E94067D02
40
+:10FA70008C2F0E94067D80E10E94067D05C0E091EA
41
+:10FA80000001F09101010995CF910895282F90E090
42
+:10FA900007C08091C0008823E4F78091C6009F5F73
43
+:10FAA0009217B8F30895CFEFD0E1DEBFCDBF0000CD
44
+:10FAB00094B714BE809160008861809360001092BA
45
+:10FAC000600091FF74C189E18093C4001092C50069
46
+:10FAD00088E18093C10086E08093C2005098589AD4
47
+:10FAE000209A83E00E945D7C81E00E945D7C0E9400
48
+:10FAF000D87C8033B9F18133C1F1803409F456C028
49
+:10FB0000813409F45CC0823409F46EC0853409F490
50
+:10FB100071C0803539F1813509F4F3C0823511F1B6
51
+:10FB2000853509F4D3C0863509F4CBC0843609F491
52
+:10FB300065C0843709F4EBC0853709F4D2C0863735
53
+:10FB400009F44AC0809102018F5F809302018530E1
54
+:10FB500071F6E0910001F091010109950E94D87CB5
55
+:10FB6000803349F60E940E7DC2CF0E94D87CC82FF8
56
+:10FB7000803241F784E10E94067D81E40E94067D87
57
+:10FB800086E50E94067D82E50E94067D8C2F0E94FC
58
+:10FB9000067D89E40E94067D83E50E94067D80E55E
59
+:10FBA0000E94067D80E10E94067DA1CF0E94D87C44
60
+:10FBB0008638C0F20E94D87C0E940E7D98CF0E94A9
61
+:10FBC000D87C803809F407C1813809F400C1823833
62
+:10FBD00009F4F9C0883921F080E00E94277D87CFA1
63
+:10FBE00083E00E94277D83CF84E10E94467D0E94AE
64
+:10FBF0000E7D7DCF85E00E94467DF9CF0E94D87CA6
65
+:10FC0000809306020E94D87C8093050280910802AE
66
+:10FC10008E7F809308020E94D87C853409F44BC003
67
+:10FC2000E5E0F1E0119281E0E438F807D9F3D0F390
68
+:10FC3000C0E0D0E0809105029091060218161906E6
69
+:10FC400078F405E011E00E94D87CF80181938F01DF
70
+:10FC500021968091050290910602C817D90798F362
71
+:10FC60000E94D87C803209F06DCF8091080280FF1D
72
+:10FC7000B6C0C0E0D0E02091050230910602121615
73
+:10FC80001306B8F4E0910301F0910401A5E0B1E09E
74
+:10FC9000F999FECFF2BDE1BD8D9180BDFA9AF99A36
75
+:10FCA00031962196C217D30798F3F0930401E0939D
76
+:10FCB000030184E175CF809108028160809308027E
77
+:10FCC000AFCF84E00E94467D80E087CF0E94D87C41
78
+:10FCD000809303010E94D87C809304010E940E7DD2
79
+:10FCE00006CF0E94D87C803209F02CCF84E10E949C
80
+:10FCF000067D8EE10E94067D86E90E94067D8AE0EF
81
+:10FD00004FCF0E940E7D88E080936000FFCF0E945D
82
+:10FD1000D87C809306020E94D87C809305020E94C2
83
+:10FD2000D87C853409F449C0809108028E7F809385
84
+:10FD300008028091030190910401880F991F90930C
85
+:10FD40000401809303010E94D87C803209F0CFCE59
86
+:10FD500084E10E94067DC0E0D0E020910502309150
87
+:10FD600006021216130608F01DCFE0910301F09170
88
+:10FD700004018091080280FF96C0F999FECFF2BD80
89
+:10FD8000E1BDF89A80B50E94067DE0910301F091F3
90
+:10FD900004013196F0930401E093030120910502E0
91
+:10FDA000309106022196C217D30718F3FBCEE091DB
92
+:10FDB0000001F0910101099586CE809108028160D1
93
+:10FDC00080930802C0CF80E10E94277D90CE81E021
94
+:10FDD0000E94277D8CCE82E00E94277D88CE809174
95
+:10FDE000030190910401880F991F9093040180935F
96
+:10FDF00003018091050280FF09C080910502909166
97
+:10FE0000060201969093060280930502F999FECFAF
98
+:10FE10001127E0910301F0910401C5E0D1E0809148
99
+:10FE2000050290910602103091F400915700017084
100
+:10FE30000130D9F303E000935700E8950091570093
101
+:10FE400001700130D9F301E100935700E895099062
102
+:10FE500019900091570001700130D9F301E000932F
103
+:10FE60005700E8951395103898F011270091570026
104
+:10FE700001700130D9F305E000935700E895009137
105
+:10FE8000570001700130D9F301E100935700E89564
106
+:10FE90003296029709F0C7CF103011F00296E5CFE5
107
+:10FEA000112484E17DCE869580FF06C03196F093C3
108
+:10FEB0000401E093030176CF84910E94067D209196
109
+:10FEC000050230910602E0910301F0910401EECFAA
110
+:10FED0001F93CF930E94D87CC82F0E94067D0E945A
111
+:10FEE000D87C182F0E94067DC1362CF0C7551136DC
112
+:10FEF0003CF0175508C0C033D4F3C0531136CCF7CB
113
+:10FF000010330CF01053C295C07FC10F8C2F99276E
114
+:10FF100087FD9095CF911F910895CF93282F992712
115
+:10FF200087FD9095807F907095958795959587959D
116
+:10FF300095958795959587958A303CF0895AC22F7B
117
+:10FF4000CF70CA303CF0C95A06C0805DC22FCF7056
118
+:10FF5000CA30CCF7C05D0E94067D8C2F0E94067DC2
119
+:06FF6000CF910895FFCFD0
120
+:040000030000F80001
121
+:00000001FF

+ 56
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/bootloaders/atmega644p/Makefile View File

@@ -0,0 +1,56 @@
1
+# Makefile for ATmegaBOOT
2
+# E.Lins, 18.7.2005
3
+# $Id$
4
+
5
+
6
+# program name should not be changed...
7
+PROGRAM    = ATmegaBOOT_644P
8
+
9
+# enter the target CPU frequency
10
+AVR_FREQ   = 16000000L
11
+
12
+MCU_TARGET = atmega644p
13
+LDSECTION  = --section-start=.text=0xF800
14
+
15
+OBJ        = $(PROGRAM).o
16
+OPTIMIZE   = -O2
17
+
18
+DEFS       = 
19
+LIBS       = 
20
+
21
+CC         = avr-gcc
22
+
23
+
24
+# Override is only needed by avr-lib build system.
25
+
26
+override CFLAGS        = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS)
27
+override LDFLAGS       = -Wl,$(LDSECTION)
28
+#override LDFLAGS       = -Wl,-Map,$(PROGRAM).map,$(LDSECTION)
29
+
30
+OBJCOPY        = avr-objcopy
31
+OBJDUMP        = avr-objdump
32
+
33
+all: CFLAGS += '-DMAX_TIME_COUNT=8000000L>>1' -DADABOOT
34
+all: $(PROGRAM).hex
35
+
36
+$(PROGRAM).hex: $(PROGRAM).elf
37
+	$(OBJCOPY) -j .text -j .data -O ihex $< $@
38
+	
39
+$(PROGRAM).elf: $(OBJ)
40
+	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
41
+	
42
+$(OBJ): ATmegaBOOT.c
43
+	avr-gcc $(CFLAGS) $(LDFLAGS) -c -g -O2 -Wall -mmcu=$(MCU_TARGET) ATmegaBOOT.c -o $(PROGRAM).o
44
+
45
+%.lst: %.elf
46
+	$(OBJDUMP) -h -S $< > $@
47
+
48
+%.srec: %.elf
49
+	$(OBJCOPY) -j .text -j .data -O srec $< $@
50
+
51
+%.bin: %.elf
52
+	$(OBJCOPY) -j .text -j .data -O binary $< $@
53
+
54
+clean:
55
+	rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex
56
+	

+ 3
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/bootloaders/atmega644p/README.txt View File

@@ -0,0 +1,3 @@
1
+Note: This bootloader support ATmega644, ATmega644P and ATmega324P.
2
+To build, set PROGRAM and MCU_TARGET in the Makefile according to your target device.
3
+

+ 269
- 0
ArduinoAddons/Arduino_1.0.x/hardware/OMC_tkj/variants/sanguino/pins_arduino.h View File

@@ -0,0 +1,269 @@
1
+/*
2
+  pins_arduino.h - Pin definition functions for Arduino
3
+  Part of Arduino - http://www.arduino.cc/
4
+
5
+  Copyright (c) 2007 David A. Mellis
6
+
7
+  This library is free software; you can redistribute it and/or
8
+  modify it under the terms of the GNU Lesser General Public
9
+  License as published by the Free Software Foundation; either
10
+  version 2.1 of the License, or (at your option) any later version.
11
+
12
+  This library is distributed in the hope that it will be useful,
13
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
+  Lesser General Public License for more details.
16
+
17
+  You should have received a copy of the GNU Lesser General
18
+  Public License along with this library; if not, write to the
19
+  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20
+  Boston, MA  02111-1307  USA
21
+
22
+  $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
23
+
24
+  Changelog
25
+  -----------
26
+  11/25/11  - ryan@ryanmsutton.com - Add pins for Sanguino 644P and 1284P
27
+  07/15/12  - ryan@ryanmsutton.com - Updated for arduino0101
28
+
29
+  Improvements by Kristian Lauszus, kristianl@tkjelectronics.dk
30
+*/
31
+
32
+#ifndef Pins_Arduino_h
33
+#define Pins_Arduino_h
34
+
35
+#include <avr/pgmspace.h>
36
+
37
+const static uint8_t SS   = 4;
38
+const static uint8_t MOSI = 5;
39
+const static uint8_t MISO = 6;
40
+const static uint8_t SCK  = 7;
41
+
42
+static const uint8_t SDA = 17;
43
+static const uint8_t SCL = 16;
44
+
45
+#define LED_BUILTIN 0
46
+
47
+static const uint8_t A0 = 31;
48
+static const uint8_t A1 = 30;
49
+static const uint8_t A2 = 29;
50
+static const uint8_t A3 = 28;
51
+static const uint8_t A4 = 27;
52
+static const uint8_t A5 = 26;
53
+static const uint8_t A6 = 25;
54
+static const uint8_t A7 = 24;
55
+
56
+// ATMEL ATMEGA644/ATMEGA1284 / SANGUINO
57
+//
58
+//                        +---\/---+
59
+//            (D 0) PB0  1|        |40  PA0 (AI 0 / D31)
60
+//            (D 1) PB1  2|        |39  PA1 (AI 1 / D30)
61
+//       INT2 (D 2) PB2  3|        |38  PA2 (AI 2 / D29)
62
+//        PWM (D 3) PB3  4|        |37  PA3 (AI 3 / D28)
63
+//     SS PWM (D 4) PB4  5|        |36  PA4 (AI 4 / D27)
64
+//       MOSI (D 5) PB5  6|        |35  PA5 (AI 5 / D26)
65
+//       MISO (D 6) PB6  7|        |34  PA6 (AI 6 / D25)
66
+//        SCK (D 7) PB7  8|        |33  PA7 (AI 7 / D24)
67
+//                  RST  9|        |32  AREF
68
+//                  VCC 10|        |31  GND
69
+//                  GND 11|        |30  AVCC
70
+//                XTAL2 12|        |29  PC7 (D 23)
71
+//                XTAL1 13|        |28  PC6 (D 22)
72
+//       RX0 (D 8)  PD0 14|        |27  PC5 (D 21) TDI
73
+//       TX0 (D 9)  PD1 15|        |26  PC4 (D 20) TDO
74
+//  INT0 RX1 (D 10) PD2 16|        |25  PC3 (D 19) TMS
75
+//  INT1 TX1 (D 11) PD3 17|        |24  PC2 (D 18) TCK
76
+//       PWM (D 12) PD4 18|        |23  PC1 (D 17) SDA
77
+//       PWM (D 13) PD5 19|        |22  PC0 (D 16) SCL
78
+//       PWM (D 14) PD6 20|        |21  PD7 (D 15) PWM
79
+//                        +--------+
80
+//
81
+#define NUM_DIGITAL_PINS            24
82
+#define NUM_ANALOG_INPUTS           8
83
+
84
+#define analogInputToDigitalPin(p)  ((p < 8) ? 31 - (p): -1)
85
+#define analogPinToChannel(p)       ((p < 8) ? (p) : 31 - (p))
86
+
87
+#define digitalPinHasPWM(p)         ((p) == 3 || (p) == 4 || (p) == 12 || (p) == 13 || (p) == 14 || (p) == 15 )
88
+
89
+#define digitalPinToPCICR(p)        ( (((p) >= 0) && ((p) <= 31)) ? (&PCICR) : ((uint8_t *)0) )
90
+
91
+#define digitalPinToPCICRbit(p)     ( (((p) >= 24) && ((p) <= 31)) ? 0 : \
92
+                                    ( (((p) >=  0) && ((p) <=  7)) ? 1 : \
93
+                                    ( (((p) >= 16) && ((p) <= 23)) ? 2 : \
94
+                                    ( (((p) >=  8) && ((p) <= 15)) ? 3 : \
95
+                                    0 ) ) ) )
96
+
97
+#define digitalPinToPCMSK(p)        ( (((p) >= 24) && ((p) <= 31)) ? (&PCMSK0) : \
98
+                                    ( (((p) >=  0) && ((p) <=  7)) ? (&PCMSK1) : \
99
+                                    ( (((p) >= 16) && ((p) <= 23)) ? (&PCMSK2) : \
100
+                                    ( (((p) >=  8) && ((p) <= 15)) ? (&PCMSK3) : \
101
+                                    ((uint8_t *)0) ) ) ) )
102
+
103
+
104
+#define digitalPinToPCMSKbit(p)     ( (((p) >= 24) && ((p) <= 31)) ? (31 - (p)) : \
105
+                                    ( (((p) >=  0) && ((p) <=  7)) ? (p) : \
106
+                                    ( (((p) >= 16) && ((p) <= 23)) ? ((p) - 16) : \
107
+                                    ( (((p) >=  8) && ((p) <= 15)) ? ((p) - 8) : \
108
+                                    0 ) ) ) )
109
+
110
+#define digitalPinToInterrupt(p)    ((p) == 10 ? 0 : ((p) == 11 ? 1 : ((p) == 2 ? 2 : NOT_AN_INTERRUPT)))
111
+
112
+#ifdef ARDUINO_MAIN
113
+// these arrays map port names (e.g. port B) to the
114
+// appropriate addresses for various functions (e.g. reading
115
+// and writing)
116
+const uint16_t PROGMEM port_to_mode_PGM[] =
117
+{
118
+        NOT_A_PORT,
119
+        (uint16_t) &DDRA,
120
+        (uint16_t) &DDRB,
121
+        (uint16_t) &DDRC,
122
+        (uint16_t) &DDRD,
123
+};
124
+
125
+const uint16_t PROGMEM port_to_output_PGM[] =
126
+{
127
+        NOT_A_PORT,
128
+        (uint16_t) &PORTA,
129
+        (uint16_t) &PORTB,
130
+        (uint16_t) &PORTC,
131
+        (uint16_t) &PORTD,
132
+};
133
+const uint16_t PROGMEM port_to_input_PGM[] =
134
+{
135
+        NOT_A_PORT,
136
+        (uint16_t) &PINA,
137
+        (uint16_t) &PINB,
138
+        (uint16_t) &PINC,
139
+        (uint16_t) &PIND,
140
+};
141
+const uint8_t PROGMEM digital_pin_to_port_PGM[] =
142
+{
143
+        PB, /* 0 */
144
+        PB,
145
+        PB,
146
+        PB,
147
+        PB,
148
+        PB,
149
+        PB,
150
+        PB,
151
+        PD, /* 8 */
152
+        PD,
153
+        PD,
154
+        PD,
155
+        PD,
156
+        PD,
157
+        PD,
158
+        PD,
159
+        PC, /* 16 */
160
+        PC,
161
+        PC,
162
+        PC,
163
+        PC,
164
+        PC,
165
+        PC,
166
+        PC,
167
+        PA, /* 24 */
168
+        PA,
169
+        PA,
170
+        PA,
171
+        PA,
172
+        PA,
173
+        PA,
174
+        PA  /* 31 */
175
+};
176
+const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] =
177
+{
178
+        _BV(0), /* 0, port B */
179
+        _BV(1),
180
+        _BV(2),
181
+        _BV(3),
182
+        _BV(4),
183
+        _BV(5),
184
+        _BV(6),
185
+        _BV(7),
186
+        _BV(0), /* 8, port D */
187
+        _BV(1),
188
+        _BV(2),
189
+        _BV(3),
190
+        _BV(4),
191
+        _BV(5),
192
+        _BV(6),
193
+        _BV(7),
194
+        _BV(0), /* 16, port C */
195
+        _BV(1),
196
+        _BV(2),
197
+        _BV(3),
198
+        _BV(4),
199
+        _BV(5),
200
+        _BV(6),
201
+        _BV(7),
202
+        _BV(7), /* 24, port A */
203
+        _BV(6),
204
+        _BV(5),
205
+        _BV(4),
206
+        _BV(3),
207
+        _BV(2),
208
+        _BV(1),
209
+        _BV(0)
210
+};
211
+const uint8_t PROGMEM digital_pin_to_timer_PGM[] =
212
+{
213
+        NOT_ON_TIMER,   /* 0  - PB0 */
214
+        NOT_ON_TIMER,   /* 1  - PB1 */
215
+        NOT_ON_TIMER,   /* 2  - PB2 */
216
+        TIMER0A,        /* 3  - PB3 */
217
+        TIMER0B,        /* 4  - PB4 */
218
+        NOT_ON_TIMER,   /* 5  - PB5 */
219
+        NOT_ON_TIMER,   /* 6  - PB6 */
220
+        NOT_ON_TIMER,   /* 7  - PB7 */
221
+        NOT_ON_TIMER,   /* 8  - PD0 */
222
+        NOT_ON_TIMER,   /* 9  - PD1 */
223
+        NOT_ON_TIMER,   /* 10 - PD2 */
224
+        NOT_ON_TIMER,   /* 11 - PD3 */
225
+        TIMER1B,        /* 12 - PD4 */
226
+        TIMER1A,        /* 13 - PD5 */
227
+        TIMER2B,        /* 14 - PD6 */
228
+        TIMER2A,        /* 15 - PD7 */
229
+        NOT_ON_TIMER,   /* 16 - PC0 */
230
+        NOT_ON_TIMER,   /* 17 - PC1 */
231
+        NOT_ON_TIMER,   /* 18 - PC2 */
232
+        NOT_ON_TIMER,   /* 19 - PC3 */
233
+        NOT_ON_TIMER,   /* 20 - PC4 */
234
+        NOT_ON_TIMER,   /* 21 - PC5 */
235
+        NOT_ON_TIMER,   /* 22 - PC6 */
236
+        NOT_ON_TIMER,   /* 23 - PC7 */
237
+        NOT_ON_TIMER,   /* 24 - PA0 */
238
+        NOT_ON_TIMER,   /* 25 - PA1 */
239
+        NOT_ON_TIMER,   /* 26 - PA2 */
240
+        NOT_ON_TIMER,   /* 27 - PA3 */
241
+        NOT_ON_TIMER,   /* 28 - PA4 */
242
+        NOT_ON_TIMER,   /* 29 - PA5 */
243
+        NOT_ON_TIMER,   /* 30 - PA6 */
244
+        NOT_ON_TIMER   /* 31 - PA7 */
245
+};
246
+#endif
247
+
248
+// These serial port names are intended to allow libraries and architecture-neutral
249
+// sketches to automatically default to the correct port name for a particular type
250
+// of use.  For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
251
+// the first hardware serial port whose RX/TX pins are not dedicated to another use.
252
+//
253
+// SERIAL_PORT_MONITOR        Port which normally prints to the Arduino Serial Monitor
254
+//
255
+// SERIAL_PORT_USBVIRTUAL     Port which is USB virtual serial
256
+//
257
+// SERIAL_PORT_LINUXBRIDGE    Port which connects to a Linux system via Bridge library
258
+//
259
+// SERIAL_PORT_HARDWARE       Hardware serial port, physical RX & TX pins.
260
+//
261
+// SERIAL_PORT_HARDWARE_OPEN  Hardware serial ports which are open for use.  Their RX & TX
262
+//                            pins are NOT connected to anything by default.
263
+
264
+#define SERIAL_PORT_MONITOR         Serial
265
+#define SERIAL_PORT_HARDWARE        Serial
266
+#define SERIAL_PORT_HARDWARE1       Serial1
267
+#define SERIAL_PORT_HARDWARE_OPEN   Serial1
268
+
269
+#endif

Loading…
Cancel
Save