⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system3.c

📁 UBOOT源码,希望能给大家一点帮助,费了好大心思弄来的.
💻 C
字号:
/********************************************************************** * system3.c * * AUTOR:	SELETZ * * Implements several POST routines for PT System 3 platform * * Copyright (C) 2001 Stefan Eletzhofer <stefan.eletzhofer@www.eletztrick.net> * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#ident "$Id: system3.c,v 1.8 2002/01/07 19:36:15 seletz Exp $"/********************************************************************** * Includes */#ifdef HAVE_CONFIG_H# include <blob/config.h>#endif#include <blob/types.h>#include <blob/errno.h>#include <blob/util.h>#include <blob/command.h>#include <blob/init.h>#include <blob/serial.h>#include <blob/time.h>#include <blob/sa1100.h>#include <blob/sa1111.h>#include <blob/lcd.h>/********************************************************************** * defines */#define MEM(adr)	(*((u32*)adr))#define SET(reg,bit)	((reg) |= (1<<(bit)))#define CLR(reg,bit)	((reg) &= ~(1<<(bit)))/* Optimization barrier *//* The "volatile" is due to gcc bugs */#define barrier() __asm__ __volatile__("": : :"memory")#define	CPLD_BASE	(0x10000000)#define	CPLD_ID		(CPLD_BASE + 0x00)#define	CPLD_IRQ	(CPLD_BASE + 0x24)#define	CPLD_0		(CPLD_BASE + 0x90)#define	CPLD_1		(CPLD_BASE + 0xA0)#define	CPLD_2		(CPLD_BASE + 0xB0)/********************************************************************** * types *//********************************************************************** * program globals *//********************************************************************** * module globals *//********************************************************************** * prototypes */static void sa1111_init();/*********************************************************************//*********************************************************************//*********************************************************************/#if defined(CONFIG_LCD_SUPPORT)__initlist(sa1111_init,		INIT_LEVEL_INITIAL_HARDWARE);static void sa1111_init(){	/* switch on clock for sa1111 */	GAFR |= GPIO_32_768kHz;	GPDR |= GPIO_32_768kHz;	TUCR = TUCR_3_6864MHz;	/* Now, set up the PLL and RCLK in the SA-1111: */	SBI_SKCR = SKCR_PLL_BYPASS | SKCR_RDYEN | SKCR_OE_EN;	msleep(100);	SBI_SKCR = SKCR_PLL_BYPASS | SKCR_RCLKEN | SKCR_RDYEN | SKCR_OE_EN;	SerialOutputString( "SA1111 ID: " );	SerialOutputHex( SBI_SKID );	SerialOutputString( "\n" );	/*	 * SA-1111 Register Access Bus should now be available. Clocks for	 * any other SA-1111 functional blocks must be enabled separately	 * using the SKPCR.	 */	SKPCR |= SKPCR_DCLKEN | SKPCR_PWMCLKEN;	/*	 * If the system is going to use the SA-1111 DMA engines, set up	 * the memory bus request/grant pins. Also configure the shared	 * memory controller on the SA-1111 (SA-1111 Developer's Manual,	 * section 3.2.3) and power up the DMA bus clock:	 */	GAFR |= (GPIO_MBGNT | GPIO_MBREQ);	GPDR |= GPIO_MBGNT;	GPDR &= ~GPIO_MBREQ;	TUCR |= TUCR_MR;	SBI_SMCR = (SMCR_DTIM | SMCR_MBGE |		FInsrt(FExtr(MDCNFG, MDCNFG_SA1110_DRAC0), SMCR_DRAC) |		((FExtr(MDCNFG, MDCNFG_SA1110_TDL0)==3) ? SMCR_CLAT : 0));}static void system3_init_hardware(void){	/* select serial driver */	serial_driver = &sa11x0_serial_driver;}__initlist(system3_init_hardware, INIT_LEVEL_DRIVER_SELECTION);/********************************************************************** * Overwrite LCD functions special for this platform */int lcd_power_up( void ){	SET( MEM( CPLD_0 ), 7 );	PB_DDR = 0xFFFFFFFF;	SKPEN0 = 1;	SKPEN1 = 1;	lcd_contrast( 0x95 );	lcd_brightness( 240 );	lcd_backlight_on();	return 0;}int lcd_power_down( void ){	SKPEN0 = 0;	SKPEN0 = 0;	CLR( MEM( CPLD_0 ), 7 );	return 0;}int lcd_backlight_on( void ){	SET( MEM( CPLD_0 ), 2 );	return 0;}int lcd_backlight_off( void ){	CLR( MEM( CPLD_0 ), 2 );	return 0;}int lcd_contrast( int value ){	SKPWM0 = value;	return 0;}int lcd_brightness( int value ){	SKPWM1 = value;	return 0;}#endif // defined(CONFIG_LCD_SUPPORT)/********************************************************************** * static functions */#if 1#define SMC_BASE	0x18000000#define	BANK_SELECT		14#define LAN91C96_ECOR	0x0#define LAN91C96_ECSR	0x2#define ECOR_RESET	0x80#define ECOR_LEVEL_IRQ	0x40#define ECOR_WR_ATTRIB	0x02#define ECOR_ENABLE	0x01#define ECSR_IOIS8	0x20#define ECSR_PWRDWN	0x04#define ECSR_INT	0x02#define SMC_inb( r )  (*((volatile u8 *)(base+((r)<<2))))static inline unsigned short __SMC_inw(unsigned base, int r){	unsigned char b1, b2;	msleep(1);	b1 = SMC_inb(r);	msleep(1);	b2 = SMC_inb(r+1);	return (b2 << 8) | b1;}#define SMC_inw(r) __SMC_inw(base, r)#define SMC_outb( d, r )  (*((volatile u8 *)(base+((r)<<2))) = (u8)(d))#define SMC_outw( d, r )  do { \		     msleep(1);\                     SMC_outb((d), r); \		     msleep(1);\		     SMC_outb((d)>>8, (r)+1);} while (0)static int smctest( int argc, char *argv[] ){	u32	base	= (u32)SMC_BASE;	u32	*attr;	u16	bank;	/* 0x1a020000 */	attr	= (u32 *)(((u32)base | (1<<25)) + (0x8000*4));	/* enable the device */	attr[LAN91C96_ECOR] |= ECOR_RESET;	msleep(100);	/* the device will ignore all writes to the enable bit while reset is	 * asserted, even if the reset bit is cleared in the same write. Must	 * clear reset first, then enable the device.	 */	attr[LAN91C96_ECOR] &= ~ECOR_RESET;	attr[LAN91C96_ECOR] |= ECOR_ENABLE;	/* force byte mode */	attr[LAN91C96_ECSR] |= ECSR_IOIS8;	bank = SMC_inw( BANK_SELECT );	SerialOutputString( "bank " );	SerialOutputHex( bank & 0xffff );	SerialOutputString( "\n" );	SMC_outw( 0, BANK_SELECT );	bank = SMC_inw( BANK_SELECT );	SerialOutputString( "bank " );	SerialOutputHex( bank & 0xffff );	SerialOutputString( "\n" );	return 0;}static char smctesthelp[] = "test smc 91c96 ethernet chip\n";__commandlist(smctest, "smctest", smctesthelp);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -