/* ********************************************************************** * File: s3c6410.h * Version: 1.0.0 * Copyright: 2013 (c) Guo Wenxue * Description: This is head file is for s3c6410 common register definition * and some common funciton. * ChangeLog: 1, Release initial version on "Mon Feb 25 11:58:42 CST 2013" * ************************************************************************/ #ifndef __S3C6410_H__ #define __S3C6410_H__ #define MEMORY_BASE_ADDRESS 0x50000000 #define CONFIG_SYS_CLK_FREQ 12000000 /* the OK6410 has 12MHz input clock of PLL */ #define CONFIG_BAUDRATE 115200 /* Default serial port baudrate */ #define CONFIG_STACKSIZE 512 #define S_FRAME_SIZE 72 #define CONFIG_CLK_532_133_66 1 /* CLK:532, HCLKx2:266 HCLK:133, PCLK:66 */ //#define CONFIG_SYNC_MODE /* Refer to datasheet P142: FOUT = MDIV x FIN / (PDIV X 2SDIV) */ //#define CONFIG_CLK_667_133_66 1 /* CLK:667, HCLKx2:266 HCLK:133, PCLK:66 */ #ifdef CONFIG_CLK_667_133_66 #undef CONFIG_SYNC_MODE #endif #define set_pll(mdiv, pdiv, sdiv) ((1<<31) | (mdiv<<16) | (pdiv<<8) | sdiv) #ifdef CONFIG_CLK_532_133_66 /* APLL = FOUT = MDIV X FIN / (PDIV X 2^SDIV) = 266*12MHz/(3*2^1) = 532MHz */ #define APLL_MDIV 266 #define APLL_PDIV 3 #define APLL_SDIV 1 #elif defined(CONFIG_CLK_667_133_66) /* APLL = FOUT = MDIV X FIN / (PDIV X 2^SDIV) = 333*12MHz/(3*2^1) = 667MHz */ #define APLL_MDIV 333 #define APLL_PDIV 3 #define APLL_SDIV 1 #endif #define APLL_VAL set_pll(APLL_MDIV, APLL_PDIV, APLL_SDIV) #define Startup_APLL (CONFIG_SYS_CLK_FREQ/(APLL_PDIV<> 16) #define FShft(Field) ((Field) & 0x0000FFFF) #define FMsk(Field) (((UData (1) << FSize(Field)) - 1) << FShft (Field)) #define FAlnMsk(Field) ((UData (1) << FSize(Field)) - 1) #define F1stBit(Field) (UData (1) << FShft(Field)) #define FClrBit(Data, Bit) (Data = (Data & ~(Bit))) #define FClrFld(Data, Field) (Data = (Data & ~FMsk(Field))) #define FInsrt(Value, Field) (UData(Value) << FShft(Field)) #define FExtr(Data, Field) ((UData(Data) >> FShft(Field)) & FAlnMsk(Field)) typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; struct rt_hw_register { unsigned int r0; unsigned int r1; unsigned int r2; unsigned int r3; unsigned int r4; unsigned int r5; unsigned int r6; unsigned int r7; unsigned int r8; unsigned int r9; unsigned int r10; unsigned int fp; unsigned int ip; unsigned int sp; unsigned int lr; unsigned int pc; unsigned int cpsr; unsigned int ORIG_r0; }; /* UART (see manual chapter 11) */ typedef struct { volatile u32 ULCON; volatile u32 UCON; volatile u32 UFCON; volatile u32 UMCON; volatile u32 UTRSTAT; volatile u32 UERSTAT; volatile u32 UFSTAT; volatile u32 UMSTAT; #ifdef __BIG_ENDIAN volatile u8 res1[3]; volatile u8 UTXH; volatile u8 res2[3]; volatile u8 URXH; #else /* Little Endian */ volatile u8 UTXH; volatile u8 res1[3]; volatile u8 URXH; volatile u8 res2[3]; #endif volatile u32 UBRDIV; #ifdef __BIG_ENDIAN volatile u8 res3[2]; volatile u16 UDIVSLOT; #else volatile u16 UDIVSLOT; volatile u8 res3[2]; #endif } s3c64xx_uart; enum s3c64xx_uarts_nr { S3C64XX_UART0, S3C64XX_UART1, S3C64XX_UART2, }; static inline s3c64xx_uart *s3c64xx_get_base_uart(enum s3c64xx_uarts_nr nr) { return (s3c64xx_uart *)(ELFIN_UART_BASE + (nr * 0x400)); } static inline unsigned char s3c_readb(unsigned int addr) { return *(volatile unsigned char *)(addr); } static inline unsigned short s3c_readw(unsigned int addr) { return *(volatile unsigned short *)(addr); } static inline unsigned int s3c_readl(unsigned int addr) { return *(volatile unsigned int *)(addr); } static inline void s3c_writeb(unsigned char bval, unsigned int addr) { *(volatile unsigned char *)(addr) = bval; } static inline void s3c_writew(unsigned short wval, unsigned int addr) { *(volatile unsigned short *)(addr) = wval; } static inline void s3c_writel(unsigned int lval, unsigned int addr) { *(volatile unsigned int *)(addr) = lval; } #endif /* end of __ASSEMBLY__ */ #endif /*__S3C6410_H__*/