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

TOP

mini2440 spiÇý¶¯×ܽá(¶þ)
2014-11-24 08:17:52 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:3´Î
Tags£ºmini2440 spi Çý¶¯ ×ܽá
port_status=readl(GPGCON);
port_status&=~GPG_DEFAULT;
port_status|=GPG_DEFAULT;//GPG control
writel(port_status,GPGCON);


port_status=readl(GPECON);
port_status&=~GPE_DEFAULT;
port_status|=GPE_DEFAULT;
writel(port_status,GPECON);//GPE control

port_status=0x0;
port_status=readl(GPEUP);
port_status&=~(1<<13|1<<12|1<<11);
writel(port_status,GPEUP);//GPE_UP


port_status=0x0;
port_status=readl(GPGUP);
port_status&=~(1<<2|1<<3|1<<6);
writel(port_status,GPGUP);//GPG_UP

//disable_irq(IRQ_SPI0);
port_status=readl(SPPRE0);//SPI Baud speed
port_status=0x31;//PCLK=50MHz SPICLK=PCLK/2/(value+1)=1MHz,¶ÔÓÚCC2500×î´óÖ§³Ö500K£¬Ò»°ã²ÉÓÃ250K
writel(port_status,SPPRE0);


port_status=readl(SPCON0);
port_status=SPI_CON_DEFAULT;
writel(port_status,SPCON0);//SPI control



port_status=readl(SPPIN0);
port_status&=~(0<<0|1<<1|1<<2);
port_status|=(1<<2|1<<1|0<<0);
writel(port_status,SPPIN0);//SPI pin setting


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

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


//enable_irq(IRQ_SPI0);
}
//-----------------------------------------------------------------------------------------------------------------
static int spi_open(struct inode *inode,struct file *filp)
{
filp->private_data=spi_devp;
mini2440_spi_config();
//filep->private_data=spi_devp;
s3c2410_gpio_setpin(S3C2410_GPG(2),0);
printk("-----------------------------------\n");
printk("MINI2440 SPI GPG GPE CLK set over\n");
printk("-----------------------------------\n");
return 0;
}


static int spi_release(struct inode *inode,struct file *filp)
{
printk("-----------------------------\n");
printk("S3C2440-mini2440_spi closed\n");
printk("------------------------------\n");
return 0;
}
//-----------------------------------------------------------------------------------------------------------
static ssize_t spi_read(struct file *filp,char __user *buf,size_t count)
{
//char *spiRxData;
struct spi_dev *dev=filp->private_data;
copy_to_user(buf,dev->dataRx,count);
return 0;
}


static ssize_t spi_write(struct file *filp,char __user *buf,size_t count)
{
volatile int endSpiTx=0;
volatile char spiTxData[4];
//int config;
int i=0;
//char str[20];
//char *txStr,*rxStr;
//volatile char *spiTxStr,*spiRxStr;
unsigned char string;
unsigned int port_status;
struct spi_dev *dev=filp->private_data;
//filp->private_data;
//»ñµÃÉ豸½á¹¹ÌåµÄÖ¸Õë
copy_from_user(dev->dataTx,buf,count);
for(i=0;i<4;i++)
{
spiTxData[i]=dev->dataTx[i];
}
printk("receive form user is %s\n",spiTxData);
while(endSpiTx==0)
{
//if(*spiTxData!='\0')
while(!SPI_TXRX_READY)
printk("SPI TXRX unready\n");
for(i=0;i<4;i++)
{

//s3c2410_gpio_setpin(S3C2410_GPG(2),0);//ʹÄÜ´ÓSPI

writeb(spiTxData[i],SPTDAT0);//=*(spiTxData++);
string=readb(SPTDAT0);
printk("transfer char=%c\n",string);
//while(!SPI_TXRX_READY);
dev->dataRx[i]=readb(SPRDAT0);
printk("----------------------------\n");
printk("receive char=%c\n",dev->dataRx[i]);
printk("----------------------------\n");
//s3c2410_gpio_setpin(S3C2410_GPG(2),1);//½â³ýʹÄÜ´ÓSPI
//i++;
}
endSpiTx=1;
}
port_status=readl(SPCON0);
port_status|=((0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0));
writel(port_status,SPCON0);
return 0;
}
//---------------------------------

Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 ÏÂÒ»Ò³ βҳ 2/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)