专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »汇编语言 » led驱动:跳过驱动直接使用寄存器操作LED »正文

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_ioctlZLG7289_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_ioctlZLG7289_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_ioctlZLG7289_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条 分0页

发表评论

  • 昵称:
  • 内容: