Цитата(alexeyv @ Dec 3 2013, 10:35)

1. Надо смотреть не загрузку проца, а загрузку шин
2. какой приоритет у DMA?
3. USB используют DMA ? два Endpoint однозначно используют и приоритет выше чем DMA-controller, а остальные Endpoint?
4. Сколько времени тратится на обработку каждого прерывания, включая USB, DMA и другой периферии?
5. Есть ли прерывания, которые обрабатываюся более 100 мкс? Проверить осциллом в режиме запоминания в течении длительного времени
6. Или может суммарно все прерывания могут перевалить за 100 мкс в какой-либо момент времени?
7. Отключи USB и проверь будет ли отпадывать прерывания без него
8. Где-то видал расчет загрузки шин дсп в зависимости от включенной периферии, но не могу найти
Я вполне могу допустить, что у меня прерывания могут "налезать" друг на друг. Но разве это или сбой по шине может привести к полному прекращению появления одного из прерывания и при этом ни по какому биту/флагу мы это не сможем определить?
А есть какой-нибудь флаг, который показывает что произошел сбой передачи по шине ? Случайно не BERR(Bus Error interrupt) для этого используется ?
Цитата(jcxz @ Dec 4 2013, 08:11)

Странно у вас как-то построено....
DMA обычно используется для уменьшения частоты прерываний. Для этого стараются увеличить размер блока.
У вас же вижу частота прерываний очень высокая (10кГц). Зачем так - пересылать всего по неск. байт?
И это при том, что у DSP вход/выход в ISR обычно требуют сохранения/восстановления большого контекста. Подозреваю что значительная часть из 60% загрузки у вас тратится именно на сохранения/восстановления контекста в ISR.
Возможна передача/прием коротких пакетов, на которые надо быстро реагировать. Но возможно действительно стоит увеличить размер блока немного пожертвовав скоростью реакции.
Большая часть загрузки у меня все-таки тратиться на обработку принятых пакетов ( фильтрация и т.п.). Без обработки пакетов загрузка cpu с учетом dsp/bios 10-15% .