alexeika007 0 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба Ситуация такая: уже 2 дня бьюсь над тем, что бы организовать прием данных с ацп и дальнейшую обработку их процессором BlackFin537. Вроде прописал все настройки, написал прерывания, проверил кучу раз. С осциллографом пролазил CS и SCLK, все правильно приходит, а данных нет.... А если быть точнее, то процессор находится в прерывании постоянно и не отвечает на остальные команды.... состояние регистра SPORT1_STAT= 0045. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба данных нет.... состояние регистра SPORT1_STAT= 0045. Что-то не сходится: как это их нет, если в статусе написано, что и FIFO заполнено и переполнение уже случилось? Чем вы их вычитываете - ядром или через DMA? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 54 15 ноября, 2011 Опубликовано 15 ноября, 2011 · Жалоба А если быть точнее, то процессор находится в прерывании постоянно и не отвечает на остальные команды.... так может флаг прерывания сбрасывать надо? ну или там все данные вычитать чтобы сам сбросился Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeika007 0 16 ноября, 2011 Опубликовано 16 ноября, 2011 · Жалоба Что-то не сходится: как это их нет, если в статусе написано, что и FIFO заполнено и переполнение уже случилось? Чем вы их вычитываете - ядром или через DMA? Считаю я их ядром. Да, я просто неправильно выразился, а если быть точным, то ошибся. так может флаг прерывания сбрасывать надо? ну или там все данные вычитать чтобы сам сбросился так может флаг прерывания сбрасывать надо? ну или там все данные вычитать чтобы сам сбросился Да, сегодня сделал немного по-другому. Просто после того как данные пришли, я обнулил регистр статуса. Теперь другая проблема данные какие-то странные))) Не могли бы вы подсказать как еще можно сбросить флаг прерывания? И еще несколько просьб, никто не может дать ссылку на литературу о том как порт настроить. Ну т.е. мы задаем параметры СПРОТа и там мы указываем RCLKDIV и RFSDIV, как выбираются их параметры? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 16 ноября, 2011 Опубликовано 16 ноября, 2011 · Жалоба Считаю я их ядром. Да, я просто неправильно выразился, а если быть точным, то ошибся. Тогда прерывание должно сниматься после вычитывания 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. Ну т.е. мы задаем параметры СПРОТа и там мы указываем RCLKDIV и RFSDIV, как выбираются их параметры? Исходя из нужных частот SCLK и RFS. Все же описано HRM (Clock and Frame Sync Frequencies). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeika007 0 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Тогда прерывание должно сниматься после вычитывания FIFO: Исходя из нужных частот SCLK и RFS. Все же описано HRM (Clock and Frame Sync Frequencies). Как это реализовать. В книжке я прочитал) Просто я только 2-ю неделю занимаюсь программированием(( Я вообще учился и работал раньше по другой специальности( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Реализовать что именно? Опишите свою задачу, чтобы не говорить об абстрактных вещах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeika007 0 18 ноября, 2011 Опубликовано 18 ноября, 2011 · Жалоба Задача считать данные с 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 69 18 ноября, 2011 Опубликовано 18 ноября, 2011 · Жалоба Вот прерывание: EX_INTERRUPT_HANDLER(SPORT1_RX_ISR) { if (*pSPORT1_STAT & 1) Здесь лучше не if, а while. Работает, но мне кажется, что что-то здесь не так... В прерывании выгребать данные как-то не комильфо. Используйте DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeika007 0 18 ноября, 2011 Опубликовано 18 ноября, 2011 · Жалоба В прерывании выгребать данные как-то не комильфо. Используйте DMA. Неа, условие такое считывать без DMA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeika007 0 2 декабря, 2011 Опубликовано 2 декабря, 2011 · Жалоба Опять вернулся к SPORT, объясните, пожалуйста, как выбираются *pSPORT1_RCLKDIV= 14; *pSPORT1_RFSDIV =6; Только не надо приводить ссылок из книг. Формула у меня есть, но что туда подставлять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться