📄 main.c
字号:
//==========================================================================
// 程序名称: main.c
// 日期: 2002/8/16
// 功能: 利用SPCE061A的IO口扩展一块HM628128A,完成录、放音功能
// 库函数: sacmv26e.lib库
//===========================================================================
#include "dvr.h"
#define SRAM_Size 0x1ffff-4 //HM628128A容量
#define Stop 0
#define Record 1
#define Play 2
#define Full 1
#define Empty 2
#define DAC1 1 // DAC output
#define DAC2 2
#define RceMonitorOff 0
#define RceMonitorOn 1
#define Manual 0
#define Auto 1
unsigned int aWriteData[130];
unsigned int ReadData=0;
unsigned int G_TestValue=0;
unsigned int Write256BytesFlag=0;
//unsigned int Addr_Counter=0;
unsigned int Addr_Counter_Tmp=0;
unsigned int Key, Mode, Status;
unsigned long int Addr, Addr_Save;
unsigned long int Addr_Long;
unsigned long int yxh=0;
unsigned int a_Data_Protection_Dis_addr[6]={0x5555,0x2aaa,0x5555,0x5555,0x2aaa,0x5555};
unsigned int a_Data_Protection_Dis_data[6]={0xaa00,0x5500,0x8000,0xaa00,0x5500,0x2000};
unsigned int a_chip_erase_data[6]={0xaa00,0x5500,0x8000,0xaa00,0x5500,0x1000};
unsigned int Write_W29C040_Status_Check(unsigned long int,unsigned int);
void SP_InitW29C040Flash(void);
extern void Delay11ms(void);
extern void SPCE061A_IO_Initial(void);
int main()
{
unsigned int abin=0;
unsigned int i=0,j=0;
Mode = Manual; //手工方式
System_Initial();
SACM_DVR_Initial(Mode); //DVR初始化
Status = Stop;
//for test 0604
SP_SPBA_Initial();
// SP_InitW29C040Flash();
// SP_InitWriteW29C040Flash();//仅初始化A口高8bits为输出
// SP_SPBA_Write_Initial();//0603
Addr=0x0000;
/*
while(1)
{
SP_InitWriteW29C040Flash();
SP_SPBA_Write_Initial();//0603
SP_SPBA_WriteWord(Addr,0x5a5a);
SP_InitReadW29C040Flash();
Addr = SP_SPBA_Read_Initial(0);
ReadData = SP_SPBA_ReadWord(Addr);
Addr+=2;
}
*/
while(1)
{
//Key=();
Key=GetKeyScanValue();
if(Key>0)
{
switch(Key)
{
case 0x00:
break;
case 0x01: // 录音键
Status = Record;
Addr = 0;
Addr_Counter_Tmp=0;
// SP_InitWriteSRAM(); //写初始化
SP_InitW29C040Flash();
SP_InitWriteW29C040Flash();//仅初始化A口高8bits为输出
SP_SPBA_Write_Initial();//0603
SACM_DVR_InitQueue();
SACM_DVR_InitEncoder(RceMonitorOn);
break;
// case 0x02: //停止键
case 0x04: //停止键
/*
switch(Status)
{
case Record:
SACM_DVR_Stop();
while(SACM_DVR_TestQueue() != Empty)
{
Ret = SACM_DVR_FetchQueue();
//SP_WriteSRAM(Addr,Ret); //将队列中的数据写入HM628128A
//SP_InitWriteW29C040Flash();
SP_Write_W29C040_One_Word(Addr,Ret);
Addr += 2;
}
//SP_WriteSRAM(Addr,0xFFFF); //写结束标志----连续三字节FF
//SP_InitWriteW29C040Flash();
SP_Write_W29C040_One_Word(Addr,0xFFFF);
Addr += 2; //
//SP_WriteSRAM(Addr,0x00FF); //
//SP_InitWriteW29C040Flash();
SP_Write_W29C040_One_Word(Addr,0x00FF);
break;
case Play:
SACM_DVR_Stop();
break;
}
Status = Stop;
*/
break;
//case 0x04: //播放键
case 0x02: //播放键
SACM_DVR_Stop();
if(Status == Record)//如果处于录音状态,执行关闭录音处理
{
while(SACM_DVR_TestQueue() != Empty)
{
aWriteData[Addr_Counter_Tmp] = SACM_DVR_FetchQueue();
Addr_Counter_Tmp++;
//SP_WriteSRAM(Addr,Ret);
//SP_InitWriteW29C040Flash();
if(Addr_Counter_Tmp==128)
{
if(Write256BytesFlag==1)
{
while(Write_W29C040_Status_Check(Addr,G_TestValue)==0);
}
for(i=0;i<128;i++)
{
//SP_Write_W29C040_One_Word(Addr,aWriteData[i]);
SP_SPBA_WriteWord(Addr,aWriteData[i]);//0603
Addr += 2;
}
G_TestValue=aWriteData[127];
Addr_Counter_Tmp=0;
}
}
if(Addr_Counter_Tmp<0x0080)
{
if(Write256BytesFlag==1)
{
while(Write_W29C040_Status_Check(Addr,G_TestValue)==0);
}
for(i=0;i<Addr_Counter_Tmp;i++)
{
//SP_Write_W29C040_One_Word(Addr,aWriteData[i]);
SP_SPBA_WriteWord(Addr,aWriteData[i]);//0603
Addr += 2;
}
Addr_Counter_Tmp-=1;
G_TestValue=aWriteData[Addr_Counter_Tmp];
for(i=0;i<0x0500;i++);
while(Write_W29C040_Status_Check(Addr,G_TestValue)==0);
Addr_Counter_Tmp=0;
Write256BytesFlag=0;
}
/*
//SP_WriteSRAM(Addr,0xFFFF);
SP_Write_W29C040_One_Word(Addr,0xFFFF);
Addr += 2;
//SP_WriteSRAM(Addr,0x00FF);
SP_Write_W29C040_One_Word(Addr,0x00FF);
for(j=0;j<0x500;j++);//看情况删掉????????????
*/
}
for(i=0;i<0x0100;i++);
Status = Play; //置为播放模式
Addr = 0;
//SP_InitReadSRAM(); //读初始化
//SP_InitReadW29C040Flash();///???????????
Addr = SP_SPBA_Read_Initial(0);
SACM_DVR_InitQueue();
while(SACM_DVR_TestQueue() != Full)
{
//Ret = SP_ReadSRAM(Addr); //
// ReadData=SP_Read_W29C040_One_Word(Addr);
ReadData = SP_SPBA_ReadWord(Addr);
SACM_DVR_FillQueue(ReadData); //
Addr += 2; //
}
SACM_DVR_InitDecoder(DAC1+DAC2);
break;
default:
break;
} // end of switch(Key)
}// end if(key>0)
switch(Status)
{
case Record:
if(Addr < SRAM_Size)//????????????????????????????????????
{
SACM_DVR_Encode(); //
if(SACM_DVR_TestQueue() != Empty) //
{
//SP_WriteSRAM(Addr,Ret); //
//SP_InitWriteW29C040Flash();
aWriteData[Addr_Counter_Tmp] = SACM_DVR_FetchQueue();
Addr_Counter_Tmp++;
if(Addr_Counter_Tmp==128)
{
if(Write256BytesFlag==1)
{
Write256BytesFlag=1;
Write256BytesFlag=1;
Write256BytesFlag=1;
while(Write_W29C040_Status_Check(Addr,G_TestValue)==0);
Write256BytesFlag=1;
Write256BytesFlag=1;
Write256BytesFlag=1;
}
for(i=0;i<128;i++)
{
//SP_Write_W29C040_One_Word(Addr,aWriteData[i]);
SP_SPBA_WriteWord(Addr,aWriteData[i]);
Addr += 2;
}
G_TestValue=aWriteData[127];
Write256BytesFlag=0x0001;
Addr_Counter_Tmp=0;
}
/*
if(((Addr_Counter&0x0080)==0x0080)||((Addr_Counter&0x00ff)==0))
{
for(i=0;i<128;i++)
{
SP_Write_W29C040_One_Word(Addr,Ret[i]);
Addr += 2;
}
Addr_Counter_Tmp=0;
//for(j=0;j<0x500;j++);//看情况删掉???????????????
}
*/
}
}
break;
case Play:
if(SACM_DVR_Status() & 0x01)
{
if(SACM_DVR_TestQueue() != Full)
{
//Ret = SP_ReadSRAM(Addr); //
//ReadData=SP_Read_W29C040_One_Word(Addr);
ReadData = SP_SPBA_ReadWord(Addr);
SACM_DVR_FillQueue(ReadData); //
Addr += 2;
}
}
else
{
if(SACM_DVR_TestQueue() == Empty)
{
SACM_DVR_Stop();
Status = Stop;
}
}
SACM_DVR_Decode();
break;
case Stop:
break;
}// end of switch(Status)
}// end of while(1)
return 0;
}
unsigned int Write_W29C040_Status_Check(unsigned long int Addr_Test,unsigned int TestValue)
{
unsigned int ReadCheckWord=0;
Addr_Test-=2;
SP_InitReadW29C040Flash();
//ReadCheckWord=SP_Read_W29C040_One_Word(Addr_Test);
ReadCheckWord = SP_SPBA_ReadWord(Addr_Test);
if(ReadCheckWord!=TestValue)
{
Addr_Test+=2;
SP_InitWriteW29C040Flash();
return 0;
}
else
{
Addr_Test+=2;
SP_InitWriteW29C040Flash();
return 1;
}
}
void SP_InitW29C040Flash(void)
{
unsigned int i=0;
for(i=0;i<6;i++)
{
SP_SPBA_WriteWord(a_Data_Protection_Dis_addr[i],0x0000,a_Data_Protection_Dis_data[i]);
}
Delay11ms();
for(i=0;i<6;i++)
{
SP_SPBA_WriteWord(a_Data_Protection_Dis_addr[i],0x0000,a_chip_erase_data[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -