www.pudn.com > wavDEMO.zip > MAIN.C


/************************************* 
  Copyright 2001 by Haia Tech 
  海佳科技有限公司 
  www.haia2004.com 
  Email:haia2004@vip.sina.com 
  Tel:0731-4552122 4553216 
*************************************/ 
#include "cpu_reg.h" 
#include "common.h" 
#include "string.h" 
#include "rtl8019a.h" 
 
void handlekey(); 
 
unsigned short IP; 
unsigned int ms,request_time,link_time; 
int request_pack,arp_ack,request_flag=1;  
unsigned int rec_pack,req_gaptime,rec_packflag; 
unsigned short status,order,teach_status,writep,writemenup; 
int bitrate,success; 
unsigned int   menu_rptr; 
int request_type; 
int *videobuf,*pcmbuf; 
unsigned int DA_wptr,DA_rptr,AD_rptr; 
unsigned short pcr_val1,xcflag; 
 
int readp; 
extern unsigned int readmenup; 
extern short curr,isr; 
extern unsigned int broad_enable ; 
extern unsigned short syn[6]; 
extern struct mac      MAC_self,MAC_nod; 
 
extern unsigned short sendbuf[TALK_SIZE+40]; 
extern struct ipaddr server_ipaddr; 
extern struct iphdr t_iphdr; 
extern struct udphdr t_udphdr; 
int readbuf[READSIZE]; 
 
extern unsigned int rec_pack; 
extern unsigned int dat_type,header2; 
 
extern unsigned int  member_num ; 
extern unsigned int out_wptr,out_rptr; 
 
void main() 
{ 
 
     unsigned int temp,i,j; 
        
     videobuf=VIDEO_PORT; 
      
     asm("  STM #0000h,CLKMD ");   
     while(*CLKMD & 0x01 ); 
     asm("  STM #50c7h,CLKMD "); 
/*  40c7h:5*clkin  =60 
    50c7h:6*clkin  =101M 
    8107h:9*clkin  =108 
    7107h:8*clkin  =96 
*/ 
     *SWCR=0x0001; 
     asm("  stm   #4240h, SWWSR "); 
     //2 wait except for on-chip program 1 
     asm("  stm   #00a0h, PMST  "); //MP/MC = 0, IPTR = 001,ovly=1   
     asm("  stm   #0802h, BSCR  ");  
     asm("  STM #0h,IMR "); 
      
     asm("  STM #0010h,TCR  "); //关定时器 
     asm("  STM #0186ah,PRD  ");//1ms 
     asm("  STM #0C2fh,TCR  "); //TCR=最后四位 
     asm("  STM #0008h,IFR  "); 
     asm("  ORM #0008h,*(IMR) ");/*开时间中断*/ 
  
	     
     McBsp0_init(); 
      
    request_pack=0; 
    req_gaptime=1500; 
    ms=0; 
     
    IP=1; 
    status=PLAY; 
      
    asm("  RSBX  INTM ");        
     
    init_8019(); 
    arp_ack=0; 
    while(!arp_ack) 
      get_server_mac(); 
       
     
start: 
 
    handlekey();     
    nic_recieve(); 
    if(status==PLAY) 
    {  
        temp=readp;    //SAVE readp 
        if(temp>writep) 
        { 
          readdat(writep,temp);  //从二级缓冲导入数据 
          writep=temp; 
        } 
      
        else if(tempreq_gaptime)  //超时请求 
             request();         
      if(request_pack>=ONEQUESTPACK)  //只要缓冲区大于是8*1000就发请求命令 
      {                               //一次请求发8个包 
          if(DA_rptr>DA_wptr)      
          { 
            if(DA_rptr-DA_wptr>ONEQUESTSIZE) 
              request();         
          } 
          else 
          { 
              if((unsigned int)PCMSIZE-(DA_wptr-DA_rptr)>ONEQUESTSIZE) 
                request();         
       
          } 
      } 
    } 
    goto start; 
  
}   
 
 
void request() 
{ 
//    if(request_flag) 
    { 
          sendbuf[0]=0x80+(1<<8); 
          sendbuf[1]=IP<<8; 
          send_udp(sendbuf,10); 
          request_pack=0; 
          request_time=0; 
    } 
} 
interrupt void  timer0() 
{ 
     ms++; 
     request_time++;     
     link_time++; 
} 
 
 
void get_server_mac() 
{ 
     send_arp(&server_ipaddr,1);  
 
     ms=0; 
     while(ms<500) 
     { 
         nic_recieve(); 
         if(arp_ack) break; 
     } 
      
} 
  
void readdat(unsigned int x1,unsigned int x2) 
{ 
      unsigned int i,temp; 
      for(i=x1;i=(unsigned int)PCMSIZE) 
              DA_rptr=0; 
      } 
} 
 
 
 
void handlekey() 
{ 
    int key; 
     
    key=*C51_TO_DSP_PORT; 
    if(key!=255) 
    { 
        t_udphdr.dport =0xe525; //9701 
        sendbuf[0]=key+(1<<8); 
        sendbuf[1]=IP<<8; 
        send_udp(sendbuf,10); 
        t_udphdr.dport =ORDERPORT+(IP<<8); //1*256+0x07,9801 
        *C51_TO_DSP_PORT=255;  
    } 
}