*\r
* Copyright (c) 2009-2015 Frank Meyer - frank(at)fli4l.de\r
*\r
*\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
*\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
# 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 _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
# define IRMP_PORT IRMP_PORT_PRE.OUT\r
# define IRMP_DDR IRMP_DDR_PRE.DIR\r
# define IRMP_PIN IRMP_PIN_PRE.IN\r
* ATmega164, ATmega324, ATmega644, ATmega644P, ATmega1284, ATmega1284P\r
* ATmega88, ATmega88P, ATmega168, ATmega168P, ATmega328P\r
*\r
* 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
*\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
# 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
# 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 _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
# define IRSND_BIT IRSND_BIT_NUMBER\r
#elif defined(ATMEL_AVR)\r
# define _CONCAT(a,b) a##b\r
# define CONCAT(a,b) _CONCAT(a,b)\r
#elif defined(ATMEL_AVR)\r
# define _CONCAT(a,b) a##b\r
# define CONCAT(a,b) _CONCAT(a,b)\r
TIM_Cmd(IRSND_TIMER, ENABLE); // enable counter\r
\r
# elif defined (__AVR_XMEGA__) \r
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
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
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
# else\r
# error wrong value of IRSND_OCx\r
# endif // IRSND_OCx\r
TIM_SetCounter(IRSND_TIMER, 0); // reset counter value\r
\r
# elif defined (__AVR_XMEGA__)\r
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
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
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
# else\r
# error wrong value of IRSND_OCx\r
# endif // IRSND_OCx\r
TIM_OC1PreloadConfig(IRSND_TIMER, TIM_OCPreload_Enable);\r
\r
irsnd_set_freq (IRSND_FREQ_36_KHZ); // set default frequency\r
TIM_OC1PreloadConfig(IRSND_TIMER, TIM_OCPreload_Enable);\r
\r
irsnd_set_freq (IRSND_FREQ_36_KHZ); // set default frequency\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
IRSND_PORT &= ~(1<<IRSND_BIT); // set IRSND_BIT to low\r
IRSND_DDR |= (1<<IRSND_BIT); // set IRSND_BIT to output\r
\r
*\r
* Copyright (c) 2010-2015 Frank Meyer - frank(at)fli4l.de\r
*\r
*\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
*\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_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
*---------------------------------------------------------------------------------------------------------------------------------------------------\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
# define XMEGA_Timer TCD0\r
# define IRSND_OCx IRSND_XMEGA_OC0B // use OC0B\r
\r