📄 appmain.c
字号:
/*
* Copyright 2002 by Texas Instruments Incorporated.
* All rights reserved. Property of Texas Instruments Incorporated.
* Restricted rights to use, duplicate or disclose this code are
* granted through contract.
*
*/
/*
* ======== appMain.c ========
*/
// DSP/BIOS includes
#include <std.h>
#include <stdio.h>
//CSL
#include <csl.h>
#include <csl_dat.h>
#include <csl_cache.h>
#include <csl_irq.h>
// RF5 library includes
#include <utl.h>
// App includes
#include "appResources.h"
#include "appThreads.h"
#include "appIO.h"
#include "h264t.h"
#include "appMain.h"
#include "thrAudioproc.h"
#define HPIC *((volatile uint32_t*)0x01880000)
/*
* ======== main ========
*
* Main application function.
*/
#pragma DATA_SECTION(byteBuf, ".SHAREBYTE");
#pragma DATA_SECTION(enc_Buf, ".EXTPROCBUFF");
#pragma DATA_SECTION(dec_Buf, ".EXTPROCBUFF");
#pragma DATA_ALIGN(byteBuf, MEMALIGN);
#pragma DATA_ALIGN(enc_Buf, MEMALIGN);
#pragma DATA_ALIGN(dec_Buf, MEMALIGN);
#pragma DATA_SECTION(dec_tag, ".INTPROCBUFF");
#pragma DATA_SECTION(write_tag, ".INTPROCBUFF");
#pragma DATA_SECTION(read_tag, ".INTPROCBUFF");
H264_param_t param;
H264_t *t_enc, *t_dec;
//x int32_t len;
//x int32_t size;
//int32_t tag = 0;
int32_t write_tag=0, read_tag =0;
//int32_t enc_tag[2]={0,0};
int32_t dec_tag[2]={0,0};
//char enc_Buf[2][PROCF_SIZE_IN_PIXELS];
//char dec_Buf[2][PROCF_SIZE_IN_PIXELS];
uint8_t enc_Buf[2][DATALEN];
uint8_t dec_Buf[2][DATALEN];
//int32_t is_count=0;
//int32_t time_count[5]={0,0,0,0,0};
Void HWI_Host_to_DSP();
static uint8_t byteBuf[2*DATALEN];
uint8_t *pputdata,*pgetdata,*data_tag1,*data_tag2;
//int Bit_Rate;
//extern uint8_t nframe;
//uint32_t *p_nframe;
/*********Audio**********/
unsigned short *pAudioEncBuf;//编码完成区指针
unsigned short *pAudioDecBuf;//解码空闲区指针
AUDIOBUFFER *pstrAudioEnc;
//len 0x150
int codNum;// 编码计数,数据搬移后置0
Void main()
{
CACHE_clean(CACHE_L2ALL, 0, 0);
CACHE_setL2Mode(CACHE_128KCACHE);
CACHE_enableCaching(CACHE_EMIFA_CE00);
CACHE_enableCaching(CACHE_EMIFA_CE01);
CACHE_setPriL2Req(CACHE_L2PRIURG);
/* initialize I/O */
appIOInit();
appThreadInit();
/* prime I/O */
appIOPrime();
// IRQ_reset(IRQ_EVT_EDMAINT);
IRQ_reset(IRQ_EVT_DSPINT);
// IRQ_enable(IRQ_EVT_EDMAINT);
IRQ_enable(IRQ_EVT_DSPINT);
// HPIC = HPIC|0x00020002; //清中断
data_tag1 = byteBuf;
data_tag2 = byteBuf+DATALEN;
data_tag1[0]=data_tag1[1]=data_tag1[2]=data_tag1[3]=0;
data_tag2[0]=data_tag2[1]=data_tag2[2]=data_tag2[3]=0;
pputdata = byteBuf+4;
pgetdata = byteBuf+DATALEN+4;
LIGHT = 0x00; //灭灯
// printf("enc_Buf %08x,%08x\n",enc_Buf[0],enc_Buf[1]);
// printf("dec_Buf %08x,%08x\n",dec_Buf[0],dec_Buf[1]);
printf( "Application started\n" );
}
//static int g_i=0,g_j=0;
/*
Void HWI_DSP_to_Host()
{
int32_t len_video,len_all,len_audio;
//实际上 encbuf只要一个就可以了
//加判断是否可以发中断
memcpy(&len_video,enc_Buf[0],4);
//v memcpy(pputdata,enc_Buf[0],len+4);
//v memset(pputdata+len+4,0,8);
pstrAudioEnc = (AUDIOBUFFER*)pAudioEncBuf;
//x printf("%d,%d\n",len_video,pstrAudioEnc->frameNum[0]);
if(pstrAudioEnc->frameNum[0])
{ //有数据
//old memcpy(pputdata+4,pAudioEncBuf,0x150); //audio
//olc memcpy(pputdata+0x154,enc_Buf[0],len+4);//video
//old pstrAudioEnc->frameNum[0] = 0;
len_audio = 0x150;
memcpy(pputdata+4,&len_audio,4);
memcpy(pputdata+8,pAudioEncBuf,len_audio); //audio
}
else
{ //没有数据
len_audio = 0;
memcpy(pputdata+4,&len_audio,4);
// memcpy(pputdata+4,pAudioEncBuf,len_audio); //audio
}
memcpy(pputdata+8+len_audio,enc_Buf[0],len_video+4);//video
codNum = 0;
if(len_video<0 || len_video>=(0x10000-0x154)) len_video = 0;
len_all = len_video + len_audio+8;
memcpy(pputdata,&len_all,4); //len
// printf("HWI_DSP_to_Host begin %d\n",len);
//x printf("len_all=%d,len_aud=%d,len_vid=%d\n",len_all,len_audio,len_video);
//清空缓冲区
CACHE_wbL2(data_tag1,DATALEN,CACHE_WAIT);
CACHE_clean(CACHE_L2,data_tag1,DATALEN);
if(len_video>0)
{
data_tag1[0] = data_tag1[1] = data_tag1[2] = 0;
data_tag1[3] = 1;
}
//printf("HWI_DSP_to_Host end\n");
}
*/
extern H264_t *t_enc, *t_dec;/*
Void HWI_Host_to_DSP()
{
int32_t len;
LIGHT = 0x08; //亮灯3
memcpy(&len,data_tag1-4,4);
CACHE_invL2(data_tag1-4,16,CACHE_WAIT);
CACHE_clean(CACHE_L2,data_tag1-4,16);
if(len)
{
t_enc->frame_no = 0;
t_enc->param.bitrate = len;
// t_enc.frame_no = 0;
// t_enc.param.bitrate = len;
len = 0;
}
else
return;
HPIC = HPIC|0x00020002; //clear int from Host
}
Void PRD_1ms()
{
int32_t len_audio=0,len_video=0,len_all=0;
#if HAS_ENC&&HAS_DEC
//编码数据区有数据
//将其直接复制到解码数据区
if(data_tag1[3]==1)
{
memcpy(&len_all,pputdata,4);
// printf(" PRD_1ms %d asdfasdf\n",len);
memcpy(pgetdata,pputdata,len_all+4);
// printf(" PRD_1ms %d 2asdfasdf\n",len);
data_tag1[3] = 0;
data_tag2[3] = 1;
len_all = 1;
}
else
return;
// printf(" PRD_1ms %d\n",len);
#else
memcpy(&len_all,data_tag2,4);
CACHE_invL2(data_tag2,DATALEN,CACHE_WAIT);
CACHE_clean(CACHE_L2,data_tag2,DATALEN);
#endif
#if HAS_DEC
// printf("PRD_1ms getdata %d\n",len);
if(len_all==1)
len_all = 0;
else
return;
memcpy(&len_all,pgetdata,4); //len
memcpy(&len_audio,pgetdata+4,4); //len
// printf("len=%d\n",len_all);
len_video = len_all - len_audio - 8;
// printf("*** len_all=%d,len_aud=%d,len_vid=%d\n", len_all,len_audio,len_video);
memcpy(pAudioDecBuf,pgetdata+8,len_audio); //audio
if(len_video)
memcpy(dec_Buf[write_tag],pgetdata+8+len_audio,len_video+4);//video
//v memcpy(dec_Buf[write_tag],pgetdata,len+4);
//v memset(dec_Buf[write_tag]+len+4,0,8);
// printf("get datalen=%d ",len);
// printf("%02x %02x %02x %02x\n",dec_Buf[write_tag][0],dec_Buf[write_tag][1],dec_Buf[write_tag][2],dec_Buf[write_tag][3]);
data_tag2[0]=data_tag2[1]=data_tag2[2]=data_tag2[3]=0;
// CACHE_clean(CACHE_L2,data_tag2,16*1024);
CACHE_wbL2(data_tag2,DATALEN,CACHE_WAIT);
CACHE_clean(CACHE_L2,data_tag2,DATALEN);
dec_tag[write_tag] = 1;
// printf("PRD_1ms dec_tag[%d]==%d\n",write_tag,dec_tag[write_tag]);
write_tag = (write_tag+1)&1;
#endif
}
//#endif*/
Void param_control()
{
/*
if(data_tag[1]==0)
{
Bit_Rate = 768000;
}
else Bit_Rate = data_tag[1];
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -