📄 usb.t
字号:
/* * linux/arch/armnommu/mach-s3c44b0/usb.c * 2003 tpu <tapu@371.net> */#include <linux/init.h>#include <linux/sched.h>#include <linux/interrupt.h>#include <asm/hardware.h>#include <asm/irq.h>#include <asm/arch/irq.h>#include <asm/system.h>#define USB_DATA REGB(0x6000000)#define USB_CMD REGB(0x6000001)void D12_SetAddressEnable(int address){ USB_CMD = 0xd0; USB_DATA = address;}void D12_SetEndpointEnable(int enable){ USB_CMD = 0xd8; USB_DATA = enable;}void D12_SetMode(int config, int clkdiv){ USB_CMD = 0xf3; USB_DATA = config; USB_DATA = clkdiv;}void D12_SetDMA(int mode){ USB_CMD = 0xfb; USB_DATA = mode;}void D12_SetEndpointStatus(int ep, int data){ USB_CMD = 0x40+ep; USB_DATA = data;}static void d12_interrupt(int irq, void *dev_id, struct pt_regs *regs){ int i, data, d0, d1, d2; int intr; USB_CMD = 0xf4; intr = USB_DATA; printk("PDIUSBD12 interrupt: %02x\n", intr); if(intr&0x03){ USB_CMD = 0x00; d0 = USB_DATA; USB_CMD = 0x80; d1 = USB_DATA; USB_CMD = 0x40; d2 = USB_DATA; printk("ep0: 00=%02x 80=%02x 40=%02x ", d0, d1, d2); USB_CMD = 0xf0; data = USB_DATA; data = USB_DATA; printk(" data: "); for(i=0; i<data; i++){ printk("%02x ", USB_DATA); } printk("\n"); USB_CMD = 0xf1; USB_CMD = 0xf2; USB_CMD = 0x01; d0 = USB_DATA; USB_CMD = 0x81; d1 = USB_DATA; USB_CMD = 0x41; d2 = USB_DATA; printk("ep1: 01=%02x 81=%02x 41=%02x\n", d0, d1, d2); USB_CMD = 0xf1; USB_CMD = 0xf2; } }static int __init D12_test(void){ printk("PDIUSBD12 test!\n"); /* nGCS3 */ PCONB |= 0x100; /* Rising Edge Interrupt */ PCONG |= 0x00000030; EXTINT &= 0xfffff0ff; EXTINT |= 0x00000400; /* Suspend Port Config */ PCONF &= 0x0007ffff; PCONF |= 0x00080000; /* Enable Device */ PDATF |= 0x00000100; // D12_SetAddressEnable(0x80);// D12_SetEndpointEnable(1); D12_SetDMA(0xc0); D12_SetMode(0x1e, 0x03); D12_SetEndpointStatus(0, 1); D12_SetEndpointStatus(1, 1); request_irq(INT_EINT2, d12_interrupt, 0, "pdiusbd12", NULL); return 0;}__initcall(D12_test);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -