예제 #1
0
int serial_init() {

	mmio_w32(UART_CR(UART0), 0);
	mmio_w32(GPPUD, 0);
	delay(150);

	mmio_w32(GPPUDCLK0, (1 << 14) | (1 << 15));
	delay(150);

	mmio_w32(GPPUDCLK0, (0));
	mmio_w32(UART_ICR(UART0), 0x7FF);

	mmio_w32(UART_IBRD(UART0), 1);
	mmio_w32(UART_FBRD(UART0), 40);

	mmio_w32(UART_LCRH(UART0), (1 << 4) | (1 << 5) | (1 << 6));
	mmio_w32(UART_IMSC(UART0), (1 << 1) | (1 << 4) | (1 << 5) 	|
								(1 << 6) | (1 << 7) | (1 << 8)	|
								(1 << 9) | (1 << 10));

	mmio_w32(UART_CR(UART0), (1 << 0) | (1 << 8) | (1 << 9));


	return 0;
}
예제 #2
0
파일: lfb.c 프로젝트: WareX97/aPlus
int lfb_init() {
    int i;
    uint32_t* p = (uint32_t*) &lfbio;

    for(i = 0; i < sizeof(lfbio); i += sizeof(uint32_t))
        mmio_w32(LFBIO_BASE + i, *p++);

    mail_send(LFBIO_BASE, LFBIO_BOX);
    mail_recv(LFBIO_BOX);


    mbd->lfb.width = mmio_r32(LFBIO_BASE + 0);
    mbd->lfb.height = mmio_r32(LFBIO_BASE + 4);
    mbd->lfb.pitch = mmio_r32(LFBIO_BASE + 16);
    mbd->lfb.depth = mmio_r32(LFBIO_BASE + 20);    
    mbd->lfb.base = mmio_r32(LFBIO_BASE + 32);
    mbd->lfb.size = mmio_r32(LFBIO_BASE + 36);

#ifdef DEBUG
    memset((void*) mbd->lfb.base, 0xFF, mbd->lfb.size);
#endif

    kprintf(LOG "lfb: %dx%dx%d at 0x%x\n", mbd->lfb.width, mbd->lfb.height, mbd->lfb.depth, mbd->lfb.base);

    return 0;
}
예제 #3
0
void serial_send(uint8_t ch, uint8_t v) {
	(void) ch;

	mutex_lock(&serial_lock);

	while(mmio_r32(UART_FR(UART0)) & (1 << 5))
		;
	mmio_w32(UART_DR(UART0), v);

	mutex_unlock(&serial_lock);
}