port__m33_8c.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?xml version='1.0' encoding='UTF-8' standalone='no'?>
  2. <doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.18.0" xml:lang="ja">
  3. <compounddef id="port__m33_8c" kind="file" language="C++">
  4. <compoundname>port_m33.c</compoundname>
  5. <includes local="no">stdint.h</includes>
  6. <includes local="yes">hardware/clocks.h</includes>
  7. <includes local="yes">hardware/structs/clocks.h</includes>
  8. <includes local="yes">hardware/structs/m33.h</includes>
  9. <includes local="yes">hardware/structs/scb.h</includes>
  10. <includes local="yes">hardware/structs/systick.h</includes>
  11. <includes refid="port__m33_8h" local="yes">port_m33.h</includes>
  12. <incdepgraph>
  13. <node id="1">
  14. <label>C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c</label>
  15. <link refid="port__m33_8c"/>
  16. <childnode refid="2" relation="include">
  17. </childnode>
  18. <childnode refid="3" relation="include">
  19. </childnode>
  20. <childnode refid="4" relation="include">
  21. </childnode>
  22. <childnode refid="5" relation="include">
  23. </childnode>
  24. <childnode refid="6" relation="include">
  25. </childnode>
  26. <childnode refid="7" relation="include">
  27. </childnode>
  28. <childnode refid="8" relation="include">
  29. </childnode>
  30. </node>
  31. <node id="8">
  32. <label>port_m33.h</label>
  33. <link refid="port__m33_8h"/>
  34. <childnode refid="2" relation="include">
  35. </childnode>
  36. <childnode refid="6" relation="include">
  37. </childnode>
  38. </node>
  39. <node id="3">
  40. <label>hardware/clocks.h</label>
  41. </node>
  42. <node id="4">
  43. <label>hardware/structs/clocks.h</label>
  44. </node>
  45. <node id="5">
  46. <label>hardware/structs/m33.h</label>
  47. </node>
  48. <node id="6">
  49. <label>hardware/structs/scb.h</label>
  50. </node>
  51. <node id="7">
  52. <label>hardware/structs/systick.h</label>
  53. </node>
  54. <node id="2">
  55. <label>stdint.h</label>
  56. </node>
  57. </incdepgraph>
  58. <sectiondef kind="define">
  59. <memberdef kind="define" id="port__m33_8c_1a7b53a215b14820fae8b8e7c387f5b3b3" prot="public" static="no">
  60. <name>FPCCR_ASPEN</name>
  61. <initializer>(1u &lt;&lt; 31)</initializer>
  62. <briefdescription>
  63. </briefdescription>
  64. <detaileddescription>
  65. </detaileddescription>
  66. <inbodydescription>
  67. </inbodydescription>
  68. <location file="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c" line="11" column="9" bodyfile="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c" bodystart="11" bodyend="-1"/>
  69. </memberdef>
  70. <memberdef kind="define" id="port__m33_8c_1a6addcb4c27c8943e5908a645233e4b1e" prot="public" static="no">
  71. <name>FPCCR_LSPEN</name>
  72. <initializer>(1u &lt;&lt; 30)</initializer>
  73. <briefdescription>
  74. </briefdescription>
  75. <detaileddescription>
  76. </detaileddescription>
  77. <inbodydescription>
  78. </inbodydescription>
  79. <location file="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c" line="12" column="9" bodyfile="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c" bodystart="12" bodyend="-1"/>
  80. </memberdef>
  81. </sectiondef>
  82. <sectiondef kind="func">
  83. <memberdef kind="function" id="port__m33_8c_1ac9d435a65b90e71074dd44f97b1103f8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
  84. <type>void</type>
  85. <definition>void tk_port_init</definition>
  86. <argsstring>(uint32_t ticks_per_sec)</argsstring>
  87. <name>tk_port_init</name>
  88. <param>
  89. <type>uint32_t</type>
  90. <declname>ticks_per_sec</declname>
  91. </param>
  92. <briefdescription>
  93. </briefdescription>
  94. <detaileddescription>
  95. </detaileddescription>
  96. <inbodydescription>
  97. </inbodydescription>
  98. <location file="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c" line="14" column="6" bodyfile="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c" bodystart="14" bodyend="36"/>
  99. </memberdef>
  100. </sectiondef>
  101. <briefdescription>
  102. </briefdescription>
  103. <detaileddescription>
  104. </detaileddescription>
  105. <programlisting>
  106. <codeline lineno="1"><highlight class="preprocessor">#include<sp/>&lt;stdint.h&gt;</highlight><highlight class="normal"></highlight></codeline>
  107. <codeline lineno="2"><highlight class="normal"></highlight></codeline>
  108. <codeline lineno="3"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;hardware/clocks.h&quot;</highlight><highlight class="normal"></highlight></codeline>
  109. <codeline lineno="4"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;hardware/structs/clocks.h&quot;</highlight><highlight class="normal"><sp/><sp/></highlight><highlight class="comment">//<sp/>clock_num_t<sp/>(clk_sys)</highlight><highlight class="normal"></highlight></codeline>
  110. <codeline lineno="5"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;hardware/structs/m33.h&quot;</highlight><highlight class="normal"><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>m33_hw-&gt;fpccr<sp/>(memory-mapped<sp/>FPU<sp/>control)</highlight><highlight class="normal"></highlight></codeline>
  111. <codeline lineno="6"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;hardware/structs/scb.h&quot;</highlight><highlight class="normal"></highlight></codeline>
  112. <codeline lineno="7"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;hardware/structs/systick.h&quot;</highlight><highlight class="normal"></highlight></codeline>
  113. <codeline lineno="8"><highlight class="normal"></highlight></codeline>
  114. <codeline lineno="9"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>&quot;<ref refid="port__m33_8h" kindref="compound">port_m33.h</ref>&quot;</highlight><highlight class="normal"></highlight></codeline>
  115. <codeline lineno="10"><highlight class="normal"></highlight></codeline>
  116. <codeline lineno="11"><highlight class="normal"></highlight><highlight class="preprocessor">#define<sp/>FPCCR_ASPEN<sp/>(1u<sp/>&lt;&lt;<sp/>31)<sp/><sp/></highlight><highlight class="comment">//<sp/>FPU_FPCCR_ASPEN_Pos<sp/>per<sp/>CMSIS<sp/>core_cm33.h</highlight><highlight class="normal"></highlight></codeline>
  117. <codeline lineno="12"><highlight class="normal"></highlight><highlight class="preprocessor">#define<sp/>FPCCR_LSPEN<sp/>(1u<sp/>&lt;&lt;<sp/>30)<sp/><sp/></highlight><highlight class="comment">//<sp/>FPU_FPCCR_LSPEN_Pos<sp/>per<sp/>CMSIS<sp/>core_cm33.h</highlight><highlight class="normal"></highlight></codeline>
  118. <codeline lineno="13"><highlight class="normal"></highlight></codeline>
  119. <codeline lineno="14"><highlight class="normal"></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="port__m33_8c_1ac9d435a65b90e71074dd44f97b1103f8" kindref="member">tk_port_init</ref>(uint32_t<sp/>ticks_per_sec)<sp/>{</highlight></codeline>
  120. <codeline lineno="15"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Disable<sp/>automatic<sp/>state<sp/>preservation<sp/>and<sp/>lazy<sp/>stacking<sp/>via<sp/>FPCCR:</highlight><highlight class="normal"></highlight></codeline>
  121. <codeline lineno="16"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>the<sp/>kernel<sp/>explicitly<sp/>saves/restores<sp/>S0-S31<sp/>in<sp/>software<sp/>on<sp/>every<sp/>switch,</highlight><highlight class="normal"></highlight></codeline>
  122. <codeline lineno="17"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>so<sp/>hardware<sp/>must<sp/>never<sp/>push<sp/>VFP<sp/>frames<sp/>onto<sp/>task<sp/>stacks.</highlight><highlight class="normal"></highlight></codeline>
  123. <codeline lineno="18"><highlight class="normal"><sp/><sp/><sp/><sp/>m33_hw-&gt;fpccr<sp/>=<sp/>(uint32_t)(m33_hw-&gt;fpccr<sp/>&amp;<sp/>~(<ref refid="port__m33_8c_1a7b53a215b14820fae8b8e7c387f5b3b3" kindref="member">FPCCR_ASPEN</ref><sp/>|<sp/><ref refid="port__m33_8c_1a6addcb4c27c8943e5908a645233e4b1e" kindref="member">FPCCR_LSPEN</ref>));</highlight></codeline>
  124. <codeline lineno="19"><highlight class="normal"></highlight></codeline>
  125. <codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/>uint32_t<sp/>clk<sp/>=<sp/>clock_get_hz(clk_sys);</highlight></codeline>
  126. <codeline lineno="21"><highlight class="normal"><sp/><sp/><sp/><sp/>systick_hw-&gt;rvr<sp/>=<sp/>((clk<sp/>+<sp/>ticks_per_sec<sp/>/<sp/>2u)<sp/>/<sp/>ticks_per_sec<sp/>-<sp/>1u)<sp/>&amp;<sp/>0x00FFFFFFu;</highlight></codeline>
  127. <codeline lineno="22"><highlight class="normal"></highlight></codeline>
  128. <codeline lineno="23"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Run<sp/>PendSV<sp/>at<sp/>the<sp/>lowest<sp/>priority<sp/>(15<sp/>of<sp/>15<sp/>on<sp/>M33)<sp/>so<sp/>peripheral<sp/>ISRs</highlight><highlight class="normal"></highlight></codeline>
  129. <codeline lineno="24"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>and<sp/>SysTick<sp/>always<sp/>preempt<sp/>it,<sp/>ensuring<sp/>context<sp/>switches<sp/>happen<sp/>only<sp/>when<sp/>all</highlight><highlight class="normal"></highlight></codeline>
  130. <codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>higher-priority<sp/>interrupt<sp/>handling<sp/>is<sp/>complete.<sp/>SysTick<sp/>runs<sp/>at<sp/>priority<sp/>14.</highlight><highlight class="normal"></highlight></codeline>
  131. <codeline lineno="26"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Byte<sp/>offsets<sp/>follow<sp/>CMSIS<sp/>__NVIC_SetPriority:</highlight><highlight class="normal"></highlight></codeline>
  132. <codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>SHPR<sp/>base<sp/>=<sp/>SCB+0x18,<sp/>byte<sp/>index<sp/>=<sp/>((IRQn)<sp/>&amp;<sp/>0xF)<sp/>-<sp/>4.</highlight><highlight class="normal"></highlight></codeline>
  133. <codeline lineno="28"><highlight class="normal"><sp/><sp/><sp/><sp/>uint8_t*<sp/>shpr<sp/>=<sp/>(uint8_t*)&amp;scb_hw-&gt;shpr[0];</highlight></codeline>
  134. <codeline lineno="29"><highlight class="normal"><sp/><sp/><sp/><sp/>shpr[((int32_t)(-2)<sp/>&amp;<sp/>0xF)<sp/>-<sp/>4]<sp/>=<sp/>15u<sp/>&lt;&lt;<sp/>4;<sp/><sp/></highlight><highlight class="comment">//<sp/>PendSV<sp/>(priority<sp/>15:<sp/>lowest)</highlight><highlight class="normal"></highlight></codeline>
  135. <codeline lineno="30"><highlight class="normal"><sp/><sp/><sp/><sp/>shpr[((int32_t)(-1)<sp/>&amp;<sp/>0xF)<sp/>-<sp/>4]<sp/>=<sp/>14u<sp/>&lt;&lt;<sp/>4;<sp/><sp/></highlight><highlight class="comment">//<sp/>SysTick<sp/>(priority<sp/>14)</highlight><highlight class="normal"></highlight></codeline>
  136. <codeline lineno="31"><highlight class="normal"></highlight></codeline>
  137. <codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>NOTE:<sp/>SysTick<sp/>is<sp/>intentionally<sp/>NOT<sp/>enabled<sp/>here.<sp/>tk_port_start()<sp/>enables<sp/>it</highlight><highlight class="normal"></highlight></codeline>
  138. <codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>(ENABLE|TICKINT|CLKSOURCE)<sp/>in<sp/>asm,<sp/>right<sp/>before<sp/>jumping<sp/>into<sp/>the<sp/>first<sp/>task,</highlight><highlight class="normal"></highlight></codeline>
  139. <codeline lineno="34"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>so<sp/>a<sp/>tick<sp/>can<sp/>never<sp/>preempt<sp/>the<sp/>rest<sp/>of<sp/>tk::start()<sp/>while<sp/>scheduler<sp/>state<sp/>and</highlight><highlight class="normal"></highlight></codeline>
  140. <codeline lineno="35"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>MSP<sp/>are<sp/>not<sp/>yet<sp/>established.</highlight><highlight class="normal"></highlight></codeline>
  141. <codeline lineno="36"><highlight class="normal">}</highlight></codeline>
  142. </programlisting>
  143. <location file="C:/Users/yoneda/Documents/Pico_Projects/tinykernel/tinykernel/src/port/m33/port_m33.c"/>
  144. </compounddef>
  145. </doxygen>