Annotation of funnyos/arch/sam7s64/config.c, Revision 1.20
1.1 init 1: /*
1.20 ! nbrk 2: * $Id: config.c,v 1.19 2008/01/06 18:15:03 nbrk Exp $
1.1 init 3: */
4: #include <sys/types.h>
5: #include <sys/device.h>
6:
1.9 nbrk 7: #include <dev/cpuvar.h>
8: #include <arch/sam7s64/dev/at91sam7.h>
1.4 nbrk 9:
1.1 init 10: /*
11: * Configuration file for platform (AT91SAM7S64).
12: */
13:
14: /* device drivers */
15: extern struct driver root_dr;
16: extern struct driver cpu_dr;
1.3 init 17: extern struct driver saapbus_dr;
1.7 nbrk 18: extern struct driver sapio_dr;
1.8 nbrk 19: extern struct driver gpioled_dr;
1.13 nbrk 20: extern struct driver saaic_dr;
21: extern struct driver sartt_dr;
1.14 nbrk 22: extern struct driver gpiobtn_dr;
1.15 nbrk 23: extern struct driver saspi_dr;
1.16 nbrk 24: extern struct driver spisdmmc_dr;
1.17 nbrk 25: extern struct driver sdmmc_dr;
1.18 nbrk 26: extern struct driver gpio7seg_dr;
1.20 ! nbrk 27: extern struct driver p64lcd_dr;
! 28: extern struct driver h44780_dr;
1.1 init 29:
1.9 nbrk 30: extern void (*putchar)(char);
1.10 nbrk 31: extern void sausart_early_putchar(char ch);
1.1 init 32:
33: /* amount of physical memory, in Bytes */
1.5 nbrk 34: uint32_t physmem = 16384 /* 16KB :) */;
1.1 init 35:
36: /*
37: * Where to attach each device.
38: */
39: struct attachinfo config_attachinfo[] = {
40: /* child, parent, pminor, loc, intrno, flags */
1.14 nbrk 41: { "cpu" , "root", 0, 0, -1, 0 },
42: { "saapbus","root", 0, 0, -1, 0 },
43: { "sapio", "saapbus", 0, 0, -1, 0 },
44: { "gpioled","sapio", 0, 17, -1, 0 },
45: { "gpioled","sapio", 0, 18, -1, 0 },
46: { "gpiobtn","sapio", 0, 19, 0, 0 /*controls gpioled/0*/},
47: { "gpiobtn","sapio", 0, 20, 30, 0 /*controls gpioled/1*/},
1.18 nbrk 48: { "gpio7seg","sapio", 0, 0, -1, 0 },
1.20 ! nbrk 49: { "p64lcd", "sapio", 0, 0, -1, 0 },
! 50: { "h44780", "p64lcd", 0, 0, -1, 0 },
1.14 nbrk 51: // { "sartt", "saapbus", 0, 0, 1, 0 },
1.15 nbrk 52: { "saspi", "saapbus", 0, 0, 0, 0 },
1.20 ! nbrk 53: { "spisdmmc","saspi", 0, 0, 0, 0 },
! 54: { "sdmmc", "spisdmmc", 0, 0, 0, 0 },
1.15 nbrk 55: // { "saaic", "saapbus", 0, 0, -1, 0 },
1.14 nbrk 56: { NULL, NULL, 0, 0, -1, 0 }
1.1 init 57: };
58:
59:
60: /*
61: * Link device names with their drivers.
62: */
63: struct driverinfo config_driverinfo[] = {
64: /* name, driverp, ninstances (should be -1) */
65: { "root", &root_dr, -1 },
66: { "cpu" , &cpu_dr, -1 },
1.3 init 67: { "saapbus" , &saapbus_dr, -1 },
1.7 nbrk 68: { "sapio", &sapio_dr, -1 },
1.8 nbrk 69: { "gpioled", &gpioled_dr, -1 },
1.13 nbrk 70: { "saaic", &saaic_dr, -1 },
71: { "sartt", &sartt_dr, -1 },
1.15 nbrk 72: { "gpiobtn", &gpiobtn_dr, -1 },
73: { "saspi", &saspi_dr, -1 },
1.16 nbrk 74: { "spisdmmc", &spisdmmc_dr, -1 },
1.17 nbrk 75: { "sdmmc", &sdmmc_dr, -1 },
1.18 nbrk 76: { "gpio7seg", &gpio7seg_dr, -1 },
1.20 ! nbrk 77: { "p64lcd", &p64lcd_dr, -1 },
! 78: { "h44780", &h44780_dr, -1 },
1.1 init 79: { NULL, NULL, 0 }
80: };
81:
82:
83: /*
84: * Machine early-stage initialization hooks.
85: */
86:
87: void
1.4 nbrk 88: config_machineinit(void)
1.1 init 89: {
90: /*
1.4 nbrk 91: * Initialize critical devices at startup.
1.1 init 92: */
1.9 nbrk 93: __cpu_disable_irq();
1.4 nbrk 94:
1.5 nbrk 95: /* disable watchdog */
1.9 nbrk 96: *AT91C_WDTC_WDMR = AT91C_WDTC_WDDIS;
1.5 nbrk 97:
1.9 nbrk 98: /* set FLASH to high-speed */
99: *AT91C_MC_FMR = AT91C_MC_FWS_0FWS;
1.5 nbrk 100:
1.11 nbrk 101: /* enable user RESET (magic button on board) */
102: *AT91C_RSTC_RMR = AT91C_RSTC_URSTEN | AT91C_RSTC_KEY;
103:
1.5 nbrk 104: /*
1.9 nbrk 105: * Initialize oscillators.
106: * Taken from Atmel's examples.
1.6 nbrk 107: */
1.9 nbrk 108: /* Set MCK at 48 054 850 */
1.6 nbrk 109:
1.9 nbrk 110: /* 1 Enabling the Main Oscillator */
111: /* SCK = 1/32768 = 30.51 uSecond
112: * Start up time = 8 * 6 / SCK = 56 * 30.51 = 1,46484375 ms
1.5 nbrk 113: */
1.9 nbrk 114: *AT91C_PMC_MOR = ( (AT91C_CKGR_OSCOUNT & (0x06 <<8)) | AT91C_CKGR_MOSCEN);
1.5 nbrk 115:
1.9 nbrk 116: /* Wait the startup time */
117: while(!(*AT91C_PMC_SR & AT91C_PMC_MOSCS))
118: ;
1.5 nbrk 119:
1.9 nbrk 120: /* 2 Checking the Main Oscillator Frequency (Optional) */
121: /* TODO */
1.5 nbrk 122:
1.9 nbrk 123: /* 3 Setting PLL and divider: */
124: /* - div by 14 Fin = 1.3165 =(18,432 / 14)
125: * - Mul 72+1: Fout = 96.1097 =(3,6864 *73)
126: * for 96 MHz the erroe is 0.11%
127: * Field out NOT USED = 0
128: * PLLCOUNT pll startup time estimate at : 0.844 ms
129: * PLLCOUNT 28 = 0.000844 /(1/32768)
130: */
131: *AT91C_PMC_PLLR = ( (AT91C_CKGR_DIV & 14 ) |
132: (AT91C_CKGR_PLLCOUNT & (28<<8)) |
133: (AT91C_CKGR_MUL & (72<<16)) );
1.5 nbrk 134:
1.9 nbrk 135: /* Wait the startup time */
136: while(!(*AT91C_PMC_SR & AT91C_PMC_LOCK))
137: ;
138: while(!(*AT91C_PMC_SR & AT91C_PMC_MCKRDY))
139: ;
1.5 nbrk 140:
1.9 nbrk 141: /* 4. Selection of Master Clock and Processor Clock */
142: /* select the PLL clock divided by 2: */
143: *AT91C_PMC_MCKR = AT91C_PMC_PRES_CLK_2;
144: while(!(*AT91C_PMC_SR & AT91C_PMC_MCKRDY))
145: ;
146:
147: *AT91C_PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
148: while(!(*AT91C_PMC_SR & AT91C_PMC_MCKRDY))
149: ;
1.5 nbrk 150:
1.12 nbrk 151: /* enable clock to all modules */
1.11 nbrk 152: *AT91C_PMC_PCER = AT91C_ALL_INT;
1.9 nbrk 153:
154: /* initialize USART0 (we clock it in PMC above) */
155:
1.19 nbrk 156: *AT91C_PIOA_PDR = AT91C_PA21_RXD1 | /* Enable RxD0 Pin */
157: AT91C_PA22_TXD1; /* Enalbe TxD0 Pin */
1.9 nbrk 158:
1.19 nbrk 159: *AT91C_US1_MR = AT91C_US_USMODE_NORMAL | /* Normal Mode */
1.9 nbrk 160: AT91C_US_CLKS_CLOCK | /* Clock = MCK */
161: AT91C_US_CHRL_8_BITS | /* 8-bit Data */
162: AT91C_US_PAR_NONE | /* No Parity */
163: AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */
164:
1.19 nbrk 165: *AT91C_US1_BRGR = 48054857 / 16 / 9600; /* Baud Rate Divisor */
1.9 nbrk 166:
1.10 nbrk 167: /* enable DMA transfers on USART0 */
1.19 nbrk 168: *AT91C_US1_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;
1.10 nbrk 169:
1.19 nbrk 170: *AT91C_US1_CR = AT91C_US_RXEN | /* Receiver Enable */
1.9 nbrk 171: AT91C_US_TXEN; /* Transmitter Enable */
172:
173: /* redefine putchar */
1.10 nbrk 174: putchar = sausart_early_putchar;
1.20 ! nbrk 175:
1.1 init 176: }
177:
178:
CVSweb