@@ -35,7 +35,7 @@ heap_3.c
35
35
c) from FreeRTOSVx.x.x/Source/portable/GCC/ATMega323/
36
36
port.c
37
37
portmacro.h
38
- dont port.c a été mis à jour pour supporter les microcontroleurs Atmel
38
+ port.c (file updated to add support for Atmel AtMega chips
39
39
40
40
3) Now you need to patch DuinOS_v0.X/arduino.DuinOS/DuinOS/port.c with the following patch :
41
41
@@ -532,6 +532,145 @@ and copy them in DuinOS_v0.X/arduino.DuinOS folder.
532
532
+NORMAL_PRIORITY LITERAL1
533
533
+HIGH_PRIORITY LITERAL1
534
534
535
+ 9) Copy arduino-00xx/libraries/Servo/Servo.h in DuinOS_v0.x/libraries/Servo folder and patch it with the following patch :
536
+ Disable Timer1 because DuinOS uses the timer 1 for its kernel in this file
537
+
538
+ --- Servo.h.ORI 2010-10-02 22:17:42.000000000 +0200
539
+ +++ Servo.h 2010-12-20 22:52:10.000000000 +0100
540
+ @@ -59,29 +59,38 @@
541
+ // Say which 16 bit timers can be used and in what order
542
+ #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
543
+ #define _useTimer5
544
+ -#define _useTimer1
545
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
546
+ +#define _useTimer1 */
547
+ #define _useTimer3
548
+ -#define _useTimer4
549
+ -typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
550
+ +#define _useTimer4
551
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
552
+ +typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ; */
553
+ +typedef enum { _timer5, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t ;
554
+
555
+ #elif defined(__AVR_ATmega32U4__)
556
+ #define _useTimer3
557
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
558
+ #define _useTimer1
559
+ -typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;
560
+ +typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ; */
561
+ +typedef enum { _timer3, _Nbr_16timers } timer16_Sequence_t ;
562
+
563
+ #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
564
+ #define _useTimer3
565
+ -#define _useTimer1
566
+ -typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;
567
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
568
+ +#define _useTimer1
569
+ +typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ; */
570
+ +typedef enum { _timer3, _Nbr_16timers } timer16_Sequence_t ;
571
+
572
+ #elif defined(__AVR_ATmega128__) ||defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
573
+ #define _useTimer3
574
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
575
+ #define _useTimer1
576
+ +typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ; */
577
+ typedef enum { _timer3, _timer1, _Nbr_16timers } timer16_Sequence_t ;
578
+
579
+ #else // everything else
580
+ -#define _useTimer1
581
+ -typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ;
582
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
583
+ +typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t ; */
584
+ #endif
585
+
586
+ #define Servo_VERSION 2 // software version of this library
587
+
588
+
589
+ 10) Copy arduino-00xx/libraries/Servo/Servo.cpp in DuinOS_v0.x/libraries/Servo folder and patch it with the following patch :
590
+ Disable Timer1 because DuinOS uses the timer 1 for its kernel in this file
591
+
592
+ --- Servo.cpp.ORI 2010-10-02 22:17:42.000000000 +0200
593
+ +++ Servo.cpp 2010-12-20 22:57:04.000000000 +0100
594
+ @@ -99,12 +99,13 @@
595
+
596
+ #ifndef WIRING // Wiring pre-defines signal handlers so don't define any if compiling for the Wiring platform
597
+ // Interrupt handlers for Arduino
598
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
599
+ #if defined(_useTimer1)
600
+ SIGNAL (TIMER1_COMPA_vect)
601
+ {
602
+ handle_interrupts(_timer1, &TCNT1, &OCR1A);
603
+ }
604
+ -#endif
605
+ +#endif */
606
+
607
+ #if defined(_useTimer3)
608
+ SIGNAL (TIMER3_COMPA_vect)
609
+ @@ -128,13 +129,15 @@
610
+ #endif
611
+
612
+ #elif defined WIRING
613
+ -// Interrupt handlers for Wiring
614
+ +// Interrupt handlers for Wiring
615
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
616
+ #if defined(_useTimer1)
617
+ void Timer1Service()
618
+ {
619
+ handle_interrupts(_timer1, &TCNT1, &OCR1A);
620
+ }
621
+ #endif
622
+ +*/
623
+ #if defined(_useTimer3)
624
+ void Timer3Service()
625
+ {
626
+ @@ -145,7 +148,8 @@
627
+
628
+
629
+ static void initISR(timer16_Sequence_t timer)
630
+ -{
631
+ +{
632
+ +/* Disable Timer1 because DuinOS uses the timer 1 for its kernel
633
+ #if defined (_useTimer1)
634
+ if(timer == _timer1) {
635
+ TCCR1A = 0; // normal counting mode
636
+ @@ -163,7 +167,7 @@
637
+ timerAttach(TIMER1OUTCOMPAREA_INT, Timer1Service);
638
+ #endif
639
+ }
640
+ -#endif
641
+ +#endif */
642
+
643
+ #if defined (_useTimer3)
644
+ if(timer == _timer3) {
645
+ @@ -208,6 +212,7 @@
646
+ {
647
+ //disable use of the given timer
648
+ #if defined WIRING // Wiring
649
+ + /* Disable Timer1 because DuinOS uses the timer 1 for its kernel
650
+ if(timer == _timer1) {
651
+ #if defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
652
+ TIMSK1 &= ~_BV(OCIE1A) ; // disable timer 1 output compare interrupt
653
+ @@ -216,7 +221,8 @@
654
+ #endif
655
+ timerDetach(TIMER1OUTCOMPAREA_INT);
656
+ }
657
+ - else if(timer == _timer3) {
658
+ + else if(timer == _timer3) { */
659
+ + if(timer == _timer3) {
660
+ #if defined(__AVR_ATmega1281__)||defined(__AVR_ATmega2561__)
661
+ TIMSK3 &= ~_BV(OCIE3A); // disable the timer3 output compare A interrupt
662
+ #else
663
+
664
+ 11) Because with some chips as AtMega 168 and 328, Timer1 is disabled because DuinOS uses the timer 1 for its kernel.
665
+ and we don't have now a 16 bit timer to use Servo lib that need it.
666
+ Then we add ServoTimer2 lib (http://code.google.com/p/tricopter/source/browse/trunk/arduino/#arduino%2Flibraries%2FServoTimer2 )
667
+ that use the 8 bits timer 2 for Servo.
668
+
669
+ Copy the following files from this website
670
+ ServoTimer2.cpp, ServoTimer2.h, keywords.txt
671
+ in DuinOS_v0.x/libraries/ServoTimer2 folder
672
+
673
+
535
674
536
675
537
676
0 commit comments