⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb.t

📁 microwindows移植到S3C44B0的源码
💻 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 + -