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

📄 flash.cpp

📁 支持ti的dsp 5402的基本运行的c程序,简洁好用
💻 CPP
字号:
#include "flash.h"

FlashObj::FlashObj(void)
{
	SREG->SWWSR = 0x3fff;
	Init();   
}

void FlashObj::Init(void)
{
	Active = false;
	MakerId = 0;
	DeviceId = 0;
	Succeed = false;
	FlashId();
}

void FlashObj::FlashReset(void)
{
	FLASH(0x5555) = 0xaa;  
	FLASH(0x2AAA) = 0x55;  
	FLASH(0x5555) = 0xf0;
	Wait(0x5555);
}

void FlashObj::FlashId(void)
{
	FlashReset();
	FLASH(0x5555) = 0xaa;  
	FLASH(0x2AAA) = 0x55;  
	FLASH(0x5555) = 0x90;
	Wait(0x5555);
	MakerId = FLASH(FlashMaker) & 0xff;
	DeviceId = FLASH(FlashDevice) & 0xff;
	Active = (MakerId == 0xbf) && (DeviceId == 0x80);
	FlashReset();
}

bool FlashObj::ChipErase(void)
{
  	if (Active)
  	{
		FLASH(0x5555) = 0xaa;  
		FLASH(0x2AAA) = 0x55;  
		FLASH(0x5555) = 0x80;
		FLASH(0x5555) = 0xaa;  
		FLASH(0x2AAA) = 0x55;  
		FLASH(0x5555) = 0x10;
		Wait(0x5555);
	}
	return Active;
}

bool FlashObj::SectorErase(unsigned int SectorNum)
{
  	if (Active)
  	{
		FLASH(0x5555) = 0xaa;  
		FLASH(0x2AAA) = 0x55;  
		FLASH(0x5555) = 0x80;
		FLASH(0x5555) = 0xaa;  
		FLASH(0x2AAA) = 0x55;  
		FLASH(SectorSize * SectorNum) = 0x30;
		Wait(0x5555);
	}
	return Active;
}

bool FlashObj::BlockErase(unsigned int BlockNum)
{
  	if (Active)
  	{
		FLASH(0x5555) = 0xaa;  
		FLASH(0x2AAA) = 0x55;  
		FLASH(0x5555) = 0x80;
		FLASH(0x5555) = 0xaa;  
		FLASH(0x2AAA) = 0x55;  
		FLASH(BlockSize * BlockNum) = 0x50;
		Wait(0x5555);
	}
	return Active;
}

bool FlashObj::Write(unsigned int address, unsigned char val)
{
  	if (Active)
  	{
		FLASH(0x5555) = 0xaa;  
		FLASH(0x2AAA) = 0x55;  
		FLASH(0x5555) = 0xa0;
		FLASH(address) = val;
		Wait(address);
	}
	return Active;
}

bool FlashObj::Program(unsigned int address, unsigned int len, unsigned short * ramaddr)
{
  	if (Active)
  	{
	  	FlashReset();
		for (int i = 0; i < len; i ++)
		{
			Write(address + i, ramaddr[i] & 0xff);
		}
/*
		for (int i = address; i < (address + len); i ++)
		{
			Write(i, (*ramaddr) & 0xff);
			ramaddr++;
		}
*/
//	  	FLASH(0x7ffe) = 0x80;  
//	  	FLASH(0x7fff) = 0x00;  
	  	FlashReset();
//	  	Succeed = (FLASH(0x7ffe) == 0x80) && (FLASH(0x7fff) == 0);
	}
	return Active;
}

void FlashObj::Wait(unsigned int address)
{
unsigned int temp, val;
	do {
		val = FLASH(address);
		__nop();
		temp = FLASH(address);
		__nop();
	}
	while(((val ^ temp) & (1 << BIT6)) != 0);
}


⌨️ 快捷键说明

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