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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 30.03.2015, 22:58   #76
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

я сбрасывал бит переполнения UART вручную, если обнаруживал, что он установлен. И пока, тьфу-тьфу-тьфу, работает.
Venom вне форума   Ответить с цитированием
Старый 31.03.2015, 09:54   #77
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Постарайтесь как-то поточнее описывать проблему. Это очень поможет в первую очередь Вам. Я как понял, что тут происходит:
1. принимаем данные извне (из компа например) в UART контроллера с помощью DMA (DMA принятые данные собирает в буфер);
2. после приема первой партии данных (опять-таки с помощью DMA) дальнейшие данные не принимаются контроллером(хотя отправка продолжает работать и делается вывод, что все работает нормально);
И причем теперь тогда здесь эти слова (ваши не мои):

я так и не пойму. Честно. Тут же английским по белому в эррате написано и тут также я вроде указал, что проблема в ПРИЕМНОМ буфере UART. Теряется его синхронизация (проще говоря "башку сносит") от того что данные не вовремя с FIFO забираются. Чуть опоздал - и все! И поможет только выключение/включение модуля несколько раз (ни фига оно не помогает как выясняется - по крайней мере у меня так).
Прошу прощения, если не точно объяснил свою проблему.

Попробую объяснить еще раз с начала.

Сначала было так: не используя DMA принимал данные по прерыванию UART. Прерывание - байт записали и т. д. Все работало без сбоев, ни каких проблем не возникало.

Далее решил переложить эту задачу на плечи DMA. Что получилось: настраиваем UART и DMA без прерываний(просто в теле основного цикла слежу за выставлением флага приема блока). Как только флаг выставлен, передаем принятые данные с помощью этого же UART в ПК, буфер не очищаем(хотя пробовал и очищать), сбрасываем флаг DMA. Ждем, проверяя флаг. Далее флаг опять выставляется, но данные в буфере не изменились и так далее. Получается что буфер заполняется только один раз и не перезаписывается.

Пробовал контролировать ошибки от DMA - их не возникает. Пробовал включать прерывание по приему блока прерывание стабильно возникает, результат тот же. Пробовал снизить скорость UART, тоже самое.
Контроль ошибок UART тоже ни чего не дал. Решил попробовать после окончании приема DMA выключить UART а потом заново настроить - все тоже самое.
dj_miles вне форума   Ответить с цитированием
Старый 31.03.2015, 10:06   #78
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,124
Вес репутации: 2885/106
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
Прошу прощения, если не точно объяснил свою проблему.

Попробую объяснить еще раз с начала.

Сначала было так: не используя DMA принимал данные по прерыванию UART. Прерывание - байт записали и т. д. Все работало без сбоев, ни каких проблем не возникало.

Далее решил переложить эту задачу на плечи DMA. Что получилось: настраиваем UART и DMA без прерываний(просто в теле основного цикла слежу за выставлением флага приема блока). Как только флаг выставлен, передаем принятые данные с помощью этого же UART в ПК, буфер не очищаем(хотя пробовал и очищать), сбрасываем флаг DMA. Ждем, проверяя флаг. Далее флаг опять выставляется, но данные в буфере не изменились и так далее. Получается что буфер заполняется только один раз и не перезаписывается.

Пробовал контролировать ошибки от DMA - их не возникает. Пробовал включать прерывание по приему блока прерывание стабильно возникает, результат тот же. Пробовал снизить скорость UART, тоже самое.
Контроль ошибок UART тоже ни чего не дал. Решил попробовать после окончании приема DMA выключить UART а потом заново настроить - все тоже самое.
Неправильно. Я до этого, с утра, много написал, но пропало все что писал к сожалению (оказывается, что если удалять некоторые "смайлики" в своей писанине, то автоматом переходишь на пред. страницу и соотв. все теряется, что писал - так просто информация к сведению и может кому поможет). Настройте DMA на автоматический прием байт байтов от UART. DMA может генерировать прерывания по завершению приема данных в буфер. Событие завершения этого приема может быть по приему определенного кол-ва данных или по приему определенного символа. Др. события пока не рассматриваем (если они есть). Только таким способом Вы сможете нормально обеспечить функционирование приемника UART здесь. Т.к. он при малейшем переполнении сбивается и перестает реагировать на приходящие данные извне (с ПК например). У Вас такая ситуация и происходит.
AleksBak вне форума   Ответить с цитированием
Старый 31.03.2015, 10:10   #79
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

Добавлю: настройте второй ДМА на передачу и с его помощью отправляйте данные обратно.
Venom вне форума   Ответить с цитированием
Старый 31.03.2015, 11:15   #80
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,708
Вес репутации: 4545/132
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: PIC32MZ

Не пойму, зачем при приеме от USART используется DMA или вы просто попробовать? На передачу понятно, а на прием, когда не известна длина запроса, не понимаю. Или у вас фиксированные по размеру запросы. А в случае мусора в линии что будет?
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 31.03.2015, 13:26   #81
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Длина фиксированная. Есть признак конца информации. Смысл в том чтобы не тратить время на прием по USART, а на выходе получить готовые данные для дальнейшей обработки, тем самым сэкономить время.

По поводу мусора в линии - предполагается, что его нет. Его действительно нет.
dj_miles вне форума   Ответить с цитированием
Старый 31.03.2015, 13:28   #82
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от Venom Посмотреть сообщение
Добавлю: настройте второй ДМА на передачу и с его помощью отправляйте данные обратно.
Передача в обратную нужна только для теста на данный момент.
dj_miles вне форума   Ответить с цитированием
Старый 31.03.2015, 13:36   #83
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Неправильно. Я до этого, с утра, много написал, но пропало все что писал к сожалению (оказывается, что если удалять некоторые "смайлики" в своей писанине, то автоматом переходишь на пред. страницу и соотв. все теряется, что писал - так просто информация к сведению и может кому поможет). Настройте DMA на автоматический прием байт байтов от UART. DMA может генерировать прерывания по завершению приема данных в буфер. Событие завершения этого приема может быть по приему определенного кол-ва данных или по приему определенного символа. Др. события пока не рассматриваем (если они есть). Только таким способом Вы сможете нормально обеспечить функционирование приемника UART здесь. Т.к. он при малейшем переполнении сбивается и перестает реагировать на приходящие данные извне (с ПК например). У Вас такая ситуация и происходит.
Все верно именно такого результата я пытаюсь достичь. По этому я и пытаюсь настроить работу DMA именно таким способом чтобы прием останавливался либо по детектировании заданного символа, либо по приему заданного количества байт.

Так вот в референс'е даже есть пример по этому поводу. Вот я и пытаюсь разобраться почему у меня это не работает.
dj_miles вне форума   Ответить с цитированием
Старый 31.03.2015, 13:46   #84
AleksBak
Senior Member
 
Аватар для AleksBak
 
Регистрация: 27.02.2007
Адрес: г. Баку
Сообщений: 3,124
Вес репутации: 2885/106
AleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond reputeAleksBak has a reputation beyond repute
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
Все верно именно такого результата я пытаюсь достичь. По этому я и пытаюсь настроить работу DMA именно таким способом чтобы прием останавливался либо по детектировании заданного символа, либо по приему заданного количества байт.

Так вот в референс'е даже есть пример по этому поводу. Вот я и пытаюсь разобраться почему у меня это не работает.
Лучше разберитесь сами. Может уйдет намного больше времени, но просто в этом случае лучше так чем искать/спрашивать готовые ответы из интернета. Главное куда копать уже знаете.
AleksBak вне форума   Ответить с цитированием
Старый 31.03.2015, 14:14   #85
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от AleksBak Посмотреть сообщение
Лучше разберитесь сами. Может уйдет намного больше времени, но просто в этом случае лучше так чем искать/спрашивать готовые ответы из интернета. Главное куда копать уже знаете.
Да вроде все и так понятно. Просто не знаю где дальше рыть или в чем я ошибаюсь, по этому и прошу помощи.
dj_miles вне форума   Ответить с цитированием
Старый 31.03.2015, 15:49   #86
Vint
Senior Member
 
