dma_init(int unit){ RCC->AHBENR |= 1; nvic_enable( dmairq, IPL_DISK ); }
/* 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; }