📄 main.c
字号:
#include "cpu_reg.h"
#include "common.h"
#include "string.h"
#include "rtl8019a.h"
unsigned short IP;
unsigned short scramble_tab[1176];
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;
int talkbuf[TALK_SIZE*2];
unsigned int menu_rptr;
int group_member[MEMBER_NUM];
int request_type;
long sum[TALK_SIZE];
int *videobuf,*pcmbuf;
unsigned int DA_wptr,DA_rptr,AD_rptr;
unsigned short pcr_val1,xcflag;
extern 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;
extern int readbuf[READSIZE];
extern unsigned int rec_pack;
extern unsigned int dat_type,header2;
extern unsigned int member_num ;
extern int talkbuf[TALK_SIZE*2],ADbuf[2][TALK_SIZE];
extern unsigned int out_wptr,out_rptr;
void main()
{
unsigned int temp;
videobuf=VIDEO_PORT;
pcmbuf=PCM_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();
pcr_val1=PCR_VAL1;
McBsp1_init();
request_pack=0;
req_gaptime=1500;
ms=0;
IP=1;
dat_type=MP3_DAT;
status=PLAY;
bitrate=2;
dat_type=PCM_DAT;
asm(" RSBX INTM ");
Init8019();
arp_ack=0;
while(!arp_ack)
get_server_mac();
start:
xcflag=0;
asm(" XC 2, NBIO ;High ");
xcflag=1; //XC PIN=1;
if(xcflag)
sendmp3dat();
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 sendmp3dat()
{
int i;
readp++;
if(readp>=READSIZE)
readp=0;
for(i=0;i<16;i++)
{
pcr_val1&=~CLKXP;
*(SPSA1)=PCR; *(SPSD1)=pcr_val1; //clk set 1
if((readbuf[readp]<<i)&0x8000)
pcr_val1|=DX_STAT; //DX set 1
else
pcr_val1&=~DX_STAT; //DX set 0
*(SPSA1)=PCR; *(SPSD1)=pcr_val1;
pcr_val1|=CLKXP;
*(SPSA1)=PCR; *(SPSD1)=pcr_val1; //clk set 0
delay(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -