Цитата(_Алексей_ @ May 6 2009, 08:51)

MDD, Вы для программирования используете AVRStudio и PDI? Вроде 128A1 можно еще по JTAG шить, если не ошибаюсь.
Да, использую студию и AVR ISP2 через PDI. Через JTAG мне не чем шить.
Цитата
В процессе изучения XMEGA возникает масса вопросов. FAQ еще никто не сделал?
Вот хочу изменить внутреннюю частоту с 2МГц на 32МГц, но не получается. Как я понял, надо активировать защиту защиту регистров (СРР регистр), изменить CLK_CTRL и OSC_CTRL, но не выходит. Запускаю отладчик и вижу, что регистр CLK_CTRL не изменяется.
В pdf не смог найти таблицы с описанием адресации всех регистров. Пишу на асме, надо знать к каким обращаться через out/sts.
Да, я вот тоже привык по FAQ новые контроллеры изучать. А здесь похоже придется поучаствовать в его написании
Прежде всего не лишним будет напомнить, что при изучении Xmega нужно пользоваться двумя документами - непосредственно даташитом на контроллер и общим мануалом. Мануал лежит здесь
http://www.atmel.com/dyn/resources/prod_do...nts/doc8077.pdf Теперь по тактированию. Для этого следует изучить апноту AVR1003: Using the XMEGA Clock System . Там есть пример кода, правда на С. Но есть и критическая секция, написанная на асме. Непосредственно переключение нужно делать быстро, за четыре такта, иначе не переключится.
Просмотр сишного листинга показывает, что теперь (по понятным причинам) к большинству регистров доступ идет через команды работы с памятью . Ниже пример тактирования от PLL (кварц 16МГц с умножением на 2) Привожу фрагмент листинга, чтобы был виден "ассемблер".
Код
58 //Настраиваем тактирование
59 //Кварц 16МГц, умножение на 2
60 OSC.XOSCCTRL=0xcb; //Кварц(12-16),16К циклов
\ 00000000 EC0B LDI R16, 203
\ 00000002 93000052 STS 82, R16
61 OSC.CTRL|=0x08; //Включаем кварцевый генератор
\ 00000006 E5E0 LDI R30, 80
\ 00000008 E0F0 LDI R31, 0
\ 0000000A BFFB OUT 0x3B, R31
\ 0000000C 8100 LD R16, Z
\ 0000000E 6008 ORI R16, 0x08
\ 00000010 8300 ST Z, R16
\ 00000012 E5E1 LDI R30, 81
62 do{} while ((OSC.STATUS & 0x08)==0); //ожидаем готовности кв. генератора
\ ??main_0:
\ 00000014 8100 LD R16, Z
\ 00000016 FF03 SBRS R16, 3
\ 00000018 CFFD RJMP ??main_0
63 OSC.PLLCTRL=0xc2;// PLL от кварца, К=2
\ 0000001A EC02 LDI R16, 194
\ 0000001C 8304 STD Z+4, R16
64 OSC.CTRL|=0x10;//Включаем PLL
\ 0000001E E5E0 LDI R30, 80
\ 00000020 8100 LD R16, Z
\ 00000022 6100 ORI R16, 0x10
\ 00000024 8300 ST Z, R16
\ 00000026 E5E1 LDI R30, 81
65 do{} while ((OSC.STATUS & 0x10)==0); //Ожидаем готовности PLL
\ ??main_1:
\ 00000028 8100 LD R16, Z
\ 0000002A FF04 SBRS R16, 4
\ 0000002C CFFD RJMP ??main_1
66 CCPwriteCLKtoPLL(); //переключаемся на тактирование от PLL
\ 0000002E .... RCALL CCPwriteCLKtoPLL
67 OSC.CTRL=0x18; //выключаем все генераторы, кроме кварца и PLL
\ 00000030 E108 LDI R16, 24
\ 00000032 93000050 STS 80, R16
................................
226 //критическая секция для переключения источника тактирования
CCPwriteCLKtoPLL:
\ 00000000 ED08 ldi r16,0xd8
\ 00000002 E014 ldi r17,0x04
\ 00000004 BF04 out 0x34,r16
\ 00000006 93100040 sts 64,r17
0000000A 9508 RET