主题 : mini2440的spi驱动问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 2086
精华: 0
发帖: 4
金钱: 40 两
威望: 40 点
综合积分: 8 分
注册时间: 2008-10-24
最后登录: 2012-05-20
楼主  发表于: 2009-07-30 11:01

 mini2440的spi驱动问题

mini2440的spi驱动问题,数据能正常接收和发送,但是spi的redy位不能自动清0,主要寄存器设置如下:
在open()函数中
r_clkcon |= 0x40000;
spi_gpgcon &=0xFFFFFFCF;//GPGCON-2=11
  spi_gpgcon |=0x00000030;  

  value=(int)spi_gpgcon;  
  printk("spi_gpgcon=0x%x\n",value);

spi_gpgup &= 0xFFFB;//GPGUP-2=1
  spi_gpgup |=0x0004;  

  value=(int)spi_gpgup;  
  printk("spi_gpgup=0x%x\n",value);

spi_gpecon &=0xF03FFFFF;//GPECON-11,12,13=10  
  spi_gpecon |=0x0A800000;  

  value=(int)spi_gpecon;  
  printk("spi_gpecon=0x%x\n",value);

  spi_gpeup &=0xC7FF;//GPEUP-13=1 GPGUP-12,11=0  
  spi_gpeup |=0x2000;  
  value=(int)spi_gpeup;  
  printk("spi_gpeup=0x%x\n",value);
  printk("config SPI...\n");


  config=(int)spi_spcon0;  
  printk("spi_spcon0=0x%x\n",config);  

  spi_sppin0=(0<<2)|(0<<1)|(0<<0);  
  config=(int)spi_sppin0;  
  printk("spi_sppin0=0x%x\n",config);
spi_sppre0=0xFF;//SPI Baud Rate Prescaler Register,Baud Rate=PCLK/2/(Prescaler value+1);

下面是write()
static ssize_t s3c2440_spi_write(struct file *filp,const char __user *buf,size_t count,loff_t *f_ops)  
{
    int spcon;
    char i=0;

copy_from_user(dataTx,buf,sizeof(dataTx));

spi_spcon0=(0<<6)|(0<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);  

    for(i=0;i<10;i++)
    {
     spi_sptdat0=0xff;
    }

  
         if((spi_spsta0&0x01)==1) //data Tx/Rx ready    
           {  
            
                    spi_sptdat0=dataTx[0];  
    spcon=(int)spi_spsta0;        
    printk("spi_spsta%d\n",spcon);//这里打印出来是1
                    printk("txt char=%d\n",dataTx[0];
                    printk("txt char=%c\n",dataTx[0]);
    spcon=(int)spi_sptdat0;
    printk("spi_sptdat0=%d\n",spcon);

             }  
         udelay(10);
         if((spi_spsta0&0x01)==1) //data Tx/Rx ready    
           {  
    printk("txt char=%d\n",dataRx[0]);
                    dataRx[0]=spi_sprdat0;  
    spcon=(int)spi_spsta0;        
    printk("spi_spsta%d\n",spcon);//the first sta

                    printk("txt char=%d\n",dataRx[0]);
       printk("txt char=%c\n",dataRx[0]);
    spcon=(int)spi_sptdat0;
    printk("spi_sptdat0=%d\n",spcon);

             }  
  
   spcon=(int)spi_spcon0;
   printk("spi_spcon=0x%x\n",spcon);
   spcon=(int)spi_spsta0;        
   printk("spi_spsta%d\n",spcon);//the first sta
   spi_spcon0=(0<<6)|(0<<5)|(0<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);  
   //spi_spcon0=0x00;  //Polling,dis-sck,master,low,format A,nomal
// udelay(10);

   return 0;
}

请高手指点一下
级别: 新手上路
UID: 2086
精华: 0
发帖: 4
金钱: 40 两
威望: 40 点
综合积分: 8 分
注册时间: 2008-10-24
最后登录: 2012-05-20
1楼  发表于: 2009-08-03 19:20
怎么没有人回答呢
级别: 新手上路
UID: 2086
精华: 0
发帖: 4
金钱: 40 两
威望: 40 点
综合积分: 8 分
注册时间: 2008-10-24
最后登录: 2012-05-20
2楼  发表于: 2009-08-05 14:42
我已
解决
fighting
级别: 新手上路
UID: 5937
精华: 0
发帖: 29
金钱: 205 两
威望: 112 点
综合积分: 58 分
注册时间: 2009-05-14
最后登录: 2012-07-23
3楼  发表于: 2009-09-06 20:34
楼主,能讲讲怎么解决的吗?让大家都学习一下哈