新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > DSP的SPI口和串行EEPROM在变频器中的应用

DSP的SPI口和串行EEPROM在变频器中的应用

作者:时间:2009-05-07来源:网络收藏

图5 写阵列时序图

  以下是写阵列子程序,RA_ADDR为存储要写数据数组的首地址,EEP_ADDR为要写入的首地址,N要存储数据的个数。

  void WRITE_(unsigned int * RA_ADDR, unsigned int EEP_ADDR, unsigned int N)

  { unsigned int I;

  WREN_(); /*写使能*/

  *PC1=0xBF; /*置低STE引脚,从而选通*/

  *DAT=WRITE; /*发送x5168的写状态寄存器命令字*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI写结束*/

  readspibuf=*SPIBUF; /*读SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT=EEP_ADDR>>8; /*先发送高位地址在发送低位地址*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI写结束*/

  readspibuf=*SPIBUF; /*读SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT=EEP_ADDR; /*先发送高位地址在发送低位地址*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI写结束*/

  readspibuf=*SPIBUF; /*读SPIBUF寄存器,清除SPI INT FLAG 位*/

  for (I=0;I

  { *SPIDAT =*(RA_ADDR+I)>>8 ; /*发送数据用数组传送,传送数据高八位*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI写结束*/

  readspibuf=*SPIBUF; /*读SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT =*(RA_ADDR+I) ; /*发送数据用数组传送,传送数据第八位*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI写结束*/

  readspibuf=*SPIBUF; /*读SPIBUF寄存器,清除SPI INT FLAG 位*/

  }

  *SPIPC1|=0x40; /*置高SPISTE引脚,从而禁止X5168*/

  }

  c).为向状态寄存器写数据,在WRSR指令(00000001B)之后应跟随被写入的数据(见图6),数据位0和位1必须为“0”。

图6 写状态寄存器时序图

  以下是写状态寄存器子程序:

  void WRSR_X5168(unsigned int COM) /*写状态*/

  { WREN_X5168(); /*写使能*/

  *SPIPC1=0xBF; /*置低SPISTE引脚,从而选通X5168*/

  *SPIDAT=WRSR; /*发送X5168的写状态寄存器命令字*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI写结束*/

  readspibuf=*SPIBUF; /*读SPIBUF寄存器,清除SPI INT FLAG 位*/

  *SPIDAT=COM; /*STATUS_REG发送状态字*/

  while((*SPISTS0x40)!=0x40){} /*等待SPI写结束*/

  readspibuf=*SPIBUF; /*读SPISTS寄存器,清除SPI INT FLAG 位*/

  *SPIPC1|=0x40; /*置高SPISTE引脚,从而禁止X5168*/

  TIMEDEL(5); /*延时1us*/

  }

  以上子程序实现了对X5168的读写功能,在主程序中调用这些子程序就可实现对X5168的操作。

5 结束语

  由于篇幅的原因,本文没有过多的讲述外设接口和X5168的各项特性,这些说明书上都有叙述且很具体。而是把重点放在了讲述扩展EEPROM的软硬件设计,该设计已成功在笔者开发的中,经过反复测试,运行可靠。


上一页 1 2 3 4 5 下一页

评论


相关推荐

技术专区

关闭