- irsnd_set_freq (IRSND_FREQ_36_KHZ); //default frequency\r
- IRSND_PIN = 1; //default PWM output pin off (0=PWM on, 1=PWM off)\r
-#else\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
-#if IRSND_OCx == IRSND_OC2 // use OC2\r
- TCCR2 = (1<<WGM21); // CTC mode\r
- TCCR2 |= (1<<CS20); // 0x01, start Timer 2, no prescaling\r
-#elif IRSND_OCx == IRSND_OC2A || IRSND_OCx == IRSND_OC2B // use OC2A or OC2B\r
- TCCR2A = (1<<WGM21); // CTC mode\r
- TCCR2B |= (1<<CS20); // 0x01, start Timer 2, no prescaling\r
-#elif IRSND_OCx == IRSND_OC0 // use OC0\r
- TCCR0 = (1<<WGM01); // CTC mode\r
- TCCR0 |= (1<<CS00); // 0x01, start Timer 0, no prescaling\r
-#elif IRSND_OCx == IRSND_OC0A || IRSND_OCx == IRSND_OC0B // use OC0A or OC0B\r
- TCCR0A = (1<<WGM01); // CTC mode\r
- TCCR0B |= (1<<CS00); // 0x01, start Timer 0, no prescaling\r
-#else\r
-#error wrong value of IRSND_OCx\r
-#endif\r
+# endif\r
+ irsnd_set_freq (IRSND_FREQ_36_KHZ); // default frequency\r
+ IRSND_PIN = 0; // set IO to outout\r
+ PWMoff();\r
+# elif defined (ARM_STM32) // STM32\r
+ GPIO_InitTypeDef GPIO_InitStructure;\r
+ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;\r
+ TIM_OCInitTypeDef TIM_OCInitStructure;\r
+\r
+ /* GPIOx clock enable */\r
+# if defined (ARM_STM32L1XX)\r
+ RCC_AHBPeriphClockCmd(IRSND_PORT_RCC, ENABLE);\r
+# elif defined (ARM_STM32F10X)\r
+ RCC_APB2PeriphClockCmd(IRSND_PORT_RCC, ENABLE);\r
+ // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // only in case of remapping, not necessary for default port-timer mapping\r
+# elif defined (ARM_STM32F4XX)\r
+ RCC_AHB1PeriphClockCmd(IRSND_PORT_RCC, ENABLE);\r
+# endif\r
+\r
+ /* GPIO Configuration */\r
+ GPIO_InitStructure.GPIO_Pin = IRSND_BIT;\r
+# if defined (ARM_STM32L1XX) || defined (ARM_STM32F4XX)\r
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;\r
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;\r
+ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\r
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\r
+ GPIO_Init(IRSND_PORT, &GPIO_InitStructure);\r
+ GPIO_PinAFConfig(IRSND_PORT, (uint8_t)IRSND_BIT_NUMBER, IRSND_GPIO_AF);\r
+# elif defined (ARM_STM32F10X)\r
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;\r
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;\r
+ GPIO_Init(IRSND_PORT, &GPIO_InitStructure);\r
+ // GPIO_PinRemapConfig(GPIO_*Remap*_TIM[IRSND_TIMER_NUMBER], ENABLE); // only in case of remapping, not necessary for default port-timer mapping\r
+# endif\r
+\r
+ /* TIMx clock enable */\r
+# if ((IRSND_TIMER_NUMBER >= 2) && (IRSND_TIMER_NUMBER <= 5)) || ((IRSND_TIMER_NUMBER >= 12) && (IRSND_TIMER_NUMBER <= 14))\r
+ RCC_APB1PeriphClockCmd(IRSND_TIMER_RCC, ENABLE);\r
+# else\r
+ RCC_APB2PeriphClockCmd(IRSND_TIMER_RCC, ENABLE);\r
+# endif\r
+\r
+ /* Time base configuration */\r
+ TIM_TimeBaseStructure.TIM_Period = -1; // set dummy value (don't set to 0), will be initialized later\r
+ TIM_TimeBaseStructure.TIM_Prescaler = 0;\r
+ TIM_TimeBaseStructure.TIM_ClockDivision = 0;\r
+ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;\r
+ TIM_TimeBaseInit(IRSND_TIMER, &TIM_TimeBaseStructure);\r
+\r
+ /* PWM1 Mode configuration */\r
+ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;\r
+ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;\r
+ TIM_OCInitStructure.TIM_Pulse = 0; // will be initialized later\r
+ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;\r
+ TIM_OC1Init(IRSND_TIMER, &TIM_OCInitStructure);\r
+\r
+ /* Preload configuration */\r
+ TIM_ARRPreloadConfig(IRSND_TIMER, ENABLE);\r
+ TIM_OC1PreloadConfig(IRSND_TIMER, TIM_OCPreload_Enable);\r
+\r
+ irsnd_set_freq (IRSND_FREQ_36_KHZ); // set default frequency\r
+\r
+# elif defined (TEENSY_ARM_CORTEX_M4)\r
+ if (!digitalPinHasPWM(IRSND_PIN))\r
+ {\r
+ return;\r
+ }\r