Catcatcat electronics

Loading ...

Перейти к содержимому
Catcatcat electronics Electronic design studio based on microcontrollers of Microchip Technology Corporation
  • Facebook
  • Instagram
  • LinkedIn
  • Pinterest
  • Магазин
  • Skype
  • Telegram
  • X.com
  • WhatsApp
  • YouTube
  • RSS
  • E-mail
Вход / Регистрация
  • Home
  • Design Services
    • Design Services
    • Electronic design studio
  • Projects
    • Projects
    • News, Chat
    • List of site articles
    • List of site pages
  • Download
    • Libraries
    • Examples of building program code for PIC controllers
    • System software – bootloader for 8-bit PIC microcontrollers
    • Catcatcat electronics data file database
    • Datasheets for components used in projects.
  • Education
    • MPLAB® Code Configurator
    • FAQ
    • Printed circuit boards
    • Where to begin?
    • Learning PIC24, the XC16 compiler
    • Изучаем PIC32, компилятор XC32
    • Interesting features and solutions
  • RTMV technology
    • Project ch-светомузыка
    • Demonstration of prototypes – ch-светомузыка
    • Из истории развития классической светомузыки
    • Ch-светомузыка — basic concepts
    • Theoretical part — ch-светомузыка
    • Узлы светомузыки
    • Development news
  • Circuit Design
    • Printed circuit boards
    • ILLISSI project
      • Системные платы
      • ILLISSI-4С-secundo
      • ILLISSI-4B-primum
    • OLED displays
      • Справочник по OLED дисплеям
      • OLED дисплей CNK109632
      • OLED дисплей CNK109630
      • OLED дисплей CNK111063
    • Интегральный радиоприемник — RDA5807FP
    • Подключение SD/MMC карт памяти к PIC-микроконтроллеру
    • GPS — система глобального позиционирования
  • Buy
  • About
  • Club
  • Community
    • Register
    • Sign In
    • Forgot password?
    • Search users

PIC18 – модуль DMA

Опубликовано 05/06/2019Обновлено на 31/05/2019от catcatcatРубрики:MPLAB X, Изучаем PIC18, Статьи

Views: 1273


Введение

  Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной  обработки прерываний процессором, предназначенных для передачи данных. Процессор теперь может больше уделять времени на другие задачи.

  Семейство PIC18(L)F2XK42 имеет два модуля DMA, которые могут быть независимо запрограммированы для передачи данных между различными ячейками памяти, перемещение разных размеров данных и использования широкого спектра аппаратных триггеров для инициирования передач. Два регистра DMA могут быть запрограммированы для совместной работы, чтобы выполнять более сложные передачи данных без дополнительных нагрузок на процессор микроконтроллера.

  К основным функциям модуля DMA относятся:

  • Поддержка доступа к следующим областям памяти:
    • Пространство GPR и SFR (R/W) (GPR – память ОЗУ и SFR – регистры модулей и управления)
    • Программная флэш-память (только R)
    • Память данных EEPROM (только R)
  • Программируемый приоритет между DMA и системными ресурсами (процессор и прерывания). 
  • Программируемые режимы адреса источника и адресата
    • Фиксированный адрес
    • Адрес после инкремента
    • Адрес после декремента
  • Программируемые размеры источника и адресата
  • Регистр указателя источника и получателя, динамически обновляемые и перезагружаемые
  • Регистр счетчика источника и адресата, динамически обновляемый и перезагружаемый
  • Программируемая автоматическая остановка на основе счетчика источника или адресата
  • Передача программного обеспечения
  • Множественные выбираемые пользователем источники для аппаратно инициированных передач
  • Несколько выбираемых пользователем источников для прерывания передачи DMA

DMA регистры

  • Регистры управления модулями (DMAxCON0, DMAxCON1)
  • Регистр буфера данных (DMAxBUF)
  • Источник
    • Регистр хранения стартового адреса, откуда будут получены данные (DMAxSSA U:H:L)
    • Регистр указателя адреса откуда в текущий момент извлекаются данные (DMAxSPTR U:H:L)
    • Регистр размера сообщения (размер буфера данных) (DMAxSSZ H:L)
    • Регистр счетчика переданных байт данных (DMAxSCNT H:L) 
  • Адресат
    • Регистр стартового адреса, куда будут записываться данные (DMAxDSA H:L)
    • Регистр указателя куда в текущий момент производиться запись (DMAxDPTR H:L)
    • Регистр размера сообщения (размер буфера данных) (DMAxDSZ H:L)
    • Регистр счетчика принятых байт (DMAxDCNT H:L)
  • Регистр указатель на устройство прерывания  которого запускает процесc DMA (DMAxSIRQ)
  • Регистр указатель на устройство прерывания  которого прерывает процесc DMA (DMAxAIRQ)

Организация DMA

Модуль DMA на устройстве PIC18(L)F24/25K42 предназначен для перемещения данных с использованием существующей шины инструкций <16> и шины данных <8> без необходимости использования двухпортовой памяти или периферийных систем. DMA обращается к требуемой шине, когда она будет предоставлена системным арбитром.

В зависимости от приоритета DMA в отношении к процессору, контроллер DMA может перемещать данные двумя способами:

  • Прекращение работы процессора до тех пор, пока он не завершит передачу (DMA имеет более высокий приоритет над процессором в этом режиме работы)
  • Использование неиспользуемых циклов ЦП для передачи DMA (в этом режиме работы процессор имеет более высокий приоритет по сравнению с DMA). Неиспользованные циклы CPU называются пузырьками (Bubble), которые являются командами цикла, доступными для использования DMA, для выполнения операций чтения и записи. Таким образом, увеличивается эффективная пропускная способность для обработки данных; в то же время операции DMA могут продолжаться, не вызывая остановки процессора.

DMA интерфейс

Модуль DMA передает данные от источника до адресата по одному байту за раз, это наименьшее перемещение данных называется транзакцией данных DMA. Сообщение DMA относится к одной или нескольким транзакциям данных DMA.
Каждая транзакция данных DMA состоит из двух отдельных действий:

  • Чтение источника в адресной памяти и сохранение значения в регистре буфера DMA
  • Запись содержимого буфера DMA-буфера в память адресата

Движение данных DMA представляет собой двухтактную операцию.

Бит XIP (регистр DMAxCON0) является битом состояния, указывающим, записаны ли данные в регистре DMAxBUF по адресу назначения. Если бит установлен, данные ждут записи в пункт назначения. Если он очищен, это означает, что либо данные были записаны в пункт назначения, либо источник еще не прочитан.
DMA имеет доступ для чтения к PFM, Data EEPROM и пространству SFR/GPR, а также возможность записи в пространство SFR/GPR. Основываясь на этих возможностях доступа к памяти, DMA может поддерживать следующие транзакции памяти:

Чтение источника Запись в назначение
Program Flash Memory  GPR
Program Flash Memory  SFR
Data EE  GPR
Data EE  SFR
GPR  GPR
SFR  GPR
GPR  SFR
SFR  SFR

Несмотря на то, что модуль DMA имеет доступ ко всей памяти и периферийным устройствам, которые также доступны для ЦП, рекомендуется, чтобы DMA не обращался к любому регистру, который является частью арбитража системы. DMA, как системный арбитражный клиент, не должен быть прочитан или записан сам собой или другим каналом DMA.
В следующих разделах обсуждаются различные интерфейсы управления, необходимые для передачи данных DMA.

DMA адресация

Начальные адреса для операций чтения источника и адресата записываются с использованием регистров DMAxSSA <21:0> и DMAxDSA <15:0> соответственно.
Когда передача сообщений DMA выполняется, регистры DMAxSPTR<21:0> и DMAxDPTR<15:0> содержат текущие указатели адресов для каждой операции чтения источника и записи для адресата, эти регистры изменяются после каждой транзакции на основе режима заданного в регистре управления.
Биты SMODE и DMODE в регистре управления DMAxCON1 определяют режимы адреса управления, контролируя, как биты DMAxSPTR<21:0> и DMAxDPTR<15:0> обновляются после каждой комбинации транзакций данных DMA.

Каждый адрес может быть сконфигурирован отдельно:

  • Оставаться без изменений
  • Увеличение на 1
  • Уменьшение на 1

Примечание 1: Для выполнения правильного доступа к памяти для чтения, сочетание адреса и выбор пространства должно быть действительным.
2: Пункт назначения (адресат) не имеет битов выбора места, поскольку он может записывать только в пространство SFR/GPR.

DMA размер/счетчик сообщения

Транзакция – это передача одного байта. Сообщение состоит из одной или нескольких транзакций. Полный процесс DMA состоит из одного или нескольких сообщений. Регистры размера определяют количество транзакций в сообщении. Регистры DMAxSSZ определяют размер источника, а регистры DMAxDSZ определяют размер адресата.

Когда инициируется передача DMA, регистры размера копируются в соответствующие регистры счетчиков, которые управляют продолжительностью сообщения. Регистры DMAxSCNT подсчитывают транзакции от источника, а регистры DMAxDCNT подсчитывают транзакции к адресату. Оба одновременно уменьшаются на один после каждой транзакции.

Сообщение запускается установкой бит DGO регистра DMAxCON0 и завершается, когда меньший из двух счетчиков достигает нуля.

Когда любой счетчик достигает нуля, бит DGO очищается, а регистры счетчика и указателя немедленно перезагружаются с соответствующими данными размера и адреса. Если другой счетчик не достиг нулевого значения, тогда следующее сообщение будет продолжаться со счетчиком и адресом, соответствующим этому регистру.

Когда регистры размера источника и адресата не равны, отношение наибольшего к наименьшему определяется количеством сообщений в процессе DMA. Например, когда размер адресата равен 6, а исходный размер равен 2, каждое сообщение будет состоять из двух транзакций, а полный процесс DMA будет состоять из трех сообщений. Когда больший размер не является четным целым меньшего размера, последнее сообщение в этом процессе заканчивается раньше, когда большее число достигает нуля. В этом случае более высокий счетчик будет сброшен, а меньший счетчик будет иметь остаток, искажающий любые последующие сообщения на эту разность.

Примечание: Чтение регистров DMAxSCNT или DMAxDCNT никогда не будет возвращать ноль. Когда любой регистр уменьшается с «1» в «0», он немедленно перезагружается из соответствующего регистра размера.

Таблица примеров сообщений

Операция Пример SCNT DCNT Комментарии
Чтение из отдельного
регистра SFR в ОЗУ
 U1RXB 1 N N равно числу байтов, которые требуются в буфере назначения. N> = 1.
Запись в один регистр SFR
из ОЗУ
 U1TXB N 1 N равно числу байтов, которые требуются в исходном буфере. N> = 1.
Чтение из нескольких регистров SFR  ADRES[H:L] 2 2*N N равно числу результатов АЦП, которые должны храниться в памяти. N> 1
 TMR1[H:L] 2 2*N N равно количеству результатов захвата TMR1, которые должны храниться в памяти. N> 1
 SMT1CPR[U:H:L] 3 3*N N равно числу измерений ширины импульса захвата, которые должны храниться в памяти. N> 1
 Запись в несколько регистров SFR  PWMDC[H:L] 2*N 2 N равно числу значений рабочего цикла PWM, которые должны быть загружены из таблицы памяти. N> 1
 All ADC registers N*31 31 Использование DMA для передачи полного контекста АЦП из ОЗУ в регистры ADC. N> = 1

DMA Передача сообщений

После того, как бит Enable установлен для запуска передачи сообщений DMA, указатели источника/адресата и регистры счетчиков инициализируются условиями, показанными в таблице.

DMA Условия инициализации

Регистр Загружаемое значение
 DMAxSPTR<21:0>  DMAxSSA<21:0>
 DMAxSCNT<11:0>  DMAxSSZ<11:0>
 DMAxDPTR<15:0>  DMAxDSA<15:0>
DMAxDCNT<11:0>  DMAxDSZ<11:0>

Во время операции DMA после каждой транзакции следующие таблицы показывают, как изменяются указатель источника/адресата и регистры счетчиков.

DMA ИСТОЧНИК УКАЗАТЕЛЬ/СЧЕТЧИК ВО ВРЕМЯ РАБОТЫ

Регистр Изменение счетчика/указателя источника
 DMAxSCNT<11:0> != 1  DMAxSCNT = DMAxSCNT – 1 (счетчик транзакций)
 SMODE = 00: DMAxSPTR = DMAxSPTR (указатель на память)
 SMODE = 01: DMAxSPTR = DMAxSPTR + 1 (указатель на память)
 SMODE = 10: DMAxSPTR = DMAxSPTR – 1  (указатель на память)
DMAxSCNT<11:0> == 1  DMAxSCNT = DMAxSSZ (инициализация счетчика по размеру буфера данных)
 DMAxSPTR = DMAxSSA (инициализация указателя)

DMA АДРЕСАТ УКАЗАТЕЛЬ/СЧЕТЧИК ВО ВРЕМЯ ЭКСПЛУАТАЦИИ

Регистр Изменение счетчика/указателя получателя
DMAxDCNT<11:0> != 1 DMAxDCNT = DMAxDCNT -1
  DMODE = 00: DMAxDPTR = DMAxDPTR
  DMODE = 01: DMAxDPTR = DMAxDPTR + 1
  DMODE = 10: DMAxDPTR = DMAxDPTR – 1
DMAxDCNT<11:0> == 1 DMAxDCNT = DMAxDSZ
  DMAxDPTR = DMAxDSA

В следующих разделах обсуждается, как инициировать и прекратить передачу DMA.

DMA ЗАПУСК ПЕРЕДАЧИ СООБЩЕНИЙ

DMA может инициировать транзакции данных одним из следующих двух условий:

1. Управление программным обеспечением пользователя, управлением битом DGO.
2. Аппаратным триггером, посредством стартового прерывания SIRQ.

Управление пользовательским программным обеспечением.

Программное обеспечение запускает или останавливает транзакцию DMA, устанавливая/очищая бит DGO. Бит DGO также используется, чтобы указать, был ли получен аппаратный триггер DMA и какое сообщение выполняется.

Примечание:

  1. Запуск программного обеспечения возможен только в том случае, если установлен бит EN (DMAxCON1).
  2. Если процессор записывает бит DGO в то время как он уже установлен, Это не окажет влияния на систему, и DMA будет продолжать работать в обычном режиме.

Аппаратный триггер, SIRQ

Аппаратный триггер – запрос прерывания от другого модуля, отправленного в DMA с целью запуска транзакции DMA. Источник триггера запуска DMA выбирается пользователем с использованием регистра DMAxSIRQ.
Бит SIRQEN (регистр DMAxCON0) используется для включения внешних триггеров прерываний, с помощью которых можно начать передачу DMA. При установке бита SIRQEN DMA будет запускаться от выбранного источника прерывания, а при очистке бита SIRQEN DMA игнорирует выбранный источник прерываний. Очистка бита SIRQEN не останавливает транзакцию DMA в текущем прогрессе, он останавливается только окончанию транзакций или после аппаратного управления.

DMA ОСТАНОВКА ПЕРЕДАЧИ СООБЩЕНИЙ

Контроллер DMA может остановить транзакции данных одним из следующих условий:

  1. Очистка бит DGO
  2. Аппаратный триггер, AIRQ (через прерывания)
  3. Перезагрузка источника
  4. Повторная загрузка адресата
  5. Очистка бит Enable

Управление пользовательским программным обеспечением

Если пользователь очистит бит DGO, передача сообщения будет остановлена и DMA останется в текущей конфигурации.
Например, если пользователь очищает бит DGO после того, как исходные данные были прочитаны, но до того, как они будут записаны в пункт назначения, данные в DMAxBUF не достигнут своего адресата.
Это также называется мягкой остановкой, так как операция может возобновиться при желании, снова установив бит DGO.

Аппаратный триггер, AIRQ

Бит AIRQEN (регистр DMAxCON0) используется для включения внешних триггеров прерываний, с помощью которых транзакция DMA может быть прервана.
После того, как был получен запрос прерывания прерывания, DMA выполнит мягкую остановку, очистив бит DGO, а также очистив бит SIRQEN, чтобы переполнение не происходило. Бит AIRQEN также очищается, чтобы предотвратить дополнительные сигналы прерывания от срабатывания ложных прерываний.
При желании бит DGO может быть установлен снова, и DMA возобновит работу с того места, где оно было остановлено после того, как был установлен «мягкий останов», поскольку ни одна из информации состояния DMA не изменяется в случае прерывания.

Счетчик источника

Сообщение DMA считается завершенным, когда регистр счетчика источника уменьшается с «1» в «0», а затем перезагружается (т.е. После того, как произошела записи последнего байта из источника или запись к адресату). Когда бит SSTP установлен (регистр DMAxCON1), и регистр счетчика источника перезагружается, дальнейшая передача сообщений прекращается.

Перезагрузка счетчика назначения

Сообщение DMA считается завершенным, когда регистр счетчика назначения уменьшается с «1» в «0», а затем перезагружается (т.е. как только произошло чтение последний байт из любого источника или записи последний байта регистр адресата).
Когда бит DSTP установлен (DMAxCON1), и регистр счетчика назначения перезагружается, дальнейшая передача сообщения останавливается.

Чтение регистров DMAxSCNT или DMAxDCNT никогда не будет возвращать ноль. Когда любой регистр уменьшается с «1» в «0», он немедленно перезагружается из соответствующего регистра размера.

Очистка бита включения

Если пользователь очистит бит EN, сообщение будет остановлено, и DMA вернется к своей конфигурации по умолчанию. Это также называется жесткой остановкой, поскольку DMA не может возобновить работу с того места, где она была прервана.

Примечание:

После того, как передача сообщения DMA остановлена, для выполнения условия остановки требуется дополнительный цикл команд. Таким образом, после того, как произошло условие «Стоп», может произойти чтение источника или запись адресата в зависимости от доступности источника или шины.

ОТКЛЮЧИТЬ DMA ПО ЗАВЕРШЕНИЮ ПЕРЕДАЧИ СООБЩЕНИЯ

После передачи сообщения DMA может быть желательно остановлено, чтобы отключить источник запуска, или чтобы предотвратить переполнение при пробеге данных. Это может быть сделано одним из следующих способов:

  1. Очистка бит SIRQEN
  2. Установка бит SSTP
  3. Установка бит DSTP

Очистка бита SIRQEN

Очистка бит SIRQEN (регистр DMAxCON1) останавливает выборку от прерывании внешних источников запуска, тем самым предотвращая дальнейшую передачу сообщений DMA.
Примером может служить связь периферии с прерыванием, вызванным уровнем. Периферийное устройство будет продолжать запрашивать данные (поскольку его буфер пуст), хотя больше данных не нужно перемещать. Отключение бита SIRQEN не позволит DMA обрабатывать эти запросы.

Остановка Источника или Получателя

Биты SSTP и DSTP (регистр DMAxCON0) определяют, следует ли отключать аппаратные источники запуска (SIRQEN = 0) после завершения сообщения DMA.
Когда бит SSTP установлен, а DMAxSCNT = 0, бит SIRQEN будет очищен. Аналогично, когда бит DSTP установлен и DMAxDCNT = 0, бит SIRQEN будет очищен.

Биты SSTP и DSTP являются независимыми функциями и не зависят друг от друга. Возможно, сообщение будет остановлено либо счетчиком на конце сообщения, либо обоими счетчиками на конце сообщения.

Типы аппаратных тригеров.

DMA имеет два разных триггерных входа: триггер запуска и триггер прерывания работы. Каждый из этих источников триггера настраивается пользователем с использованием регистров DMAxSIRQ и DMAxAIRQ.
На основе источника, выбранного для каждого триггера, есть два типа запросов, которые могут быть отправлены в DMA.

• Тригеры изменения
• Тригеры Уровня

ЗАПРОСЫ ТРИГГЕРА изменения

Запрос Edge возникает только один раз, когда заданные требования к прерыванию модуля верны.

ЗАПРОСЫ УРОВЕНЬ ТРИГГЕРА

Утверждается запрос уровня, если условие, вызывающее прерывание, истинно.


Типы передачи данных

На основе возможностей доступа к памяти в DMA (Таблица 17-1), в следующих разделах описываются различные типы перемещения данных между источником и регионами назначения памяти.

N: 1

Этот тип передачи распространен при отправке предопределенных пакетов данных (например, строк) через единую точку интерфейса (например, регистры передачи модулей связи).

N: N

Этот тип передачи используется для перемещения информации из Program Flash или EEPROM данных в SRAM для обработки с помощью процессора или других периферийных устройств.

1: N

Этот тип передачи распространен при соединении двух разных потоков данных модулей (мост связи).

1: N

Этот тип передачи полезен для перемещения информации из одного источника данных в буфер памяти (регистры приема сообщений).


Прерывания DMA

Каждый DMA имеет свой собственный набор из четырех флагов прерывания, используемых для указания диапазона условий во время передачи данных. К битам флага прерывания можно получить доступ с помощью соответствующих регистров PIR.

Прерывания от DMA по счетчику Источника

Флаг прерывания источника DMAxSCNTIF устанавливается каждый раз, когда DMAxSCNT<11:0> достигает нуля и перезагружается до его начального значения.

Прерывания от DMA по счетчику Получателя

Флаг прерывания Получателя DMAxDCNTIF устанавливается каждый раз, когда DMAxDCNT<11:0> достигает нуля и перезагружается до его начального значения.
Прерывания DMA от счетчиков Источника и Получателя при переходе в ноль используются вместе, чтобы определить, когда нужно оповестить ЦП о завершении сообщений DMA.

Прерывания от Остановки DMA (ABORT)

Флаг прерывания остановки DMAxAIF используется, чтобы сигнализировать о том, что DMA остановил активность из-за сигнала прерывания от одного из источников прерывания. Это используется, чтобы указать, что транзакция была остановлена по какой-либо причине.

OVERRUN INTERRUPT ПРЕРЫВАНИЯ Переполнения

Когда DMA получает триггер для запуска нового сообщения до завершения текущего сообщения, устанавливается флаг прерывания DMAxORIF Overrun.
Это условие указывает, что DMA запрашивается до завершения текущей транзакции. Это означает, что активный DMA может не справиться с требованиями обслуживаемого периферийного модуля, что может привести к потере данных.
Установленный флаг DMAxORIF не приводит к завершению текущей передачи DMA.
Прерывание переполнения доступно только для источников триггеров, которые основаны на границах и недоступны для источников, основанных на уровне. Поэтому источник прерываний на основе уровня не вызывает ошибку переполнения DMA из-за возможных проблем с задержкой в системе.
Примером прерывания, которое могло бы использовать прерывание переполнения, было бы прерывание таймера (или совпадение периода). Это событие происходит только каждый раз, когда таймер переполняется и не зависит от каких-либо других системных условий.
Примером прерывания, которое не допускает прерывание переполнения, будет буфер UARTTX. UART будет продолжать утверждать прерывание, пока DMA не сможет обработать MSG. Из-за проблем с задержкой DMA может не иметь возможности немедленно обслуживать пустой буфер, но UART продолжает утверждать свое прерывание передачи до тех пор, пока оно не будет обслуживаться. Если в этом случае разрешено перерасход, переполнение произойдет почти сразу, поскольку модуль проверит источники прерываний на каждый цикл команд.

Установка и эксплуатация DMA
Следующие шаги иллюстрируют, как настроить DMA для передачи данных:

  1. Запрограммируйте соответствующие адреса источника и назначения для транзакции в регистры DMAxSSA и DMAxDSA
  2. Выберите область памяти источника, которая адресована регистром DMAxSSA, используя бит SMR<1:0>.
  3. Запрограммируйте биты SMODE и DMODE, чтобы выбрать режим адресации.
  4. Запрограммируйте размер источника DMAxSSZ и размер DMAxDSZ размера адресата с количеством передаваемых байтов. Для правильной работы рекомендуется, чтобы регистры размера были кратными друг другу.
  5. Если пользователь желает отключить передачу данных после завершения сообщения, необходимо установить бит SSTP и DSTP в регистре DMAxCON0.
  6. При использовании аппаратных триггеров для передачи данных настройте источники прерывания аппаратного триггера для пуска и прерывания передачи DMA (DMAxSIRQ и DMAxAIRQ) и установите соответствующие бит разрешения запроса прерывания (SIRQEN и AIRQEN).
  7. Выберите уровень приоритета для DMA и заблокируйте приоритеты.
  8. Включите DMA (DMAxCON1bits. EN = 1)
  9. При использовании программного обеспечения для передачи данных установите бит DGO, иначе этот бит будет установлен аппаратным триггером.

Как только DMA настроен, следующая блок-схема описывает последовательность операций, когда DMA использует аппаратные триггеры и использует неиспользуемые циклы CPU (пузырь) для передачи DMA.

ТАБЛИЦА Примеров  использования DMA

Варианты использования DMA
Модуль Источник Регистр (ы) источника Модуль получателя Регистр(ы) получателя DCHxSIRQ Комментарий
Таймер измерения сигнала(SMT) SMTxCPW[U:H:L] GPR GPR[x,y,z] SMTxPWAIF Сохранение значений ширины импульса захвата
SMTxCPR[U:H:L] SMTxPRAIF Сохранить значение захваченного периода
GPR/SFR/Program Flash/Data EEPROM MEMORY[x,y] TMR0 TMR0[H:L] TMR0IF Использовать в качестве перезагрузки Timer0 для пользовательского 16-битного значения
GPR/SFR/ Program Flash/Data EEPROM MEMORY[x] TMR0 PR0 ANY Частота обновления TMR0 на основе конкретного триггера
GPR/SFR/ Program Flash/Data EEPROM MEMORY[x,y] TMR1 TMR1[H:L] TMR1IF Использовать в качестве перезагрузки Timer1 для пользовательского 16-битного значения
 TMR1  TMR1[H:L]  GPR  GPR[x,y]  TMR1GIF  Используйте флаг прерывания TMR1 Gate для чтения данных из регистра TMR1
 GPR/SFR/ Program Flash/Data EEPROM  MEMORY[x]  TMR2  PR2  TMR2IF  Задание периода таймера
 GPR/SFR/ Program Flash/Data EEPROM  MEMORY[x,y,z]  TMR2
CCP or PWM
 PR2
CCPR[H:L] or PWMDC[H:L]
 ANY  Частота генератор с 50% рабочим циклом просмотра таблицы
 CCP  CCPR[H:L]  GPR  GPR[x,y]  CCPxIF  Перемещение данных из CCP 16b Capture
 GPR/SFR/ Program Flash/Data EEPROM  MEMORY[x,y]  CCP  CCPR[H:L]  ANY  Загрузка значений сравнения или значений ШИМ в CCP
 GPR/SFR/ Program Flash/Data EEPROM  MEMORY [x,y,z,u,v,w] CCPx
CCPy
CCPz
 CCPxR[H:L]
CCPyR[H:L]
CCPzR[H:L]
 ANY  Одновременное обновление нескольких значений ШИМ
например Трехфазное управление двигателем
 GPR/SFR/ Program Flash/Data EEPROM  MEMORY[x,y,z]  NCO  NCOxINC[U:H:L]  ANY  Таблица поиска генератора частоты
 GPR/SFR/ Program Flash/Data EEPROM  MEMORY[x]  DAC  DACxCON0  ANY  Обновить значения ЦАП
 GPR/SFR/ Program Flash/Data EEPROM  MEMORY[x]  OSCTUNE  OSCTUNE  ANY  Автоматическая частота
размывание

 

Регистры DMA

 

 DMAxCON0 – DMAx регистр управления 0

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0  Назначение Описание
R/W
-0/0
R/W/
HC
-0/0
R/W/
HS/HC
-0/0
U-0 U-0 R/W/
HC
-0/0
U-0 R/W/
HC
-0/0
EN Бит разрешения работы модуля DMA 1 = Включает модуль
0 = отключает модуль
SIRQEN Бит разрешения запуска транзакций аппаратными триггерами 1 = аппаратным триггерам разрешено запускать передачу DMA
0 = аппаратные триггеры не могут запускать передачу DMA
DGO Бит транзакции DMA 1 = выполняется транзакция DMA
0 = транзакция DMA не выполняется
AIRQEN  Бит разрешения прерывания транзакций аппаратными триггерами 1 = Аппаратные триггеры могут прервать передачу DMA
0 = аппаратные триггеры не могут отменять передачу DMA
XIP Бит состояния передачи данных буфером DMA 1 = Регистр DMAxBUF в настоящее время содержит содержимое из операции чтения и не
передал данные адресату.
0 = регистр DMAxBUF пуст или успешно передал данные адресату

 

 DMAxCON1 – DMAx регистр управления 1

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0  Назначение  Описание
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/00
DAMODE
<1:0>
Биты режима управления указателем адресата 11 = Reserved, Do not use
10 = DMAxDPTR<15:0> уменьшается после каждого завершения передачи
01 = DMAxDPTR<15:0> увеличивается после каждого завершения передачи
00 = DMAxDPTR<15:0> остается неизменным после каждого завершения передачи
 DSTP Бит управления перезагрузкой счетчика транзакций адресата 1 = бит SIRQEN очищается при перезагрузке счетчика назначения
0 = бит SIRQEN не очищается при перезагрузке счетчика назначения
SMR
<1:0>
Биты выбор область памяти источника 1x = DMAxSSA<21:0> указывает на Data EEPROM
01 = DMAxSSA<21:0> указывает на Program Flash Memory
00 = DMAxSSA<21:0> указывает на пространство данных SFR/GPR
SMODE
<1:0>
Биты выбора режима работы указателя источника 11 = Reserved, Do not use
10 = DMAxSPTR<21:0> уменьшается после каждого завершения передачи
01 = DMAxSPTR<21:0> увеличивается после каждого завершения передачи
00 = DMAxSPTR<21:0> остается неизменным после каждого завершения передачи
SSTP Бит управления перезагрузкой счетчика транзакций источника 1 = бит SIRQEN очищается при перезагрузке Source Counter
0 = бит SIRQEN не очищается при перезагрузке счетчика источника

 

DMAxBUF – DMAx DATA BUFFER REGISTER

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
 BUF7  BUF6  BUF5  BUF4  BUF3  BUF4  BUF1  BUF0
        Этот регистр содержит последние данные которые перемещаются от источника адресату

 

DMAxSSAL –  регистр (младший байт) стартового адреса источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/00
        SSA<7:0>

 

DMAxSSAH – регистр (средний байт) стартового адреса источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/00
SSA<15:8>

 

DMAxSSAU – регистр (старший байт) стартового адреса источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
U-0 U-0 R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/00
SSA<21:16>

 

DMAxSPTRL – регистр (младший байт) указатель текущего адреса чтения источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
SPTR<7:0>

 

DMAxSPTRH – регистр (средний байт) указатель текущего адреса чтения источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
SPTR<15:8>

 

DMAxSPTRU – регистр (старший байт) указатель текущего адреса чтения источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
U-0 U-0 R-0 R-0 R-0 R-0 R-0 R-0
SPTR<21:16>

 

DMAxSSZL – регистр (младший байт) размера “буфера данных” источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
SSZ<7:0>

 

DMAxSSZH – регистр (старший байт) размера “буфера данных” источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
U-0 U-0 U-0 U-0 R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
SSZ<11:8>

 

DMAxSCNTL – регистр (младший байт) счетчик переданных байт источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
SCNT<7:0>

 

DMAxSCNTH – регистр (старший байт) счетчик переданных байт источника

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
SCNT<11:8>

 

DMAxDSAL – регистр (младший байт) стартового адреса адресата

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
DSA<7:0>

 

DMAxDSAH – регистр (старший байт) стартового адреса адресата

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
DSA<15:8>

 

DMAxDPTRL – регистр (младший байт) текущего положения указателя адресата

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
DPTR<7:0>

 

DMAxDPTRH – регистр (старший байт) текущего положения указателя адресата

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
DPTR<15:8>

 

DMAxDSZL – регистр (младший байт) размера “буфера данных” адресата

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
DSZ<7:0>

 

DMAxDSZH – регистр (младший байт) размера “буфера данных” адресата

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
 DCNT<11:8>

 

DMAxDCNTL – регистр (младший байт) счетчика переданных байт адресата

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
  DCNT<7:0>

 

DMAxDCNTH – регистр (старший байт) счетчика переданных байт адресата

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
DCNT<11:8>

 

DMAxSIRQ – регистр выбора триггера источника запуска DMA

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
U-0 R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
 SIRQ6  SIRQ5  SIRQ4  SIRQ3  SIRQ2  SIRQ1  SIRQ0

 

DMAxAIRQ – регистр выбора триггера источника остановки DMA

 bit 7  bit 6  bit 5  bit 4  bit 3  bit 2  bit 1  bit 0
U-0 R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
R/W
-0/0
AIRQ6 AIRQ5 AIRQ4 AIRQ3 AIRQ2 AIRQ2 AIRQ0

 


 

 DMAxSIRQ и DMAxAIRQ ИСТОЧНИКИ ПРЕРЫВАНИЯ

DMAxSIRQ
DMAxAIRQ
Trigger
Source
Level
Triggered
———- DMAxSIRQ
DMAxAIRQ
Trigger
Source
Level
Triggered
 0  Reserved  42  DMA2SCNT  No
1  LVD  No 43  DMA2DCNT  No
2 OSF  No 44  DMA2OR  No
3  CSW  No 45 DMA2A  No
4  NVM  No 46  I2C2RX  Yes
5 SCAN No 47 I2C2TX Yes
6 CRC Yes 48 I2C2 Yes
7 CRC No 49 I2C2E Yes
8 INT0 No 50 U2RX Yes
9 ZCD No 51 U2TX Yes
10 AD No 52 U2E Yes
11 ADT No 53 U2 No
12 CMP1 No 54 TMR3 No
13 SMT1 No 55 TMR3G No
14 SMT1PRA No 56 TMR4 No
15 SMT1PWA No 57 CCP2 No
16 DMA1SCNT No 58 Reserved Yes
17 DMA1DCNT No 59 CWG2 No
18 DMA1OR No 30 CWG2 No
19 DMA1A No 51 CWG2 No
20 SPI1RX Yes 62 Reserved
21 SPI1TX Yes 63 Reserved
22 SPI1 Yes 64 Reserved
23 I2C1RX Yes 65 Reserved
24 I2C1TX Yes 66 Reserved
25 I2C1 Yes 67 Reserved
26 I2C1E Yes 68 Reserved
27 U1RX Yes 69 Reserved
28 U1TX Yes 70 TMR5 No
29 U1E Yes 71 TMR5G No
30 U1 No 72 TMR6 No
31 TMR0 No 73 CCP3 No
32 TMR1 No 74 CWG3 No
33 TMR1G No 75 CLC3 No
34 TMR2 No 76 Reserved
35 CCP1 No 77 Reserved
36 Reserved 78 Reserved
37 NCO No 79 Reserved
38 CWG1 No 80 CCP4 No
39 CLC1 No 81 CLC4 No
40 INT1 No 82 – 127 Reserved
41 CMP2 No

 

Пример настройки для работы ДМА память – память

#define SIZEBUF 120     // размер буферов данных 

uint8_t  input_buf[SIZEBUF];    // источник
uint8_t output_buf[SIZEBUF];    // приемник

 

void DMA1_Initialize(void)
{

    DMA1CON1 = 0b01000011; //настройка регистра управлени 1 
/*               ||||||||     источник
 *               |||||||+--- SSTP:        1 - сбросить SIRQEN когда передача выполнена
 *               |||||++---- SMODE[1:0]: 01 - увеличение указатель DMAxSPTR<21:0> после передачи
 *               |||++------ SMR[1:0]:   00 - данные из памяти
 *               |||          получатель
 *               ||+-------- DSTP:        0 - не сбросывать при получении данных
 *               ++--------- DAMODE<1:0>: 01 - увеличение указатель  DMAxDPTR<15:0> после завершения передачи
 */  
    
//    DMA1SSA = 0x000000; //откуда будут браться данные
//    DMA1SSA = (uint24_t) &input_buf[0];
    DMA1SSA = (uint24_t) input_buf;
//    DMA1DSA = 0x0000; //куда будут записываться данные 
//    DMA1DSA = (uint24_t) &output_buf[0];
    DMA1DSA = (uint24_t) output_buf;
    
    DMA1SSZ = SIZEBUF; //размер источника данных
    DMA1DSZ = SIZEBUF; //размер получателя данных
//    DMA1SSZ = 0x0000; //размер источника данных
//    DMA1DSZ = 0x0000; //размер получателя данных
    
    DMA1SIRQ = 0x00; //тригер запуска ДМА
    DMA1AIRQ = 0x00; //триггер остановки ДМА
    
    PIR2bits.DMA1DCNTIF =0; // clear Destination Count Interrupt Flag bit
    PIR2bits.DMA1SCNTIF =0; // clear Source Count Interrupt Flag bit
    PIR2bits.DMA1AIF =0; // clear abort Interrupt Flag bit
	PIR2bits.DMA1ORIF =0; // clear overrun Interrupt Flag bit
    
    PIE2bits.DMA1DCNTIE =0; // disable Destination Count 0 Interrupt
    PIE2bits.DMA1SCNTIE =0; // disable Source Count Interrupt
    PIE2bits.DMA1AIE =0; // disable abort Interrupt
    PIE2bits.DMA1ORIE =0; // disable overrun Interrupt 
    
    
	// заблокировать изменение приоритета
	asm("BCF INTCON0,7");
	
	asm ("BANKSEL PRLOCK");
    asm ("MOVLW 0x55");
    asm ("MOVWF PRLOCK");
    asm ("MOVLW 0xAA");
    asm ("MOVWF PRLOCK");
    asm ("BSF PRLOCK, 0"); 
	
	asm("BSF INTCON0,7");
        
    DMA1CON0 = 0x00; //set control register0
    
    
}

 

 

DMA1CON0bits.EN = 1; // включить ДМА

Для теста инициализируем данные

for(uint8_t a=0;a<SIZEBUF;a++)
{
input_buf[a]=(uint8_t)(a);
output_buf[a]=0;
}

DMA1CON0bits.DGO = 1; // запустить DMA принудительно

Настройка DMA для передачи в UART одному байту из буфера, с ручным запуском каждой передачи

Инициализация DMA (перед этим понятно, что надо описать сам буфер и его размер.

void DMA1_Initialize(void)
{

    DMA1CON1 = 0b00000010; //настройка регистра управлени 1 
/*               ||||||||     источник
 *               |||||||+--- SSTP:        
 *               |||||++---- SMODE[1:0]: 01 - увеличение указатель источника DMAxSPTR<21:0> после передачи 
 *               |||++------ SMR[1:0]:   00 - данные из берем памяти из ОЗУ
 *               |||          адресат
 *               ||+-------- DSTP:        0 - не сбросывать при получении данных
 *               ++--------- DAMODE<1:0>: 00 - не изменять указатель адресата DMAxDPTR<15:0> после завершения передачи
 */  
    
//откуда будут браться данные - берем данные с буфера input_buf
    DMA1SSA = (uint24_t) input_buf;
//куда будут записываться данные в регистр данных U1TXB передатчика
    DMA1DSA = (uint24_t) &U1TXB; // для регистра модуля 
    
    DMA1SSZ = SIZEBUFIN; //размер источника данных - размер нашего буфера input_buf
    DMA1DSZ = 1; //размер адресата данных - один регистр
// тут нули запускать будем в ручную
    DMA1SIRQ = 0x00; //триггер запуска ДМА
    DMA1AIRQ = 0x00; //триггер остановки ДМА
    
    PIR2bits.DMA1DCNTIF =0; // clear Destination Count Interrupt Flag bit
    PIR2bits.DMA1SCNTIF =0; // clear Source Count Interrupt Flag bit
    PIR2bits.DMA1AIF =0; // clear abort Interrupt Flag bit
    PIR2bits.DMA1ORIF =0; // clear overrun Interrupt Flag bit
    
    PIE2bits.DMA1DCNTIE =0; // disable Destination Count 0 Interrupt
    PIE2bits.DMA1SCNTIE =0; // disable Source Count Interrupt
    PIE2bits.DMA1AIE =0; // disable abort Interrupt
    PIE2bits.DMA1ORIE =0; // disable overrun Interrupt 
    
    
	// заблокировать изменение приоритета
	asm("BCF INTCON0,7");
	
	asm ("BANKSEL PRLOCK");
    asm ("MOVLW 0x55");
    asm ("MOVWF PRLOCK");
    asm ("MOVLW 0xAA");
    asm ("MOVWF PRLOCK");
    asm ("BSF PRLOCK, 0"); 
	
	asm("BSF INTCON0,7");
        
    DMA1CON0 = 0x00; //set control register0
    
}

После этой функции, для передачи данных используем команду

DMA1CON0bits.DGO = 1; // запустить DMA принудительно

При этом, DMA передает один байт из буфера. Биты SMODE[1:0]: 01 настроены, что при каждой следующем установки бита DGO, будет передаваться следующий бит. После выборки буфера, передача байт будет повторяться.


Следующая задача передать весь буфер за один раз. Как это сделать?

После передачи байта UART выставить флаг прерывания, что байт передал, этот флаг надо использовать для запуска DMA для передачи следующего байта. Из таблицы надо взять код 28 – U1TX. Для этого в регистре DMA1SIRQ надо прописать 28, что после передачи UARTом активизировал передачу следующего байта.

DMA1SIRQ = 28; //триггер запуска ДМА U1TX

Для остановки работы после передачи буфера, надо установить бит SSTP в регистре DMA1CON1, это создаст автомат что после передачи всего буфера будет сброшен бит SIRQEN и DMA остановит передачу. Если бит SSTP оставить сброшенным, то передача буфера будет идти непрерывно.

Еще раз. Если надо передать один раз весь буфер:

        DMA1CON0bits.SIRQEN = 1;    // разрешить прерывание от внешнего тригера   
        DMA1CON0bits.DGO = 1;       // запустить DMA принудительно

передача буфера из 20 байт.

Но если надо передать не весть буфер а только, например, 5 байт? Для этого надо, сделать так:

        DMA1SSZ=5; // задаем размер передаваемых данных   
        DMA1CON0bits.SIRQEN = 1;    // разрешить прерывание от внешнего тригера   
        DMA1CON0bits.DGO = 1;       // запустить DMA принудительно

Передача первых 5 байт из нашего буфера (20 байт).

А если надо передать не первые 8 байт, а например, 6 байт начина с 12 байта. Для это необходимо сделать так:

        DMA1SSA = (uint24_t) &input_buf[11];    
        DMA1SSZ=6; // задаем размер передаваемых данных   
        DMA1CON0bits.SIRQEN = 1;    // разрешить прерывание от внешнего тригера   
        DMA1CON0bits.DGO = 1;       // запустить DMA принудительно


Это может быть интересно


  • Сумеречное релеСумеречное реле20/03/2013
    Views: 1561 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
  • ESP8266 применение в проектахESP8266 применение в проектах21/09/2018
    Views: 3666 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …
  • Самый простой диммер для светодиодного освещенияСамый простой диммер для светодиодного освещения18/02/2014
    Views: 3135 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.0420/04/2023
    Views: 318 Смотри как установить и подключить библиотеку тут.   V.  – 23_04 – Component Database Update. – configuration file name – DXPPreferences1.DXPPrf. – Added two projects for audio amplifier …
  • CCP модуль для декодирования ИК-кодов пультов ДУCCP модуль для декодирования ИК-кодов пультов ДУ16/06/2015
    Views: 1110 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
  • Цифровой спидометр для автомобиляЦифровой спидометр для автомобиля28/03/2013
    Views: 10262  Универсальность печатной платы ch-c0030pcb позволяет создавать на её основе разнообразные устройства. Одним из таких устройств является электронный спидометр для автомобиля, в котором можно задать два компаратора скорости, например,  для …
  • Система AT команд версии V2.0 для ESP8266 и ESP32Система AT команд версии V2.0 для ESP8266 и ESP3222/10/2019
    Views: 13237 Появление нового модуля на базе ESP32 заставило систематизировать систему AT команд, а так же систему обновления и для модулей на базе ESP8266. Начиная с версии v2.0 в ESP8266 …
  • TDA7294 part 2TDA7294 part 210/04/2023
    Views: 589 Це друга частина проекту TDA7294, початок дивись тут. Тут ви знайдете повністю проект високоякісного підсилювача на TDA7294, схема, 3D моделі, гербер файли для виготовлення друкованої плати. І звичайно …
  • Проект с использованием MCC часть 08Проект с использованием MCC часть 0813/01/2017
    Views: 1172 И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, …
  • Контроллер управления светодиодным освещением с дистанционным управлениемКонтроллер управления светодиодным освещением с дистанционным управлением20/03/2013
    Views: 1990 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …



Поделись этим!

  • Facebook
  • Twitter
  • LinkedIn
Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

МеткиDMA

Продолжайте читать

НазадДалее

Пользователи онлайн

Сейчас никого нет в сети

Подпишитесь на нашу рассылку

Oh hello 👋
Nice to meet you.

Subscribe to get great content every month.

Select list(s):

We don't spam!

Check your mailbox or spam to confirm your subscription.

Метки

AD9833 (4) Altium Designer (13) BK8000L (4) CAN (3) ch-4000 (8) ch-светомузыка (5) DHT11 (4) DMA (2) DS18B20 (8) ESP-12F (3) ESP-202 (3) ESP32 (3) ESP8266 (7) LED (4) MCC (3) MPLAB® Code Configurator (24) MPLAB® Harmony (6) Music (3) music color (6) OLED (9) PIC10 (4) PIC10F222 (3) PIC16F1829 (4) PIC16F1936 (3) pic18 (3) PIC18F25K42 (4) PIC18F26K40 (3) PIC24 (20) PIC24FJ64GA002 (11) PIC32 (2) PIC32MX (8) PIC32MZ (8) SEPS114A (4) SSD1306 (3) TM1639 (3) VU-meter (2) WiFi (3) WS2812B (4) XC16 (12) ДУ ИК (3) Измерение влажности (3) Измерение напряжения (3) Измерение температуры (7) Сенсор (7) Терморегулятор (4)

Рубрики

Календарь

Май 2025
Пн Вт Ср Чт Пт Сб Вс
 1234
567891011
12131415161718
19202122232425
262728293031  
« Мар    

Архивы

Статистика

  • 0
  • 617
  • 239
  • 2 690 429
  • 746 819
  • 1 291
  • 01/03/2024

Свежие записи

  • Customs codes for export 01/03/2024
  • Development Boards PIC18F47Q84 02/02/2024
  • Development of temperature control and management systems 29/01/2024
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PRO 10/12/2023
  • Development board based on MCU PIC18F47Q84 17/11/2023
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.09 03/09/2023
  • CLUBBEST-50-Light 27/07/2023
  • The art of DJ 07/07/2023
  • Real-time music visualization technology 23/06/2023
  • Temperature measurement with NTC thermistor. 29/05/2023
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04 20/04/2023
  • TDA7294 part 2 10/04/2023
  • TDA7294 part 1 02/04/2023
  • CLUBBEST – reasoning on the visualization of music. 23/03/2023
  • Altium Designer my setup system and project structure V23.3 08/03/2023
  • Altium Designer first project 01/03/2023
  • Kitchen timer with contactless gesture control 08/02/2023
  • Altium Designer my setup system and project structure 01/02/2023
  • Arduino LCD + STONE STVI056WT-01 + Strain gauge 17/04/2021
  • NeoPixel LED and PIC24 14/04/2021
  • MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC) 25/01/2021
  • Простой оптический сенсор приближения 09/01/2021
  • NS108-5050-16bit от Newstar 21/10/2020
  • JDY-62A Audio bluetooth module 18/09/2020
  • Audio-bluetooth modules BK8000L (noname) 15/09/2020
  • Audio-bluetooth modules F-6188 (BK8000L) 07/09/2020
  • Acquaintance with audio-bluetooth modules F-6888 (BK3254). 03/09/2020
  • My libraries for Altium Designer 30/05/2020
  • MCC – K42 – настройка модуля DMA 30/03/2020
  • VU Meter Tower ART – part 2 14/02/2020
  • MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC) 12/01/2020
  • Система AT команд версии V2.0 для ESP8266 и ESP32 22/10/2019
  • PIC18 – модуль DMA 05/06/2019
  • AD9833 – Programmable Waveform Generator – part two 07/04/2019
  • BMP280 – температура и атмосферное давление – учебный проект 26/03/2019
  • Altium Designer – подготовка документации для производства и сборки печатных плат 16/03/2019
  • AD9833 – Programmable Waveform Generator 20/02/2019
  • NeoPixel LED и PIC18 03/02/2019
  • MPLAB® Harmony – или как это просто! Часть 4. 20/01/2019
  • MPLAB® Harmony – или как это просто! Часть 3. 04/01/2019
  • MPLAB® Harmony – или как это просто! Часть 2. 20/12/2018
  • MPLAB® Harmony – или как это просто! Часть 1. 17/12/2018
  • ESP32-первое знакомство 14/12/2018
  • MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналов 25/10/2018
  • Ссылки на интересные источники 20/10/2018
  • MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ 15/10/2018
  • Moving average – скользящее среднее 12/10/2018
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204 03/10/2018
  • HVLD модуль на примере PIC24FJ128GA204 24/09/2018
  • ESP8266 применение в проектах 21/09/2018
  • ch-светомузыка и AK4113 15/09/2018
  • ESP8266 процедура получение данных даты и времени от серверов точного времени. 18/04/2018
  • WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1) 15/04/2018
  • PIC18 – System Arbitration 05/04/2018
  • PIC18F25K42 – v. A001 – выявленные баги. 31/03/2018
  • CCP – модуль в режиме Compare на примере PIC18 28/03/2018
  • LED драйвер TM1639 25/03/2018
  • I2C MODULE – PIC18F25K42 Device ID Revision = A001 15/03/2018
  • Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3 14/01/2018
  • TM1650 драйвер LED семисегментного индикатора 26/11/2017
  • Униполярный шаговый двигатель – часть 2 17/11/2017
  • Униполярный шаговый двигатель 14/11/2017
  • Просто о структурах и объединениях в Си 09/11/2017
  • REFERENCE CLOCK OUTPUT MODULE 29/10/2017
  • Тестирование модуля генератора 27/10/2017
  • Analog-to-Digital Converter with Computation Technical Brief 29/09/2017
  • Система отопления на солнечных коллекторах от Дмитрия (rv3dpi) 03/09/2017
  • Altium Designer – создание рисунков на печатной плате 05/08/2017
  • DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер 07/06/2017
  • MPLAB® Code Configurator and Encoder 22/04/2017
  • Проект с использованием MCC часть 16 16/04/2017
  • Проект с использованием MCC часть 15 15/04/2017
  • Проект с использованием MCC часть 14 19/03/2017
  • Проект с использованием MCC часть 13 12/03/2017
  • Проект с использованием MCC часть 12-2 26/02/2017
  • MPLAB X IDE – управление проектами 26/02/2017
  • Просто о внешних переменных 04/02/2017
  • Проект с использованием MCC часть 12-1 31/01/2017
  • Проект с использованием MCC часть 11 25/01/2017
  • Проект с использованием MCC часть 10 23/01/2017
  • Проект с использованием MCC часть 09 14/01/2017
  • Проект с использованием MCC часть 08 13/01/2017
  • Проект с использованием MCC часть 07 12/01/2017
  • Проект с использованием MCC часть 06 11/01/2017
  • Проект с использованием MCC часть 05 10/01/2017

Случайные записи

  • MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМMCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ
  • Регулятор влажности ch-3800Регулятор влажности ch-3800
  • WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PROAltium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PRO
  • BMP280 – температура и атмосферное давление – учебный проектBMP280 – температура и атмосферное давление – учебный проект
  • Цифровой тахометр для автомобиля CH-С3300Цифровой тахометр для автомобиля CH-С3300
  • Ссылки на интересные источникиСсылки на интересные источники
  • Audio-bluetooth modules F-6188 (BK8000L)Audio-bluetooth modules F-6188 (BK8000L)
  • Акриловый корпус для платы ch-4000Акриловый корпус для платы ch-4000
  • Altium Designer my setup system and project structureAltium Designer my setup system and project structure
  • Altium Designer my setup system and project structure V23.3Altium Designer my setup system and project structure V23.3
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
  • Емкостной сенсорЕмкостной сенсор
  • My libraries for Altium DesignerMy libraries for Altium Designer
  • PIC18F25K42 – v. A001 – выявленные баги.PIC18F25K42 – v. A001 – выявленные баги.
  • Оптосимистор и его применениеОптосимистор и его применение
  • Проект с использованием MCC часть 12-2Проект с использованием MCC часть 12-2
  • Просто о структурах и объединениях в СиПросто о структурах и объединениях в Си
  • Бегущие огни (ch-bo-36)Бегущие огни (ch-bo-36)
  • Простой оптический сенсор приближенияПростой оптический сенсор приближения
  • Стабилизатор тока на SN3350, часть 2Стабилизатор тока на SN3350, часть 2
  • Проект с использованием MCC часть 12-1Проект с использованием MCC часть 12-1
  • DS18B20 – удаленный контроль температурыDS18B20 – удаленный контроль температуры
  • CLUBBEST – reasoning on the visualization of music.CLUBBEST – reasoning on the visualization of music.
  • MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)
  • Проект с использованием MCC часть 01Проект с использованием MCC часть 01
  • NS108-5050-16bit от NewstarNS108-5050-16bit от Newstar
  • MPLAB® Code Configurator and EncoderMPLAB® Code Configurator and Encoder
  • MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналовMCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналов
  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
  • APA102 – светодиоды со встроенным драйвером и SPI интерфейсомAPA102 – светодиоды со встроенным драйвером и SPI интерфейсом
  • MAX7219/21 и 8х8 LED дисплеиMAX7219/21 и 8х8 LED дисплеи
  • Интерактивные LedИнтерактивные Led
  • ch-4050 – дифференциальный терморегуляторch-4050 – дифференциальный терморегулятор
  • Часы + Календарь + Термометр + …Часы + Календарь + Термометр + …
  • MPLAB® X IDE
  • MPLAB® XC8 Compiler
  • MPLAB® XC16 Compiler
  • MPLAB® XC32 Compiler
  • Файлы Библиотек
  • Проекты
  • Проект ИЛЛИССИ
  • Статьи
  • Изучаем PIC24
  • Ch-Светомузыка
  • Примеры построения кодов программ C, ассемблер
  • Системный софт – Bootloader для PIC-контроллеров, PIC16, PIC18
  • Тех. документация
  • Музыка в моей жизни
  • Мои рисунки
  • Афоризмы для Embedded Programmer
  • С чего начать?
  • Установка MPLAB®X и компилятора Си
  • Создание проекта
  • Первый проект для самых маленьких
  • Facebook
  • Instagram
  • LinkedIn
  • Pinterest
  • Магазин
  • Skype
  • Telegram
  • X.com
  • WhatsApp
  • YouTube
  • RSS
  • E-mail

Copyright © Catcatcat 2012-2025. All rights reserved.
Copying is allowed only with an active link to the copyright holder.

e-mail: catcatcat.electronics@gmail.com

Последние файлы

Значок
Customs codes for export (xlsx) 1943 раз(а) скачали 121 КБ
Скачать
Значок
Demo Board PIC18F47Q84 soft 1568 раз(а) скачали 6 МБ
Скачать
Значок
Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PRO 2254 раз(а) скачали 2 КБ
Скачать
Значок
Development board based on MCU PIC18F47Q84 - schematic 1776 раз(а) скачали 5 МБ
Скачать
Значок
Altium Designer my Libraries, Project templates, System settings by Catcatcat. V23.9 2181 раз(а) скачали 2 КБ
Скачать
Значок
CLUBBEST 50 Light - BOM sheet in Microsoft format Excel 1754 раз(а) скачали 8 КБ
Скачать
Значок
CLUBBEST 50 Light - Pick Place sheet in Microsoft format Excel 2006 раз(а) скачали 16 КБ
Скачать
Значок
CLUBBEST 50 Light - Scheme in PDF format 1805 раз(а) скачали 9.30 MB
Скачать
Значок
CLUBBEST 50 Light - Description for manual assembly of the project 2291 раз(а) скачали 11.00 MB
Скачать
Значок
CLUBBEST 50 Light - Firmware 2027 раз(а) скачали 22 КБ
Скачать
Значок
CLUBBEST 50 Light - Archive with a complete set of files for PCB manufacturing 1547 раз(а) скачали 940 КБ
Скачать
Значок
Construction CLUBBEST M68 MASTER 1969 раз(а) скачали 2 МБ
Скачать
Значок
Calculation of the ADC table by Catcatcat V3.0 1579 раз(а) скачали 103 КБ
Скачать
Значок
NTC constant calculater by Catcatcat V3.0 1566 раз(а) скачали 194 КБ
Скачать
Значок
NTC_sensor - Temperature measurement library 2027 раз(а) скачали 5 КБ
Скачать
Значок
Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04 update_link 3207 раз(а) скачали 2 КБ
Скачать
Значок
TDA7294 part 2 2804 раз(а) скачали 62.65 MB
Скачать
Значок
TDA7294 part 1 2640 раз(а) скачали 37.92 MB
Скачать
Значок
Altium Designer my setup system and project structure V23.3 2922 раз(а) скачали 2 КБ
Скачать
Значок
Altium Designer my Libraries, Project templates, System settings by Catcatcat V23_02_13 3212 раз(а) скачали 2 КБ
Скачать
Вернуться наверх
Translate »