<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=46&amp;t=23738&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-04-25T08:49:04+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=23738&amp;mode</id>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2021-04-25T08:49:04+01:00</updated>
<published>2021-04-25T08:49:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232107#p232107</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232107#p232107"/>
<title type="html"><![CDATA[Re: STM32F103 - wywłaszczanie przerwań]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232107#p232107"><![CDATA[
Pewnie masz debuger wiec sprawdz dkaczego wiesza sie na tym<br />[syntax=c]while ( tmp_head == UART_TxTail[/syntax]<br />Wyglada jakby nie bylo miejsca w buforze<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 25 kwi 2021, o 08:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2021-04-25T08:26:04+01:00</updated>
<published>2021-04-25T08:26:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232106#p232106</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232106#p232106"/>
<title type="html"><![CDATA[Re: STM32F103 - wywłaszczanie przerwań]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232106#p232106"><![CDATA[
Podrozdział &quot;Preempt Priority and Supbpriority&quot;: <!-- m --><a class="postlink" href="https://community.arm.com/developer/ip-products/system/b/embedded-blog/posts/cutting-through-the-confusion-with-arm-cortex-m-interrupt-priorities" >https://community.arm.com/developer/ip- ... priorities</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 25 kwi 2021, o 08:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2021-04-25T08:11:02+01:00</updated>
<published>2021-04-25T08:11:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232105#p232105</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232105#p232105"/>
<title type="html"><![CDATA[Re: STM32F103 - wywłaszczanie przerwań]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232105#p232105"><![CDATA[
Szukałem, czytałem ale nie zrozumiałem dlatego na forum się odezwałem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> nie róbmy z tego forum drugiej elektrody, czyli &quot;Sprawdź w googlach&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3824">amilo_pa</a> — 25 kwi 2021, o 08:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2021-04-25T07:55:47+01:00</updated>
<published>2021-04-25T07:55:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232103#p232103</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232103#p232103"/>
<title type="html"><![CDATA[Re: STM32F103 - wywłaszczanie przerwań]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232103#p232103"><![CDATA[
Przeczytaj uważniej jak działa &quot;subpriority&quot; a zrozumiesz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 25 kwi 2021, o 07:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2021-04-24T22:50:52+01:00</updated>
<published>2021-04-24T22:50:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232102#p232102</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232102#p232102"/>
<title type="html"><![CDATA[STM32F103 - wywłaszczanie przerwań]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23738&amp;p=232102#p232102"><![CDATA[
Hej, <br /><br />Proszę o wyjaśnienie dlaczego tak się dzieje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dla przejrzystości problemu zamieszczam tylko najważniejsze fragmenty kodu.<br /><br /><strong>1. Pierwszy przypadek</strong><br /><br />Wybieram opcje przerwania: jednen priorytet grupowy i 16 podpriorytetów (0 bits for pre-emption priority, 4 bits for subpriority)<br /><br />Ustawiam sobie przerwanie zewnętrzne z pinu PA2 wraz z ustawieniem subpriority na 10<br />[syntax=c]void EXTI_config(void)<br />{<br /> // Selecting a group of priority<br />  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);<br /><br />  // Konfiguracja i wlaczenie przerwania<br />  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;<br /> NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;<br />  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 10;<br />  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;<br />  NVIC_Init(&amp;NVIC_InitStructure);<br /><br />}[/syntax]<br /><br />oraz konfiguruje przerwanie UARTa z subpriority na 0 (w tej samej grupie pre-emption co i przerwanie od PA2, ale przerwanie od UARTA ma większy podpriorytet niż przerwanie od PA2)<br />[syntax=c]NVIC_InitTypeDef NVIC_InitStructure;<br /><br />  // Wlacz przerwanie od USART1<br />  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;<br />  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;<br />  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;<br />  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;<br />  NVIC_Init(&amp;NVIC_InitStructure);[/syntax]<br /><br />I teraz w przerwaniu od PA2 uruchamiam funkcję, która wysyła dane po UARTcie (funkcja wzięta z BB + GB) w której uruchamiane jest przerwanie wysyłające dane -&gt; patrz linijka 15<br />[syntax=c]void uart_putc( char data )<br />  {<br />  uint8_t tmp_head;<br />  tmp_head  = (UART_TxHead + 1) &amp; UART_TX_BUF_MASK;<br /><br />      // pętla oczekuje jeżeli brak miejsca w buforze cyklicznym na kolejne znaki<br />      while ( tmp_head == UART_TxTail ){}<br /><br />      UART_TxBuf&#91;tmp_head&#93; = data;<br />      UART_TxHead = tmp_head;<br /><br />      // inicjalizujemy przerwanie występujące, gdy bufor jest pusty, dzięki<br />      // czemu w dalszej części wysyłaniem danych zajmie się już procedura<br />      // obsługi przerwania<br />      USART_ITConfig(USART1, USART_IT_TXE, ENABLE);<br />  }[/syntax]<br /><br />i niestety program się &quot;zawiesza&quot; na: while ( tmp_head == UART_TxTail ){} -&gt; linijka 7.<br /><br /><br /><strong>2. Drugi przypadek</strong><br /><br />Wybieram opcje przerwania: 2 priorytety grupowe i 8 podpriorytetów (1 bits for pre-emption priority, 3 bits for subpriority)<br /><br />Ustawiam sobie przerwanie zewnętrzne z pinu PA2 wraz z ustawieniem pre-emption = 1 i  subpriority = 10<br />[syntax=c]void EXTI_config(void)<br />{<br /> // Selecting a group of priority<br />  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);<br /><br />  // Konfiguracja i wlaczenie przerwania<br />  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;<br /> NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;<br />  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 10;<br />  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;<br />  NVIC_Init(&amp;NVIC_InitStructure);<br /><br />}[/syntax]<br /><br />oraz konfiguruje UARTa z pre-emption = 0 i  subpriority = 0 (więc przerwanie UART ma większy priorytet główny niż przerwanie od PA2)<br /><br />[syntax=c]NVIC_InitTypeDef NVIC_InitStructure;<br /><br />  // Wlacz przerwanie od USART1<br />  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;<br />  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;<br />  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;<br />  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;<br />  NVIC_Init(&amp;NVIC_InitStructure);[/syntax]<br /><br />I w tym przypadku program się nie zawiesza, komunikacja UART działa i przerwania od PA2 są poprawnie obsługiwane<br /><br />Reasumując<br /><a href="https://obrazkiforum.atnel.pl/3824/8489ccd28887308785d22508abd8ecaf.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3824/8489ccd28887308785d22508abd8ecaf.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3824">amilo_pa</a> — 24 kwi 2021, o 22:50</p><hr />
]]></content>
</entry>
</feed>