ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
152336 Топик полностью
Сергей Борщ (30.03.2009 21:53, просмотров: 186) ответил Sergfs на Перывание от таймера 0. ADuC 7024 не работает!
Бррр.... Писать для ARM на ассемблере, использовать "магические" числа вроде 0xfffff450 - да, мсье знает толк в извращениях. Кнопку < asm > на форме ввода он тоже не заметил... #define INT_OSC 32768UL #define PLL_CLK (INT_OSC * 1376) #define SLCLK (INT_OSC) #define ECLK (PLL_CLK) #define RTOS_TICK_RATE 1000 // Hz #define TEST_TIMER_RATE 3500 // Hz extern "C" void __low_level_init(void) { // Start PLL PLLKEY1 = 0xAA; PLLCON = PLL_INTERNAL_CLK | CLK_INT_PLL; PLLKEY2 = 0x55; POWKEY1 = 0x01; POWCON = MODE_ACTIVE | CLK_DIV_1; POWKEY2 = 0xF4; GP0CON = 0; // All pins are IO GP0DAT = (1UL<<(7+24)) | (0UL<<(7+16)); // GP0.7 = output, set to 0 T0LD = ECLK / RTOS_TICK_RATE - 1; T0CON = T0_ENABLED | T0_PERIODIC | T0_DIV_1; IRQEN = RTOS_TIMER_BIT; T1LD = ECLK / TEST_TIMER_RATE - 1; T1CON = T1_HCLK | T1_DOWN | T1_ENABLED | T1_PERIODIC | T1_BINARY | T1_DIV_1; IRQEN = GP_TIMER_BIT; } extern "C" __irq void IRQ_Switch() { dword irq = IRQSIG; irq &= IRQSTA; if(irq & GP_TIMER_BIT) { Timer_ISR(); } if(irq & RTOS_TIMER_BIT) { OS::SystemTimer_ISR(); } } Естественно в main() надо разрешить прерывания IRQ.