Аватар для Vint
 
Регистрация: 08.06.2007
Сообщений: 528
Вес репутации: 838/59
Vint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to behold
По умолчанию Re: PIC32MZ USB

Люди, кто-нить переводил свой проект USB
c pic32mx на pic32mz ?
Vint вне форума   Ответить с цитированием
Старый 02.04.2015, 13:20   #87
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Кому интересно! Сегодня ради эксперимента сделал следующее:

1. До инициализации DMA обнулил буфер, далее инициализация DMA. Результат: дождался прерывания от DMA. Смотрю. Буфер не заполнился, все нулями.

2. Буфер не трогаю. Инициализация DMA. Жду прерывания. Проверяю буфер. Буфер заполнен как надо. Обнуляю буфер. Жду опять прерывания. Проверяю. Буфер нулями.

3. Вообще не трогаю буфер просто смотрю на область памяти через дебагер. В первом прерывании заполняется, далее не меняется.

Получается вроде как DMA может записать в буфер один раз и все. Но вручную могу менять сколько угодно и где угодно.



Голова пухнет, толку нет.!
dj_miles вне форума   Ответить с цитированием
Старый 02.04.2015, 15:43   #88
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,708
Вес репутации: 4545/132
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
Получается вроде как DMA может записать в буфер один раз и все. Но вручную могу менять сколько угодно и где угодно.

Голова пухнет, толку нет.!
Посмотрите режимы DMA в описании. Например в STM32F4 для режима memory-to-memory циклический режим не доступен (из ОЗУ в ОЗУ), а вот результат преобразования встроенного в МК канала АЦП он может считывать в цикле (из периферии в ОЗУ).
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 02.04.2015, 16:00   #89
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Нашел интересный такой документик http://ww1.microchip.com/downloads/e.../00001600C.pdf. Стр. 7 как раз про DMA.

И в DMA Reference в разделе MODES OF OPERATION цитата:
Цитата:
Note: To avoid cache coherency issues on devices with L1 cache, all buffers that are
accessed by the DMA module must be allocated in KSEG1 and/or KSEG3
(uncached) segments.
Сейчас разбираюсь.
dj_miles вне форума   Ответить с цитированием
Старый 02.04.2015, 16:01   #90
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Посмотрите режимы DMA в описании. Например в STM32F4 для режима memory-to-memory циклический режим не доступен (из ОЗУ в ОЗУ), а вот результат преобразования встроенного в МК канала АЦП он может считывать в цикле (из периферии в ОЗУ).
Токда смысл использовать модуль единовременно?!
dj_miles вне форума   Ответить с цитированием
Старый 02.04.2015, 16:17   #91
Consultant
Senior Member
 
Аватар для Consultant
 
Регистрация: 08.11.2013
Сообщений: 328
Вес репутации: 796/32
Consultant is a splendid one to beholdConsultant is a splendid one to beholdConsultant is a splendid one to beholdConsultant is a splendid one to beholdConsultant is a splendid one to beholdConsultant is a splendid one to beholdConsultant is a splendid one to behold
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
Токда смысл использовать модуль единовременно?!
Не понял вопроса.
Consultant вне форума   Ответить с цитированием
Старый 02.04.2015, 16:25   #92
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от Consultant Посмотреть сообщение
Не понял вопроса.
Ну вы говорите нельзя использовать его циклически. Что значит циклически?
dj_miles вне форума   Ответить с цитированием
Старый 02.04.2015, 16:52   #93
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

УРАААААААААА!!!!! Все заработало!!!

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

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

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

dj_miles вне форума   Ответить с цитированием
Старый 03.04.2015, 11:50   #94
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

Мдаа...
А я совершенно забыл, что нужно было об этом напомнить.
Рад, что Вы додумались сами.
Если что - я вот так объявляю глобальную переменную для ДМА:
Код:
short int __attribute__((coherent))  Test[AUDIO_BUF];
Venom вне форума   Ответить с цитированием
Старый 03.04.2015, 12:45   #95
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от Venom Посмотреть сообщение
Мдаа...
А я совершенно забыл, что нужно было об этом напомнить.
Рад, что Вы додумались сами.
Если что - я вот так объявляю глобальную переменную для ДМА:
Код:
short int __attribute__((coherent))  Test[AUDIO_BUF];
Я так тоже сначала попробовал, но у меня переменная глобальная и объявлена в h-нике, а инициализация в c-шнике. Компилятор ругается - multiple definition of 'buf'.
dj_miles вне форума   Ответить с цитированием
Старый 03.04.2015, 12:46   #96
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Благодарю всех за помощь. Буду рад помочь чем смогу.
dj_miles вне форума   Ответить с цитированием
Старый 03.04.2015, 12:51   #97
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 40
Сообщений: 3,246
Вес репутации: 3684/115
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: PIC32MZ

Цитата:
Сообщение от dj_miles Посмотреть сообщение
Я так тоже сначала попробовал, но у меня переменная глобальная и объявлена в h-нике, а инициализация в c-шнике. Компилятор ругается - multiple definition of 'buf'.
В h-нике надо перед переменной extern писать. Тогда ругаться не будет.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 03.04.2015, 12:53   #98
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

А это, батенька, у вас... (с)
Множественное определение возникает, когда Вы в *.h файле инициализировали переменную, а потом этот файл подключили к нескольким *.c
Вывод: плохо знаете, как работать с глобальными переменными и *.h файлами.
Рекомендация:
1. В *.h файле (В КАЖДОМ) всегда пишете следующее
Код:
#ifndef KAKOE_NIBUD_NAZVANIE_FAILA
  #define	KAKOE_NIBUD_NAZVANIE_FAILA

   //тут описываем прототипы функций и переменные
#endif
Подключаем этот файл к *.c, причем можем подключить к нескольким

2. Если Вам потом потребуется переменная в качестве глобальной в нескольких файлах, то эту переменную нужно объявить с директивой extern. При этом ее стартовая инициализация недопустима!

Примеры:
Создаем первый файл и его подключаем к одному из *.c файлов.
Код:
#ifndef GLOBALVARIABLES_H
  #define	GLOBALVARIABLES_H

 short int __attribute__((coherent))  Test[AUDIO_BUF];
 WORD AmpSignal1=0;
#endif
Второй *.h файл:

Код:
#ifndef GLOBALVARIABLES_EX_H
  #define	GLOBALVARIABLES_EX_H

 extern short int __attribute__((coherent))   Test[AUDIO_BUF];
 extern WORD AmpSignal1;
#endif
Вот второй файл подключаем теперь к любому *.с файлу и ошибки не возникнет.
Venom вне форума   Ответить с цитированием
Старый 03.04.2015, 13:04   #99
dj_miles
Junior Member
 
Регистрация: 13.03.2015
Сообщений: 21
Вес репутации: 230/19
dj_miles has a spectacular aura aboutdj_miles has a spectacular aura aboutdj_miles has a spectacular aura about
По умолчанию Re: PIC32MZ

Как сделано у меня:
1.h

1.c - #include "1.h"

main.c - #include "1.h"

Не пойму где множественное определение возникает?
dj_miles вне форума   Ответить с цитированием
Старый 03.04.2015, 13:09   #100
Venom
Senior Member
 
Регистрация: 19.05.2009
Сообщений: 319
Вес репутации: 127/43
Venom will become famous soon enoughVenom will become famous soon enough
По умолчанию Re: PIC32MZ

В том, что в файле 1.h нет строк
Код:
#ifndef  _1_H
  #define	_1_H

   //тут описываем прототипы функций и переменные
#endif
А глобальные переменные при подключении к файлу 1.c или main.c не имеют директивы extern
Venom вне форума   Ответить с цитированием
Ответ

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


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

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

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

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

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


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


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