?? board.c
字號:
/* * File : board.c * This file is part of RT-Thread RTOS * COPYRIGHT (C) 2006, RT-Thread Develop Team * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://openlab.rt-thread.com/license/LICENSE * * Change Logs: * Date Author Notes * 2006-09-09 Vai NDS implementation version */#include <rtthread.h>#include <rthw.h>#include <fifo.h>#include "nds.h"/** * @addtogroup NDS *//*@{*//* * Refer to NDSTech Wiki (http://www.bottledlight.com/ds/index.php/System/Timers) * * To make a timer overflow at a particular frequency, * you set the latch accordingly. * A timer with a latched value of 0 counting at 33.4 MHz / 1024 will overflow * every 65536*1024 clocks, or about once every two seconds. * To make the same timer overflow with a period of X seconds, * the calculation looks like: * * latch = 65536 - X*33400000/1024 * */#define DATA_COUNT 0xfeb8 /* 65535 - (0x02000000)/(1024 * 100) */void rt_timer_handler(int vector){ rt_tick_increase(); return;}/*void rt_keypad_interrupt(int vector){ unsigned short keysPressed = ~(REG_KEYINPUT); // Based on the key pressed, move the shape. if(keysPressed & KEY_UP) rt_kprintf("KEY_UP\n"); if(keysPressed & KEY_DOWN) rt_kprintf("KEY_DOWN\n"); if(keysPressed & KEY_LEFT) rt_kprintf("KEY_LEFT\n"); if(keysPressed & KEY_RIGHT) rt_kprintf("KEY_RIGHT\n"); // Change the color of the shape if the relevant key was pressed. if(keysPressed & KEY_A) rt_kprintf("KEY_A\n"); if(keysPressed & KEY_B) rt_kprintf("KEY_B\n"); if(keysPressed & KEY_SELECT) rt_kprintf("KEY_SELECT\n"); if(keysPressed & KEY_START) rt_kprintf("KEY_START\n"); if(keysPressed & KEY_R) rt_kprintf("KEY_R\n"); if(keysPressed & KEY_L) rt_kprintf("KEY_L\n"); return;}void rt_keypad_init(void){ REG_KEYCNT = 0x7fff; rt_hw_interrupt_install(NDS_KEYPAD, rt_keypad_interrupt, RT_NULL); rt_hw_interrupt_umask(NDS_KEYPAD);}*//*#define BUTTON_X 1 << 0#define BUTTON_Y 1 << 1#define SCREEN_OFF 1 << 7void rt_fifo_interrupt(int vector){ unsigned int fifo_buffer; unsigned int type; unsigned int data; while (!(NDS_REG_IPCFIFOCNT & FIFO_EMPTY)) { fifo_buffer = NDS_REG_IPCFIFORECV; type = FIFO_GET_TYPE(fifo_buffer); data = FIFO_GET_TYPE_DATA(fifo_buffer); switch (type) { case FIFO_FIRMWARE: rt_kprintf("Recv Firmware message\n"); break; case FIFO_BUTTONS: break; case FIFO_TOUCH: rt_kprintf("x=%d y=%d\n", (data & (0xff << 8)) >> 8, data & 0xff); break; case FIFO_TIME: rt_kprintf("Recv Time message\n"); break; case FIFO_WIFI: rt_kprintf("Recv WIFI message\n"); break; default: break; } } return;}void rt_fifo_init(void){ NDS_REG_IPCFIFOCNT = FIFO_ENABLE | FIFO_IRQ_ENABLE | FIFO_CLEAR | FIFO_ERROR; rt_hw_interrupt_install(NDS_FIFO, rt_fifo_interrupt, RT_NULL); rt_hw_interrupt_umask(NDS_FIFO); return;}*//** * This function will init Nintendo DS console */void rt_hw_board_init(){ volatile unsigned short *tcp; tcp = (volatile unsigned short *) NDS_TIMER0_DATA; *tcp = DATA_COUNT; tcp = (volatile unsigned short *) NDS_TIMER0_CR; *tcp = (NDS_TCR_CLK1024 | NDS_TCR_ENB | NDS_TCR_IRQ); rt_hw_interrupt_install(NDS_INTTIMER0, rt_timer_handler, RT_NULL); rt_hw_interrupt_umask(NDS_INTTIMER0);// rt_fifo_init();// rt_keypad_init(); return;}/*@}*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -