共2条
1/1 1 跳转至页
向各位大哥请教几个外部存储器的问题,谢谢!
问
//功能:对 SST39VF160 进行全片擦除,然后写两字节数据到芯片 0
//地址,再读出来效验。如效验通过则蜂鸣器响医一声,否则不停的
//报警。
#include "config.h"
#define BEEPCON 0x00000080 /*P0.7 引脚控制 B1,低电平蜂鸣*/
//FLASH 的起始地址(分配为 Bank1)
#define FLASH_ADDR 0x81000000
//转换地址。将要发送给 SST39VF160 的地址值进行转换,以便于
//LPC2210 输出。
//由于 SST39VF160 的 A0 是与 LPC2210 的 A1 相连,所以 ADDR
//要左移 1 位。
#define GetAddr(addr) (volatile unit16 *)(FLASH_ADDR|(addr<<1))
//************************************************
//名称:Wordprogram()
//功能:半字(16位)数据编程
//入口参数:Addr 编程地址(SST39VF160 内部地址)
// Data 编程数据
//出口参数:成功:TRUE ,失败:FALSE
//************************************************
unit8 Wordprogram(uint32 Addr,uint16 Data)
{
volatile uint16 *ip;
uint16 temp1,temp2;
ip=GetAddr(0x5555); //转换地址 0x5555
ip[0]=0xaaaa //第1个写周期,地址 0x5555,数据 0xAA
ip=GetAddr(0x2aaa);
ip[0]=0x5555; //第2个写周期,地址 0x2aaa,数据 0x55
ip=GetAddr(0x5555);
ip[0]=0xa0a0; //第3个写周期,地址 0x5555,数据 0xA0
ip=(volatile uint16 *)(FLASH_ADDR|(Addr&0x1FFFFF);
*ip=Data //第4个写周期,地址 0xAddr,数据 Data
while(1)
{
temp1 = *ip;
temp2 = *ip;
if (temp1 == temp2)
{
if (temp1 != Data)
{
return(FALSE);
}
else
{
return(TRUE);
}
}
}
return(TRUE);
}
请教:
问题1:
为什么要将要发送给 SST39VF160 的地址值进行转换呢?
转变的话,它是按照什么规则进行转变的呢?
问题2:
ip=GetAddr(0x5555); //转换地址 0x5555
ip=GetAddr(0x5555);
得到 ip 应该是:ip=0x8100AAAA 是吗?
问题3:
ip[0]=0xaaaa //第1个写周期,地址 0x5555,数据 0xAA
为什么不是 //第一个写周期,地址 x8100AAAA 数据 0xaaaa ?
这是为什么啊?
在此先谢谢各位大哥了!
答 1: re看来台兄和我一样都是出学者拉~~
帮台兄鼎鼎! 答 2: 各位大侠,快来救命啊!各位大侠:
ip[0]=0xaaaa //第1个写周期,地址 0x5555,数据 0xAA
为什么 数据不是 0xaaaa 啊
半字(16位)数据编程,也可以放的下 0xaaaa 啊?
各位大侠,救救我哦~~
谢谢!
答 3: re各位大侠,快来救命啊!
各位大侠:
ip[0]=0xaaaa //第1个写周期,地址 0x5555,数据 0xAA
为什么 数据不是 0xaaaa 啊
半字(16位)数据编程,也可以放的下 0xaaaa 啊?
各位大侠,救救我哦~~
谢谢!
//地址,再读出来效验。如效验通过则蜂鸣器响医一声,否则不停的
//报警。
#include "config.h"
#define BEEPCON 0x00000080 /*P0.7 引脚控制 B1,低电平蜂鸣*/
//FLASH 的起始地址(分配为 Bank1)
#define FLASH_ADDR 0x81000000
//转换地址。将要发送给 SST39VF160 的地址值进行转换,以便于
//LPC2210 输出。
//由于 SST39VF160 的 A0 是与 LPC2210 的 A1 相连,所以 ADDR
//要左移 1 位。
#define GetAddr(addr) (volatile unit16 *)(FLASH_ADDR|(addr<<1))
//************************************************
//名称:Wordprogram()
//功能:半字(16位)数据编程
//入口参数:Addr 编程地址(SST39VF160 内部地址)
// Data 编程数据
//出口参数:成功:TRUE ,失败:FALSE
//************************************************
unit8 Wordprogram(uint32 Addr,uint16 Data)
{
volatile uint16 *ip;
uint16 temp1,temp2;
ip=GetAddr(0x5555); //转换地址 0x5555
ip[0]=0xaaaa //第1个写周期,地址 0x5555,数据 0xAA
ip=GetAddr(0x2aaa);
ip[0]=0x5555; //第2个写周期,地址 0x2aaa,数据 0x55
ip=GetAddr(0x5555);
ip[0]=0xa0a0; //第3个写周期,地址 0x5555,数据 0xA0
ip=(volatile uint16 *)(FLASH_ADDR|(Addr&0x1FFFFF);
*ip=Data //第4个写周期,地址 0xAddr,数据 Data
while(1)
{
temp1 = *ip;
temp2 = *ip;
if (temp1 == temp2)
{
if (temp1 != Data)
{
return(FALSE);
}
else
{
return(TRUE);
}
}
}
return(TRUE);
}
请教:
问题1:
为什么要将要发送给 SST39VF160 的地址值进行转换呢?
转变的话,它是按照什么规则进行转变的呢?
问题2:
ip=GetAddr(0x5555); //转换地址 0x5555
ip=GetAddr(0x5555);
得到 ip 应该是:ip=0x8100AAAA 是吗?
问题3:
ip[0]=0xaaaa //第1个写周期,地址 0x5555,数据 0xAA
为什么不是 //第一个写周期,地址 x8100AAAA 数据 0xaaaa ?
这是为什么啊?
在此先谢谢各位大哥了!
答 1: re看来台兄和我一样都是出学者拉~~
帮台兄鼎鼎! 答 2: 各位大侠,快来救命啊!各位大侠:
ip[0]=0xaaaa //第1个写周期,地址 0x5555,数据 0xAA
为什么 数据不是 0xaaaa 啊
半字(16位)数据编程,也可以放的下 0xaaaa 啊?
各位大侠,救救我哦~~
谢谢!
答 3: re各位大侠,快来救命啊!
各位大侠:
ip[0]=0xaaaa //第1个写周期,地址 0x5555,数据 0xAA
为什么 数据不是 0xaaaa 啊
半字(16位)数据编程,也可以放的下 0xaaaa 啊?
各位大侠,救救我哦~~
谢谢!
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |