#pypp 0 // Iris: micro-kernel for a capability-based operating system. // mips/nanonote/board.ccp: nanonote-specific definitions. // Copyright 2009 Bas Wijnen // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #define ARCH #define INIT #include "kernel.hh" void board_init (): pll_init () cpm_stop_all () #ifndef NDEBUG cpm_start_uart0 () gpio_as_uart0 () #endif // Timer interrupts and buzzer. cpm_start_tcu () // sdram memory. gpio_as_sdram_16bit () // flash memory. gpio_as_nand () // sound controller. gpio_as_aic () // micro-sd controller. gpio_as_msc () // display. gpio_as_lcd_16bit () // buzzer. gpio_as_pwm4 () // Set up memory. setup_sdram () // Use some gpio pins for lcd. gpio_as_gpio (2, (1 << 21) | (1 << 22) | (1 << 23)) gpio_as_output (2, (1 << 21) | (1 << 22) | (1 << 23)) // Set up keyboard: this breaks uart receive. gpio_as_gpio (3, 0x05fc0000) // Set up timed interrupts. tcu_stop_counter (0) tcu_select_extalclk (0) tcu_select_clk_div4 (0) tcu_disable_pwm_output (0) tcu_set_full_data (0, JZ_EXTAL / HZ / 4) tcu_mask_half_match_irq (0) tcu_clear_full_match_flag (0) tcu_unmask_full_match_irq (0) tcu_start_counter (0) #ifndef NDEBUG // Set up uart. UART0_IER = 0 UART0_FCR = 0 UART0_MCR = 0 UART0_SIRCR = 0 UART0_UMR = 0 UART0_UACR = 0 UART0_LCR = UARTLCR_WLEN_8 | UARTLCR_STOP1 | UARTLCR_DLAB unsigned uart_div = 3000000 / 16 / 9600 UART0_DLHR = uart_div >> 8 UART0_DLLR = uart_div UART0_LCR = UARTLCR_WLEN_8 | UARTLCR_STOP1 UART0_FCR = UARTFCR_UUE | UARTFCR_FE | UARTFCR_RFLS | UARTFCR_TFLS dbg_log ("\n\nSerial port initialized\n") #endif void arch_reboot (): // Wait for serial port to be done. while !(UART0_LSR & UARTLSR_TEMT): // Reboot. wdt_select_extalclk () wdt_select_clk_div1 () wdt_set_data (1) wdt_set_count (0) wdt_start () // Wait for wdt to trigger reboot. while true: