led驱动:跳过驱动直接使用寄存器操作LED来源: 发布时间:星期三, 2008年12月10日 浏览:2次 评论:0
[ft=,,]# <asm/arch/hardware.h>
[ft=,,]# <asm/irq.h> [ft=,,]# ZLG7289_CON 0x31 //in headfile "s3c44b0-spidev.h" [ft=,,]# ZLG7289_BAND 0x1ff //in headfile "s3c44b0-spidev.h" [ft=,,]//---------------------------------------------------------------- [ft=,,]# <stdio.h> [ft=,,]# <fcntl.h> [ft=,,]# <.h> [ft=,,]# <sys/ioctl.h> [ft=,,]# "hardware.h" [ft=,,]# "zlg7289.h" [ft=,,]# "s3c44b0-spi.h" [ft=,,]# SPI_DEV "/dev/spi/0" [ft=,,]# SIO_START 0x08 [ft=,,]# BIT_SIO 1<<INT_SIO [ft=,,]# INT_SIO 4 [ft=,,]# Zlg7289_Re do{write_Zlg7289(ZLG7289_CMD_RST);Delay(20);}while(0) [ft=,,]# zlg7289_flash do{write_Zlg7289(ZLG7289_CMD_FLASH);Delay(20);}while(0) [ft=,,]//------------------------------------------------------------------- [ft=,,] void Delay( t) [ft=,,]{ [ft=,,] i; [ft=,,] for(;t>0;t--) [ft=,,] for(i=0;i<400;i); [ft=,,]} [ft=,,]//--------------------------------------------------------------------- [ft=,,] void write_Zlg7289( cmd) [ft=,,]{ [ft=,,] char buffer; [ft=,,] buffer=(char*)&cmd; [ft=,,] *p1=SIOCON; // 1、见s3c44b0-spi.c中s3c44b0_spi_ioctl、spi.h中Set_SIO_mode作用:将寄存器SIOCON中内容保存起来 [ft=,,] (SIOCON)=ZLG7289_CON; // 2、为SIOCON寄存器付上新值 [ft=,,] *p2=SBRDR; // 3、作用同上! [ft=,,] (SBRDR)=ZLG7289_BAND; // 4、 [ft=,,] PDATB&=~(0x20); [ft=,,] CLEAR_PEND_INT(INT_SIO); //清中断 [ft=,,] SIODAT=(buffer&0xff); //将数据放入SIO数据寄存器SIODAT中 [ft=,,] SIOCON|=SIO_START; //将SIO控制寄存器SIOCON置成可用 [ft=,,] Delay(5); [ft=,,] while(!(INTPND&BIT_SIO)); //等待中断信号 [ft=,,] CLEAR_PEND_INT(INT_SIO); //清中断 [ft=,,] PDATB|=0x20; //相当于s3c44b0-spi.c中s3c44b0_spi_ioctl里ZLG7289_ENABLEZLG7289_DISABLE [ft=,,] SIOCON=*p1; //恢复寄存器SIOCON原有内容 [ft=,,] SBRDR=*p2; [ft=,,] exit(1); [ft=,,]} [ft=,,]//----------------------------------------------------------------------- [ft=,,] void mwrite_Zlg7289(char* buffer, size) [ft=,,]{ [ft=,,] i; [ft=,,] *p1,*p2; [ft=,,] spi_rw data; [ft=,,] data.buffer=buffer; [ft=,,] data.size=size; [ft=,,] *p1=SIOCON; // 1、见s3c44b0-spi.c中s3c44b0_spi_ioctl、spi.h中Set_SIO_mode作用:将寄存器SIOCON中内容保存起来 [ft=,,] (SIOCON)=ZLG7289_CON; // 2、为SIOCON寄存器付上新值 [ft=,,] *p2=SBRDR; // 3、作用同上! [ft=,,] (SBRDR)=ZLG7289_BAND; // 4、 [ft=,,] PDATB&=~(0x20); //相当于s3c44b0-spi.c中s3c44b0_spi_ioctl里ZLG7289_ENABLE [ft=,,] for(i=0;i<size;i){ [ft=,,] CLEAR_PEND_INT(INT_SIO); //清中断 [ft=,,] SIODAT=(buffer &0xff); //将数据放入SIO数据寄存器SIODAT中 [ft=,,] SIOCON|=SIO_START; //将控制寄存器SIOCON置成可用 [ft=,,] Delay(5); //延迟!给硬件留有定停留时间以防运行太快数据读取出错 [ft=,,] while(!(INTPND&BIT_SIO)); //等待中断信号 [ft=,,] CLEAR_PEND_INT(INT_SIO); //清中断 [ft=,,] } [ft=,,] PDATB|=0x20; //相当于s3c44b0-spi.c中s3c44b0_spi_ioctl里ZLG7289_ENABLEZLG7289_DISABLE [ft=,,] SIOCON=*p1; //恢复寄存器SIOCON原有内容 [ft=,,] SBRDR=*p2; //恢复寄存器SBRDR原有内容 [ft=,,] exit(1); [ft=,,]} [ft=,,]//------------------------------------------------------------------------- [ft=,,] void Zlg7289_showStr(char* str) [ft=,,]{ [ft=,,] i; [ft=,,] count=0; [ft=,,] unsigned showdata; [ft=,,] char buffer[20],*p=str; [ft=,,] (strlen(str)>8) //the length must below 8. [ft=,,] str[8]=0; [ft=,,] sscanf(str, "%x", &showdata); [ft=,,] prf("showdata=%x\n",showdata); [ft=,,] for(i=0;i<8&&*p!=0;i){ [ft=,,] buffer[i*2]=(ZLG7289_CMD_DATA1|i); [ft=,,] buffer[i*2+1]=(showdata&0x0f); [ft=,,] showdata>>=4; [ft=,,] p; [ft=,,] count; [ft=,,] } [ft=,,] for(i=count;i<8;i){ [ft=,,] buffer[i*2]=(ZLG7289_CMD_DATA0|i); [ft=,,] buffer[i*2+1]=0x0f; [ft=,,] } [ft=,,] mwrite_Zlg7289(buffer, 16); [ft=,,]} [ft=,,]//-------------------------------------------------------------------------- [ft=,,] ( argc, char **argv){ [ft=,,] float v; [ft=,,] value; [ft=,,] Zlg7289_Re; [ft=,,] (argc1){ [ft=,,] write_Zlg7289; [ft=,,] prf("Zlg7289 in test Mode\n"); [ft=,,] goto end; [ft=,,] } [ft=,,] Zlg7289_showStr(argv[1]); [ft=,,]end: [ft=,,] 0; [ft=,,]} 0
相关文章读者评论
发表评论 |