Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91RM9200 ST interrupt
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
vvj
захотел воспользоваться embedded srvc'ом для XModem'а
сделал как в loder'е для UBoot'а:
/* Init of ROM services structure */
pAT91 = AT91C_ROM_BOOT_ADDRESS;
/* Tempo Initialization */
pAT91->OpenCtlTempo(&ctlTempo, (void *) &(pAT91->SYSTIMER_DESC));
ctlTempo.CtlTempoStart((void *) &(pAT91->SYSTIMER_DESC));
/* Xmodem Initialization */
pXmBuffer = pAT91->OpenSBuffer(&sXmBuffer);
pSvcXmodem = pAT91->OpenSvcXmodem(&svcXmodem, (AT91PS_USART)AT91C_BASE_DBGU, &ctlTempo);
pAT91->OpenPipe(&xmodemPipe, pSvcXmodem, pXmBuffer);
/* System Timer initialization */
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, /* AIC base address */
AT91C_ID_SYS, /* System peripheral ID */
AT91C_AIC_PRIOR_HIGHEST, /* Max priority */
AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, /* Level sensitive */
(void(*)())AT91F_ST_HANDLER); // (!)так объявлен этот аргумент(указатель на обработчик) в lib_AT91RM9200.h

/* Enable ST interrupt */
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);
AT91F_DBGU_Printk(CLRSCREEN);
AT91F_DBGU_Printk("n\r"LOADER_VERSION" ("__DATE__ " - " __TIME__ ")\n\n\r");
AT91F_DBGU_Printk("XMODEM: Download U-BOOT\n\r");
xmodemPipe.Read(&xmodemPipe, (char *)AT91C_UBOOT_BASE_ADDRESS, AT91C_UBOOT_MAXSIZE, AT91F_XmodemProtocol, 0);
while(XmodemComplete !=1);
AT91F_DBGU_Printk("\n\rU-Boot downloaded successfully\n\r");
пример для MULTI2000 и прерыванию там назначается функция AT91F_ST_ASM_HANDLER - завёрнутая в ассемблер AT91F_ST_HANDLER,
а я пока просто перед декларацией AT91F_ST_HANDLER поставил __irq __arm.
XModem 'C' не шлёт,и вообще я посмотрел обработчик не вызывается...
регистр AT91C_ST_CRTR обновляется (раз в две секунды)
Следовательно прерывание с таймера отсутствует?
dch
Цитата(vvj @ Sep 27 2005, 12:21)
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);

Еще прерывания I&F надо разрешить. может делаться в стартовом коде, написанном на ассемблере.
В u-boot прерывания вообще запрещены. Вся работа идет по опросу.
vvj
Цитата(dch @ Sep 27 2005, 16:08)
Еще прерывания I&F надо разрешить. может делаться в стартовом коде, написанном на ассемблере.

Я конечно разберусь, но буду чувствовать себя уверенней, если увижу заветную строчку в Вашем исполнении rolleyes.gif
dch
Перед переходом на C-ый код:
#define ARM_MODE_SYS 0x1F /* system mode */
#define F_BIT 0x40 /* FIQ bit */
/* enable only IRQ's and not FIQ's */
msr cpsr_c, #(ARM_MODE_SYS | F_BIT)
Если же хотитесь остаться в SYS mode.

Нормальная утилита загрузки образа череp Xмодем и записи в параллельную flash, DataFlash:


http://www.ucrouter.ru/download\AT91RM9200-29lv160d.tgz

Строчки взяты из:
AT91RM9200-29lv160d\gnu\cstartup_gnu_ram

В утилите есть, нужные Вам startup код, загрузка через x модем, поддержка GCC.
VladislavS
Кропаю тут мегалоадер с выбором варианта загрузки через DBGU, другие USART и очень хотелось бы с USB. XModem через DBGU запустил. Прикрутил к проекту атмеловский BasicUSB - теперь в системе появляется модем с COM-портом, к которому могу подключиться терминалом. А как теперь XModem через USB пустить. В даташите написано, что можно, а вот как что-то не очень.
dch
Цитата(VladislavS @ Sep 27 2005, 21:53)
что можно

c ftp взять утилиту заргузки, запускаему на хосте. Все должно работать.
VladislavS
Через его родной BootLoader по протоколу DFU не проблема - загружается. Я хотел XModem через USB пропустить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.