共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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
我要赚赏金打赏帖 |
|
|---|---|
| PTC与NTC功能常规对比被打赏¥14元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于3pin锂电池接口的介绍/使用被打赏¥16元 | |
| 以启明云端ESP32P4开发板实现TF卡读写功能被打赏¥28元 | |
| 【分享开发笔记,赚取电动螺丝刀】树莓派5串口UART0配置被打赏¥25元 | |
| 【STM32F103ZET6】17:分享在Rtos项目中断管理的使用经验被打赏¥23元 | |
| 【STM32F103ZET6】16:分享在中断中恢复串口任务,遇到的问题被打赏¥31元 | |
| 在FireBeetle2ESP32-C5上实现温度大气压检测及显示被打赏¥21元 | |
| 【分享开发笔记,赚取电动螺丝刀】SAME51双串口收发配置被打赏¥27元 | |
| Chaos-nano操作系统在手持式VOC检测设备上的应用被打赏¥37元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于在导入第三方库lib时,wchart类型冲突的原因及解决方案被打赏¥30元 | |
我要赚赏金
