реклама на сайте
подробности

 
 
23 страниц V  « < 11 12 13 14 15 > »   
Closed TopicStart new topic
> ATxmega
MDD
сообщение Dec 6 2009, 05:08
Сообщение #181


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862



Цитата(talex85 @ Dec 4 2009, 23:27) *
У меня вопрос. AVR ISP Поддерживает ATXmega32А4 ? По документации она подерживает из 32 только ATXmega32D4.

ISP MKII через последние студии поддерживает - см скриншот. Хотя в документации действительно указан только ATXmega32D4.
Но документация не только в этом отстает. Например, в ней не указано как шить Хмеги через командную строку. Хотя умеет.
Строка должна выглядеть примерно так:
stk500.exe -cUSB -dATxmega32A4 -md -e -iffile.hex -pf -vf
Магический ключ для нас md(интерфейс PDI), остальное по документации.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Склихасовский
сообщение Dec 7 2009, 18:59
Сообщение #182


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 29-11-06
Пользователь №: 22 912



Ребят вот пытаюсь разобраться с контроллером DMA
задача перекачать 80байт данных по USART (режим передатчика)
Как сие можно реализовать через DMA?
Читаю ДШ - что то ясно, чтото нет!!
прерываться через каждый переданный байт нехочется когда есть такая штука как дма...

Сообщение отредактировал Склихасовский - Dec 7 2009, 18:59
Go to the top of the page
 
+Quote Post
V_G
сообщение Dec 8 2009, 01:13
Сообщение #183


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(Склихасовский @ Dec 8 2009, 04:59) *
Ребят вот пытаюсь разобраться с контроллером DMA
задача перекачать 80байт данных по USART (режим передатчика)
Как сие можно реализовать через DMA?
Читаю ДШ - что то ясно, чтото нет!!
прерываться через каждый переданный байт нехочется когда есть такая штука как дма...

А в чем проблема-то? Все работает!
Пишете адресом источника ваш адрес передающего буфера (TransBuffer), режим с автоинкрементированием и перезагрузкой адреса по окончании сеанса,
Пишете адресом приемника регистр данных нужного UARTа, режим фиксированного адреса,
В TRFCNT пишете число байт для передачи
И запускаете DMA на побайтную передачу из TransBuffer в USARTпо флагу DREIF
Go to the top of the page
 
+Quote Post
Склихасовский
сообщение Dec 8 2009, 04:59
Сообщение #184


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 29-11-06
Пользователь №: 22 912



дык , я никогда дела с дма не имел
вот и пытаюь разобраться что куда записывать и как это работает...
спасибо за ответ!
Одного канала для этой задачи, я так понял, хватит?
ещё вопрос
реально ли такая задача
по сигналу из таймера автоматически инкрементировать Nое колво ячеек озу? тоесть независимо друг от друга увеличивать на 1?

Сообщение отредактировал Склихасовский - Dec 8 2009, 05:04
Go to the top of the page
 
+Quote Post
Spider
сообщение Dec 8 2009, 06:21
Сообщение #185


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Я брал АппНоут с сайта атмела про ДМА. И делал следующее:
Код
    DMA_ConfigDoubleBuffering(DMA_DBUFMODE_DISABLED_gc);
    DMA_SetPriority(DMA_PRIMODE_RR0123_gc);
    DMA_SetupBlock(&DMA.CH0,  //Канал ДМА
                    &ADCA.CH0RES, //Сюда тебе нужно будет указать начальный адрес буфера в памяти
                    DMA_CH_SRCRELOAD_NONE_gc, //тут условие сброса адреса например DMA_CH_SRCRELOAD_BLOCK_gc
                    DMA_CH_SRCDIR_FIXED_gc, // условие изменения адреса буфера например DMA_CH_SRCDIR_INC_gc,
                    input, //Адрес от куда брать значение на подобие &ADCA.CH0RES тока адрес UDR
                    DMA_CH_DESTRELOAD_BLOCK_gc, //всё так де как и с источником, только ничего инкрементировать не надо, и перезагружать тоже.
                    DMA_CH_DESTDIR_INC_gc,  //т.е. замени это всё на NONE, FIXED,
                    MAX_FRAMESIZE*sizeof(Word16), //Размер буфера назаначения
                    DMA_CH_BURSTLEN_2BYTE_gc, //по сколько байт за "раз" перемещать
                    0, // сколько раз повторять действите 0 - бесконечно
                    false); //разрешено ли повторение
    DMA_SetTriggerSource(&DMA.CH0,DMA_CH_TRIGSRC_ADCA_CH0_gc); //Триггер запуска DMA тут тебе надо будет установить UART см. даташит
    DMA_EnableSingleShot(&DMA.CH0); //выполнять по 1 перемещению за раз
    DMA_SetIntLevel(&DMA.CH0, DMA_CH_TRNINTLVL_HI_gc, DMA_CH_ERRINTLVL_OFF_gc); //вызывать прерывание
    
    DMA_Enable();
    DMA_EnableChannel(&DMA.CH0);


