📄 main.c
字号:
#include "main.h"
#include "stdio.h"
#include "ccblkfn.h"
#include "sysreg.h"
#include "bf5xx.h"
// set up DMA descriptors (one for each frame, then repeat)
// small descriptor model, only start address needs to be fetched
/*tDMA_descriptor DMA_PPI0_first = {&DMA_PPI0_second, sFrame0};
tDMA_descriptor DMA_PPI0_second = {&DMA_PPI0_third , sFrame1};
tDMA_descriptor DMA_PPI0_third = {&DMA_PPI0_fourth, sFrame2};
tDMA_descriptor DMA_PPI0_fourth = {&DMA_PPI0_first , sFrame3};
extern volatile char p=0,b;
bool write_page(unsigned int Page_Address,unsigned char *Buffer);
bool read_page(unsigned int Page_Address,unsigned char *Buffer);
bool Block_Erase(unsigned int Block_Address);
void Create_Invalid_Blocks_Table(void);
void Reset_NAND(void);
void delay(unsigned int DelayValue);
bool Read_Chip_ID(void);
unsigned char Verify_Table[512];
unsigned char Test_Data_Table[512];
unsigned char Read_Table[512];
#define DELAY_SIZE 0x00fffffff
//long sum,t,i;
//int ave,l1=0x60,l2=0x80,lp=0x70;
//int DGC=0x20;
//int AGC=0x00;
volatile int current_in_Frame = -1; // 0, 1, 2 or 3 ... indicates the last frame that was received COMPLETELY
//short c,d1,d2;
bool Set_PACK32 = false;
bool Set_Entire_Field = false;
bool ISPAL=1;
//int *r1,*r2;
// User program
void Setup_FlashFlags()
{
*pFIO2_DIR = 0x0EFF; // PF32-47 Outputs (LEDs)
*pFIO2_INEN = 0x0100;
}
void Init_Flash()
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xfff0fff0;
*pEBIU_AMGCTL = 0x000f;
Setup_FlashFlags();
Reset_NAND();
Read_Chip_ID();
}
void main() {
// unblock Core B if dual core operation is desired
#ifndef RUN_ON_SINGLE_CORE
*pSICA_SYSCR &= 0xFFDF; // clear bit 5 to unlock
#endif
// set Clocks
Set_PLL( (short)(CORECLK/CLKIN), (short)(CORECLK/SYSCLK)); // sets Core and System Clocks to the values defined in system.h
// initialise SDRAM
InitSDRAM();
*pTC_PER = 0x0770; // set DMA traffic control register to favour unidirectional transfers to SDRAM
// initialise Video Encoder ADV7179
//Reset_ADV7171();
//if (!Init_ADV7171(ISPAL))
//return false;
// initialise Video Decoder ADV7183
//Reset_tvp5150();
//if (!Init_tvp5150(ISPAL))
//return false;
//if (!I2C_Read5150(&r, 0x07)) return false;
// initialise PPI0 and associated DMA channel for Video IN
current_in_Frame = -1; // no frames received yet
semaphore_frames_received = false; // do not start output stream yet
Set_Entire_Field = false;
#ifdef ENTIRE_FIELD_MODE
Set_Entire_Field = true;
#endif
Set_PACK32 = false;
#ifdef PACK_32
Set_PACK32 = true;
#endif
InitPPI0(Set_Entire_Field, Set_PACK32, &DMA_PPI0_first, PIXEL_PER_LINE, LINES_PER_FRAME);
// initialise Interrupts
InitInterrupts_coreA();
// enable transfers
*pDMA1_0_CONFIG |= DMAEN;
ssync();
*pPPI0_CONTROL |= PORT_EN;
ssync();
//while(!p){}
Init_TEST_DATA_BUFFER();
Init_Flash();
int count=0;
int Block,Page,i,j;
for(Block=1;Block<34;Block++)
{
Block_Erase(Block);
for(Page=0;Page<32;Page++)
{
for(j = 0;j<512;j++)
{
Test_Data_Table[j] = j+Page;//sFrame0[count++];
}
write_page(Block*32+Page,Test_Data_Table);
udelay(0xfff);
read_page(Block*32+Page,Verify_Table);
for(i=0;i<512;i++)
{
if(Test_Data_Table[i] != Verify_Table[i])
{
printf("ERORR! Block is %x, page is %x\n",Block,Page);
printf("ERORR! Test_Data_Table is %x, Verify_Table is %x\n",Test_Data_Table[i],Verify_Table[i]);
}
else
sFrame3[count++]=Verify_Table[i];
}
}
}
printf("TEST 100 Bank is OK!\n");
semaphore_frames_received = true;
while(1)
{idle();
}
} // main*/
unsigned char Verify_Table[512];
unsigned char Test_Data_Table[512];
unsigned char Read_Table[512];
unsigned int Blockn_Address = 0;
unsigned short Pagen_address = 0;
bool write_page(unsigned int Page_Address,unsigned char *Buffer);
bool read_page(unsigned int Page_Address,unsigned char *Buffer);
bool Block_Erase(unsigned int Block_Address);
void Create_Invalid_Blocks_Table(void);
void Reset_NAND(void);
void delay(unsigned int DelayValue);
bool Read_Chip_ID(void);
/****************************************************************************
* 名称 : RW_Test
* 功能 : 校验写入数据的正确性,将前100页写入数据,读出做比较
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
RW_Test()
{
int Block,Page,i,j;
for(Block=1;Block<100;Block++)
{
Block_Erase(Block);
for(Page=0;Page<32;Page++)
{
for(j = 0;j<512;j++)
{
Test_Data_Table[j] = j+Page;
}
write_page(Block*32+Page,Test_Data_Table);
udelay(0xfff);
read_page(Block*32+Page,Verify_Table);
for(i=0;i<512;i++)
{
if(Test_Data_Table[i] != Verify_Table[i])
{
printf("ERORR! Block is %x, page is %x\n",Block,Page);
printf("ERORR! Test_Data_Table is %x, Verify_Table is %x\n",Test_Data_Table[i],Verify_Table[i]);
}
}
}
}
printf("TEST 100 Bank is OK!\n");
}
void Setup_FlashFlags()
{
*pFIO2_DIR = 0x0EFF; // PF32-47 Outputs (LEDs)
*pFIO2_INEN = 0x0100;
}
void Init_Flash()
{
Init_EBIU();
Setup_FlashFlags();
Reset_NAND();
Read_Chip_ID();
}
void main(void)
{
Set_PLL( (short)(CORECLK/CLKIN), (short)(CORECLK/SYSCLK));
int Block,Page,i;
Init_TEST_DATA_BUFFER();
Init_Flash();
RW_Test();
while(1){
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -