]> cloudbase.mooo.com Git - irmp.git/commitdiff
Version 2.8.2: corrections of AVR XMEGA port
authorukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Thu, 7 May 2015 06:53:55 +0000 (06:53 +0000)
committerukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Thu, 7 May 2015 06:53:55 +0000 (06:53 +0000)
git-svn-id: svn://mikrocontroller.net/irmp@156 aeb2e35e-bfc4-4214-b83c-9e8de998ed28

irmp.h
irsnd.c
irsndconfig.h

diff --git a/irmp.h b/irmp.h
index f662fe1269791bd3863fc6bfd065cd4b87825be3..74a54f33858b5f58aa57ba3116639119bce47876 100644 (file)
--- a/irmp.h
+++ b/irmp.h
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.h,v 1.93 2015/02/26 15:42:53 fm Exp $\r
+ * $Id: irmp.h,v 1.94 2015/05/07 06:51:10 fm Exp $\r
  *\r
  * This program is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
@@ -25,8 +25,8 @@
 #  define _CONCAT(a,b)                          a##b\r
 #  define CONCAT(a,b)                           _CONCAT(a,b)\r
 #  define IRMP_PORT_PRE                         CONCAT(PORT, IRMP_PORT_LETTER)\r
-#  define IRMP_DDR_PRE                          CONCAT(DDR, IRMP_PORT_LETTER)\r
-#  define IRMP_PIN_PRE                          CONCAT(PIN, IRMP_PORT_LETTER)\r
+#  define IRMP_DDR_PRE                          CONCAT(PORT, IRMP_PORT_LETTER)\r
+#  define IRMP_PIN_PRE                          CONCAT(PORT, IRMP_PORT_LETTER)\r
 #  define IRMP_PORT                             IRMP_PORT_PRE.OUT\r
 #  define IRMP_DDR                              IRMP_DDR_PRE.DIR\r
 #  define IRMP_PIN                              IRMP_PIN_PRE.IN\r
diff --git a/irsnd.c b/irsnd.c
index af089083375426ac1a44d32de0d5072afeb2ba12..a45fc426893528ff8d3374585a8f3fd08783d632 100644 (file)
--- a/irsnd.c
+++ b/irsnd.c
@@ -13,7 +13,7 @@
  * ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284, ATmega1284P\r
  * ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P\r
  *\r
- * $Id: irsnd.c,v 1.85 2015/04/23 12:46:13 fm Exp $\r
+ * $Id: irsnd.c,v 1.86 2015/05/07 06:51:10 fm Exp $\r
  *\r
  * This program is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
 #  endif // IRSND_OCx\r
 \r
 #elif defined (__AVR_ATxmega128A1U__)                               // ATxmega128A1U \r
-#  if (XMEGA_Timer_NR == 1)\r
-#               define IRSND_PORT_PRE               PORTC\r
-#  elif (XMEGA_Timer_NR == 2)\r
-#               define IRSND_PORT_PRE               PORTD\r
-#  elif (XMEGA_Timer_NR == 3)\r
-#               define IRSND_PORT_PRE               PORTE\r
-#  elif (XMEGA_Timer_NR == 4)\r
-#               define IRSND_PORT_PRE               PORTF\r
-#  else\r
-#    warning wrong XMEGA_Timer_NR, choose correct value in irsndconfig.h\r
-#  endif\r
 #  if IRSND_OCx == IRSND_XMEGA_OC0A   \r
 #    define IRSND_BIT_NUMBER                        0\r
 #  elif IRSND_OCx == IRSND_XMEGA_OC0B\r
 #  define _CONCAT(a,b)                              a##b\r
 #  define CONCAT(a,b)                               _CONCAT(a,b)\r
 #  define IRSND_PORT                                IRSND_PORT_PRE.OUT\r
-#  define IRSND_DDR                                 IRSND_DDR_PRE.DIR\r
-#  define IRSND_PIN                                 IRSND_PIN_PRE.IN\r
+#  define IRSND_DDR                                 IRSND_PORT_PRE.DIR\r
+#  define IRSND_PIN                                 IRSND_PORT_PRE.IN\r
 #  define IRSND_BIT                                 IRSND_BIT_NUMBER\r
-\r
 #elif defined(ATMEL_AVR)\r
 #  define _CONCAT(a,b)                              a##b\r
 #  define CONCAT(a,b)                               _CONCAT(a,b)\r
@@ -471,14 +459,18 @@ irsnd_on (void)
         TIM_Cmd(IRSND_TIMER, ENABLE);                   // enable counter\r
 \r
 #  elif defined (__AVR_XMEGA__) \r
-#    if ( (IRSND_OCx == IRSND_XMEGA_OC0A) | (IRSND_OCx == IRSND_XMEGA_OC1A) )           // use OC0A or OC1A\r
+#    if (IRSND_OCx == IRSND_XMEGA_OC0A)                                                                                                 // use OC0A\r
         XMEGA_Timer.CTRLB |= (1<<TC0_CCAEN_bp);                                         // Compare A \r
-#    elif ((IRSND_OCx == IRSND_XMEGA_OC0B) | (IRSND_OCx == IRSND_XMEGA_OC1B) )          // use OC0B or OC1B\r
+#    elif (IRSND_OCx == IRSND_XMEGA_OC0B)                                                                                               // use OC0B\r
         XMEGA_Timer.CTRLB |= (1<<TC0_CCBEN_bp);                                         // Compare B \r
 #    elif IRSND_OCx == IRSND_XMEGA_OC0C                                                 // use OC0C\r
         XMEGA_Timer.CTRLB |= (1<<TC0_CCCEN_bp);                                         // Compare C\r
 #    elif IRSND_OCx == IRSND_XMEGA_OC0D                                                 // use OC0D\r
         XMEGA_Timer.CTRLB |= (1<<TC0_CCDEN_bp);                                         // Compare D\r
+#    elif IRSND_OCx == IRSND_XMEGA_OC0C                                                 // use OC1C\r
+                XMEGA_Timer.CTRLB |= (1<<TC1_CCAEN_bp);                                                                                 // Compare A\r
+#    elif IRSND_OCx == IRSND_XMEGA_OC0D                                                 // use OC1D\r
+                XMEGA_Timer.CTRLB |= (1<<TC1_CCBEN_bp);                                                                                 // Compare B\r
 #    else\r
 #       error wrong value of IRSND_OCx\r
 #    endif // IRSND_OCx\r
@@ -536,14 +528,18 @@ irsnd_off (void)
         TIM_SetCounter(IRSND_TIMER, 0);                 // reset counter value\r
 \r
 #  elif defined (__AVR_XMEGA__)\r
-#    if ( (IRSND_OCx == IRSND_XMEGA_OC0A) | (IRSND_OCx == IRSND_XMEGA_OC1A) )           // use OC0A or OC1A\r
+#    if (IRSND_OCx == IRSND_XMEGA_OC0A)                                                                                                 // use OC0A \r
         XMEGA_Timer.CTRLB &= ~(1<<TC0_CCAEN_bp);                                        // Compare A disconnected\r
-#    elif ((IRSND_OCx == IRSND_XMEGA_OC0B) | (IRSND_OCx == IRSND_XMEGA_OC1B) )          // use OC0B or OC1B\r
+#    elif (IRSND_OCx == IRSND_XMEGA_OC0B)                                                                                               // use OC0B \r
         XMEGA_Timer.CTRLB &= ~(1<<TC0_CCBEN_bp);                                        // Compare B disconnected\r
 #    elif IRSND_OCx == IRSND_XMEGA_OC0C                                                 // use OC0C\r
         XMEGA_Timer.CTRLB &= ~(1<<TC0_CCCEN_bp);                                        // Compare C disconnected\r
 #    elif IRSND_OCx == IRSND_XMEGA_OC0D                                                 // use OC0D\r
         XMEGA_Timer.CTRLB &= ~(1<<TC0_CCDEN_bp);                                        // Compare D disconnected\r
