ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

mini2440 spiÇý¶¯×ܽá(Èý)
2014-11-24 08:17:52 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:2´Î
Tags£ºmini2440 spi Çý¶¯ ×ܽá
------------------------------------------------------------------------------
static const struct file_operations spi_fops={
.owner=THIS_MODULE,
.open=spi_open,
.release=spi_release,
.read=spi_read,
.write=spi_write,
};
static void spi_interrupt(int irq,void *dev_id,struct pt_regs *reg)
{
unsigned int port_status;
unsigned int i=0;
volatile int endSpiRx=0;


port_status=readl(SCRPND);
port_status|=(1<<22);
writel(port_status,SCRPND);

port_status=readl(INTPND);
port_status|=(1<<22);
writel(port_status,INTPND);
//SCRPND|=(1<<22);
//INTPND|=(1<<22);


disable_irq(IRQ_SPI0);
// SPCON0|=(0<<6)|(0<<5)|(0<<4)|(0<<3)|(1<<2)|(0<<1)|(1<<0);



while(endSpiRx==0)
{
while (!SPI_TXRX_READY);
writeb(0xff,SPTDAT0);
while(!SPI_TXRX_READY);
spi_devp->dataRx[i]=SPRDAT0;
i++;
if(i>4)
{
endSpiRx=1;
}
}
port_status=readl(SPCON0);
port_status|=((0<<6)|(1<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0));
writel(port_status,SPCON0);

enable_irq(IRQ_SPI0);
printk("SPI irq end\n");
}
static void spi_setup_cdev(struct spi_dev *dev,int index)
{
int err,devno=MKDEV(SPI_MAJOR,index);
cdev_init(&dev->cdev,&spi_fops);
//cdev_init(&spi_dev,&spi_fops);
dev->cdev.owner=THIS_MODULE;
dev->cdev.ops=&spi_fops;
err=cdev_add(&dev->cdev,devno,1);
if(err)
printk("error\n");
printk("-----------------------------------\n");
}
static int __init spi_init(void)
{
int ret;
dev_t devno=MKDEV(SPI_MAJOR,0);
if(SPI_MAJOR)//ÉêÇëÉ豸ºÅ
ret=register_chrdev_region(devno,1,SPI_NAME);
else//¶¯Ì¬ÉêÇëÉ豸ºÅ
{
ret=alloc_chrdev_region(&devno,0,1,SPI_NAME);
SPI_MAJOR=MAJOR(devno);
}
if(ret<0)
return ret;
//¶¯Ì¬ÉêÇëÉ豸½á¹¹ÌåµÄÄÚ´æ
spi_devp=kmalloc(sizeof(struct spi_dev),GFP_KERNEL);
if(!spi_devp)//ÉêÇëʧ°Ü
{
ret=-ENOMEM;
goto fail_malloc;
}
memset(spi_devp,0,sizeof(struct spi_dev));

spi_setup_cdev(spi_devp,0);

printk("init spi success\n");
return 0;
fail_malloc:
unregister_chrdev_region(devno,1);
return ret;
}
static void __exit spi_exit(void)
{
free_irq(IRQ_SPI0,NULL);
unregister_chrdev(SPI_MAJOR,SPI_NAME);
}
//-----------------------------------------------------------------------------------------------------------------------
module_init(spi_init);
module_exit(spi_exit);


MODULE_LICENSE("GPL");
MODULE_AUTHOR("Gflytu");
MODULE_DESCRIPTION("SPI DRIVER FOR MINI_S3C2440");


Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 ÏÂÒ»Ò³ βҳ 3/3/3
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºÓÃQtCreator×öIDE¿ª·¢·ÇQtµÄC/C++.. ÏÂһƪ£ºLinuxÒôƵÇý¶¯Ö®Èý£ºPCMÉ豸µÄ´´½¨

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Spring Boot Java£º (2025-12-26 16:20:19)
¡¤Spring Boot¤ÇHello (2025-12-26 16:20:15)
¡¤Spring ¤Î»ù±¾¤«¤éŒ (2025-12-26 16:20:12)
¡¤C++Ä£°å (template) (2025-12-26 15:49:49)
¡¤C ÓïÑÔÖÐÄ£°åµÄ¼¸ÖÖ (2025-12-26 15:49:47)