LDD 8 How to write uart interrupt driver - limingth/LASO GitHub Wiki
uart interrupt driver
linux-2.6.35.7/arch/arm/plat-s5p/include/plat/irqs.h
IRQ_S5P_UART_RX0 16
IRQ_S5P_UART_ERR0 17
IRQ_S5P_UART_TX0 18
IRQ_S5P_UART_RX1 20
IRQ_S5P_UART_ERR1 21
IRQ_S5P_UART_TX1 22
IRQ_S5P_UART_RX2 24
IRQ_S5P_UART_ERR2 25
IRQ_S5P_UART_TX2 26
IRQ_S5P_UART_RX3 28
IRQ_S5P_UART_ERR3 29
IRQ_S5P_UART_TX3 30
arch/arm/mach-s5pv210/include/mach/irqs.h
UART3 read interrupt enable
get puart to UART3 SFR
puart = ioremap(0xe2900c00)
SFR setting
puart->ulcon = 0x3;
puart->ucon = 0x7C5;
puart->ubrdiv = 0x23;
puart->udivslot = 0x808;
set irq type (optional)
#include <linux/irq.h>
set_irq_type();
request irq
#include <linux/interrupt.h>
request_irq(0x28, handler, 0, "read_irq", NULL);
init wait queue
init_waitqueus_head(&q);
UART3 write interrupt enable
request_irq(0x30, handler, 0, "write_irq", NULL);
uart_write()
charbuf = c;
enable_irq(UART_TX);
write_handler()
puart->utxh = charbuf;
disable_irq_nosync(UART_TX); // ok!
disable_irq(UART_TX); // could sleep the process, Do NOT use it!