/* * 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://www.rt-thread.org/license/LICENSE * * Change Logs: * Date Author Notes * 2010-06-25 Bernard first version */ #include #include #include "board.h" #include "uart.h" #include /** * @addtogroup Loongson SoC3210 */ /*@{*/ /** * This is the timer interrupt service routine. */ void rt_hw_timer_handler() { unsigned int count; count = read_c0_compare(); write_c0_compare(count); write_c0_count(0); /* increase a OS tick */ rt_tick_increase(); } /** * This function will initial OS timer */ void rt_hw_timer_init() { write_c0_compare(CPU_HZ/2/RT_TICK_PER_SECOND); write_c0_count(0); } /** * This function will initial sam7s64 board. */ void rt_hw_board_init() { #ifdef RT_USING_UART /* init hardware UART device */ rt_hw_uart_init(); #endif #ifdef RT_USING_CONSOLE /* set console device */ rt_console_set_device("uart"); #endif /* init operating system timer */ rt_hw_timer_init(); rt_kprintf("current sr: 0x%08x\n", read_c0_status()); } /*@}*/ /* UART line status register value */ #define UARTLSR_ERROR (1 << 7) #define UARTLSR_TE (1 << 6) #define UARTLSR_TFE (1 << 5) #define UARTLSR_BI (1 << 4) #define UARTLSR_FE (1 << 3) #define UARTLSR_PE (1 << 2) #define UARTLSR_OE (1 << 1) #define UARTLSR_DR (1 << 0) void rt_hw_console_output(const char* ptr) { /* stream mode */ while (*ptr) { if (*ptr == '\n') { /* FIFO status, contain valid data */ while (!(UART_LSR(UART0_BASE) & (UARTLSR_TE | UARTLSR_TFE))); /* write data */ UART_DAT(UART0_BASE) = '\r'; } /* FIFO status, contain valid data */ while (!(UART_LSR(UART0_BASE) & (UARTLSR_TE | UARTLSR_TFE))); /* write data */ UART_DAT(UART0_BASE) = *ptr; ptr ++; } }