Добавлена библиотека IRremote #10
@ -2072,6 +2072,65 @@ extern "C" void __attribute__((noinline, section(".ram_text"), optimize("O3")))
|
||||
TIM16_CLEAR_INT_MASK(htimer16_0, 0xFFFFFFFF); // reset timer interrupt flags
|
||||
}
|
||||
|
||||
# if defined(SEND_PWM_BY_TIMER)
|
||||
#include "pins_arduino.h"
|
||||
#define IR_SEND_PIN 3
|
||||
|
||||
static TIMER32_HandleTypeDef ir_sender_htimer;
|
||||
static TIMER32_CHANNEL_HandleTypeDef ir_sender_htimer_channel;
|
||||
|
||||
/*
|
||||
* timerConfigForSend() is used exclusively by IRsend::enableIROut()
|
||||
* Set output pin mode and disable receive interrupt if it uses the same resource
|
||||
*/
|
||||
void timerConfigForSend(uint16_t aFrequencyKHz)
|
||||
{
|
||||
uint32_t pwmTopVal = 0;
|
||||
if ((aFrequencyKHz*1000) <= PWM_FREQUENCY_MAX)
|
||||
pwmTopVal = F_CPU/(aFrequencyKHz*1000)-3;
|
||||
else
|
||||
ErrorMsgHandler("timerConfigForSend(): invalid frequency for IR sending");
|
||||
|
||||
// initialization of the required timer
|
||||
ir_sender_htimer.Instance = pwmPinToTimer(IR_SEND_PIN);
|
||||
ir_sender_htimer.Top = pwmTopVal;
|
||||
ir_sender_htimer.State = TIMER32_STATE_DISABLE;
|
||||
ir_sender_htimer.Clock.Source = TIMER32_SOURCE_PRESCALER;
|
||||
ir_sender_htimer.Clock.Prescaler = 0; // Prescaler = 1
|
||||
ir_sender_htimer.InterruptMask = 0;
|
||||
ir_sender_htimer.CountMode = TIMER32_COUNTMODE_FORWARD;
|
||||
HAL_Timer32_Init(&ir_sender_htimer);
|
||||
|
||||
// gpio init as timer channel pin
|
||||
HAL_GPIO_PinConfig(digitalPinToPort(IR_SEND_PIN), digitalPinToBitMask(IR_SEND_PIN),
|
||||
HAL_GPIO_MODE_TIMER_SERIAL, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA);
|
||||
|
||||
ir_sender_htimer_channel.TimerInstance = ir_sender_htimer.Instance;
|
||||
ir_sender_htimer_channel.ChannelIndex = pwmPinToTimerChannel(IR_SEND_PIN);
|
||||
ir_sender_htimer_channel.PWM_Invert = TIMER32_CHANNEL_NON_INVERTED_PWM;
|
||||
ir_sender_htimer_channel.Mode = TIMER32_CHANNEL_MODE_PWM;
|
||||
ir_sender_htimer_channel.CaptureEdge = TIMER32_CHANNEL_CAPTUREEDGE_RISING;
|
||||
ir_sender_htimer_channel.OCR = ((pwmTopVal * IR_SEND_DUTY_CYCLE_PERCENT)/100);
|
||||
ir_sender_htimer_channel.Noise = TIMER32_CHANNEL_FILTER_OFF;
|
||||
HAL_Timer32_Channel_Init(&ir_sender_htimer_channel);
|
||||
|
||||
HAL_Timer32_Start(&ir_sender_htimer);
|
||||
}
|
||||
|
||||
void enableSendPWMByTimer()
|
||||
{
|
||||
// start timer with initialized channel
|
||||
HAL_Timer32_Value_Clear(&ir_sender_htimer);
|
||||
HAL_Timer32_Channel_Enable(&ir_sender_htimer_channel);
|
||||
}
|
||||
|
||||
void disableSendPWMByTimer()
|
||||
{
|
||||
HAL_Timer32_Channel_Disable(&ir_sender_htimer_channel);
|
||||
digitalWriteFast(IR_SEND_PIN, 1);
|
||||
}
|
||||
# endif // defined(SEND_PWM_BY_TIMER)
|
||||
|
||||
/***************************************
|
||||
* Unknown CPU board
|
||||
***************************************/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user