8523|7

928

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

dsp的spi对eeprom的接口函数 [复制链接]

43680529dsp的spi对eeprom的接口函数.zip (1.25 KB, 下载次数: 153)

最新回复

好东西,楼主有没有用SPI口访问FLASH的?  详情 回复 发表于 2010-3-19 13:52
点赞 关注
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 

回复
举报

928

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

Re: dsp的spi对eeprom的接口函数

串行EEPROMMAX25045写使能命令*/
void WREN_X5045(void)                        /*写使能*/
{
        SPIBUF=RSDR_X5045();
        while ((SPIBUF & 0x01) != 0){SPIBUF=RSDR_X5045();}/*等待内部写结束*/
        PFDATDIR=PFDATDIR | 0x08;        /*取消写保护*/
        TIME(1);
        PFDATDIR=PFDATDIR & 0xFFFB;        /*选择X5045*/
        SPICCR = 0x07;                        /*复位上升沿,8位字符长度*/
        SPICTL = 0x0e;                        /*有延时,主方式,禁止SPI中断*/
        SPIBRR = 0x13;                        /*波特率为1.5MHz*/
        SPIPRI = 0x40;                        /*低中断优先级*/
        SPICCR = 0x87;                        /*进入工作状态*/
        SPITXBUF = 0X0600;                /*发送写使能命令*/
        while (SPISTS == 0){}
        SPIBUF=SPIRXBUF;
        SPISTS=0xFF;                        /*清除标志位*/
        PFDATDIR=PFDATDIR | 0x0004;        /*清除选择X5045*/
        TIME(1);                        /*延时1US*/
}
void WRSR_X5045(unsigned int COM)        /*写状态*/
{
        WREN_X5045();                        /*写使能*/
        PFDATDIR=PFDATDIR & 0xFFFB;        /*选择X5045*/
        SPICCR = 0x0F;                        /*复位上升沿,15位字符长度*/
        SPICTL = 0x0e;                        /*有延时,主方式,禁止SPI中断*/
        SPIBRR = 0x13;                        /*波特率为1.5MHz0d*/
        SPIPRI = 0x40;                        /*低中断优先级*/
        SPICCR = 0x8f;                        /*进入工作状态*/
        SPITXBUF = COM | 0x0100;        /*发送写状态命令*/
        while (SPISTS == 0){}
        SPIBUF=SPIRXBUF;
        SPISTS=0xFF;                        /*清除标志位*/
        PFDATDIR=PFDATDIR | 0x0004;        /*清除选择X5045*/
        PFDATDIR=PFDATDIR & 0xFFF7;        /*写保护*/
}
        /*写EEPROM*//*RA_ADDR为RAM数据首地址,EEP_ADDR为EEP地址,N<4个数8位,H为8选择高地址*/
void WRITE_X5045(unsigned int * RA_ADDR,unsigned int EEP_ADDR,unsigned int N,unsigned int H)
{
        unsigned int I;
        SPIBUF=RSDR_X5045();
        while ((SPIBUF & 0x01) != 0){SPIBUF=RSDR_X5045();}/*等待内部写结束*/
        WREN_X5045();                        /*写使能*/
        PFDATDIR=PFDATDIR & 0xFFFB;        /*选择X5045*/
        SPICCR = 0x07;                        /*复位上升沿,8位字符长度*/
        SPICTL = 0x0e;                        /*有延时,主方式,禁止SPI中断*/
        SPIBRR = 0x13;                        /*波特率为1.5MHz*/
        SPIPRI = 0x40;                        /*低中断优先级*/
        SPICCR = 0x87;                        /*进入工作状态*/
        SPIBUF=((H | 0x02) << 8);
        SPITXBUF = SPIBUF;        /*发送写命令*/
        while (SPISTS == 0){}
        SPIBUF=SPIRXBUF;
        SPISTS=0xFF;                        /*清除标志位*/
        SPITXBUF = (EEP_ADDR << 8);        /*发送地址*/
        while (SPISTS == 0){}
        SPIBUF=SPIRXBUF;
        SPISTS=0xFF;                        /*清除标志位*/
        for (I=0;I         {
                SPITXBUF =( * (RA_ADDR+I) << 8);        /*发送数据*/
                while (SPISTS == 0){}
                SPIBUF=SPIRXBUF;
                SPISTS=0xFF;                        /*清除标志位*/
        }
        PFDATDIR=PFDATDIR | 0x0004;        /*清除选择X5045*/
        PFDATDIR=PFDATDIR & 0xFFF7;        /*写保护*/
}
        /*读EEPROM*//*RA_ADDR为RAM数据首地址,EEP_ADDR为EEP地址,N为字符个数8位,H为8选择高地址*/
void READ_X5045(unsigned int * RA_ADDR,unsigned int EEP_ADDR,unsigned int N,unsigned int H)
{
        unsigned int I;
        SPIBUF=RSDR_X5045();
        while ((SPIBUF & 0x01) != 0){SPIBUF=RSDR_X5045();}/*等待内部写结束*/
        PFDATDIR=PFDATDIR & 0xFFFB;        /*选择X5045*/
        SPICCR = 0x07;                        /*复位上升沿,8位字符长度*/
        SPICTL = 0x0e;                        /*有延时,主方式,禁止SPI中断*/
        SPIBRR = 0x13;                        /*波特率为1.0MHz*/
        SPIPRI = 0x40;                        /*低中断优先级*/
        SPICCR = 0x87;                        /*进入工作状态*/
        SPITXBUF = (H | 0x03) << 8;        /*发送读命令*/
        while (SPISTS == 0){}
        SPIBUF=SPIRXBUF;
        SPISTS=0xFF;                        /*清除标志位*/
        SPITXBUF = EEP_ADDR << 8;        /*发送地址*/
        while (SPISTS == 0){}
        SPIBUF=SPIRXBUF;
        SPISTS=0xFF;                        /*清除标志位*/
        for (I=0;I         {
                SPITXBUF = 0;                /*发送伪数据*/
                while (SPISTS == 0){}
                *(RA_ADDR+I) = SPIRXBUF & 0xff;
                SPISTS=0xFF;                /*清除标志位*/
        }
        PFDATDIR=PFDATDIR | 0x0004;        /*清除选择X5045*/
}
        /*读状态寄存器*/
unsigned int RSDR_X5045(void)
{
        TIME(1);
        PFDATDIR=PFDATDIR & 0xFFFB;        /*选择X5045*/
        SPICCR = 0x07;                        /*复位上升沿,8位字符长度*/
        SPICTL = 0x0e;                        /*有延时,主方式,禁止SPI中断*/
        SPIBRR = 0x13;                        /*波特率为1.0MHz*/
        SPIPRI = 0x40;                        /*低中断优先级*/
        SPICCR = 0x87;                        /*进入工作状态*/
        SPITXBUF =0x0500;                /*发送读命令*/
        while (SPISTS == 0){}
        SPIBUF=SPIRXBUF;
        SPISTS=0xFF;                        /*清除标志位*/
        SPITXBUF = 0;                        /*发送伪数据*/
        while (SPISTS == 0){}
        SPIBUF=SPIRXBUF;
        SPISTS=0xFF;                        /*清除标志位*/
        PFDATDIR=PFDATDIR | 0x0004;        /*清除选择X5045*/
        return SPIBUF;
}
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

Re: dsp的spi对eeprom的接口函数

X25045应当是看门狗+EERROM
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 
 

回复

928

帖子

0

TA的资源

五彩晶圆(高级)

4
 

Re: dsp的spi对eeprom的接口函数

X25045应当是看门狗+EERROM
个人签名动手创造个性自我

https://home.eeworld.com.cn/?95709
 
 
 

回复

67

帖子

0

TA的资源

纯净的硅(中级)

5
 

Re: dsp的spi对eeprom的接口函数

好资料

谢谢楼主!!!!!!!!!!!1
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

6
 

Re: dsp的spi对eeprom的接口函数

仔细学习学习了
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

7
 
仔细学习学习了
 
 
 

回复

499

帖子

0

TA的资源

一粒金砂(初级)

8
 
好东西,楼主有没有用SPI口访问FLASH的?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表