⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spidemo.c~

📁 三星ARM9 2410 SPI接口驱动源代码 for linux 2.4 内核
💻 C~
字号:
#include <linux/types.h>#include <linux/stat.h>#include <linux/fcntl.h>#include <stdio.h>#include "spi.h"int dev_handle,boot_handle,PacketNum,DotNum;unsigned char bootdata[60*1024],*p;unsigned int filelen;unsigned long temp;void check_packet(){  while(1)    {      if(ioctl(dev_handle,SPI_CHECK_DATA,&PacketNum)==TestDataTimeOut)	{	  //      printf("Test Time out!Reboot dsp\n");	  //	  boot();	  break;	}      if(ioctl(dev_handle,SPI_CHECK_DATA,&PacketNum)==TestDataReady)	{	  printf("Received %d Packet\n",PacketNum);	  while(PacketNum--)	    {	      ioctl(dev_handle,SPI_GET_DATA,bootdata);	      if(*(unsigned short *)bootdata!=0x55aa)		printf("Packet flag error,not 0x55aa\n");	      else		{		  printf("Packet Len=%d\n",*(unsigned short *)(bootdata+2));		  if(bootdata[4]!=DataPacket)		    printf("Error packet type\n");		  else		    {		      printf("Data packet\n");	  		      switch(bootdata[5]){		      case SPI_ADSL_PSD:			printf("SPI_ADSL_PSD Packet received!\n");			break;		      case SPI_ADSL_RMS:			printf("SPI_ADSL_RMS Packet received!\n");			break;		      case SPI_ADSL_ATT:			printf("SPI_ADSL_ATT Packet received!");			break;		      case SPI_ADSL_BALANCE:			printf("SPI_ADSL_BALANCE Packet received!\n");			break;		      case SPI_ADSL_FEXT:			printf("SPI_ADSL_FEXT Packet received!\n");			break;		      case SPI_ADSL_NEXT:			printf("SPI_ADSL_NEXT Packet received!\n");			break;		      case SPI_ADSL_VOL:			printf("SPI_ADSL_VOL Packet received!\n");			break;		      case SPI_ADSL_RES:			printf("SPI_ADSL_RES Packet received!\n");			break;		      default:			printf("error packet type\n");			break;		      }		      p=bootdata+18;		      switch(bootdata[5]){		      case SPI_ADSL_PSD:		      case SPI_ADSL_ATT:		      case SPI_ADSL_BALANCE:		      case SPI_ADSL_FEXT:		      case SPI_ADSL_NEXT:			break;		      case SPI_ADSL_VOL:		      case SPI_ADSL_RES:		      case SPI_ADSL_RMS:			temp=((*p)>>4&0xf)*10000000;			temp+=((*p)&0xf)*1000000;			p++;			temp+=((*p)>>4&0xf)*100000;			temp+=((*p)&0xf)*10000;			p++;			temp+=((*p)>>4&0xf)*1000;			temp+=((*p)&0xf)*100;			p++;			temp+=((*p)>>4&0xf)*10;			temp+=((*p)&0xf);			printf("Value=%d.",temp);			p++;			temp=((*p)>>4&0xf)*1000;			temp+=((*p)&0xf)*100;			p++;			temp+=((*p)>>4&0xf)*10;			temp+=((*p)&0xf);			printf("%d\n.",temp);			break;		      default:			printf("error packet type\n");			break;		      }		    }		}	    }	  break;	}    }              //while(1) end}int boot(){    boot_handle=open("bootload.bin",O_RDONLY);  if(boot_handle==-1)    {      printf("Boot file not found,reset dsp fauler!\n");      close(dev_handle);      return -1;    }    filelen=lseek(boot_handle,0,SEEK_END);  lseek(boot_handle,0,SEEK_SET);  read(boot_handle,bootdata,filelen);  close(boot_handle);  ioctl(dev_handle,SPI_SET_BOOTLEN,filelen);  return ioctl(dev_handle,SPI_SEND_BOOTDATA,bootdata);} /*#define SPI_ADSL_PSD     1#define SPI_ADSL_RMS     2#define SPI_ADSL_ATT     3#define SPI_ADSL_BALANCE 4#define SPI_ADSL_FEXT    5#define SPI_ADSL_NEXT    6#define SPI_ADSL_VOL     7#define SPI_ADSL_RES     8#define SPI_ADSL_STOPTEST 9*/int main(){    dev_handle=open("/dev/spi_drv",O_RDWR);  if(dev_handle==-1)    {      printf("Device not exist,check system!\n");      return -1;    }  while(1)    {      printf("0:boot dsp  1:PSD   2:RMS   3:ATT    4:BALANCE\n");      printf("5:FEXT      6:NEXT  7:VOL   8:RES    9:end demo\n");      printf("p:Power off r:Modem reset   b:BL on  o:BL off\n");      bootdata[0]="\0";      fgets(bootdata,100,stdin);      if(!strcmp(bootdata,"0\n"))	boot();      if(!strcmp(bootdata,"p\n"))	ioctl(dev_handle,SPI_POWER_OFF,NULL);      if(!strcmp(bootdata,"r\n"))	ioctl(dev_handle,SPI_MODEM_RESET,NULL);      if(!strcmp(bootdata,"b\n"))	ioctl(dev_handle,SPI_BLIGHT_ON,NULL);      if(!strcmp(bootdata,"o\n"))	ioctl(dev_handle,SPI_BLIGHT_OFF,NULL);      if(!strcmp(bootdata,"1\n"))	{	  ioctl(dev_handle,SPI_ADSL_PSD,NULL);	  check_packet();	  //	  ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL);	}      if(!strcmp(bootdata,"2\n"))	{	  ioctl(dev_handle,SPI_ADSL_RMS,NULL);	  check_packet();	  //	  ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL);	}      if(!strcmp(bootdata,"3\n"))	{	  ioctl(dev_handle,SPI_ADSL_ATT,1);             //slave	  check_packet();	  //	  ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL);	}      if(!strcmp(bootdata,"4\n"))	{	  ioctl(dev_handle,SPI_ADSL_BALANCE,NULL);	  check_packet();	  //	  ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL);	}      if(!strcmp(bootdata,"5\n"))	{	  ioctl(dev_handle,SPI_ADSL_FEXT,1);	  check_packet();	  //	  ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL);	}      if(!strcmp(bootdata,"6\n"))	{	  ioctl(dev_handle,SPI_ADSL_NEXT,NULL);	  check_packet();	  //	  ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL);	}      if(!strcmp(bootdata,"7\n"))	{	  ioctl(dev_handle,SPI_ADSL_VOL,NULL);	  check_packet();	  //	  ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL);	}      if(!strcmp(bootdata,"8\n"))	{	  ioctl(dev_handle,SPI_ADSL_RES,NULL);	  check_packet();	  //	  ioctl(dev_handle,SPI_ADSL_STOPTEST,NULL);	}      if(!strcmp(bootdata,"9\n"))	break;    }            close(dev_handle);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -