[BACK]Return to config.c CVS log [TXT][DIR] Up to [local] / funnyos / arch / sam7s64

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