|
|
  |
ATXMEGA - запуск от внешнего таймера, ATXMEGA128A1 |
|
|
|
Sep 12 2013, 10:59
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
Цитата(Xenia @ Sep 12 2013, 13:55)  К сожалению, по чаcти ATXmega я тоже новичок (только один проект сделала), а бутлодырь и DMA+MasterSPI - это как раз то, на что я сама нарвалась  . Спасибо! Не могли бы Вы тогда проинспектировать мою логику запуска меги от внешнего таймера? Может, там чего-то не хватает? Или есть что-то лишнее?
|
|
|
|
|
Sep 12 2013, 11:28
|

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

|
Цитата(Slonofil @ Sep 12 2013, 14:59)  Не могли бы Вы тогда проинспектировать мою логику запуска меги от внешнего таймера? Может, там чего-то не хватает? Или есть что-то лишнее? Я сразу, как вы тему начали, вашу проблему посмотрела, но что-то посоветовать не решилась, т.к. не знаю, как быть с кварцем на 25 Мгц. Вот вы устанавливаете бит OSC_FRQRANGE_12TO16_gc, что указывает диапазон от 12 до 16 МГц, но ведь у вас-то 25 МГц! Выходит, что формально это ошибка. Но с другой строны я не могу найти среди иных возможностей такую, чтобы 25 МГц туда входила. По всех же примерах, которые я встречала, кварц больше, чем 16 МГц не ставят, а используют внутреннее умножение частоты. Обычно 8МГц х 3 = 24МГц, 8МГц х 4 = 32МГц и 16МГц х 2 = 32МГц. Сама бы я сделала так: Код // Clock Source Select CCP = CCP_IOREG_gc; // 0xD8 - protected IO register CLK.PSCTRL = 0x00; // Select prescaler A division ratio "1", no division
OSC.XOSCCTRL = 0x4B; // FRQRANGE[1:0] set to (2 MHz - 9 MHz), XOSCSEL[3:0] set to (0.4 - 16 MHz XTAL, 16K CLK) OSC.CTRL = OSC_XOSCEN_bm; // 0x08 - external oscillator enable OSC.XOSCFAIL = OSC_XOSCFDIF_bm | OSC_XOSCFDEN_bm; // 0x03 - failure detection interrupt flag and set XOSCFDEN: failure detection enable while( !(OSC.STATUS & OSC_XOSCRDY_bm)); // 0x08 - wait until external clock source is stable and then select it for PLL clock input
CCP = CCP_IOREG_gc; // 0xD8 - protected IO register CLK.CTRL = CLK_SCLKSEL_XOSC_gc; // 0x03 - XOSC - external oscillator or clock Хотя на счет OSC.XOSCCTRL сильно не уверена, т.к. это у меня кварц на 8 МГц, а не у вас. Т.е. OSC.XOSCCTRL я бы для вашего случая подбирала вручную, испытывая разные варианты. P.S. Советую ознакомиться с темой, прозвучавшей на нашем форуме ранее - "Xmega не запускается от кварцевого резонатора" - может быть, найдете там что-то для себя полезное.
|
|
|
|
|
Sep 12 2013, 11:36
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
Цитата(Xenia @ Sep 12 2013, 14:28)  Я сразу, как вы тему начали, вашу проблему посмотрела, но что-то посоветовать не решилась, т.к. не знаю, как быть с кварцем на 25 Мгц.
Вот вы устанавливаете бит OSC_FRQRANGE_12TO16_gc, что указывает диапазон от 12 до 16 МГц, но ведь у вас-то 25 МГц! Выходит, что формально это ошибка. Но с другой строны я не могу найти среди иных возможностей такую, чтобы 25 МГц туда входила.
По всех же примерах, которые я встречала, кварц больше, чем 16 МГц не ставят, а используют внутреннее умножение частоты. Обычно 8МГц х 3 = 24МГц, 8МГц х 4 = 32МГц и 16МГц х 2 = 32МГц. Да, этот вопрос меня тоже волновал, но из всех документов, что я прочитал на эту тему (ДШ на группу, на конкретный 128А1, AVR1003 Using the XMEGA™ Clock System), следует, что 16 МГц максимум касается только кварцевого резонатора, (и для него же имеют смысл конденсаторы). Что же касается внешнего тактового источника (любого, в т.ч. генератора), то тут - до 32 МГц при питании свыше 2,7В. Ну, и практика говорит за то же - у товарища, который пишет на асме, плата работает.
|
|
|
|
|
Sep 12 2013, 11:43
|

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

|
Slonofil, мой предыдущий пост дописан. Прочтите его снова. Цитата(Slonofil @ Sep 12 2013, 15:36)  ...16 МГц максимум касается только кварцевого резонатора, (и для него же имеют смысл конденсаторы). Что же касается внешнего тактового источника (любого, в т.ч. генератора), то тут - до 32 МГц при питании свыше 2,7В. Ну, и практика говорит за то же - у товарища, который пишет на асме, плата работает. Ну так и спросите же скорее у своего товарища, что он пихает в OSC.XOSCCTRL !
|
|
|
|
|
Sep 12 2013, 11:43
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
Цитата(Xenia @ Sep 12 2013, 14:39)  Slonofil, мой предыдущий пост дописан. Прочтите его снова. Да, логика мне ясна. И с резонатором всё понятно, но в моём случае именно генератор. Жаль, что никто не пишет, пытался ли использовать внешнюю тактовую, неважно с какой частотой. Просто чтобы свериться с настройками. Ну, а дальше - конечно, только практика. К слову, к такому подходу, по которому сделана плата, вообще много вопросов. Но я тут подневольный, "партия сказала "НАДО!", комсомол ответил "ЕСТЬ!".
|
|
|
|
|
Sep 12 2013, 12:06
|

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

|
Точно ноль! Вся подпрограмма: Код CLK_init: ldi RTMPA,OSC_XOSCSEL_EXTCLK_gc sts (OSC_XOSCCTRL),RTMPA
lds RTMPA,(OSC_CTRL) ori RTMPA,OSC_XOSCEN_bm sts (OSC_CTRL),RTMPA
lds RTMPA,(OSC_STATUS) sbrs RTMPA,OSC_XOSCRDY_bp rjmp PC-3
ldi RTMPA,CCP_IOREG_gc sts (CPU_CCP),RTMPA ldi RTMPA,CLK_SCLKSEL_XOSC_gc sts (CLK_CTRL),RTMPA
ret 2 Slonofil. Я так понимаю что от внутр. RC проц заработал???
|
|
|
|
|
Sep 12 2013, 12:29
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
Цитата(zombi @ Sep 12 2013, 15:26)  Не понимаю зачем для получения на пине только clkPER напрягать ещё и систему событий??? Ну, встретил такой пример - и подумал, что так и надо. Стало быть, можно обойтись строчкой PORTCFG_CLKEVOUT = PORTCFG_CLKOUT_PE7_gc; ?
|
|
|
|
|
Sep 13 2013, 17:04
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
Товарищи! В общем, выяснилось, почему не дышал кристалл... оказалось, что в настройках проекта путь к hex'y был из старого проекта с ATTINY24A  После выбора правильного пути всё в норме и с работой от RC2M, и с внешним генератором. Собственно, работающий у меня код (настройка OSC + CLK) и вывод в PE7 системной частоты - вдруг кому пригодится. Код int main (void) { cli ();
PORTA_DIR = 0b00000000; PORTB_DIR = 0b11111111; // PORTB to OUTPUT PORTC_DIR = 0b00000000; PORTD_DIR = 0b00000000; PORTE_DIR = 0b10000000; // PE7 must be configured as output for the event to be available on the pin PORTF_DIR = 0b00000000; PORTH_DIR = 0b00000000; PORTJ_DIR = 0b00011000; PORTK_DIR = 0b00000000; PORTQ_DIR = 0b0000;
CPU_CCP = CCP_IOREG_gc; // Enable change of the protected I/O registers CLK_PSCTRL = CLK_PSADIV_1_gc | CLK_PSBCDIV_1_1_gc; // Select prescaler A, B & C division ratio "1", no division
OSC_XOSCCTRL = OSC_FRQRANGE_04TO2_gc | OSC_XOSCSEL_EXTCLK_gc; // External Clock with 6 CLK Start-up Time OSC_CTRL |= OSC_XOSCEN_bm; // External Oscillator Enable while (!(OSC_STATUS & OSC_XOSCRDY_bm)) {; } // Waiting for external clock source stable
CPU_CCP = CCP_IOREG_gc; // Enable change of the protected I/O registers CLK_CTRL = CLK_SCLKSEL_XOSC_gc; // Switch to external oscillator or clock OSC_CTRL &= ~OSC_RC2MEN_bm; // Disable RC2M
PORTCFG_CLKEVOUT = PORTCFG_CLKOUT_PE7_gc; // ClkPER Output on Port E pin 7
while (1) { PORTB_OUTTGL = 0xFF; // PORTB test meander } } Большое спасибо всем неравнодушным  !
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|