老古开发网首页
导航:老古开发网首页文章索引文章分类DSP数字信号处理→[DSP5402读写K9F1G08之C++源代码]
| -文章搜索 - 最新文章 - |

DSP5402读写K9F1G08之C++源代码

发布时间:2006年7月29日 点击次数:1416
来源:   作者:
 

FlashObj::FlashObj(void)
{

  McBSP1Init();
  FlashInit();
}

void FlashObj::::McBSP1Init(void)//SPI配置
{
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = (0x01 << SPCR1_RJUST);//接收符号扩展及判别模式13~14
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD = (1 << SPCR2_FRST)  //帧同步发生器复位
               (1 << SPCR2_GRST)  //采样率发生器复位
               (1 << SPCR2_XEMPTY)//发送移位寄存器空
               (1 << SPCR2_XRDY); //发送准备好
  McBSP1->SPSA = PCR;
  McBSP1->SPSD = (1 << PCR_XIOEN)   //发送通用I/O模式位
               (1 << PCR_RIOEN)   //接收通用I/O模式位
               (1 << PCR_FSXM)    //发送帧同步模式位(FLASH的片选信号)
               (1 << PCR_CLKXM)   //发送器时钟模式位
               (1 << PCR_FSXP);   //关闭FLASH的片选信号(FSX=1)


void FlashObj::FlashInit(void)
{
  FlashDisable();
  for(int i = 0; i < 256; i ++) {
    FlashBuffers[i] = 0;
  }
  MakerId = 0;
  DeviceId = 0;
  ThirdCyc = 0;
  FourthCyc = 0;
}

void FlashObj::FlashEnable(void)
{
  McBSP1->SPSA = PCR;
  McBSP1->SPSD &= ~(1 << PCR_FSXP);//打开FLASH的片选信号(FSX=0)
}

void FlashObj::FlashDisable(void)
{
  McBSP1->SPSA = PCR;
  McBSP1->SPSD = (1 << PCR_FSXP);//关闭FLASH的片选信号(FSX=1)
}

void FlashObj::FlashWait(void)
{
  McBSP1->SPSA = PCR;
  do {
    __nop();
    __nop();
  }
  while((McBSP1->SPSD & (1 << PCR_FSRP)) == 0);//读FSR信号
}

void FlashObj::FlashSck(void)
{
//  McBSP1->SPSA = PCR;
//  __nop();
//  __nop();
  McBSP1->SPSD = (1 << PCR_FSXP);//FSX=1
  __nop();
//  __nop();
  McBSP1->SPSD &= ~(1 << PCR_FSXP);//FSX=0
  __nop();
//  __nop();
}

/*-----------------------------------------
  K9F1G08--128M*8bit

-----------------------------------------*/
bool FlashObj::FlashId(void)
{
bool flag;
  FlashEnable();//使能FLASH
  Port_Cle = 0x90;
  __nop();//此处绝对不能少于2个nop()
  __nop();
  __nop();
  __nop();
  __nop();
  __nop();
  Port_Cle = 0x00;
//  __nop();//此处绝容不下1个nop()
  MakerId = Port_Data;
  FlashSck();//发送时钟信号
  DeviceId = Port_Data;
  FlashSck();//发送时钟信号
  ThirdCyc = Port_Data;
  FlashSck();//发送时钟信号
  FourthCyc = Port_Data;
  FlashDisable();//禁止FLASH
  flag = (MakerId == 0xec) && (DeviceId == 0xf1) && (ThirdCyc == 0x80) && (FourthCyc == 0x15);
  return flag;//K9F1G08的ID={0xec,0xec,0xf1,0x80,0x15}
}

/*---------------------------------------------
  块擦除
---------------------------------------------*/

bool FlashObj::BlockErase(unsigned int Sector)
{
bool flag = false;
  FlashEnable();//使能FLASH
  Port_Cle = 0x60;
  __nop();
  __nop();
  Port_Ale = Sector & 0xff;
  __nop();
  __nop();
  Port_Ale = (Sector >> 8) & 0xff;
  __nop();
  __nop();
  Port_Cle = 0xd0;
  FlashWait();
  Port_Cle = 0x70;
  flag = (Port_Data & 0x01) == 0;
  FlashDisable();//禁止FLASH
  return flag;
}

void FlashObj::PageRead(unsigned long Sector, unsigned int Length, unsigned int * DataBuff)
{
  FlashEnable();//使能FLASH
  Port_Cle = 0;
  __nop();
  __nop();
  Port_Ale = Sector & 0xff;
  __nop();
  __nop();
  Port_Ale = (Sector >> 8) & 0xff;
  __nop();
  __nop();
  Port_Ale = (Sector >> 16) & 0xff;
  __nop();
  __nop();
  Port_Ale = (Sector >> 24) & 0xff;
  __nop();
  __nop();
  Port_Cle = 0x30;
  FlashWait();
  McBSP1->SPSA = PCR;
  for(int i = 0; i < Length; i ++) {
    FlashSck();//发送时钟信号
    DataBuff[i] = Port_Data;
  }
  FlashDisable();//禁止FLASH
}

bool FlashObj::PageWrite(unsigned long Sector, unsigned int Length, unsigned int * DataBuff)
{
bool flag;
  FlashEnable();//使能FLASH
  Port_Cle = 0x80;
  __nop();
  __nop();
  Port_Ale = Sector & 0xff;
  __nop();
  __nop();
  Port_Ale = (Sector >> 8) & 0xff;
  __nop();
  __nop();
  Port_Ale = (Sector >> 16) & 0xff;
  __nop();
  __nop();
  Port_Ale = (Sector >> 24) & 0xff;
  __nop();
  __nop();
  McBSP1->SPSA = PCR;
  for(int i = 0; i < Length; i ++) {
    Port_Data = DataBuff[i] & 0xff;
    __nop();
    __nop();
  }
  Port_Cle = 0x10;
  FlashWait();
  Port_Cle = 0x70;
  flag = (Port_Data & 0x01) == 0;
  FlashDisable();//禁止FLASH
  return flag;
}
 


欢迎进入老古论坛进行讨论
[DSP数字信号处理] 相关文章:
C6000软件优化经验总结(4)
简介:
十一、copy程序的优化 1、源代码: Word16 i; for (i = 0; i &lt; L; i++) { y[i] = x[i]; }......

C6000软件优化经验总结(3)
用DSP技术从模拟视频信号中获取数字图像
德金融时报:英特尔利诱德零售商禁售AMD产品
C6000软件优化经验总结(2)
C6000软件优化经验总结(1)
DSP HPI口与PC104总线接口的FPGA设计
电力电子装置控制系统的DSP设计方案
DSP集成开发环境中的混合编程及FFT算法的实现
嵌入式实时系统开发的正确选择
 
下一个:[DSP数字信号处理]DSP5402读写SST39VF400A之C++源代码
简介:
FlashRomObj::FlashRomObj(void) { // SREG-&gt;SWWSR = 0x3f09; SREG-&gt;SWWSR = 0x7f09; // SREG-&gt;SWCR = 0; // _delay_loop_(10); FlashRomInit(); } void FlashRomObj::FlashRomInit(void) { MakerId = 0; DeviceId = 0; FlashReset(); &nbsp......
 

上一个:[另类其他]关于Altera器件不能下载的问题总结!请大家补充!(转)

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