Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 30

Эффективность чтения датчиков SPI через DMA в режиме реального времени

20.04.2016, 08:34. Показов 1685. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто знает, насколько эффективно использование разных датчиков интерфейса SPI, для отслеживания показателей в режиме реального времени? С обычной передачей данных все понятно, но датчики, которые вызывают события после каждого переданного байта для обработки в реальном времени, дает ли какое-нибудь преимущество DMA ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2016, 08:34
Ответы с готовыми решениями:

Просмотр логов сети через роутер в режиме реального времени через Putty
Драсть ребят. Такая тема, мне нужно реализовать систему просмотра логов того какие закачки и хосты юзаются пользователями вайфай роутера и...

Оценка времени выполнения скрипта в режиме реального времени
Здравствуйте, уважаемые форумчане! Хотел задать следующий вопрос. Можно ли как-то оценивать время выполнения скрипта в режиме реального...

Работа в режиме реального времени
Возможно создать не там, ибо вопрос практически не касается тему Qt, но разработка именно в нем. Опыт программирования не сильный, поэтому...

6
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
20.04.2016, 09:25
...весьма размытое описание задачи. Если вам надо написать реферат - то надо все равно привязываться к конкретным примерам.
Цитата Сообщение от PeterBr Посмотреть сообщение
датчики, которые вызывают события после каждого переданного байта для обработки в реальном времени, дает ли какое-нибудь преимущество DMA ?
не совсем ясно, что вы имеете ввиду. Датчик, подключенный по SPI не "вызывает" прерывание после переданного байта - его вызывает интерфейс SPI, независимо от того, что на нем висит.

Цитата Сообщение от PeterBr Посмотреть сообщение
дает ли какое-нибудь преимущество DMA ?
Конечно дает. Но по большому счету все зависит от соотношения "прямых участков" вычитки данных и команд управления. Иногда SPI дает очень хорошие результаты, но требует больше памяти. Но иногда он просто не нужен, если объема обмениваемых данных очень мало.
Многое также зависит от "прямоты рук" программиста. По крайней мере в 90% процентах случаев я встречал код, использующий DMA в режиме "задержки", то есть программа просто ожидает завершения обмена в цикле. А это естественно мало что дает в плане проивзодительности. То есть да, интерфейс работает быстро, но МК все равно ждет относительно много времени завершения передачи или приема данных.
2
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 30
20.04.2016, 13:55  [ТС]
Вот код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
void SysTick_Handler(void)
{
GPIOE_BSRR|=0x80000;
DMA2_S3CR|=0x1;
}
 
void USORT_TX(uint32_t y)
{
USORT2_DR=y-127;// центрируем график с осей по центру экрана
while (!(USORT2_SR&0x80)==0x80){}
}
 
void SystemInit(void)
{
}
 
uint8_t x[] ={0xA9,0};//Адрес регистров осей акселерометра которые будут считываться.
uint8_t y[2];
uint8_t z;
uint32_t i;
 
void USORT_ini(void)
{
RCC_GPIO|=0x1;
GPIOA_MODER|=0xA0; 
GPIOA_AFRL|=0x7700; 
RCC_UART2|=0x20000; 
USORT2_BRR=0x683;
USORT2_CR3|=0x80;
USORT2_CR1|=0x8;
NVIC_ISER1|=0x40;
USORT2_CR1|=0x2000;
}
 
void SPI_ini(void)
{ 
RCC_GPIO|=0x19;
 
GPIOA_MODER|=0xA800;
GPIOA_AFRL|=0x55500000; 
 
GPIOE_MODER|=0x40;
GPIOE_PUPDR|=0x40;
GPIOE_BSRR|=0x8;
 
RCC_SPI1|=0x1000;
 
SPI1_CR1 |= 0x0002 |0x0001; 
SPI1_CR1 |=0x0300|0x0028;
SPI1_CR1 |=0x04;
SPI1_CRCPR=7;
SPI1_CR2|=0x3;
SPI1_CR1|=0x0040;
 
GPIOE_BSRR=0x80000;
SPI1_DR=0x20;
while (!(SPI1_SR&0x1)==0x1){};
z=SPI1_DR;
SPI1_DR=0x97; 
while (!(SPI1_SR&0x1)==0x01){}
z=SPI1_DR;  
GPIOE_BSRR=0x8; 
}
 
void DMA_ini(void)
{ 
DMA1_RCC|=0x200000;
DMA2_RCC|=0x400000;
//.....................TX
DMA2_S3CR= 0x06000000;//DMA_Channel_3;
DMA2_S3PAR=0x4001300C;//SPI->DR
DMA2_S3M0AR= (uint32_t)x;
DMA2_S3CR|= 0x40;//DMA_DIR_MemoryToPeripheral;
DMA2_S3NDTR=2;
DMA2_S3CR|=0x0400;
DMA2_S3CR|=0x10000;
//DMA2_S3CR|=0x8;
//DMA2_S3CR|=0x100;//DMA_CIRCULAR
DMA2_S3CR|=0x10;
 
NVIC_ISER1=0x8000000;
DMA2_S3CR|=0x10;
//....................RX
DMA2_S0CR= 0x06000000;//DMA_Channel_3;
DMA2_S0PAR=0x4001300C;//SPI->DR
DMA2_S0M0AR=(uint32_t)y;
DMA2_S0CR|= 0;//peripheralToMemory
DMA2_S0NDTR=2;
DMA2_S0CR|=0x400;
DMA2_S0CR|=0x10000;
//DMA2_S0CR|=0x100;
DMA2_S0CR|=0x10;
 
NVIC_ISER1=0x1000000;
DMA2_S0CR|=0x10;
} void DMA2_Stream0_IRQHandler(void)//...........SPI->RX
{ 
GPIOE_BSRR=0x8;
DMA2_LIFCR=0x20;
USORT_TX(y[1]);
}
 
void DMA2_Stream3_IRQHandler(void)//...........SPI->TX
{ 
GPIOE_BSRR=0x80000;
if((DMA2_LISR&0x8000000)==0x8000000)
{DMA2_LIFCR=0x8000000;
DMA2_S0CR|=0x1;}
}
void DMA1_Stream6_IRQHandler(void)
{ 
 
if((DMA_HISR&0x200000)==0x200000)
DMA_HIFCR=0x200000;
}
 
int main(void)
{
USORT_ini();
SPI_ini();
DMA_ini();
GPIOD_MODER|=0x55000000;
GPIOD_OTYPER|=0x55000000;
SysTic_RVR=0xFFF;
SysTic_CVR=0x0;
SysTic_CTRL_Status=0x10007;
while(1)
{
GPIOD_ODR=0xF000;
for(i=0;i<1000000;i++){};
GPIOD_ODR=0x0;
for(i=0;i<1000000;i++){};
}
}
сайта http://ivarious.com/index.php?... стем&id=52
Эффективно ли после каждого байта создавать прерывание на его обработку, или все-таки в таких делах DMA не эффективен?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
20.04.2016, 14:15
Цитата Сообщение от PeterBr Посмотреть сообщение
Эффективно ли после каждого байта создавать прерывание на его обработку, или все-таки в таких делах DMA не эффективен?
Я бы не стал ковыряться в подобном мусоре (это насчет исходного кода). Равно как и раскручивать рейтинг сайта подобным способом.
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
20.04.2016, 22:29
Цитата Сообщение от Voland_ Посмотреть сообщение
Датчик, подключенный по SPI не "вызывает" прерывание после переданного байта
датчик может выставить какую то ногу в 1 или 0, сигнализируя что данные готовы
а контроллер ловит этот сигнал, вызывает прерывания и считывает данные
по моему мнению здесь DMA нафиг не нужен
датчик может послать разное количество байт
вот например nrf24l01 может послать от одного до 6 байт, на какой размер будем DMA програмировать

Добавлено через 3 минуты
Цитата Сообщение от PeterBr Посмотреть сообщение
для отслеживания показателей в режиме реального времени
что ты понимаешь под "Реальным временем"
0
0 / 0 / 0
Регистрация: 15.04.2016
Сообщений: 30
21.04.2016, 04:06  [ТС]
В реальном времени - наблюдение за показателями. Эта тема поднималась на одном форуме easyelectronics под названием "DMA для SPI в коротких сессиях" , Но прочитав ту тему я пока так и не понял эффективно или нет.
Например бесплилотник который реагирует на "перекосы" в воздухе, он же должен чем быстрее отслеживать свое положение, следовательно - обрабатывать каждый принятый байт с осей x, y, z сразу. Анализировать данные придется всеровно - ядру, так как только он понимает что происходит и что делать. То есть - пришел байт (пусть будет через DMA) и должно как-никак происходить прерывание ро окончанию передачи (значит отвлекать ядро ).

В есть еще элементы FIFO в датчиках , которые не отправляют данные пока не наберется 4-8 байт, их передавать методом DMA вроде уже эффективнее. Но получается так теряется скорость считывания осей.

Добавлено через 15 минут
Незнаю понятно ли я выражаюсь, но как мне кажется - напрашивается мысль - если данные не анализируются ядром, а просто откуда то и куда то пишутся - DMA эффективен даже после передачи по одному байту. А если данные анализируются ядром - DMA вроде как не эффективен, так как ядро получается свободно только пока передается один байт, оно даже не успеет за это время сделать что то другое как тут-же произойдет прерывание по принятию нового байта которого нужно анализировать, и принять нужное решение что делать.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
21.04.2016, 07:07
Цитата Сообщение от PeterBr Посмотреть сообщение
В реальном времени - наблюдение за показателями.
Дилетантская точка зрения система реального времени-это система которая реагирует через гарантированное время после воздействия.
а время это может быть и одна миллисекунда и один час, но всегда одинаковое
поэтому Виндос и Люникс не системы реального времени,слишком много факторов влияющих на реакцию системы, а FreeRTOS система реального времени
Цитата Сообщение от PeterBr Посмотреть сообщение
Например бесплилотник который реагирует на "перекосы" в воздухе, он же должен чем быстрее отслеживать свое положение, следовательно - обрабатывать каждый принятый байт с осей x, y, z сразу.
все это рассмотрено давно уже в дисциплине под названием АСУ(Автоматические Системы Управления) в частности "системы с обратной связью", есть такая штука переходные процессы
сразу ничего не бывает, даже свет имеет конечную скорость распространения
Цитата Сообщение от PeterBr Посмотреть сообщение
В есть еще элементы FIFO в датчиках ,
"смешались в кучу кони, люди"(с) Лермонтов.
FIFO( First Input First Output)-Это способ хранения данных "Первый пришел первый ушел", другое название очередь, к датчикам никакого отношения не имеет
Цитата Сообщение от PeterBr Посмотреть сообщение
а просто откуда то и куда то пишутся - DMA эффективен даже после передачи по одному байту.
а зачем это нужно? первый принцип информатики -получение, обработка и передача данных, если нет обработки то все это нафиг не нужно, достаточно провод бросить

посему вопрос
Цитата Сообщение от PeterBr Посмотреть сообщение
насколько эффективно использование разных датчиков интерфейса SPI, для отслеживания показателей в режиме реального времени?
в отрыве от реальных задач, не имеет смысла
для управления паровым котлом, инерционность десятки минут, очень даже эффективный ширины канала SPI хватит, а для управления ядерной реакцией нет

посему сначала создается ТЗ, потом просчитывается математическая модель, чтобы система не "пошла в разнос"(самовозбуждение) время реакции, гистерезис, вид ОС( обратная связь) положительная, отрицательная
потом функциональная схема, потом принципиальная, и только потом программирование
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2016, 07:07
Помогаю со студенческими работами здесь

C# и excel в режиме реального времени
Здравствуйте, прошу помощи с задачей : Открыт ексель в нем ведется работа, при нажатии на кнопку на форме, данные из datagridview...

Выполнение jquery в режиме реального времени
Есть скрипт который определяет ширину и и сходя из этого подгоняет мин и макс. кол-во элементов в слайдере. Вот как выглядит JQUERY: ...

Не обрабатывается скрипт в режиме реального времени
Привет! У меня есть страничка http://hobbylife-market.ru/kabinet/korzina - если добавить туда товары и изменять количество, то стоимость...

Парсер логов в режиме реального времени
Доброго времени суток всем. нужны светлые идеи :) Возникла мысль замутить парсер логов в режиме реального времени, вот только как его...

Отображение данных в режиме реального времени
Есть такая небольшая программка, которая симулирует наклономер по двум осям. Просто отобразить значения в каждый момент времени в виде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru