int main (void) { //void wdt_disable(void); /* Initialise the Due board */ sysclk_init(); board_init(); analogInit(); /* Initialise console UART */ configureConsole(); /* Print demo information on the terminal*/ printf("-- Terminal by William & Elvin--\n\r"); /* Create the first task for running the code lock */ if (xTaskCreate(TaskJoystickX, (const signed char * const) "TaskJoystickX", 1024, NULL, 2, NULL) != pdPASS){ printf("Failed to create TaskJoystick\n"); } if (xTaskCreate(TaskJoystickY, (const signed char * const) "TaskJoystickY", 1024, NULL, 2, NULL) != pdPASS){ printf("Failed to create TaskJoystick\n"); } vTaskStartScheduler(); }
void setup() { u16 value; // Тут мы задаем маску, что позволяет маскировать выборочные IRQ wrio8( 0x00, 0x21 ); // 0x21 - ведущий контроллер прерываний wrio8( 0x00, 0xA1 ); // 0xA1 - ведомый контроллер прерываний // Инициализируем память, производится подсчет доступной RAM configureRam(); // Функция initGates() инициализирует idttable configureGates(); // Устанавливаем обработчики исключений setTrapGate( &onDivideError, 0x00 ); setTrapGate( &onDebug, 0x01 ); setTrapGate( &onNmi, 0x02 ); setTrapGate( &onBreakpoint, 0x03 ); setTrapGate( &onOverflow, 0x04 ); setTrapGate( &onBoundsExceeded, 0x05 ); setTrapGate( &onInvalidOpcode, 0x06 ); setTrapGate( &onNoX87, 0x07 ); setTrapGate( &onDoubleFault, 0x08 ); setTrapGate( &onX87Overrun, 0x09 ); setTrapGate( &onInvalidTss, 0x0A ); setTrapGate( &onSegmentNotPresent, 0x0B ); setTrapGate( &onStackSegmentFault, 0x0C ); setTrapGate( &onGeneralProtection, 0x0D ); setTrapGate( &onPageFault, 0x0E ); setTrapGate( &onReserved, 0x0F ); setTrapGate( &onX87Fault, 0x10 ); setTrapGate( &onAlignmentCheck, 0x11 ); for( value = 0x12; value != 0x20; ++value ) setTrapGate( &onReserved, value ); // Устанавливаем обработчики прерываний setTrapGate( &onTimer, 0x20 ); setTrapGate( &onKeyboard, 0x21 ); // Конфигурируем i8253-совместимый контроллер configure8253( I8253_CONFIG_CH0 | I8253_READ_LHB | I8253_MODE3 | I8253_BIN ); set8253( 0x7FFF, I8253_CH0 ); // Эта функция инициализирует консоль: // устанавливает указатель на видеопамять, // очищает экран, указывая для каждого символа // палитру - аргумент функции configureConsole( 0x0F ); // Эта функция инициализирует часы реального времени: // включает режим bin вместо bcd, и 24х-часовой формат configureClock(); /* value = rdcmos( CMOS_SECOND ); while( rdcmos(CMOS_SECOND) == value ) NOP(); */ readSystemClock( &startupDateTime ); // Инициализируем многозадачность // Доступен только один контекст - task0 configureScheduler(); prints("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n"); };