|
Вопросы по XMega |
|
|
|
Jan 25 2013, 12:47
|
Группа: Участник
Сообщений: 14
Регистрация: 21-02-09
Пользователь №: 45 161

|
XMega-ми заинтересовался недавно. Имеется отладочная плата XMEGA-A3BU Xplained. Использую Atmel Studio 6 и ASF 3.5.0.
Появилось несколько вопросов. Может коллеги подскажут что-нибудь...
1. Во-первых, в ASF отсутствует функция для управления выходами аналогового компаратора AC. Хотя в драйверах для IAR она имеется. Я прописал установку битов AC1OUT ACOOUT записью в регистр CTRLA, но при отладке в дебаггере вижу, что реально биты не устанавливаются. Пытаюсь в окошке I/O View установить эти биты, тоже безрезультатно. Ни в симуляторе, ни в железе. Что я делаю не так? На плате стоит чип ATxmega256A3BU.
2. Возможно ли одновременное использование одного аналогового входа компаратором и АЦП? Или в реальности вход будет отдан тому, кто проинициализировал его последним?
3. Хочу записать результаты АЦП в память через DMA. В ASF есть пример - ознакомился, настроил. Запуск АЦП происходит через систему событий циклически, DMA записывает данные в память, все ОК. Все это происходит в спящем режиме. Но мне нужно отловить некий уровень на входе АЦП и после этого выдать данные в USART. Я настраиваю компаратор на выходе АЦП, который генерирует прерывание, когда на входе АЦП значение первышает некий уровень. Как только разрешаю это прерывание - сразу перестает работать система событий после получения результата АЦП, соответственно не запускается новый цикл АЦП и запись DMA. Ок. Перевожу АЦП в режим freerun - компаратор отрабатывает как надо, прерывания генерятся, но теперь и события генерятся только вместе с прерываниями после срабатывания компаратора. Соответсвенно и DMA тоже работает только когда сработал компаратор. Как только компаратор выключается - пропадают прерывания и события. Почему? Мне нужно чтобы события оставалсиь всегда, чтобы пока проц спит в фоне постоянно работал АЦП и велась запись в память через DMA. Проц должен просыпаться только если на входе компаратора есть требуемый уровень. А так работает или одно или другое. Т.е. либо тебе события без прерываний, либо события с прерываниями, но после срабатывание компаратора.
Пока вижу одно решение: Настроить два аналоговых входа, физически запараллелить их - один настроить на АЦП с событиями и DMA, второй отдать аналоговому компаратору, который будет генерить прерывание при превышении порога.
Отсюда вопрос 4. Можно ли запараллелить два входа, позволяет ли это входное сопротивление или нужно сделать какую-то обвязку?
|
|
|
|
|
 |
Ответов
(30 - 44)
|
Sep 15 2013, 17:56
|
Знающий
   
Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768

|
Цитата(Xenia @ Sep 15 2013, 20:40)  Задача интересует в самом общем виде. Но, видя вашу склонность к конкретизации  , предложу задачу моргания светодидом 1 раз в секунду (сигнализируя о работоспособности устройства) не прибегая к прерываниям! Очевидно, что "задержка до 2 МЦ" в этом деле несущественна. Ну, а дальше-то что? Как мне теперь событие 7-го канала превратить во что-то реальное? Есть у меня флаг PORTCFG_EVOUT_PE7_gc, ///< Event Channel 7 Output on Port E pin 7 якобы способный вывести событие на пин PE7, но что для этого надо сделать? Куда этот флаг пихать? Моя склонность к конкретизации вызвана только необходимостью сузить рамки материала для изучения )) Судя по дейташиту, функциональность Ивент Систем весьма ограничена, на вывод (и обратно) можно отмапить только из Канала 0 Ивент Систем на ножку Порт 7. Раздел 15.1 предпоследняя строка.
|
|
|
|
|
Sep 15 2013, 18:12
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(Tiro @ Sep 15 2013, 21:56)  Моя склонность к конкретизации вызвана только необходимостью сузить рамки материала для изучения )) Судя по дейташиту, функциональность Ивент Систем весьма ограничена, на вывод (и обратно) можно отмапить только из Канала 0 Ивент Систем на ножку Порт 7. Раздел 15.1 предпоследняя строка. Если вы понимаете, что там написано, то ... напишите строку кода!  Мне уже совершенно наплевать, нулевой там номер или седьмой. Дайте хоть хоть одним глазком взглянуть на реализацию ЛЮБОГО варианта, где "Event System" дергает пином! И чтобы без всяких оговорок типа "знаю, как это делается, но вам не скажу, т.к. к вашему номеру пина это не подойдет".
|
|
|
|
|
Sep 15 2013, 19:28
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(ArtemKAD @ Sep 15 2013, 22:41)  Xenia, найдите описание регистра CLKEVOUT . Думаю Вам это поможет...  Это я видела, оно из другой оперы - к "Event System" отношения не имеет, а просто тактовую частоту (периферийную) на пин гонит. Это совершенно не то. Цитата(ArtemKAD @ Sep 15 2013, 22:41)  PS. A1 уже не флагман. Флагман A1U... Флагманом я назвала его не потому, что он самый лучший, а потому, что самый первый, тогда как A1U - лишь его немного усовершенствованная копия.
|
|
|
|
|
Sep 15 2013, 19:49
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Еще раз посмотрите! Цитата 13.15.4 CLKEVOUT - Clock and Event Out Register • Bit 7:6 - Reserved These bits are reserved and will always be read as one. For compatibility with future devices, always write these bits to zero when this register is written. • Bit 5:4 - EVOUT[1:0] - Event Output Port These bits decide which port the Event Channel 0 from the Event System should be output to. Pin 7 on the selected port is always used, and the CLKOUT bits must be set different from EVOUT. The pin must be configured as an output pin for the Signaling Event to be available on the pin. Table 13-7 on page 145 shows the possible configurations. • Bits 3:2 - Reserved These bits are reserved and will always be read as one. For compatibility with future devices, always write these bits to zero when this register is written. • Bit 1:0 - CLKOUT[1:0] - Clock Output Port These bits decide which port the Peripheral Clock should be output to. Pin 7 on the selected port is always used. The Clock output setting, will override the Event output setting, thus if both are enabled on the same port pin, the Peripheral Clock will be visible. The pin must be configured as an output pin for the Clock to be available on the pin. Это регистр отвечает и за вывод частоты и за событие. Цитата Table 13-7. Event Channel 0 output configurations EVOUT[1:0] Group Configuration Description 00 OFF Event out disabled 01 PC7 Event Channel 0 output on Port C pin 7 10 PD7 Event Channel 0 output on Port D pin 7 11 PE7 Event Channel 0 output on Port E pin 7
|
|
|
|
|
Sep 15 2013, 20:56
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
У моих портов нет регистра CLKEVOUT  . Этот регистр из категории виртуальных портов, которые я еще не освоила (и что-то не тянет). А у простых портов типа PORTA, PORTB, PORTC, PORTD, PORTE и PORTF такого расширения нет. Скажем, такие бывают: PORTB.OUT PORTE.DIR PORTE.INTCTRL PORTE.INT1MASK PORTE.INTFLAGS PORTE.INT0MASK А вот такого не бывает: PORTE.CLKEVOUT Error[Pe136]: struct "PORT_struct" has no field "CLKEVOUT"
|
|
|
|
|
Sep 15 2013, 21:12
|
Знающий
   
Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768

|
Цитата(Xenia @ Sep 15 2013, 23:56)  А вот такого не бывает: PORTE.CLKEVOUT
Error[Pe136]: struct "PORT_struct" has no field "CLKEVOUT" Ксения, ну где-то есть этот CLKEVOUT. Нужно хидер прочитать, ты ж программист. И вообще, это уже становится частным вопросом, АртемКАД вот подключился. Может сперва сами порешаем, а потом решение сюда? А если кто из форумчан знает, сам отпишется. А если у АртемКАД есть решение, то я попрошу его не говорить сразу.
|
|
|
|
|
Sep 16 2013, 17:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата хоть он и сидит рядом с виртуальными портами, но отношения к ним прямого не имеет, просто состоит вместе с ними в одной группе PORTCFG ... Не совсем вместе с ними. Просто в PORTCFG засунули в т.ч. и настройку виртуальных портов. Эдакая общая группа портов для того, что в специализированные группы не влезло, но к портам относится. Сами-же виртуальные порты отдельно в VPORTх . Хотя я так пока и не вкурил зачем они вообще нужны... В общем PORTCFG.CLKEVOUT в помощь...
|
|
|
|
|
Sep 17 2013, 07:49
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(ArtemKAD @ Sep 16 2013, 20:16)  В общем PORTCFG.CLKEVOUT в помощь... 100% И у меня вопрос (дабы не плодить тем). Почему на xmega128A1U не выводится на пин clkPER4? Т.е. clkPER и clkPER2 выводится а clkPER4 нет. Пробывал при clkPER4=128MHz, clkPER2=64MHz, clkPER=32MHz.
|
|
|
|
|
Sep 17 2013, 09:35
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(Duhas @ Sep 17 2013, 11:49)  т.е. при выводе просто тишина? Да, ноль. Цитата(Duhas @ Sep 17 2013, 11:49)  ради эксперимента попробуйте в целом уменьшить все частоты и попробовать так. Необходимо было имеено 128MHz на пине получить. Экспериментировать сейчас некогда, да и не актуально уже. Просто думал сталкивался ли кто с этим
|
|
|
|
|
Sep 17 2013, 12:11
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(zombi @ Sep 17 2013, 11:49)  Пробывал при clkPER4=128MHz, clkPER2=64MHz, clkPER=32MHz. А что, разве на Xmega можно частоты выше, чем 32 МГц получать? Не знала... Точнее, видела, что множитель позволяет умножать аж до 31 раз, но думала, что это для медленных кварцев сделано, а верхнюю границу в 32 МГц нарушать нельзя. Или все-таки можно? И если да, то как? И какие возможности это дает? Таймеры быстрее заработают?
|
|
|
|
|
Sep 17 2013, 13:31
|
Частый гость
 
Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080

|
Цитата(Xenia @ Sep 17 2013, 16:11)  А что, разве на Xmega можно частоты выше, чем 32 МГц получать? Не знала... Точнее, видела, что множитель позволяет умножать аж до 31 раз, но думала, что это для медленных кварцев сделано, а верхнюю границу в 32 МГц нарушать нельзя. Или все-таки можно? И если да, то как? И какие возможности это дает? Таймеры быстрее заработают? Можно нарушать, только неизвестно, как долго проработает. У меня один опытный образец уже полтора года на 48МГц работает и полностью исправен. Работает от внешнего кварца на 8 МГц и PLL на 6. Выше поднимать удавалось, уже не помню до скольки, но потом засомневался и прекратил эксперименты, оставив на 48МГц. Нагреваний МК-ра замечено не было. Ну, а таймеры могут тактироваться вместе с CPU или через делитель, так что - да, таймеры заработают быстрее.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|