реклама на сайте
подробности

 
 
> Передача данных из SPI в SPI, Подскажите как лучше
prussta
сообщение Mar 31 2015, 06:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 1-02-12
Из: Екатеринбург
Пользователь №: 70 003



Всем доброго времени суток! Подскажите, как лучше организовать систему. Система в целом выглядит так: Есть софт процессор NiosII - он выполняет основные задачи: отвечает на запросы пользователя, принимает какие-то данные, обрабатывает их, выдает ответы и прочее. Также есть два SPI: SPI1 - он принимает данные из вне как только вся система запустилась и SPI2 в который мне нужно эти данные (определенное количество) выплюнуть (этот SPI от Ethernet платки). Получается, что мне нужно постоянно гнать данные из SPI1 в SPI2. Причем, иногда мне нужно в этот поток данных добавлять еще байт своих данных. Как это можно организовать с минимальным участием проца? Чтобы он успевал делать свою основную работу и меньше отвлекался на эту передачу? Может есть какая-то переферия для таких задач? Подскажите куда посмотреть? Частота работа Niosa 100MГц, а данные на SPI1 приходят с частотой 24Мгц.
Пока у меня рисуется стандартный вариант: по прерыванию на прием по SPI1 я через DMA записываю поступившие данные в память, как только пришло необходимое кол-во байт, выставляю флаг. И в основном цикле программы по этому флагу отправляю эти данные в SPI2.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prussta
сообщение Apr 5 2015, 08:40
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 1-02-12
Из: Екатеринбург
Пользователь №: 70 003



Да, подобное и нужно)) контроллер этот как реализовать? написать на аппаратном языке?
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 6 2015, 08:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(prussta @ Apr 5 2015, 11:40) *
Да, подобное и нужно)) контроллер этот как реализовать? написать на аппаратном языке?


Для Вас это задача сложная потому, что вы не совсем разобрались с такими ресурсами как:
1. Система на кристалле (что такое и для чего она была рождена на свет)
2. FPGA - принцип реализации КЦУ и ПЦУ на базе ПЛИС. Не суть важно как вы будете реализовывать контроллер записи/чтения. Можно в схемотехническом редакторе нарисовать или же описать работу устройства используя языки программирования HDL.

________________________________________________________________________________
_____

И САМОЕ ГЛАВНОЕ!!!!!!!!!
Срочно нарисуйте структуру, того устройства который разрабатывайте. Укажите задачи которые решает процессор, а какие решает fpga.
Иначе Ваш монстр погибнет в зачатом состоянии. Разберитесь с принципом работы Вашего будущего устройства на функциональном уровне. И желательно бы знать особенности программирования на ПЛИС. Потому как (К БОЛЬШОМУ СОЖАЛЕНИЮ ВСЕГО СООБЩЕСТВА ПРОГРАММИСТОВ) программировать FPGA и программировать процессор вещи достаточно сильно разные.

________________________________________________________________________________
__

Вернемся к вашим вопросам.

Spi приёмники и передатчики, fifo также удобно реализовать на плис. А задача организации процесса записи в память или передатчик - это достаточно простая задача требующая конкретных вопросов.

_______________________________________________________________________________

Поэтому рекомендую реализовать FIFO, SPI_TX, SPI_RX по отдельности на базе FPGA. А блок (контроллер) обеспечивающий запись и чтение для сопряжения процессора, FIFO, SPI_TX, SPI_RX реализовывать имея конкретные сигналы и вопросы.


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
prussta
сообщение Apr 6 2015, 11:28
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 1-02-12
Из: Екатеринбург
Пользователь №: 70 003



Цитата(Dmitriyspb @ Apr 6 2015, 14:24) *
Для Вас это задача сложная потому, что вы не совсем разобрались с такими ресурсами как:
......

Dmitriyspb, да Вы правы, что-то разрабатывать на ПЛИС приходится впервые, поэтому много темных мест)) и спаисбо за советы!

Цитата(Dmitriyspb @ Apr 6 2015, 14:24) *
программировать FPGA и программировать процессор вещи достаточно сильно разные.

да, знаю, я только обзорно знакома с аппаратными языками, поэтому и возникают "новичковые" вопросы) программировать fpga сама не буду(если что). А здесь же хотелось получить альтернативные идеи по общей организации системы, потому что мои идеи не удались.







Я так понимаю, что без блока на fpga, организующего прием данных с SPI1 не обойтись, потому что если данные идут постоянно, то программа все время "висит" в обработчике прерывания по приему SPI1 и даже не выходит в основной цикл. ( Это я попробовала при помощи Niosа принимать) Хотя не совсем мне понятно почему так, ведь данные идут с частотой 30 Мгц, а процессор работает на 157МГц. Почему он не успевает выходить в основной цикл? В прерывании только считываю пришедшие данные. Неужели так много занимает это времени....хмм...
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 6 2015, 11:57
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(prussta @ Apr 6 2015, 14:28) *
Я так понимаю, что без блока на fpga, организующего прием данных с SPI1 не обойтись, потому что если данные идут постоянно, то программа все время "висит" в обработчике прерывания по приему SPI1 и даже не выходит в основной цикл. ( Это я попробовала при помощи Niosа принимать) Хотя не совсем мне понятно почему так, ведь данные идут с частотой 30 Мгц, а процессор работает на 157МГц. Почему он не успевает выходить в основной цикл? В прерывании только считываю пришедшие данные. Неужели так много занимает это времени....хмм...


Уважаемая Леди! При организации цифровой системы для обработки чего либо. У вас имеется рабочий цикл. Во время которого процессор (в вашем случае NIOS) прочитать данные -> обработать данные -> записать обработанные данные. И этот процесс я осмелюсь предположить синхронный.
Вам необходимо расписать задачи процессора на один рабочий цикл (на один дискрет).

Допустим если у вас за цикл 100 секунд (ОЧЕНЬ ОБРАЗНО ГОВОРЯ) процессор успевает выполнить 100 команд , то Вам необходимо распорядиться этим вычислительным ресурсом таким образом, чтобы успеть прочитать SPI, записать SPI, обработать данные и вернуться в основной цикл чтобы выполнить ряд основных задач.


Цитата(prussta @ Apr 6 2015, 14:28) *
Почему он не успевает выходить в основной цикл? В прерывании только считываю пришедшие данные. Неужели так много занимает это времени....хмм...


Вы наверняка работаете по прерываниям. И вообще стоит ввести такое понятие как приоритет прерываний. И возможно все встанет на свои места даже если все задачи загрузить на NIOS.




РАЗБЕРИТЕСЬ с собственными задачами на системном уровне. Не лезьте в глубь пока не разобрались на системном уровне.

Цитата(Dmitriyspb @ Apr 6 2015, 14:55) *
Уважаемая Леди! При организации цифровой системы для обработки чего либо. У вас имеется рабочий цикл. Во время которого процессор (в вашем случае NIOS) прочитать данные -> обработать данные -> записать обработанные данные. И этот процесс я осмелюсь предположить синхронный.
Вам необходимо расписать задачи процессора на один рабочий цикл (на один дискрет).

Допустим если у вас за цикл 100 секунд (ОЧЕНЬ ОБРАЗНО ГОВОРЯ) процессор успевает выполнить 100 команд , то Вам необходимо распорядиться этим вычислительным ресурсом таким образом, чтобы успеть прочитать SPI, записать SPI, обработать данные и вернуться в основной цикл чтобы выполнить ряд основных задач.




Вы наверняка работаете по прерываниям. И вообще стоит ввести такое понятие как приоритет прерываний. И возможно все встанет на свои места даже если все задачи загрузить на NIOS.




РАЗБЕРИТЕСЬ с собственными задачами на системном уровне. Не лезьте в глубь пока не разобрались на системном уровне.


ИМХО


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
GAYVER
сообщение Apr 7 2015, 07:17
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 3-04-13
Пользователь №: 76 333



а ведь действительно, если работать по прерыванию от SPI1 - проблем не будет. SPI1 долго и нудно собирает данное, как только оно готово - выставляется прерывание, процессор его обрабатывает и вываливается дальше в основной цикл. процессору много времени на обработку не надо - чтение данного и его последующая запись. ожидать подтверждения окончания записи процессору не надо. вопрос в том чтобы организовать это прерывание от SPI
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- prussta   Передача данных из SPI в SPI   Mar 31 2015, 06:12
- - Dmitriyspb   Цитата(prussta @ Mar 31 2015, 09:12) Всем...   Mar 31 2015, 06:37
- - prussta   Цитата2) простенький блочек, который соберет в куч...   Mar 31 2015, 07:11
|- - Dmitriyspb   Цитата(prussta @ Mar 31 2015, 10:11) я пр...   Mar 31 2015, 07:19
|- - prussta   Цитата(Dmitriyspb @ Mar 31 2015, 13:19) М...   Mar 31 2015, 07:26
|- - Dmitriyspb   Цитата(prussta @ Mar 31 2015, 10:26) Так ...   Mar 31 2015, 07:46
|- - prussta   Ах, вот оно что! Спасибо, Дмитрий, за разъясне...   Mar 31 2015, 08:54
|- - Dmitriyspb   Цитата(prussta @ Mar 31 2015, 11:54) Я пр...   Mar 31 2015, 09:02
|- - prussta   Цитата(Dmitriyspb @ Mar 31 2015, 15:02) С...   Mar 31 2015, 09:40
- - prussta   ЦитатаУ вас есть допустим 2 FIFO. 1-ая (FIFO1) зап...   Apr 3 2015, 11:10
|- - GAYVER   Цитата(prussta @ Apr 3 2015, 14:10) Dmitr...   Apr 3 2015, 11:45
- - GAYVER   с фифошкой никогда плотно не работал, но на скорую...   Apr 6 2015, 07:49


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 20:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01425 секунд с 7
ELECTRONIX ©2004-2016