захотел воспользоваться 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 обновляется (раз в две секунды) Следовательно прерывание с таймера отсутствует?
|