/* ・ス・ユ・ネ・ヲ・ィ・「。ヲウ荵、゚・ル・ッ・ソ、ホス魘�ス */ int softvec_init(void) { int type; for (type = 0; type < SOFTVEC_TYPE_NUM; type++) softvec_setintr(type, NULL); return 0; }
static void cmd_timer( int cmdc, char *cmdv[COMMAND_WORD_NUM] ) { softvec_setintr(SOFTVEC_TYPE_TIMINTR, timer_intr); send_write("start timer .\n"); timer_start(0,3000); timer_start(1,4500); }
static int setintr(softvec_type_t type, kz_handler_t handler) { static void thread_intr(softvec_type_t type, unsigned long sp); softvec_setintr(type, thread_intr); handlers[type] = handler; return 0; }
static int setintr(softvec_type_t type, kz_handler_t handler) { softvec_setintr(type, thread_intr); handlers[type] = handler; return 0; }
/* システム・コールの処理(kz_setintr():割込みハンドラ登録) */ static int thread_setintr(softvec_type_t type, kz_handler_t handler) { static void thread_intr(softvec_type_t type, unsigned long sp); /* * 割込みを受け付けるために,ソフトウエア・割込みベクタに * OSの割込み処理の入口となる関数を登録する. */ softvec_setintr(type, thread_intr); handlers[type] = handler; /* OS側から呼び出す割込みハンドラを登録 */ putcurrent(); return 0; }
/* システムコールの処理(kz_setintr(): 割り込みハンドラ登録) */ static int thread_setintr(softvec_type_t type, kz_handler_t handler) { static void thread_intr(softvec_type_t type, unsigned long sp); /* * 割り込みを受け付けるために、ソフトウェア割り込みベクタに * OSの割り込み処理の入口となる関数を登録する。 */ softvec_setintr(type, thread_intr); handlers[type] = handler; /* 処理後にレディキューに接続し直す */ putcurrent(); return 0; }
int main(void) { INTR_DISABLE; puts("kozos boot succeed!\n"); softvec_setintr(SOFTVEC_TYPE_SERINTR, intr); serial_intr_recv_enable(SERIAL_DEFAULT_DEVICE); puts("> "); INTR_ENABLE; while(1){ asm volatile ("sleep"); } return 0; }
int main(void) { INTR_DISABLE; /* 割込み無効にする */ puts("kozos boot succeed!\n"); /* シリアル割込みハンドラを登録 */ softvec_setintr(SOFTVEC_TYPE_SERINTR, intr); /* シリアル受信割込みを有効化 */ serial_intr_recv_enable(SERIAL_DEFAULT_DEVICE); puts("> "); INTR_ENABLE; /* 割込み有効にする */ while(1) { asm volatile ("sleep"); /* 省電力モードに移行 */ /* 割込み待ち */ } return 0; }
int boot_main() { // long i; // static int ii; // const char str[][32] = {{"ok sci\n\r"}, {"ok bootloader\n\r"}, {"ok started!! XMODEM\n\r"}, {"ok finish!! XMODEM\n\r"}, {"ok started!! Deploy\n\r"}, {"ok finish!! Deploy\n\r"}}; // ポート4を光らすテスト // volatile unsigned char* p4ddr = (volatile unsigned char*) 0xFEE003; // volatile unsigned char* p4 = (volatile unsigned char*) 0xFFFFD3; // *p4ddr = 0x03; // *p4 = 0x01; // sci_write_str(SCI_NO_1, str[0]); // // sci_write_str(SCI_NO_1, str[2]); // ii = xmodem_start(buf_start); // sci_write_str(SCI_NO_1, str[3]); // // sci_write_str(SCI_NO_1, str[4]); // mot_deploy(buf_start); // sci_write_str(SCI_NO_1, str[5]); // sci_write_str(SCI_NO_1, (const char*)buf_start); // sci_write_str(SCI_NO_1, str[1]); // *p4 = 0x02; // ソフト・割り込みベクタへ登録 softvec_setintr(softvec_type_serial, main_vec); // シリアル通信割り込みEnable sci_read_intr_enable(SCI_NO_1); // 割り込みENABLE INTERUUPT_ENABLE sci_write_str(SCI_NO_1, "PINoC Console>_ \r\n"); // Sleep as_SLEEP_LOOP_3069 // sci_write_str(SCI_NO_1, (char*)&text_start); // char* entry_point; // void (*start)(void); // char str[32] = {0,}; // while(1) // { // int i; // sci_write_str(SCI_NO_1, "PINoC Console>_ "); // // // // エンターが入力されるまでループ // getstring(str); // // sci_write(SCI_NO_1, '\n'); // // // メインスイッチ // switch (str[0]) // { // // RAMへロード // case 'l': // sci_write_str(SCI_NO_1, " started!! XMODEM...\n\r"); // xmodem_start((char*)&buf_start); // sci_write_str(SCI_NO_1, " finish!! XMODEM\n\r"); // sci_write_str(SCI_NO_1, " Transfer is Completed...\n\r"); // break; // // // void main(void) の形式で関数ポインタから開始 // case 's': // start = (void*)&buf_start; // start(); // break; // // // メモリダンプ // case 'd': // getstring(str); // asciitobin(str, 4); // // for (i = 0; i < (int)*((short*)str); i++) // sci_write(SCI_NO_1, *(((char*)&buf_start) + i)); // break; // // // elfヘッダ情報表示 // case 'e': // if(elf_read((char*)&buf_start)) // { // sci_write_str(SCI_NO_1, "it's not elf file...\n\r"); // } // else // { // sci_write_str(SCI_NO_1, "it's elf file!!\n\r"); // } // // if(elf_analysis((char*)&buf_start)) // { // sci_write_str(SCI_NO_1, "it's not load file...\n\r"); // } // else // { // sci_write_str(SCI_NO_1, "it's load file!!\n\r"); // } // // RAM展開 // entry_point = elf_develop((char*)&buf_start); // start = (void (*)(void))entry_point; // // // ヘルプ // case 'h': // break; // // case 'q': // dbg(); // as_SLEEP_3069 // dbg(); // break; // // } // // } return 0; }