123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- /*
- * 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-23 Bernard first version
- * 2006-09-24 Bernard add rt_hw_finsh_init implementation
- */
- #include <rtthread.h>
- #include <rthw.h>
- #include <s3c44b0.h>
- #include "board.h"
- /* #define BOARD_DEBUG */
- extern void rt_serial_putc(const char ch);
- #define DATA_COUNT 0xfff
- /**
- * @addtogroup wh44b0
- */
- /*@{*/
- void rt_timer_handler(int vector)
- {
- #ifdef BOARD_DEBUG
- rt_kprintf("timer handler, increase a tick\n");
- #endif
- rt_tick_increase();
- }
- void rt_hw_port_init(void)
- {
- /* PORT A GROUP */
- /* BIT 9 8 7 6 5 4 3 2 1 0 */
- /* A24 A23 A22 A21 A20 A19 A18 A17 A16 A0 */
- /* 1 1 1 1 1 1 1 1 1 1 */
- PCONA = 0x1ff;
- PDATA = 0x2db;
- /* PORT B GROUP */
- /* BIT 10 9 8 7 6 5 4 3 2 1 0 */
- /* /CS5 /CS4 /CS3 /CS2 /CS1 nWBE3 nWBE2 /SRAS /SCAS SCLS SCKE */
- /* NC NC RTL8019 USBD12 NV_Flash NC NC Sdram Sdram Sdram Sdram*/
- /* 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1 */
- PDATB = 0x4f;
- PCONB = 0x7cf;
- /* PORT C GROUP */
- /* BUSWIDTH=16 */
- /* PC15 14 13 12 11 10 9 8 */
- /* o o RXD1 TXD1 o o o o */
- /* NC NC Uart1 Uart1 NC NC NC NC */
- /* 01 01 11 11 01 01 01 00 */
- /* PC7 6 5 4 3 2 1 0 */
- /* o o o o o o o o */
- /* NC NC NC NC NFALE NFCLE NFCE NFRB*/
- /* 01 01 01 01 01 01 01 00 */
- PDATC = 0x3001; /* All IO is low */
- PCONC = 0x5f555555;
- PUPC = 0x3000; /* PULL UP RESISTOR should be enabled to I/O */
- /* PORT D GROUP */
- /* PORT D GROUP(I/O OR LCD) */
- /* BIT7 6 5 4 3 2 1 0 */
- /* VF VM VLINE VCLK VD3 VD2 VD1 VD0 */
- /* 01 01 01 01 01 01 01 01 */
- PDATD= 0x0;
- PCOND= 0xaaaa;
- PUPD = 0x00; /* These pins must be set only after CPU's internal LCD controller is enable */
-
- /* PORT E GROUP */
- /* Bit 8 7 6 5 4 3 2 1 0 */
- /* ENDLAN LED3 LED2 LED1 LED0 BEEP RXD0 TXD0 CLKOUT */
- /* 00 01 01 01 01 01 10 10 11 */
- PCONE = 0x556b; /*0->input, 1 2->TXD0 RXD0, 3 4->input, 5->led, 6->buzzer, 7->led, 8->CODECLK */
- PDATE = 0x57;
- PUPE = 0x006; /* disable all pull-up */
-
- /* PORT F GROUP */
- /* Bit8 7 6 5 4 3 2 1 0 */
- /* IISCLK IISDI IISDO IISLRCK Input Input Input IICSDA IICSCL */
- /* 100 010 010 001 00 01 01 10 10 */
- PDATF = 0x2f;
- PCONF = 0x24900a;
- PUPF = 0x1d3;
- /* PORT G GROUP */
- /* BIT7 6 5 4 3 2 1 0 */
- /* INT7 INT6 INT5 INT4 INT3 INT2 INT1 INT0 */
- /* S3 S4 S5 S6 NIC EXT IDE USB */
- /* 11 11 11 11 11 11 11 11 */
- PDATG = 0xfc;
- PCONG = 0x000f; /* eint1 is eth interrupt in WH44B0 */
- PUPG = 0x00; /* should be enabled */
- SPUCR=0x7; /* D15-D0 pull-up disable */
- /* all external interrupts are triggered by low level */
- EXTINT=0x0;
- }
- /**
- * This function will init lumit4510 board
- */
- void rt_hw_board_init()
- {
- /* init port setting */
- rt_hw_port_init();
- /* set timer0 register */
- /* stop timer */
- TCON &= ~(0x00000001);
- /* dead zone = 0, pre = 150 */
- TCFG0 = 0x00000095;
- /* all are interrupt mode */
- TCFG1 = 0x00000003;
- TCNTB0 = DATA_COUNT;
- TCMPB0 = 0;
- /* manual update */
- TCON |= 0x00000002;
- /* auto reload on,output inverter off */
- TCON &= ~(0x0000000f);
- TCON |= (0x00000008);
- /* install timer handler */
- rt_hw_interrupt_install(INT_TIMER0, rt_timer_handler, RT_NULL);
- rt_hw_interrupt_umask(INT_TIMER0);
- /* start timer */
- TCON |=(0x00000001);
- }
- void rt_hw_led_set(rt_uint32_t led)
- {
- if((led & 0x01)==0x01) /* D1 */
- PDATC = PDATC | (1<<1) ;
- else
- PDATC = PDATC & (~(1<<1)) ;
-
- if((led & 0x02)==0x02) /* D2 */
- PDATC = PDATC | (1<<2) ;
- else
- PDATC = PDATC & (~(1<<2)) ;
- if((led & 0x04)==0x04) /* D3 */
- PDATC = PDATC | (1<<3) ;
- else
- PDATC = PDATC & (~(1<<3)) ;
- }
- /* led loop */
- void rt_hw_led_flash(void)
- {
- register int i;
- rt_hw_led_set(0x01);
- for ( i = 0; i < 2000000; i++);
-
- rt_hw_led_set(0x02);
- for ( i = 0; i < 2000000; i++);
-
- rt_hw_led_set(0x04);
- for ( i = 0; i < 2000000; i++);
- }
- #ifdef RT_USING_FINSH
- extern void finsh_notify(void);
- void rt_serial_isr(int vector)
- {
- finsh_notify();
- }
- void rt_hw_finsh_init()
- {
- /* install UART isr */
- rt_hw_interrupt_install(INT_URXD0, rt_serial_isr, RT_NULL);
- rt_hw_interrupt_umask(INT_URXD0);
- }
- #endif
- void rt_hw_console_output(const char* string)
- {
- while (*string)
- {
- rt_serial_putc(*string++);
- }
- }
- /*@}*/
|