Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
61 / 186 / 31
Регистрация: 14.02.2013
Сообщений: 1,695

Подскажите можно ли использовать USART и SPI интерфейсы одновременно?

19.03.2013, 20:24. Показов 3773. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
скажем так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
short k=0,g=0;
main()
{
функция инициализации USORT;
функция инициализации SPI;
while(1)
{
if(функция определения принятых данных USORT)
{
k=функция принимает данные USORT
}
if(функция определения принятых данных SPI)
{
g=функция принимает данные SPI
}
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2013, 20:24
Ответы с готовыми решениями:

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

USART в режиме SPI
Делал всё (почти) по даташиту. Функция обмена данными: unsigned char SendAM(unsigned char data) { while(!(UCSR2A &...

PIC16F877. SPI и USART
unsigned short take=0, buffer=0,receive=11,l=0,lll,k=0,j=19; unsigned long aaa={ ...

13
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
19.03.2013, 21:01
...тренироваться на CVAVR пробовали? Если нет, попробуйте генератор шаблонов.
0
61 / 186 / 31
Регистрация: 14.02.2013
Сообщений: 1,695
19.03.2013, 21:16  [ТС]
Я в proteus схемы моделирую а прошивку на MicroC
0
19.03.2013, 21:30

Не по теме:

...вот и освоите новый инструмент.

0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
20.03.2013, 12:47
Цитата Сообщение от raxp Посмотреть сообщение
тренироваться на CVAVR
TC же не указал платформу. Может он pic'ах хочет?

VladimirU, можно, конечно, использовать SPI и USORT. Другое дело, как это будет работать без прерываний... Ведь пока вы парсите пакет, скажем по SPI, по USORT может прийти два байта, и один из них потеряется. Обычно чтобы такого не было, густо используются прерывания от периферии.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
20.03.2013, 13:42
...не указал платформу, это его проблемы ...примеры реализаций никто не мешает подсмотреть ...да, с прерываниями надежней.
0
487 / 333 / 33
Регистрация: 15.08.2011
Сообщений: 1,078
20.03.2013, 21:41
Цитата Сообщение от Voland_ Посмотреть сообщение
VladimirU, можно, конечно, использовать SPI и USORT. Другое дело, как это будет работать без прерываний... Ведь пока вы парсите пакет, скажем по SPI, по USORT может прийти два байта, и один из них потеряется.
Да нет, с этим там все нормально. в цикле опрос и UART и SPI сразу. Пока опрашивается один, по другому сразу 2 байта прийти не успеют.
С прерываниями в этом отношении хуже. На вызов прерывания, обработку, возврат, сохранение на стеке много больше времени уходит чем на поллинг. Прерывания нужны для другого - чтоб не висеть в цикле опроса, а заниматься в это время полезной работой.
0
61 / 186 / 31
Регистрация: 14.02.2013
Сообщений: 1,695
20.03.2013, 21:48  [ТС]
Цитата Сообщение от Voland_ Посмотреть сообщение
TC же не указал платформу. Может он pic'ах хочет?

VladimirU, можно, конечно, использовать SPI и USORT. Другое дело, как это будет работать без прерываний... Ведь пока вы парсите пакет, скажем по SPI, по USORT может прийти два байта, и один из них потеряется. Обычно чтобы такого не было, густо используются прерывания от периферии.
прерывания для чего? что бы устройства работали по очереди?
Просто я на С++ В программе mikroC и в ней функции для работы с USORT и SPI вот они и не могут работать в месте. Конфликт какой то происходит.
Я отдельно по битно сконфигурировал и всё заработало.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
20.03.2013, 21:53
paskal,
1) максимальная частота SPI в AVR - fcpu / 2 (по крайней мере в режиме мастера). То есть один бит за два такта процессора. Каждый байт - всего-то 16 тактов. Так что за время обработки возможного пакета из UART вполне реально прозевать. .
2) Алгоритм хорош сам по себе для простейших задач или для не загруженных задач. А-ля забрал по UART - отдал по SPI - примерно так работают многие программаторы. Но в общем случае это неграмотно.
3) Вызов/возврат прерывания - 6 тактов (если правильно помню, давно не смотрел). Так что 12тактов, это далеко не так много, как кажется.
0
487 / 333 / 33
Регистрация: 15.08.2011
Сообщений: 1,078
20.03.2013, 22:26
Цитата Сообщение от Voland_ Посмотреть сообщение
paskal,
2) Алгоритм хорош сам по себе для простейших задач или для не загруженных задач. А-ля забрал по UART - отдал по SPI - примерно так работают многие программаторы. Но в общем случае это неграмотно.
Не неграмотно, а нерационально, потому что процессор висит на обработке порта. Но в некоторых частных случаях этого хватит. И для начинающего чтоб попробовать сгодится.
Я и сам больше люблю прерывания, но когда то начинал с поллинга как более простого варианта.
Цитата Сообщение от Voland_ Посмотреть сообщение
3) Вызов/возврат прерывания - 6 тактов (если правильно помню, давно не смотрел). Так что 12тактов, это далеко не так много, как кажется.
Там еще команды push/pop должны быть. Потому что при обработке прерывания вы какие то регистры обязательно задействуете. А если еще компилятор в обработчике прерывания автоматом сохранит весь контекст регистров...
Короче 12 тактами вы никак не обойдетесь. И поллинг однозначно быстрее прерывания.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
20.03.2013, 22:42
Цитата Сообщение от paskal Посмотреть сообщение
Там еще команды push/pop должны быть.
не хотите "попы" - пишите на АСМе, никто ж его не отменял.
Цитата Сообщение от paskal Посмотреть сообщение
И поллинг однозначно быстрее прерывания.
Согласен. И поддерживаю. Но в мало-мальски развитой задаче вы, помимо SPI и UART, захотите еще что-то делать. Соответственно, понадобятся потоки, которые обязаны выполняться - это как раз и есть сбор данных от SPI и UART. Вот тогда и понадобится переделка софта с "польного" варианта в вариант с прерываниями, буферами и т.д. Двойная работа. Для начала конечно понятнее и проще первый вариант.
0
61 / 186 / 31
Регистрация: 14.02.2013
Сообщений: 1,695
22.03.2013, 23:04  [ТС]
Цитата Сообщение от Voland_ Посмотреть сообщение
TC же не указал платформу. Может он pic'ах хочет?

VladimirU, можно, конечно, использовать SPI и USORT. Другое дело, как это будет работать без прерываний... Ведь пока вы парсите пакет, скажем по SPI, по USORT может прийти два байта, и один из них потеряется. Обычно чтобы такого не было, густо используются прерывания от периферии.
Да можно проворонить байты.
Для того что бы доставка была гарантированная можно написать простой протокол обмена данными.
Что мне придется сделать скоро.
А прерывание я не особо понимаю. Допустим мне надо по переполнению таймера выполнить прерывание
и в прерывание выполнить функцию которая будет обращаться к глобальной переменной. Всё равно с начало будет выполнено функция void interrupt() а тока потом после её завершения будет продолжаться выполнение в main().
Нельзя же одновременно обращаться к памяти данных из двух разных функций?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
23.03.2013, 01:21
VladimirU, ньюанс в том, что при обращении к переменной (в общем случае) ее обработка может осуществляться в несколько команд (ну, например 32х, 64-битные переменные и др.). И прерывание может произойти когда ему угодно, даже посередине этой связанной операции. Тогда, если будет обращение к этой переменной из прерывания, может наступить нехорошая ситуация с "недосчитанными данными".
В Сях предусмотрено объявление таких переменных - volatile. Тогда эти данные будут обрабатываться корректно.
По поводу прерываний - тут все зависит от платформы, которую вы применяете, как прерывания вызываются, маскируются и какие у них приоритеты. Читайте ДШ на свой чип (обычно он отражает всю платформу), и будет яснее. Что смогу - расскажу.
0
61 / 186 / 31
Регистрация: 14.02.2013
Сообщений: 1,695
23.03.2013, 13:41  [ТС]
Вот так допустим будет корректно? PIC16F877
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
volatile unsigned short k=0;
unsigned short l=0;;
main()
{
INTCON=0XC0; //разрешает глобальные прерывания и прерывание от переферии
PIE1.SSPIE=1; //включает прерывание от SSP
SSPCON=0X25; //включает работу SSP
SSPSTAT-0X00; //конфигурирует работу SSP
Usart_Init(2400); //разреает работу USORT
TRISC=0X9F; //конфигурация портов для SSP
 
while(1)
{
if (Usart_Data_Ready())   //если данные пришли то 1  USORT
{
l=Usart_Read();   //принемаем данные USORT
}}}
 
void interrupt() //Функция прирывания от модуля SSP
{
if(SSPSTAT.BF)   //если данные пришли то 1 SSP
{
k=SSPBUF;      //принемаем данные
SSPSTAT.BF=0;
PIR1.SSPIF=0;  //сброс флага прерываие от SSP
}}
не компилировал.
Правда не могу найти при каких условиях происходит прерывание от SSP когда данные приняты или буфер полон?

Добавлено через 12 минут
И если использую прерывание то проверку принятых данных можно не использовать SSPSTAT.BF?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2013, 13:41
Помогаю со студенческими работами здесь

"параллельная" работа SPI и USART
Доброе время суток !!! в МК есть два массива. В первый массив записываются данные из USORT, в этоже время из второго массива данные...

USART в роли SPI [Решено]
В документации на некоторые контроллеры AVR указано, что модуль USORT может работать как ведущий шины SPI и даже приведен пример кода, это...

Можно ли одновременно использовать MSSQL и MySQL?
или необходимо каждый раз править файл конфигурации у апача для подключения модуля mssql??????? в phpinfo пишет что используется MS, а...

Можно ли использовать self и $this в одной функции одновременно?
class A { private static $a; public $b=1; public function arr($a) { self::$a=$a; return self::$a; } }

Подскажите как access запрос использовать в C# (чтобы запросом можно было и использовать в c#)
SELECT Товары.наименование_товара, Товары.модель_товара, Товары.количество, Sum(Nz(.)) AS Расход, .- AS Остаток FROM Товары INNER JOIN...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru