//write 8 bit data
#define GPJDATA_0to7(x) GPJDATA &=~(0xFF);GPJDATA |=(x);//printk(KERN_ALERT"%d",x);
//write 4 bit chip selection
#define GPJDATA_8to11(x) GPJDATA &=~(0xF<<8);GPJDATA |=(x<<8);
static int led_3d_open ()
{
GPJCON &= ~(0X3FFFFFF);
GPJCON |= (0X555555);
return 0;
}
static ssize_t led_3d_write()
{
unsigned char *cpd=cpdata;
spinlock_t lock;
int texx,cc;unsigned char teyy;
copy_from_user(cpd,buf,MAXCOPYDATA);
spin_lock_init(&lock);
spin_lock(&lock);
//对GPJ的操作,其中CPD为一拥有固定数据的数组。
teyy=cpd[0];
GPJDATA_8to11(0x0);
GPJDATA_0to7(teyy);
teyy=cpd[1];
GPJDATA_8to11(0xf);
//-----------------write data
for(texx=0;texx<10000000;texx++)
{
GPJDATA_0to7(teyy);
}
spin_unlock(&lock);
}
对上面的代码操作时,先操作一个led_3d_open ,再操作led_3d_write().波形是一次led_3d_open 开始至一次led_3d_write()结束所测量出来的结果。 |