+#    elif IRSND_OCx == IRSND_XMEGA_OC1A                                                 // use OC1A\r
+                XMEGA_Timer.CTRLB &= ~(1<<TC1_CCAEN_bp);                                        // Compare A disconnected\r
+#    elif IRSND_OCx == IRSND_XMEGA_OC1B                                                 // use OC1B\r
+                XMEGA_Timer.CTRLB &= ~(1<<TC1_CCBEN_bp);                                        // Compare B disconnected\r
 #    else\r
 #       error wrong value of IRSND_OCx\r
 #    endif // IRSND_OCx\r
@@ -746,7 +742,21 @@ irsnd_init (void)
         TIM_OC1PreloadConfig(IRSND_TIMER, TIM_OCPreload_Enable);\r
 \r
         irsnd_set_freq (IRSND_FREQ_36_KHZ);                                         // set default frequency\r
-#  else                                                                             // AVR\r
+\r
+# elif defined (__AVR_XMEGA__)\r
+        IRSND_PORT &= ~(1<<IRSND_BIT);                                              // set IRSND_BIT to low\r
+        IRSND_DDR |= (1<<IRSND_BIT);                                                // set IRSND_BIT to output\r
+\r
+        XMEGA_Timer.PER = 0xFFFF; //Topwert\r
+        XMEGA_Timer.CTRLB |= TC_WGMODE_FRQ_gc; //Modus: Frequenz entspricht CTC\r
+\r
+#    if AVR_PRESCALER == 8\r
+        XMEGA_Timer.CTRLA |= TC_CLKSEL_DIV8_gc;                                     // start Timer  prescaler = 8\r
+#    else\r
+        XMEGA_Timer.CTRLA |= TC_CLKSEL_DIV1_gc;                                     // start Timer  prescaler = 1\r
+#    endif\r
+                \r
+# else                                                                              // AVR\r
         IRSND_PORT &= ~(1<<IRSND_BIT);                                              // set IRSND_BIT to low\r
         IRSND_DDR |= (1<<IRSND_BIT);                                                // set IRSND_BIT to output\r
 \r
index 22be163251bd178f9f2e260f753b959b52da9e01..61e052d3880e2e5c14649404c57365e0337813a9 100644 (file)
@@ -5,7 +5,7 @@
  *\r
  * Copyright (c) 2010-2015 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsndconfig.h,v 1.67 2015/04/23 12:47:29 fm Exp $\r
+ * $Id: irsndconfig.h,v 1.68 2015/05/07 06:51:10 fm Exp $\r
  *\r
  * This program is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
  *                                              IRSND_XMEGA_OC0B = OC0B on ATxmegas  supporting OC0B, e.g. ATxmega128A1U\r
  *                                              IRSND_XMEGA_OC0C = OC0C on ATxmegas  supporting OC0C, e.g. ATxmega128A1U\r
  *                                              IRSND_XMEGA_OC0D = OC0D on ATxmegas  supporting OC0D, e.g. ATxmega128A1U\r
- *                                              IRSND_XMEGA_OC1A = OC0A on ATxmegas  supporting OC1A, e.g. ATxmega128A1U\r
- *                                              IRSND_XMEGA_OC1B = OC0B on ATxmegas  supporting OC1B, e.g. ATxmega128A1U\r
+ *                                              IRSND_XMEGA_OC1A = OC1A on ATxmegas  supporting OC1A, e.g. ATxmega128A1U\r
+ *                                              IRSND_XMEGA_OC1B = OC1B on ATxmegas  supporting OC1B, e.g. ATxmega128A1U\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
  */\r
 #if defined(__AVR_XMEGA__)                                              // XMEGA\r
-#  define XMEGA_Timer_NR                        2                       // 1 == Timer PORTC //2 == Timer PORTD //3 == Timer PORTE //4 == Timer PORTF\r
+#  define IRSND_PORT_PRE                        PORTD                   \r
 #  define XMEGA_Timer                           TCD0\r
 #  define IRSND_OCx                             IRSND_XMEGA_OC0B        // use OC0B\r
 \r