Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите настроить SPORT
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
alexeika007
Ситуация такая: уже 2 дня бьюсь над тем, что бы организовать прием данных с ацп и дальнейшую обработку их процессором BlackFin537. Вроде прописал все настройки, написал прерывания, проверил кучу раз. С осциллографом пролазил CS и SCLK, все правильно приходит, а данных нет.... А если быть точнее, то процессор находится в прерывании постоянно и не отвечает на остальные команды.... состояние регистра SPORT1_STAT= 0045.
aaarrr
Цитата(alexeika007 @ Nov 15 2011, 23:42) *
данных нет.... состояние регистра SPORT1_STAT= 0045.

Что-то не сходится: как это их нет, если в статусе написано, что и FIFO заполнено и переполнение уже случилось? Чем вы их вычитываете - ядром или через DMA?
_pv
Цитата(alexeika007 @ Nov 16 2011, 02:42) *
А если быть точнее, то процессор находится в прерывании постоянно и не отвечает на остальные команды....

так может флаг прерывания сбрасывать надо? ну или там все данные вычитать чтобы сам сбросился
alexeika007
Цитата(aaarrr @ Nov 15 2011, 22:51) *
Что-то не сходится: как это их нет, если в статусе написано, что и FIFO заполнено и переполнение уже случилось? Чем вы их вычитываете - ядром или через DMA?

Считаю я их ядром. Да, я просто неправильно выразился, а если быть точным, то ошибся.

так может флаг прерывания сбрасывать надо? ну или там все данные вычитать чтобы сам сбросился

Цитата
так может флаг прерывания сбрасывать надо? ну или там все данные вычитать чтобы сам сбросился


Да, сегодня сделал немного по-другому. Просто после того как данные пришли, я обнулил регистр статуса.

Теперь другая проблема данные какие-то странные))) Не могли бы вы подсказать как еще можно сбросить флаг прерывания? И еще несколько просьб, никто не может дать ссылку на литературу о том как порт настроить. Ну т.е. мы задаем параметры СПРОТа и там мы указываем RCLKDIV и RFSDIV, как выбираются их параметры?
aaarrr
Цитата(alexeika007 @ Nov 16 2011, 19:52) *
Считаю я их ядром. Да, я просто неправильно выразился, а если быть точным, то ошибся.

Тогда прерывание должно сниматься после вычитывания FIFO:
Цитата
The SPORT RX interrupt is generated when RSPEN = 1 and the RX FIFO
has received words in it. When the core processor has read all the words in
the FIFO, the RX interrupt is cleared.


Цитата(alexeika007 @ Nov 16 2011, 19:52) *
Ну т.е. мы задаем параметры СПРОТа и там мы указываем RCLKDIV и RFSDIV, как выбираются их параметры?

Исходя из нужных частот SCLK и RFS. Все же описано HRM (Clock and Frame Sync Frequencies).
alexeika007
Цитата(aaarrr @ Nov 16 2011, 19:08) *
Тогда прерывание должно сниматься после вычитывания FIFO:



Исходя из нужных частот SCLK и RFS. Все же описано HRM (Clock and Frame Sync Frequencies).


Как это реализовать. В книжке я прочитал) Просто я только 2-ю неделю занимаюсь программированием(( Я вообще учился и работал раньше по другой специальности(
aaarrr
Реализовать что именно? Опишите свою задачу, чтобы не говорить об абстрактных вещах.
alexeika007
Задача считать данные с 14-ти разрядного АЦП (AD 7357) от Аналог Девайс через Sport1? вот текст

// настройка SPORT1
*pSPORT1_RCLKDIV= 99;
ssync();
*pSPORT1_RFSDIV = 1000;
ssync();
*pSPORT1_RCR2= 0x0d;
ssync();
*pSPORT1_RCR1= RCKFE | RFSR | IRCLK | IRFS | LRFS | RSPEN;


Вот прерывание:
EX_INTERRUPT_HANDLER(SPORT1_RX_ISR)
{
if (*pSPORT1_STAT & 1)
{
rxf = *pSPORT1_RX;
rxt = *pSPORT1_RX;
}

В данном случае происходит переполнение FiFO, сейчас вариант немного другой:

// настройка SPORT1
*pSPORT1_RCLKDIV= 14;
ssync();
*pSPORT1_RFSDIV =6;
ssync();
*pSPORT1_RCR2= 0x10 | RXSE;
ssync();
*pSPORT1_RCR1= RCKFE | RFSR | IRCLK | IRFS | RSPEN;

Правда точно щас не скажу значение *pSPORT1_RFSDIV, потому что подбирал.... А проект на работе(( И в прерывание добавил цикл, проверки ROVF|RUVF, если они есть, заново прописать настройки порта... Работает, но мне кажется, что что-то здесь не так...
aaarrr
Цитата(alexeika007 @ Nov 18 2011, 17:41) *
Вот прерывание:
EX_INTERRUPT_HANDLER(SPORT1_RX_ISR)
{
if (*pSPORT1_STAT & 1)

Здесь лучше не if, а while.

Цитата(alexeika007 @ Nov 18 2011, 17:41) *
Работает, но мне кажется, что что-то здесь не так...

В прерывании выгребать данные как-то не комильфо. Используйте DMA.
alexeika007
Цитата(aaarrr @ Nov 18 2011, 16:45) *
В прерывании выгребать данные как-то не комильфо. Используйте DMA.


Неа, условие такое считывать без DMA
alexeika007
Опять вернулся к SPORT, объясните, пожалуйста, как выбираются
*pSPORT1_RCLKDIV= 14;
*pSPORT1_RFSDIV =6;
Только не надо приводить ссылок из книг. Формула у меня есть, но что туда подставлять?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.