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

📄 2407-flash.c

📁 tms320lf2407 dsp单片机 对flash操作的读写程序
💻 C
字号:

#include "f2407_c.h"                 //引用头部文件   
#include "stdlib.h" 


#define page_byte 1056
ioport unsigned int port0;        //port100 address            
#define FLASH  port0


int PAGE10;
int j,k;
int p;
int maker,code,xx,cy,cy1;

int markdata[page_byte];

void system_init();                  //声明在程序中需要用到是函数

void flash(int row);
void flashID();
void wait(); 
//(1)主程序
main()
{
 int wemp1,wemp2,wemp3,wemp4;
 
 system_init();                      //系统初始化子程序
    
    flashID();                                

    p=65;
   flash(p);


                                                                                                          
                                                                                                                                                                                                                                                                                                                        //CAN初始化子程序

 while(1)
 {
   int i;
   int a,b,c,d;
   
   for(p=0;p<64000;p++)
   {
      flash(p);
     for(i=510;i<511;i++) 
      {
       a=(markdata[i]&0xff); 
       b=(markdata[i+1]&0xff); 
       c=(markdata[i+2]&0xff);
       //d=(markdata[i+3]&0xff);  
        //if((a==0xEB)&&(b==0x58)&&(c==0x90))
         //if((a==0x00)&&(b==0x55)&&(c==0xAA)) 
           if((a==0x55)&&(b==0xAA)) 
            { 
              wait();
               }
           }
       }
 
   while(1)
  {
 

  }
 }
}  
   
    
void wait()
{
   while(1)
  {
 

  }
 }


//(2) 系统初始化子程序

void system_init()
{
    asm(" setc	SXM");					// 抑制符号位扩展
	asm(" clrc	OVM");					// 累加器中结果正常溢出
	asm(" clrc	CNF");					// B0被配置为数据存储空间
	asm(" setc	INTM");					// 禁止所有中断    
	SCSR1=0xED1;					    // CLKIN=12M,CLKOUT=2CLKIN=24M=2D1
	SCSR2=0x0E;
	WDCR=0x68;					    // 不使能看门狗,因为SCSR2中的WDOVERRIDE
		     						    // 即WD复位后的缺省值,故可以用
		      						    // 软件禁止看门狗
	
   
     MCRA=0x3;		               	// IOPA3,IOPA4,IOPA5,IOPB端口配置为一般的I/O功能,	TMS320LF240x的
     MCRB=0x0DF;                   // 端口均为8位,MCRA为16位因此控制了IOPA和IOPB的设置
     MCRC=0;
     
    PB=0x2FFF;	     	    // IOPB端口设置为输入方式 
    PA=0x03FF;	                //IOPA3,IOPA4,IOPA5 设置为输出方式,且IOINEN=1,选通8路开关量输入
    PC=0xFFFF;	     	    // IOPB端口设置为输入方式 
    PD=0xFFFF;
    PE=0xFFFF;
    PF=0xFFFF;
    
    
    SCICCR=0x7;           				//1个停止位,不使能奇偶校验,空闲线多处理
										//器模式,8位字符
	SCICTL1=0x13;       				 //使能接收和发送,SLEEP=0 禁止休眠方式
 				   						//禁止接收错误中断,TXWAKE=0 即没有选定的发送特征
	SCICTL2=0x2;          				//使能接收中断
	SCIHBAUD=0x1;
	SCILBAUD=0x38;     	  				//波特率=9600B/S
	SCICTL1=0x33;          				//使SCI脱离复位状态
	SCIPRI=0x60;           				//SCI中断(接收和发送中断)为低优先级中断
	
	PE=(PE&0xFFFE);	    			
    
    
    
   
    //IMR=0x010;						// 开中断优先级5           
	IFR=0x0FFFF;				    // 清除全部中断标志,"写1清0
    //PB=(PB&BIT5F);
}   


 



void flash(int row)
 {
   int i;
   int Npage;
    
   int column;
   int columnh,rowh;
   
   column=0;
   columnh=((column>>8)|0xFF00);
   rowh=((row>>8)|0xFF00);
   row|=0xFF00;
  
   
   PB  &=BIT5F;  //选择FLASH
   
   Npage=row;
    
    PC |=BIT5;   //245写有效
    for(j=0;j<0x0Ff;j++); 
    PB |=0x0F;
    PB &=0xFFFD;          //ALE-L
    PB &=0xFFFC;         //WE-L
    port0=0x00;
    PB |=0x01;           //WE-H 
    PB |=0x0F;           //-H
   for(j=0;j<0x0FF;j++); 
    
   PB |=0x0F;
   PB &=0xFFFB;          //CLE-L 
   PB &=0xFFFA;          //WE-L
   
   port0=column;
   PB |=0x01;            //WE-H
   PB |=0x0F;
   
   
   PB &=0xFFFB;           
   PB &=0xFFFA;
   port0=columnh;
   PB |=0x01; 
   PB |=0x0F;
   
    PB &=0xFFFB;           
   PB &=0xFFFA;
   port0=row;
   PB |=0x01; 
   PB |=0x0F; 
   
    PB &=0xFFFB;           
   PB &=0xFFFA;
   port0=rowh;
   PB |=0x01; 
   PB |=0x0F;     
       
  for(j=0;j<0x0FF;j++); 
    
        PB |=0x0F;
    PB &=0xFFFD;
    PB &=0xFFFC;         //COM
    port0=0x30;
    PB |=0x01;
    
    PB |=0x0F;    
    //PB |=0x0F;
   
   for(j=0;j<0x0FF;j++);
      PC &=BIT5F;
   //for(i=Npage;i<(Npage+1024);i++)
   for(j=0;j<0x0FFF;j++);
    PC &=BIT5F; 
      for(i=0;i<1064;i++) 
     
     {  
              
       
        PB &=0xFFF1;  
        //for(j=0;j<0x04;j++);
        markdata[i]=port0;   //选择FLASH   
       // markdata[i]=port0;   //选择FLASH   
        
          PB |=0x08;
          //PB |=0x08;
         // PB |=0x08;
          //PB |=0x08;
                                                  
                                                
           }
       PC |=BIT5;
       PB  |=BIT5;  //选择FLASH

}


void flashID()
 {
   
   
   
     
   PB  &=BIT5F;  //选择FLASH
   
      
    PC |=BIT5;   //245写有效
   for(j=0;j<0x0Ff;j++);  
    PB |=0x0F;
    PB &=0xFFFD;          //ALE-L
    PB &=0xFFFC;         //WE-L
    FLASH=0x90;
    PB |=0x01;           //WE-H 
    PB |=0x0F;           //-H
  
   
   PB |=0x0F;
   PB &=0xFFFB;          //CLE-L 
   PB &=0xFFFA;          //WE-L
   FLASH=0;
   PB |=0x01;            //WE-H
   PB |=0x0F;
   
   
  
   
   for(j=0;j<0x0f;j++);
    PC &=BIT5F; 
     
     
       
              
       
        PB &=0xFFF1;  
        //for(j=0;j<0x04;j++);
        maker=FLASH;   //选择FLASH   
         //maker=FLASH;   //选择FLASH 
        
          PB |=0x08;
         // PB |=0x08;
         //PB |=0x08;
         // PB |=0x08;
                                                  
        PB &=0xFFF1;  
        //for(j=0;j<0x04;j++);
        code=FLASH;   //选择FLASH   
        
          PB |=0x08;
          //PB |=0x08;
          //PB |=0x08;
        // PB |=0x08;                                        
          
          PB &=0xFFF1;  
       // for(j=0;j<0x04;j++);
        xx=FLASH;   //选择FLASH   
       
        
          PB |=0x08;
         // PB |=0x08;
          //PB |=0x08;
         // PB |=0x08; 
          
                     PB &=0xFFF1;  
        //for(j=0;j<0x04;j++);
        cy=FLASH;   //选择FLASH   
       
        
          PB |=0x08;
          //PB |=0x08;
          //PB |=0x08;
          //PB |=0x08;   
          PB &=0xFFF1;  
           //for(j=0;j<0x04;j++);
        cy1=FLASH;   //选择FLASH   
       
        
          PB |=0x08;
         // PB |=0x08;
         // PB |=0x08;
          //PB |=0x08; 
                                                
             
       PC |=BIT5;
       PB  |=BIT5;  //选择FLASH

}    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    // 直接返回中断服务程序
void interrupt int1( ) 
{
 	return;
}





⌨️ 快捷键说明

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