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

📄 main.c

📁 包括DSP实验测试程序、实验示例、应用程序以及经典的DSP的C程序和汇编程序库
💻 C
字号:
#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;
       
     videobuf=VIDEO_PORT;
     
     asm("  STM #0000h,CLKMD ");  
     while(*CLKMD & 0x01 );
     asm("  STM #40c7h,CLKMD ");
     
/*  40C7h:5*clkin  =100M
    30c7h:4*clkin  =80M
    20c7h:3*clkin  =60M
    10C7h:2*clkin  =40M
*/

     *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;
    
    
    for(i=0;i<READSIZE;i++)
      readbuf[i]=0;
    for(i=0;i<(unsigned int)PCMSIZE;i++)
        videobuf[i]=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(temp<writep)
        {
          readdat(writep,READSIZE);
          readdat(0,temp);
          writep=temp;
        }
      if(request_time>req_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;
      for(i=x1;i<x2;i++)
      {
          readbuf[i]=videobuf[DA_rptr];
          DA_rptr++;
          if(DA_rptr>=(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; 
    }
}



⌨️ 快捷键说明

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