Gar_Ri 0 29 ноября, 2013 Опубликовано 29 ноября, 2013 · Жалоба DMA канал постоянно пересылает данные на последовательный порт и в определенный момент перестают генерироваться прерывания по этому каналу. При этом сам канал продолжает передавать данные и прерывания с других DMA каналов работают в штатном режиме. Все биты разрешающие прерывания по данному каналу установлены ( INTM, IER0/1, DMACICR). Флаги статуса (SYNC, HALF, FRAME) расположенные в DMACSR имеют значение 1. В чем может быть причина пропадания прерывания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 2 декабря, 2013 Опубликовано 2 декабря, 2013 · Жалоба поподробнее о том сколько DMA,McBSP и др периферии и как конретно настроено....... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gar_Ri 0 2 декабря, 2013 Опубликовано 2 декабря, 2013 · Жалоба поподробнее о том сколько DMA,McBSP и др периферии и как конретно настроено....... Использую DSP/BIOS. Загрузка проца до 60 %. Активно работает USB + один McBSP (CLK до 12Мгц) и два DMA его обслуживает ( один на прием , другой на передачу). Управление передачей данных по McBSP происходит по прерываниям DMA (HALF, FRAME). Прерывания от DMA происходят примерно раз в 100 мкс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 3 декабря, 2013 Опубликовано 3 декабря, 2013 · Жалоба 1. Надо смотреть не загрузку проца, а загрузку шин 2. какой приоритет у DMA? 3. USB используют DMA ? два Endpoint однозначно используют и приоритет выше чем DMA-controller, а остальные Endpoint? 4. Сколько времени тратится на обработку каждого прерывания, включая USB, DMA и другой периферии? 5. Есть ли прерывания, которые обрабатываюся более 100 мкс? Проверить осциллом в режиме запоминания в течении длительного времени 6. Или может суммарно все прерывания могут перевалить за 100 мкс в какой-либо момент времени? 7. Отключи USB и проверь будет ли отпадывать прерывания без него 8. Где-то видал расчет загрузки шин дсп в зависимости от включенной периферии, но не могу найти Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 4 декабря, 2013 Опубликовано 4 декабря, 2013 · Жалоба Использую DSP/BIOS. Загрузка проца до 60 %. Активно работает USB + один McBSP (CLK до 12Мгц) и два DMA его обслуживает ( один на прием , другой на передачу). Управление передачей данных по McBSP происходит по прерываниям DMA (HALF, FRAME). Прерывания от DMA происходят примерно раз в 100 мкс. Странно у вас как-то построено.... DMA обычно используется для уменьшения частоты прерываний. Для этого стараются увеличить размер блока. У вас же вижу частота прерываний очень высокая (10кГц). Зачем так - пересылать всего по неск. байт? И это при том, что у DSP вход/выход в ISR обычно требуют сохранения/восстановления большого контекста. Подозреваю что значительная часть из 60% загрузки у вас тратится именно на сохранения/восстановления контекста в ISR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gar_Ri 0 4 декабря, 2013 Опубликовано 4 декабря, 2013 · Жалоба 1. Надо смотреть не загрузку проца, а загрузку шин 2. какой приоритет у DMA? 3. USB используют DMA ? два Endpoint однозначно используют и приоритет выше чем DMA-controller, а остальные Endpoint? 4. Сколько времени тратится на обработку каждого прерывания, включая USB, DMA и другой периферии? 5. Есть ли прерывания, которые обрабатываюся более 100 мкс? Проверить осциллом в режиме запоминания в течении длительного времени 6. Или может суммарно все прерывания могут перевалить за 100 мкс в какой-либо момент времени? 7. Отключи USB и проверь будет ли отпадывать прерывания без него 8. Где-то видал расчет загрузки шин дсп в зависимости от включенной периферии, но не могу найти Я вполне могу допустить, что у меня прерывания могут "налезать" друг на друг. Но разве это или сбой по шине может привести к полному прекращению появления одного из прерывания и при этом ни по какому биту/флагу мы это не сможем определить? А есть какой-нибудь флаг, который показывает что произошел сбой передачи по шине ? Случайно не BERR(Bus Error interrupt) для этого используется ? Странно у вас как-то построено.... DMA обычно используется для уменьшения частоты прерываний. Для этого стараются увеличить размер блока. У вас же вижу частота прерываний очень высокая (10кГц). Зачем так - пересылать всего по неск. байт? И это при том, что у DSP вход/выход в ISR обычно требуют сохранения/восстановления большого контекста. Подозреваю что значительная часть из 60% загрузки у вас тратится именно на сохранения/восстановления контекста в ISR. Возможна передача/прием коротких пакетов, на которые надо быстро реагировать. Но возможно действительно стоит увеличить размер блока немного пожертвовав скоростью реакции. Большая часть загрузки у меня все-таки тратиться на обработку принятых пакетов ( фильтрация и т.п.). Без обработки пакетов загрузка cpu с учетом dsp/bios 10-15% . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 4 декабря, 2013 Опубликовано 4 декабря, 2013 · Жалоба Случайно не BERR(Bus Error interrupt) для этого используется ? В том числе для этого и создано но для 5509А как-то мало описания в 5502 есть регистр Time-Out Control Register (TOCR) для этих целей, а в 5509А его не нашел зато в ДМА DMACICR/DMACSR есть биты TIMEOUTIE/TIMEOUT и DROPIE/DROP, которые можно проанализировать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gar_Ri 0 4 декабря, 2013 Опубликовано 4 декабря, 2013 · Жалоба В том числе для этого и создано но для 5509А как-то мало описания в 5502 есть регистр Time-Out Control Register (TOCR) для этих целей, а в 5509А его не нашел зато в ДМА DMACICR/DMACSR есть биты TIMEOUTIE/TIMEOUT и DROPIE/DROP, которые можно проанализировать Я тоже не особо много информации насчет BERR нашел, поэтому и появились сомнения насчет него. Но я проверял флаг BERR у меня он не выставляется при пропадание прерывания. TIMEOUTIE/TIMEOUT и DROPIE/DROP тоже проверял. Данные флаги не устанавливаются и прерывания по ним не срабатывают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 1 января, 2014 Опубликовано 1 января, 2014 · Жалоба Bus error возникает, когда происходит обращение к адресу в I/O space, которого нет физически, когда процессор обращается не с той шины не в ту область ОЗУ (например с шины BB/BAB во внешнее ОЗУ), ну и т.п., и к DMA прямого отношения не имеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться