Как стать автором
Обновить

Комментарии 13

Никогда ранее я не видел ЦАП-а непосредственно в самом микроконтроллере.

Он является частью ядра Cortex-M3, если мне не изменяет память.
Нет, в само ядро Cortex он не входит, он может выступать как отдельный периферийный модуль МК на базе данного ядра.
А так, ЦАП внутри микроконтроллера уже давно не новшество.
Он является частью ядра Cortex-M3, если мне не изменяет память.

Вы меня заставили немного усомниться в своих знаниях. Интереса ради пробежался по описаниям всех достоинств Cortex-M3. Нигде не нашел упоминания о том, что DAC — часть ядра. SysTick — да. Везде об этом пишут. Но про DAC не нашел. Да и лично мне не попадался STM32 с DAC (Из тех, что из F100 и F103). Например в самом часто используемом мной STM32F103C8 — нет DAC (сейчас еще раз пересмотрел в описании). А он на Cortex-m3. Делаю вывод — он не часть ядра.
У STM32F103RC есть ЦАП, например.
Значит мой косяк. Привык, что они есть везде :)
Строго говоря, systick не входит в процессор cm3. В него входит собственно вычислительное ядро, nvic, набор всяких шин (включая bus matrix), куча вещей предназначенных для дебага (swd/jtag, etm, itm, tpiu и куча других страшных аббревиатур), mpu, wake-up interrupt controller. Даже без учета того, что swd/jtag, tpiu, wic и etm с точки зрения arm — уже не в процессоре.

К ядерной периферии относятся nvic, system timer (systick), mpu и scb (всякие регистры для конфигурации ядра, исключений и т. п.).

А всё, что висит на AHB и APB — уже периферия и определяется производителем контроллера.
В самом ядре Cortex есть периферия, но ее очень мало (кроме SysTick'a я навскидку ничего и не вспомню).
Все остальное меняется от контроллера к контроллеру; у Миландра вся периферия собственной разработки.
Ладно о mpu забыть легко (он опционален), но nvic?!
Видимо, я его не воспринимаю, как периферию. Ошибочно, разумеется.
Простите мня, глупость конечно, но никогда не понимал людей, которые делают массивы типа 100 элементов или 20 элементов.
Почему бы не сделать 128 элементов или 32 элемента?
Как-то так:
DAC->DAC2_DATA = C_4[Loop];
Loop = (Loop+1) & 0x3f;
Выигрыша в производительности по нынешним времена может и нет, зато в таком коде букв меньше
Ага, и код гораздо понятнее! А еще, можно совершенно спокойно написать Loop = (Loop +1) % 100, если уж так хочется покороче.
Битовую маску десятичным числом? Какой-то фиговый сарказм получился.
Это круговой проход по массиву. В статье это if (Loop<99) Loop++; else Loop = 0; (что, на мой взгляд, читается еще лучше).

А делать это битовой маской и ради этого делать буфер длиной в степень двойки имеет смысл, только если каждый такт на счету.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории