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

📄 nand_cmd.c

📁 基于S3C2410和SM501的彩屏控制器程序
💻 C
字号:
#define __NAND_CMD
#include "Nand_CMD.h"
#undef __NAND_CMD


//********************** Global Variable **********************



//*************************************************************


/*设置块使用标记*/
void SetBlockUse(ushort startblk, ushort endblk, ushort bmpNo)
{
	ushort i;

	for(i = startblk;i <= endblk;i++)
		blockuse[i] = bmpNo+1;
}

/*寻找一个可以存放得下当前画面的nandflash地址*/
int findRightAddr(ushort bmpNo, ulong lens)
{
	ushort i,startblock;
	int rightAddr;
	uchar find;
	
	startblock = 0;//开始检测的块
	find = 0;
	for(i = BmpStartBlock;i < BLOCKS;i++)
	{
		if((blockuse[i] == 0xff) || (blockuse[i] == (bmpNo+1)))//当前块没有使用或存放的是当前画面
		{
			if(startblock == 0) startblock = i;
			if(find == 1 && blockuse[i] == 0xff)
				break;	//如果已找到合适地址并当前块未使用
			blockuse[i] = 0xff;							//设置为未使用
			
			//未使用的块或原来画面使用的块够空间
			if((i - startblock + 1)*BLOCK_BYTES >= lens && find == 0)
			{
				find = 1;
				SetBlockUse(startblock,i,bmpNo);	//设置块使用标记
				rightAddr = startblock*BLOCK_BYTES;	//合适存放当前画面的nandflash地址
			}
		}
		else
		{
			if(find == 1) break;
			startblock = 0;
		}
	}
	return rightAddr;
}


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 函数: 把BMP从内存拷贝到NandFlash.
// 描述: 
//
// [参数表]
//	
// 返回: 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int CopyBmpToNandFlash (ushort bmpNo, ulong lens, ulong bitlens)
{
	char buf[128];
	
	if(lens > 0) lens = ((lens - 1)/BLOCK_BYTES + 1)*BLOCK_BYTES;// 长度以块对齐
	bmpLens[bmpNo] = lens;	//长度
	bitbmpLens[bmpNo] = bitlens;
	bmpAddr[bmpNo] = findRightAddr(bmpNo,lens);//找到一个合适存放当前画面的NandFlash地址
	
	sprintf(buf,"bmpNo = %d,write Addr = %x,write len = %x",bmpNo,bmpAddr[bmpNo],bmpLens[bmpNo]);
	
	if (NandErase(bmpAddr[bmpNo], bmpLens[bmpNo]) == 0 )//擦除nandflash
	{
		return NandWriteData(bmpAddr[bmpNo],BMP_TMPRAM_ADDR,bmpLens[bmpNo]);//写nandflash
	}
	return 1;
}

⌨️ 快捷键说明

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