Это пример про ADC но с UART не сложнее.
Go to the top of the page
 
+Quote Post
V_G
сообщение Dec 8 2009, 06:49
Сообщение #186


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(Склихасовский @ Dec 8 2009, 14:59) *
ещё вопрос
реально ли такая задача
по сигналу из таймера автоматически инкрементировать Nое колво ячеек озу? тоесть независимо друг от друга увеличивать на 1?

Через DMA нереально, DMA предназначен для пересылки данных без участия процессора, а не для арифметических операций. А программно по прерыванию от таймера можно все что угодно объинкрементировать.
Go to the top of the page
 
+Quote Post
MDD
сообщение Dec 8 2009, 10:26
Сообщение #187


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862



Цитата(V_G @ Dec 8 2009, 08:49) *
Через DMA нереально

Ну, строго говоря, извратиться можно - за счет автоинкремента адреса.
Т.е. берем область памяти и предварительно заполняем ее возрастающими данными. Для байтового счетчика потребуется 256 байт, для большего - страшно подумать.
Затем настраиваем ДМА по каждому событию от таймера менять адрес источника при неизменном адресе приемника...
Только это слишком накладный по расходу памяти способ. В Хмеге ресурсов вполне достаточно, чтобы такую задачу решить "по человечески" - через те же прерывания, как уже посоветовали. Или, если есть свободные таймеры, то для нескольких "ячеек" можно инкрементировать показания прямо на них минуя процессор.

Сообщение отредактировал MDD - Dec 8 2009, 10:29
Go to the top of the page
 
+Quote Post
Spider
сообщение Dec 9 2009, 06:16
Сообщение #188


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Народ, подскажите плиз. Можно ли у ATXMega128A1 в режиме EBI LCP3 ALE1 использовать ножку PH3 как General IO?
Go to the top of the page
 
+Quote Post
vitek101
сообщение Dec 9 2009, 06:58
Сообщение #189


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 24-08-09
Пользователь №: 52 013



Здравствуйте. Извините, что вмешался biggrin.gif
Я тоже делаю ДМА для УАРТа, сделал по примеру из 185 поста. Настроил так:
Код
    DMA_ConfigDoubleBuffering(DMA_DBUFMODE_DISABLED_gc);
    DMA_SetPriority(DMA_PRIMODE_RR0123_gc);
    DMA_SetupBlock(&DMA.CH0,
                    &bbb,
                    DMA_CH_SRCRELOAD_NONE_gc,
                    DMA_CH_SRCDIR_INC_gc,
                    &USARTF0.DATA,
                    DMA_CH_DESTRELOAD_NONE_gc,
                    DMA_CH_DESTDIR_FIXED_gc,
                    len,
                    DMA_CH_BURSTLEN_1BYTE_gc,
                    0,
                    false);
    DMA_SetTriggerSource(&DMA.CH0,DMA_CH_TRIGSRC_USARTF0_DRE_gc);
    DMA_EnableSingleShot(&DMA.CH0);
    DMA_SetIntLevel(&DMA.CH0, DMA_CH_TRNINTLVL_HI_gc, DMA_CH_ERRINTLVL_HI_gc);
    
    DMA_Enable();
    DMA_EnableChannel(&DMA.CH0);

bbb - обычный массив
len - длина массива
Проблема в том, что правильно передаются только три байта, дальше всякий мусор. Пробовал изменять все параметры (перезагрузка адреса, декремент, длина блока, даблбуффер, ...) - то же самое.
В чем может быть дело? 05.gif

Разобрался. Почему-то такая штука была при локально объявленном буфере. Объявил глобально и все прошло twak.gif
Go to the top of the page
 
+Quote Post
Spider
сообщение Dec 9 2009, 07:16
Сообщение #190


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Цитата(vitek101 @ Dec 9 2009, 12:58) *
Разобрался. Почему-то такая штука была при локально объявленном буфере. Объявил глобально и все прошло twak.gif

А ну это и логично. можешь объявить его локально но static. Эффект будет тоже положительный.
Go to the top of the page
 
+Quote Post
MDD
сообщение Dec 10 2009, 08:57
Сообщение #191


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862



Цитата(ZVA @ Nov 12 2009, 10:22) *
Собственно вопрос: как делает схему RESETа, именно для XMEG?


Атмел разродился апликухой на эту тему:
http://www.atmel.com/dyn/resources/prod_do...nts/doc8278.pdf
Go to the top of the page
 
+Quote Post
Склихасовский
сообщение Dec 11 2009, 18:11
Сообщение #192


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 29-11-06
Пользователь №: 22 912



разбираюсь с EEPROM...
Адресация через MEMORY MAPPED
Такой вопрос.
нужно записать данные по коссвенному адресу $1020...$103F
получается, что номер страницы =1
и вот тут че то не понятка
что нужно вводить в регистр адреса NVM?
адрес страницы?
адрес по memory map?
какой кайф от этой проекции еепрома на адреса с $1000, если при записи приходится все равно пересчитывать на страницы?

Сообщение отредактировал Склихасовский - Dec 11 2009, 18:19
Go to the top of the page
 
+Quote Post
MDD
сообщение Dec 11 2009, 21:16
Сообщение #193


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862



Цитата(Склихасовский @ Dec 11 2009, 20:11) *
что нужно вводить в регистр адреса NVM?
адрес страницы?
адрес по memory map?
какой кайф от этой проекции еепрома на адреса с $1000, если при записи приходится все равно пересчитывать на страницы?

Судя по примеру в AVR1315 действительно адрес страницы.
Сейчас тоже изучаю EEPROM и что-то эти страницы в Хмегах меня напрягают. Получается что в общем случае просто тупо записать один байт в EEPROM не переписывая страницы вообще нельзя?
Надо будет попробовать в ИАРе объявить переменные __eeprom и поманипулировать ими. И посмотреть листинг...
Go to the top of the page
 
+Quote Post
Склихасовский
сообщение Dec 12 2009, 07:34
Сообщение #194


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 29-11-06
Пользователь №: 22 912



да получается, что предварительно стереть нужно
Вообще все это очень напоминает DATAFLASH

Сообщение отредактировал Склихасовский - Dec 12 2009, 07:47
Go to the top of the page
 
+Quote Post
MDD
сообщение Dec 12 2009, 09:21
Сообщение #195


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862



Цитата(Склихасовский @ Dec 12 2009, 09:34) *
Вообще все это очень напоминает DATAFLASH

Судя по всему так и есть. Используется один и тот же NVM контроллер, времена записи и хранения по даташиту подозрительно близки.
Уменьшили только размер страницы и добавили режим Split Write, который позволяет дописывать соседние ячейки не стирая страницы...
В общем-то такой EEPROM покатит для большинства применений, но страничная организация выглядит как шаг назад. Наверное у Атмела для такой организации были веские причины.
Кстати, иаровская билиотека для работы с EEPROM написана на ассемблере, исходники в файле eeprom_xmega.s90
Go to the top of the page
 
+Quote Post

23 страниц V  « < 11 12 13 14 15 > » 
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 06:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016