Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 24.12.2018, 17:58   #126
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 34
Сообщений: 59
Вес репутации: 165/14
DimaK has a spectacular aura aboutDimaK has a spectacular aura about
По умолчанию Re: PIC32MZ

Уважаемые коллеги, я сейчас вот тоже пытаюсь принимать данные по UART через DMA. И тоже вот нифига не получается (контроллер - PIC32MZ2048EFH144). Хард исправен - пробую принимать просто по интеррапту, задействуя ядро - все работает замечательно! ДМА настроил на запуск от флага Rx UARTa (т.е. по приему). Я не понял, вся проблема в том, что буфер, в который ДМА кидает данные принятые UARTом должен находится в области KSEG1?
DimaK вне форума   Ответить с цитированием
Старый 24.12.2018, 18:24   #127
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,166
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC32MZ

DimaK
UARTом должен находится в области KSEG1? - насколько я помню, в pic32m нет IOMMU.

буфер приема для dma должен содержать физические адреса и не имеет отношения к виртуальным адресам ядра.
besogon вне форума   Ответить с цитированием
Старый 24.12.2018, 18:30   #128
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,166
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC32MZ

посмотрел документацию по pic32mz ec.
судя по всему
Код:
#define KVA_TO_PA(v) ((v) & 0x1fffffff)
сможет преобразовать виртуальный адрес из kseg0, kseg1 в физический.
besogon вне форума   Ответить с цитированием
Старый 24.12.2018, 18:55   #129
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 34
Сообщений: 59
Вес репутации: 165/14
DimaK has a spectacular aura aboutDimaK has a spectacular aura about
По умолчанию Re: PIC32MZ

Да, там тоже виртуальная память делится на KSEGx. Да, естественно там преобразуется из виртуальной в физическую функцией VirtToPhis (да, это микрочиповское творение, но многократно проверено).
DimaK вне форума   Ответить с цитированием
Старый 24.12.2018, 18:57   #130
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 34
Сообщений: 59
Вес репутации: 165/14
DimaK has a spectacular aura aboutDimaK has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
УРАААААААААА!!!!! Все заработало!!!

Всего одна пропущенная строчка в даташите и вот результат - головной боли на неделю!!!!

Решение вопроса 1 строчка:
Код:
buf = __pic32_alloc_coherent(100);
DMA не работает с областью памяти KSEG0. Только с KSEG1 или KSEG3.

Ну по крайней мере я так понял и так работает!!!

Вот в этой же ветке писал товарищ, у которого это получилось. Но я не вкурил о чем это он. ДМА действительно работает с физическими адресами, и на все эти виртуальные приблуды им вроде как пофиг....
Или я не прав?
DimaK вне форума   Ответить с цитированием
Старый 24.12.2018, 19:11   #131
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,166
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC32MZ

DimaK
посмотрите у целевого МК в документации.

Вы можете сделать тестовый кусок кода в котором с помощью forced передачи проверить, что происходит.

Или я не прав? - я вообще не понимаю, что там у доброго друга происходило. наверняка какие-то локальные трудности.

я посмотрел документацию по pic32mz ec - IOMMU там нет - значит DMA работает с физическими адресами.

по поводу kseg0 - kseg0 это кэшируемый доступ. kseg1 некешируемый доступ. если Вы читаете из kseg0, то читаете через кэш.

вот у Вас dma что-то поменяло, а ядро-то не знаете - значит после того, как dma поменяло, то для работы с участком, на котором dma меняло нужно заново кэшировать область.

ну или не работать вообще через кэш с участком, с которым работало dma, что как мне кажется глупо.
besogon вне форума   Ответить с цитированием
Старый 24.12.2018, 20:30   #132
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 34
Сообщений: 59
Вес репутации: 165/14
DimaK has a spectacular aura aboutDimaK has a spectacular aura about
По умолчанию Re: PIC32MZ

Да, точно, надо попробовать принудительно запустить дма, проверить всю цепочку от буфера уарта до конечного буфера...
DimaK вне форума   Ответить с цитированием
Старый 24.12.2018, 20:40   #133
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,166
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC32MZ

DimaK
с cache есть особенности.

вот у Вас uart.

если Вы хотите что-то отправить с помощью dma, используя кешируемую память, то перед тем, как сказать dma, что нужно начать отправку нужно убедиться, что данные из кэша попали в память.

если Вы хотите что-то прочитать из того, что dma записала в кешируемый буфер, то нужно сделать так, чтобы invalidate линии cache куда dma писало, чтобы нормально прочитать.

Я сходу попытался найти ссылки - ничего вменяемого не нашел.
besogon вне форума   Ответить с цитированием
Старый 25.12.2018, 11:34   #134
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,166
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC32MZ

утром бегло глянул, вполне может быть, что для того чтобы invalidate есть функция _cache(обертка для ассемблерной инструкции работы с кешем через __builtin_mips_cache(op,addr)).

должна поискать адрес, и если найдется убрать линию без обратной записи. понятное дело что нужно на каждую линию выполнить.

_cache(HIT_INVALIDATE, ptr);

попробуйте перед чтением из того, что dma записало.
besogon вне форума   Ответить с цитированием
Старый 26.12.2018, 00:28   #135
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 34
Сообщений: 59
Вес репутации: 165/14
DimaK has a spectacular aura aboutDimaK has a spectacular aura about
По умолчанию Re: PIC32MZ

Так, а может просто не писать в кэшируемую область памяти, чем такой огород городить? Я просто раньше писал через ДМА из модулей захвата и просто из портов (когда подцеплял внешнюю АЦП с параллельным интерфейсом) и все работало прекрасно. Правда было это на МХ...
DimaK вне форума   Ответить с цитированием
Старый 26.12.2018, 10:59   #136
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,166
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC32MZ

DimaK
без кэша будет сильно медленней.
в подавляющем числе случаем отказ от кэша исключительно плохая практика.

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

если не будете использовать кэш, то у Вас каждый lw будет включать циклы ожидания RAM.
besogon вне форума   Ответить с цитированием
Старый 26.12.2018, 12:03   #137
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 34
Сообщений: 59
Вес репутации: 165/14
DimaK has a spectacular aura aboutDimaK has a spectacular aura about
По умолчанию Re: PIC32MZ

Ну да...
DimaK вне форума   Ответить с цитированием
Старый 14.01.2019, 10:06   #138
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 34
Сообщений: 59
Вес репутации: 165/14
DimaK has a spectacular aura aboutDimaK has a spectacular aura about
По умолчанию Re: PIC32MZ

Ну, вообщем, у меня тоже заработало сразу же, после того как я объявил буфер, куда принятые данные по ДМА полетят, как:
unsigned char __attribute__((coherent)) UART_Rx [50];

Т.е. в остальном - абсолютно привычная логика ДМА...
DimaK вне форума   Ответить с цитированием
Старый 14.01.2019, 14:38   #139
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,166
Вес репутации: 4017/88
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC32MZ

DimaK
судя по всему это микрочиповский атрибут, который означает не использовать кэш при доступе.
besogon вне форума   Ответить с цитированием
Ответ

Метки
dma, interrupt, pic32mz, spi, uart


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
появились датащиты на PIC32MZ EC Алексей Продукция MICROCHIP 154 16.03.2015 10:43


Часовой пояс GMT +3, время: 03:02.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot