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

📄 dsp_flash.h

📁 基于DSP芯片TMS320LF2407的高速公路室外显示屏驱动程序
💻 H
字号:
/*sp_flash.h*/ 
/*by lizw */
   
#ifndef DSP_FLASH_H   
#define DSP_FLASH_H    
   
volatile unsigned char *p_flashbuf=(volatile unsigned char*)  0x0940;

int  connect_sms(int total_len,volatile unsigned char *p,int length){
    int group_num;
    int i;
    
    group_num=(*p)&0x0f;
    if(length>110)
       length=110;
    if(group_num>4)
       return total_len;
    
    if(group_num==0){
       for(i=0;i<length-1;i++)
          *(p_flashbuf+i)=*(p+i+1);
       do{
          if(i<108)
            *(p_flashbuf+i)=0xff;
           i++;
         }while(i<109);              
    }     
    if(group_num!=0){
      for(i=0;i<100;i++){
           if(i<length-9)
              *(p_flashbuf+group_num*100+9+i)=*(p+10+i);
           else
              *(p_flashbuf+group_num*100+9+i)=0xff;
         }
      
    }
    if(length==0){
       for(i=0;i<510;i++)
          *(p_flashbuf+i)=0xff;
    }
    
    return 509;
}
void flash_buf(int k,int length){
     volatile unsigned char *pdata=(volatile unsigned char*)  0xE000; 
     int a;
     int i;
     BYTE temp;
     
     temp=g_flag;
     g_flag=g_flag&0xF0;
     g_flag=g_flag+0x08;
     selectchip(g_flag); 
     
     a=k%2;
     k=k/2;
     
     if(a==0) {
         for(i=0;i<length;i++)
           *(pdata+i+k*0x0400)=*(p_flashbuf+i);
        }
     else{
         for(i=0;i<length;i++)
           *(p_flashbuf+i)=*(pdata+i+k*0x0400);
        }
      
     g_flag=temp;    
	 selectchip(g_flag);
}
 


int flash_read(int i,volatile unsigned char *p,int a) {   
    int m,n;
    volatile unsigned char *pdata=(volatile unsigned char*)  0x8000;	
    BYTE temp; 
    BYTE ch;
    unsigned int kk_cmp;
    temp=g_flag;
    g_flag=g_flag&0xF0;
    g_flag=g_flag+0x03;
    selectchip(g_flag);
    m=i/2;
    n=i%2;      	
	*pdata=m;
	
	g_flag=g_flag&0xF0;
    g_flag=g_flag+0x00;    
	selectchip(g_flag);
   
    if(a==0){
       m=0;
       /*while(((*(pdata+n*0x4000+m))!=0xff)&&(m<510)){
	      *(p+m)=*(pdata+n*0x4000+m);
	       m++;
	   }*/
	   do{
	    ch=*(pdata+n*0x4000+m);
	    *(p+m)=ch;
	    m++;
        if(m==86) 
            m=m+1-1;
        kk_cmp=ch;
        kk_cmp=kk_cmp&0x00ff;
	   }while((kk_cmp!=0xff)&&(m<511));
	    m--;
	 }
	else{
	  for(i=0;i<509;i++)
	     *(p+i)=*(pdata+n*0x4000+i);
	     
	   m=509;
	 }   
	
    g_flag=temp;    
	selectchip(g_flag); 
	
	return m;
	
}
////////////////////////////////////////////

  	
int erase_sector(int  i) 
{ 
	int  m,n;
	volatile unsigned char *pdata=(volatile unsigned char*)  0x8000;
    BYTE read,flag1,flag2;
    BYTE temp;
    
    temp=g_flag;
    g_flag=g_flag&0xF0;
    g_flag=g_flag+0x03;
    selectchip(g_flag);
    m=i/2;
    n=i%2;      	
	*pdata=m;
    
   
    g_flag=g_flag&0xF0;
    g_flag=g_flag+0x00;
    selectchip(g_flag);
    
   *(pdata+0x0555)=0xaa;
   *(pdata+0x02aa)=0x55;
   *(pdata+0x0555)=0x80;
   *(pdata+0x0555)=0xaa;
   *(pdata+0x02aa)=0x55;
   
        /////////////       ???????????????????????????
   *pdata=0x30;

   read=*pdata;
   flag1=read&0x80;
   flag2=read&0x20;
   while(flag1!=0x80)
   {
   	   if(flag2==0x20)
   	   {
   	   	  *pdata=0xf0;
   	      return 0;
   	    }
        read=*pdata;
        flag1=read&0x80;
        flag2=read&0x20;	
   }
   ///////////////////////////////////////////////
   
   return 1;
}   


//////////////////////////////////////////////


int  write_one(int i,volatile unsigned char *p,int length){
    int m,n,j;
    volatile unsigned char *pdata=(volatile unsigned char*)  0x8000;	
    BYTE temp;
    BYTE writedata,read;
    BYTE flag1,flag2,flag3;
    
    temp=g_flag;
    g_flag=g_flag&0xF0;
    g_flag=g_flag+0x03;
    selectchip(g_flag);
    m=i/2;
    n=i%2;
    j=n;
          	
	*pdata=m;
	
	g_flag=g_flag&0xF0;
    g_flag=g_flag+0x00;
    selectchip(g_flag);
	
	
	for(m=0;m<length;m++){ 
	    pdata=(volatile unsigned char*)  0x8555;
        *pdata=0xaa;
        pdata=(volatile unsigned char*)  0x82AA;
        *pdata=0x55;
        pdata=(volatile unsigned char*)  0x8555;
        *pdata=0xa0;  
        writedata=*(p+m); //接受数据

		flag3=writedata&0x80;
        pdata=(volatile unsigned char*)  0x8000;
        *(pdata+n*0x4000+m) = writedata;
        read=*(pdata+j*0x4000+m);
        flag1=read&0x80;
        flag2=read&0x20;

        while(flag1!=flag3){
			if(flag2==0x20){
				*(pdata+j*0x4000+m)=0xf0; 
				
				g_flag=temp;    
	            selectchip(g_flag);
   	  	        return 0;
			}
   	       read=*(pdata+j*0x4000+m);
           flag1=read&0x80;
           flag2=read&0x20;
		}  
 
	  }////////////////for
		
	g_flag=temp;    
	selectchip(g_flag);
	return 1;      
}

//////////////////////////////////////////////////////////////

void flash_write(int i,volatile unsigned char *p,int  length )    //i=0,1,2……,123.
{  
    
	int k,m,a,num[4];
	
	chg_speed(0x07);
	
	
	k=i/4;
	k=k*4;
	m=i%4;
	
	
	   for(a=0;a<4;a++){
		    num[a]=flash_read((k+a),p_flashbuf,1);
		    flash_buf(2*a,num[a]);  
	    }
	
	   erase_sector(i);

       for(a=0;a<4;a++){
		  if(a!=m){	
		      flash_buf(2*a+1,num[a]);
		      write_one((k+a),p_flashbuf,num[a]); 
		    }
		  else{
		      flash_buf(2*a+1,num[a]);
		      connect_sms(num[a],p,length);
		      write_one(i,p_flashbuf,509);
		    }  
	    }	    
    
    chg_speed(0x00);

	
 }
////////////////////////////////////////////////////
void flash_write_old(int i,volatile unsigned char *p,int  length )    //i=0,1,2……,123.
{  
    
	int k,m,a,num[4];
	
	chg_speed(0x07);
	
	
	k=i/4;
	k=k*4;
	m=i%4;
	
	
	   for(a=0;a<4;a++){
		    num[a]=flash_read((k+a),p_flashbuf,0);
		    flash_buf(2*a,num[a]);  
	    }
	
	   erase_sector(i);

       for(a=0;a<4;a++){
		  if(a!=m){	
		      flash_buf(2*a+1,num[a]);
		      write_one((k+a),p_flashbuf,num[a]); 
		    }
		  else{
		      flash_buf(2*a+1,num[a]);
		     // write_one(i,p_flashbuf,length);  可能出错了
		        write_one(i,p,length);
		    }  
	    }	    
    
    chg_speed(0x00);

	
 } 
////////////////////////////////////////////

void fac_reset(int a){
    
    int i;
    
    for(i=0;i<a;i=i+2){
        erase_sector(i);
    }       
}
///////////////////////////////////////
#ifdef _FAC_TEST
 int flash_read_Ext(int i,volatile unsigned char *p,int a) {   
    int m,n;
    volatile unsigned char *pdata=(volatile unsigned char*)  0x8000;	
    BYTE temp; 
    BYTE ch;
    unsigned int kk_cmp;
    temp=g_flag;
    g_flag=g_flag&0xF0;
    g_flag=g_flag+0x03;
    selectchip(g_flag);
    m=i/2;
    n=i%2;
          	
	*pdata=m;
	
	g_flag=g_flag&0xF0;
    g_flag=g_flag+0x00;    
	selectchip(g_flag);
   
    for(m=0;m<512;m++)
      *(p+m)=*(pdata+n*0x4000+a*0x0200+m);
      	
    g_flag=temp;    
	selectchip(g_flag); 
	
	return m;
	
}
//////////////////////////////////////////// 
int  save_cartoon(){

   
    long m;
    int i,n,nn; 
   
    
    volatile unsigned char *pdata=(volatile unsigned char*)  0x8000;	
    BYTE temp;
    BYTE writedata,read;
    BYTE flag1,flag2,flag3; 
    
   
    erase_sector(4);
     
    chg_speed(7);
    temp=g_flag;
        
    for(m=0;m<0xffff;m++){
       
       g_flag=g_flag&0xF0;
       g_flag=g_flag+0x03;
       selectchip(g_flag);
       
       i=m/0x8000;          	
	   *pdata=i+2;	   
	
	   g_flag=g_flag&0xF0;
       g_flag=g_flag+0x00;
       selectchip(g_flag);
	
	     n=m/0x0800;
	     nn=n%8;
	  
	    
	       pdata=(volatile unsigned char*)  0x8555;
           *pdata=0xaa;
           pdata=(volatile unsigned char*)  0x82AA;
           *pdata=0x55;
           pdata=(volatile unsigned char*)  0x8555;
           *pdata=0xa0;
           if((m%16)==((n/8)%16))  
             writedata=(1<<nn); //接受数据
           else
             writedata=0x00;
		   flag3=writedata&0x80;
           pdata=(volatile unsigned char*)  0x8000;
           *(pdata+(m%0x8000)) = writedata;
           read=*(pdata+(m%0x8000));
           flag1=read&0x80;
           flag2=read&0x20;           
           while(flag1!=flag3){
			    if(flag2==0x20){
				   *(pdata+(m%0x8000))=0xf0; 
				
				    g_flag=temp;    
	                selectchip(g_flag);
   	  	            return 0;
			     }
   	             read=*(pdata+(m%0x8000));
                 flag1=read&0x80;
                 flag2=read&0x20;
		     }    
 
	     }////////////////for
		
	g_flag=temp;    
	selectchip(g_flag);
    chg_speed(0);
     return 1;
  
///////////////////// 
}
#endif
#endif                                   



⌨️ 快捷键说明

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