<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; TIMER Прерывания по сравнению]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=425&amp;type=atom" />
	<updated>2021-10-14T09:05:04Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=425</id>
		<entry>
			<title type="html"><![CDATA[Re: TIMER Прерывания по сравнению]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=4780#p4780" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>void setup() {
  pinMode(PA1, OUTPUT);
  
  timer_attach_interrupt(TIMER2, TIMER_UPDATE_INTERRUPT, led1); // прерывание по переполнению
  timer_attach_interrupt(TIMER2, TIMER_CC1_INTERRUPT, led);     // прерывание по сравнению 1

  RCC_BASE-&gt;APB1ENR|= (1&lt;&lt;0);  // TIM2EN &gt; включить тактирование tim_2 
  TIMER2_BASE-&gt;CR1=0;          // TIMx_CR1 &gt; стоп таймер
  TIMER2_BASE-&gt;PSC = 72-1;   // TIMx_PSC &gt; значение пред делителя -1 === F = 72 000 000 / 72 = 1 000 000 Hz
  TIMER2_BASE-&gt;ARR = 100-1;  // TIMx_ARR &gt; считать до установленого числа и обнулить === F = 1 000 000 / 100 = 10 000 Hz 
  TIMER2_BASE-&gt;CCR1 = 50-1;  // TIMx_CCR1 &gt; регистр сравнения 1  
  TIMER2_BASE-&gt;DIER |= (1&lt;&lt;0); // TIMx_DIER &gt; разрешить прерывание по переполнению
  TIMER2_BASE-&gt;DIER |= (1&lt;&lt;1); // TIMx_DIER &gt; разрешить прерывание по сравнению 1
  TIMER2_BASE-&gt;CR1|=(1&lt;&lt;0);    // TIMx_CR1 &gt; старт таймер
}

void loop() {}

void led1(){ //обработчик прерывания 
  digitalWrite(PA1, HIGH); 
  TIMER2_BASE-&gt;SR &amp;=~(1&lt;&lt;0); // TIMx_SR &gt; сбрасываем флаг прерывания
}
void led(){  //обработчик прерывания 
  digitalWrite(PA1, LOW); 
  TIMER2_BASE-&gt;SR &amp;=~(1&lt;&lt;0); // TIMx_SR &gt; сбрасываем флаг прерывания
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-10-14T09:05:04Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=4780#p4780</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: TIMER Прерывания по сравнению]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=4778#p4778" />
			<content type="html"><![CDATA[<p>Тоже самое</p><div class="codebox"><pre><code>void setup() {
  pinMode(PA1, OUTPUT);
  
  timer_attach_interrupt(TIMER2, TIMER_UPDATE_INTERRUPT, led1); // прерывание по переполнению
  timer_attach_interrupt(TIMER2, TIMER_CC1_INTERRUPT, led);     // прерывание по сравнению 1

  RCC_BASE-&gt;APB1ENR |= RCC_APB1ENR_TIM2EN;     // TIM2EN &gt; включить тактирование tim_2 
  TIMER2_BASE-&gt;CR1 &amp;= ~TIMER_CR1_CEN;          // TIMx_CR1_CEN &gt; стоп таймер
  TIMER2_BASE-&gt;PSC = 7200-1;                   // TIMx_PSC &gt; значение пред делителя -1 === F = 72 000 000 / 7200 = 10000 Hz
  TIMER2_BASE-&gt;ARR = 10000-1;                  // TIMx_ARR &gt; считать до установленого числа и обнулить === F = 10000 / 10000 = 1 Hz | T = 1 s
  TIMER2_BASE-&gt;CCR1 = 5000-1;                  // TIMx_CCR1 &gt; регистр сравнения 1 === F = 10000 / 5000 = 2 Hz | T = 0.5 s
  TIMER2_BASE-&gt;DIER |= TIMER_DIER_UIE;         // TIMx_DIER_UIE &gt; разрешить прерывание по переполнению
  TIMER2_BASE-&gt;DIER |= TIMER_DIER_CC1IE;       // TIMx_DIER_CC1IE &gt; разрешить прерывание по сравнению 1
  TIMER2_BASE-&gt;CR1 |= TIMER_CR1_CEN;           // TIMx_CR1_CEN &gt; старт таймер
}

void loop() {}

void led1(){
  digitalWrite(PA1, HIGH); 
  TIMER2_BASE-&gt;SR &amp;=~ TIMER_SR_UIF;            // TIMx_SR_UIF &gt; сбрасываем флаг прерывания
}
void led(){  //обработчик прерывания 
  digitalWrite(PA1, LOW); 
  TIMER2_BASE-&gt;SR &amp;=~ TIMER_SR_UIF;            // TIMx_SR_UIF &gt; сбрасываем флаг прерывания
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-10-12T16:31:45Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=4778#p4778</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[TIMER Прерывания по сравнению]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=4777#p4777" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>void setup() {
  pinMode(PA1, OUTPUT);
  
  timer_attach_interrupt(TIMER2, TIMER_UPDATE_INTERRUPT, led1); // прерывание по переполнению
  timer_attach_interrupt(TIMER2, TIMER_CC1_INTERRUPT, led);     // прерывание по сравнению 1

  RCC_BASE-&gt;APB1ENR|= (1&lt;&lt;0);  // TIM2EN &gt; включить тактирование tim_2 
  TIMER2_BASE-&gt;CR1=0;          // TIMx_CR1 &gt; стоп таймер
  TIMER2_BASE-&gt;PSC = 7200-1;   // TIMx_PSC &gt; значение пред делителя -1 === F = 72 000 000 / 7200 = 10000 Hz
  TIMER2_BASE-&gt;ARR = 10000-1;  // TIMx_ARR &gt; считать до установленого числа и обнулить === F = 10000 / 10000 = 1 Hz | T = 1 s
  TIMER2_BASE-&gt;CCR1 = 5000-1;  // TIMx_CCR1 &gt; регистр сравнения 1 === F = 10000 / 5000 = 2 Hz | T = 0.5 s
  TIMER2_BASE-&gt;DIER |= (1&lt;&lt;0); // TIMx_DIER &gt; разрешить прерывание по переполнению
  TIMER2_BASE-&gt;DIER |= (1&lt;&lt;1); // TIMx_DIER &gt; разрешить прерывание по сравнению 1
  TIMER2_BASE-&gt;CR1|=(1&lt;&lt;0);    // TIMx_CR1 &gt; старт таймер
}

void loop() {}

void led1(){
  digitalWrite(PA1, HIGH); 
  TIMER2_BASE-&gt;SR &amp;=~(1&lt;&lt;0); // TIMx_SR &gt; сбрасываем флаг прерывания
}
void led(){  //обработчик прерывания 
  digitalWrite(PA1, LOW); 
  TIMER2_BASE-&gt;SR &amp;=~(1&lt;&lt;0); // TIMx_SR &gt; сбрасываем флаг прерывания
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2021-10-12T07:35:03Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=4777#p4777</id>
		</entry>
</feed>
