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

📄 initprogram.c

📁 TMS320F2812的bootloader源程序
💻 C
字号:
//UART COMMUNICATION

#include "InitProgram.h"   
#include "DSP281x_Device.h"


volatile unsigned int  CODE_AddrH=0,CODE_AddrL=0;
volatile unsigned int Length=0;
volatile unsigned long CODE_Addr;
volatile unsigned int *P;
volatile unsigned int *P_D;

#pragma CODE_SECTION(InitProgram,"InitProgram")
int InitProgram()
{ 

  unsigned int i=0,j;
  
  if(GpioDataRegs.GPBDAT.bit.GPIOB8)
      {   while(GpioDataRegs.GPBDAT.bit.GPIOB8)
                 Data_Buff[i++]=*USB_EP2;
                                 
                if((Data_Buff[0]=='C')&&(Data_Buff[1]=='O')&&(Data_Buff[2]=='D')&&(Data_Buff[3]=='E')&&(Data_Buff[4]=='S')&&(Data_Buff[5]=='T')&&(Data_Buff[6]=='A')&&(Data_Buff[7]=='R')&&(Data_Buff[8]=='T'))
                { 
                  
                  for(j=0;j<11;j++)
                  *USB_EP6=str1[j];
                     j=*USB_EP6;
                     
                    if(Receive_Code())
                       {
                        P=Data_Buff;
                        
                        while(1)
                        {
                         if((*P=='$') && (*(P+1)=='A'))
                         break;
                         else  
                         P++;
                                                  
                        }
                         P+=2;                         
                         DownProgram(P);
                         
                         while(1)
                         {
                           if((*P=='V')&&(*(P+1)=='E')&&(*(P+2)=='C')&&(*(P+3)=='T')&&(*(P+4)=='O')&&(*(P+5)=='R'))
                            break;
                            else 
                            P++;
                           
                         }
                         
                         while(1)
                        {
                         if((*P=='$') && (*(P+1)=='A'))
                         break;
                         else  
                         P++;
                                                  
                        }
                         P+=2;
                         Init_Vector(P);
                         return 1;
                       
                       }
                           else 
                             {
                               for(i=0;i<14;i++)
                               *USB_EP6=str3[i];
                               i=*USB_EP6;
                                return 0;
                               
                              }
                  }
                        else 
                        {for(i=0;i<14;i++)
                          *USB_EP6=str2[i];
                          i=*USB_EP6;
                           return 0; 
                         }
      }
      else return 0;
} 
/////////////////////////////////////////////////////// 

  //  volatile unsigned int *P=Data_Buff;
//#pragma CODE_SECTION(Receive_Code,"InitProgram")
int Receive_Code()
{ 
unsigned int i,j;
P=Data_Buff;  
 
   while(1)
  {
   if(GpioDataRegs.GPBDAT.bit.GPIOB8)
   {  
       i= *USB_EP2;
       j=i & 0xff00;
       i=i & 0x00ff;
       i=(i<<8) & 0xff00;
       j=(j>>8) & 0x00ff;
     *(P++)= j+i;
    }
   else if((*(P-7)=='C')&&(*(P-6)=='O')&&(*(P-5)=='D')&&(*(P-4)=='E')&&(*(P-3)=='E')&&(*(P-2)=='N')&&(*(P-1)=='D'))
         return 1;
          else  continue;
    
    } 
  
} 


//////////////////////////////////////////////////////////
//#pragma CODE_SECTION(DownProgram,"Init_Program")
void DownProgram(volatile unsigned int *P)
{
  //P_D=CODE_Point;
  unsigned long  temp;
  unsigned int   i;
  temp=0x00000000;
  while(1)
  {
   if(*P==0x002c)
      break;
      else
      temp=temp*0x10000+*(P++);
   
   }
  P_D=(volatile unsigned int *)temp; 
  P+=1;
  while(1)
  {
    if((*P=='V')&&(*(P+1)=='E')&&(*(P+2)=='C')&&(*(P+3)=='T')&&(*(P+4)=='O')&&(*(P+5)=='R'))
    break;
    else   *(P_D++)=*(P++);
  }
}
/////////////////////////////////////////////////////////
//#pragma CODE_SECTION(Init_Vector,"Init_Progmram")
void Init_Vector(volatile unsigned int *P)
{
  unsigned long  temp;
  temp=0x00000000;
  //P_D=VECTOR_Point;
  while(1)
  {
   if(*P==0x002c)
      break;
      else
      temp=temp*0x10000+*(P++);
   
   }
  P_D=(volatile unsigned int *)temp;
  P+=1;
  while(1)
  {if((*P=='C')&&(*(P+1)=='O')&&(*(P+2)=='D')&&(*(P+3)=='E')&&(*(P+4)=='E')&&(*(P+5)=='N')&&(*(P+6)=='D'))
    break;
    else
    *(P_D++)=*(P++);
  }
}
/////////////////////////////////////////////////////////
//#pragma CODE_SECTION(InitProgram,"InitProgram")
void Delayms(unsigned int k)
{
  k*=255;
  while(k--);
}



⌨️ 快捷键说明

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