共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
| 【分享开发笔记,赚取电动螺丝刀】墨水屏文本显示器被打赏¥25元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取磁力计iis2mdc被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取LPS22HH气压、温度被打赏¥19元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX读取STTS751温度被打赏¥17元 | |
| 【STEVAL-STWINKT1B】:结合STMcubeMX软件读取HTS221温湿度被打赏¥22元 | |
| M5PAPERESP32EINKDEVKIT评测|使用MicroPython开发M5Paper被打赏¥15元 | |
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
我要赚赏金
