Changeset cfe7716 in mainline for uspace/srv/drivers/serial/serial.c
- Timestamp:
- 2010-04-29T14:13:28Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7f8b581
- Parents:
- 953bc1ef
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/drivers/serial/serial.c
r953bc1ef rcfe7716 238 238 } 239 239 240 static int serial_interrupt_enable(device_t *dev) 241 { 242 serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data; 243 244 // enable interrupt globally 245 enable_interrupt(data->irq); 246 247 // enable interrupt on the serial port 248 pio_write_8(data->port + 1 , 0x01); // Interrupt when data received 249 pio_write_8(data->port + 4, 0x0B); 250 251 return EOK; 252 } 253 254 static void serial_initialize_port(device_t *dev) 255 { 256 serial_dev_data_t *data = (serial_dev_data_t *)dev->driver_data; 257 ioport8_t *port = data->port; 258 259 pio_write_8(port + 1, 0x00); // Disable all interrupts 260 pio_write_8(port + 3, 0x80); // Enable DLAB (set baud rate divisor) 261 pio_write_8(port + 0, 0x60); // Set divisor to 96 (lo byte) 1200 baud 262 pio_write_8(port + 1, 0x00); // (hi byte) 263 pio_write_8(port + 3, 0x07); // 8 bits, no parity, two stop bits 264 pio_write_8(port + 2, 0xC7); // Enable FIFO, clear them, with 14-byte threshold 265 pio_write_8(port + 4, 0x0B); // RTS/DSR set (Request to Send and Data Terminal Ready lines enabled), 266 // Aux Output2 set - needed for interrupts 267 } 268 240 269 static int serial_add_device(device_t *dev) 241 270 { … … 250 279 serial_dev_cleanup(dev); 251 280 return EADDRNOTAVAIL; 252 } 253 254 281 } 282 283 // find out whether the device is present 255 284 if (!serial_dev_probe(dev)) { 256 285 serial_dev_cleanup(dev); … … 258 287 } 259 288 260 // TODO interrupt and serial port initialization (baud rate etc.) 289 // serial port initialization (baud rate etc.) 290 serial_initialize_port(dev); 291 292 // TODO register interrupt handler 293 294 // enable interrupt 295 if (0 != (res = serial_interrupt_enable(dev))) { 296 serial_dev_cleanup(dev); 297 return res; 298 } 261 299 262 300 return EOK;
Note:
See TracChangeset
for help on using the changeset viewer.