示例#1
0
void
init_hw2(void){
    int i;

    int ram = (&_estack - &_sdata)/1024;
    int id  = DBGMCU->IDCODE & 0xFFF;
    unsigned short *fl=0;
    unsigned long  *uid=0;

    switch( id ){
    case 0x416:	// cat.1
    case 0x429: // cat.2
        fl  = R_FLASHKB_C1;
        uid = R_UNIQUE_C1;
        break;
    default:	// cat.3,4,5,6
        fl  = R_FLASHKB_CX;
        uid = R_UNIQUE_CX;
        break;
    }

    bootmsg("bootflags = 0x%x, cpuid %x/%x, %dk flash, %dk RAM\n", bootflags, SCB->CPUID, id, *fl, ram);
    bootmsg("clocks: sys %dMHz\n", freq_sys/1000000);
    bootmsg("uid %x-%x-%x\n", uid[0], uid[1], uid[2]);

}
示例#2
0
文件: fatfs.c 项目: jaw0/osj5
int
fatfs_init(MountEntry *me) {
    struct stat s;

    if( nfs >= MAXDISK ) {
        PANIC("too many FATFS");
    }

    struct FatFS *f = & fsinfo[nfs];
    f->me     = me;
    f->n      = nfs;
    me->fsdat = f;

    fstat(me->fdev, &s);
    f->size = s.size;

    f_mount( nfs, & f->ff );

    char buff[13];
    DWORD sno;
    if( f_getlabel("", buff, &sno)==FR_OK ) {
        bootmsg("%s fatfs volume '%s' s/n %x\n",
                me->name, buff, sno);
    }

    nfs ++;

    return 0;
}
示例#3
0
文件: disk.c 项目: jaw0/osj5
static int
dkpart_init(struct Device_Conf *cf, const char *pfx, int dkno, int partno, offset_t start, offset_t len,
            FILE *cont, const char *fstype, const char *mntpt){

    struct DiskPart *dkp = alloc(sizeof(struct DiskPart));

    // name this
    if( mntpt ){
        snprintf(dkp->name, sizeof(dkp->name), "%s", mntpt);
    }else{
        snprintf(dkp->name, sizeof(dkp->name), "%s%d%c:", pfx, dkno, partno + 'a');
    }

    dkp->flags       = cf->flags;
    dkp->fdev        = cont;
    dkp->part_offset = start * DISK_BLOCK_SIZE;
    dkp->part_len    = len   * DISK_BLOCK_SIZE;

    finit( & dkp->file );
    dkp->file.d = (void*)dkp;
    dkp->file.fs = &dkpart_fs;

    fmount( & dkp->file, dkp->name, 0);
    if( fstype ) fmount( & dkp->file, dkp->name, fstype );

    bootmsg( "%s unit %d/%d %qd blocks mounted on %s type %s\n",
	     cf->name, dkno, partno, len, dkp->name, fstype );

    return 0;
}
示例#4
0
文件: lps25hb.c 项目: jaw0/minicopter
void
init_pressure(void) {
    char i;
    for(i=0; i<10; i++) {
        // init
        i2c_xfer(I2CUNIT, ELEMENTSIN(seninit), seninit, 1000000);
        // try to read
        i2c_xfer(I2CUNIT, ELEMENTSIN(senprobe), senprobe, 100000);
        if( probesen[0] == LPS25HB_WHO_I_AM ) break;
    }
    bootmsg(" lps25hb");
}
示例#5
0
文件: lis3mdl.c 项目: jaw0/minicopter
void
init_compass(void){
    char i;
    for(i=0; i<10; i++){
        // init
        i2c_xfer(I2CUNIT, ELEMENTSIN(seninit), seninit, 1000000);
        // try to read
        i2c_xfer(I2CUNIT, ELEMENTSIN(senprobe), senprobe, 100000);
        if( probesen[0] ) break;
    }
    bootmsg(" lis3mdl");
}
示例#6
0
文件: lsm6ds3.c 项目: jaw0/minicopter
void
init_imu(void){
    char i;
    for(i=0; i<10; i++){
        // init
        i2c_xfer(I2CUNIT, ELEMENTSIN(imuinit), imuinit, 1000000);
        // try to read
        i2c_xfer(I2CUNIT, ELEMENTSIN(imuprobe), imuprobe, 100000);
        if( probeimu[0] ) break;
    }
    bootmsg(" lsm6ds3");
}
示例#7
0
文件: touch.c 项目: jaw0/light-stick
void
touch_init(void){
    char i;

    // init
    i2c_xfer(I2CUNIT, ELEMENTSIN(touchinit), touchinit, 1000000);
    // try to read
    i2c_xfer(I2CUNIT, ELEMENTSIN(touchprobe), touchprobe, 1000000);

    if( capbuf[0] == CAP1298_PRODUCT_ID ){
        bootmsg("cap1298 on i2c%d rev. %d\n", I2CUNIT, capbuf[2]);
    }
}
示例#8
0
文件: romdisk.c 项目: jaw0/osj5
int
romdisk_init(struct Device_Conf *dev){
    int port = dev->port;
    char info[32];

    int c = dev->unit;
    finit( & romdsk[c].file );
    romdsk[c].file.d  = (void*)& romdsk[c];
    romdsk[c].file.fs = & romdsk_fs;

    bootmsg( "%s %d bytes\n", dev->name, ROMDISK_SIZE);

    // set flags=1 to not automount
    if( ! dev->flags ){
        snprintf(info, sizeof(info), "%s:", dev->name);
        fmount( & romdsk[c].file, info, "fatfs" );

        bootmsg( "%s mounted on %s type %s\n",
                 dev->name, info, "fatfs" );
    }

    return (int)& romdsk[c].file;
}
示例#9
0
文件: unixdisk.c 项目: jaw0/osj5
int
udsk_init(struct Device_Conf *dev){
    int port = dev->port;

    int c = dev->unit;
    finit( & udsk[c].file );
    udsk[c].no   = c;
    udsk[c].fd = open(DISKFILE, 2);
    udsk[c].file.d  = (void*)& udsk[c];
    udsk[c].file.fs = & udsk_fs;

    bootmsg( "%s %qd bytes @ UNIX %s\n",
	     dev->name, DISKSIZE, DISKFILE);

    dkpart_learn( dev, "ud", c, &udsk[c].file, DISKSIZE / 512 );
    return 0;
}
示例#10
0
/* initialize the serial ports */
int
serial_init(struct Device_Conf *dev){
    int i    = dev->unit;
    USART_TypeDef *addr;
    int irq;
    int b;

    int altpins = dev->flags & CFFLAGS_ALTPINS;

    finit( & com[i].file );
    com[i].file.fs = &serial_port_fs;
    com[i].file.codepage = CODEPAGE_UTF8;
    com[i].head = com[i].tail = com[i].len = 0;
    com[i].status  = 0;
    com[i].portno  = i;
    com[i].file.d  = (void*)&com[i];

    // enable gpio clock, usart clock, configure pins
    serial_pins_init( i, altpins );

    switch(i){
    case 0:
        addr = USART1;
        com[i].baudclock = apb2_clock_freq();
        irq           = (int) IRQ_USART1;
        break;
    case 1:
        addr = USART2;
        com[i].baudclock = apb1_clock_freq();
        irq           = (int) IRQ_USART2;
        break;
    case 2:
        addr = USART3;
        com[i].baudclock = apb1_clock_freq();
        irq           = (int) IRQ_USART3_4;
        break;

    default:
        PANIC("invalid serial");
        break;

    }

    com[i].addr   = addr;

    if( dev->baud )
        serial_setbaud(i, b=dev->baud);
    else
        serial_setbaud(i, b=9600);

    addr->CR1 = 0x0C		// enable rx/tx, no parity, 8 bit, ...
        | 0x20			// enable RX irq
        | 1;			// enable

    // enable ints
    nvic_enable( irq, IPL_TTY );

    if( !serial0_port ){
        serial0_port = &com[i].file;
    }

    bootmsg("%s at io 0x%x irq %d %d baud\n", dev->name, addr, irq, b);

    return (int) &com[i].file;
}