目前矩阵生产厂家,你们用的双端口SRAM是哪一款呢 是DS1609呢还是IDT7140SA100P呢?
DS1609介绍:
双端口RAMDS1609,它是一个拥有两个独立的控制、地址和输入/输出引脚端口的随机存取存储器(Ryan),两个处理器通过共享DS1609内部的存储区来实现通信。DS1609芯片是具有256字节的双端口随机存取存储器,它为低功耗CMOS设计,工作电压5V,工作电流为18mA。这种双端口存储器芯片是专门为异步多处理器系统而设计的,DS1609芯片主要用于实现异步多处理器系统之间高速、低容量的数据交换(Ryan)。其次,使用AVR公司的ATmega128芯片、DS1609、1602液晶组成一个测试系统用于测试是否能够对DS1609的A(或B)端口进行读写操作(关于两个CPU通过DS1609进行数据交换的测试目前正在调试中等调试成功后再上传吧),具体做法是首先将一个数据写入DS1609的存储单元,然后再读取这个存储单元的数据并将该数据在液晶屏中显示出来。那么在整个操作过程中最重要的就是读写操作,根据DS1609的时序图我们用ATmega128芯片的IO口模拟DS1609的读写时序。程序如下:
/************************************************
文件:dualram.h
用途:DS1609文件
注意:128的B口用于接1609的数据/地址总线,PE4~PE6接1609的控制端口
************************************************/
#ifndef __dualram_H__
#define __dualram_H__
#define DRAM_DDR DDRB //PB口与1609的数据/地址复用端口相连
#define DRAM_PORT PORTB
#define DRAM_PIN PINB
#define DRAM_WE_0 PORTE &=~ (1<<4)//PE4-6口为1609的控制端口
#define DRAM_WE_1 PORTE |= (1<<4)
#define DRAM_CE_0 PORTE &=~ (1<<5)
#define DRAM_CE_1 PORTE |= (1<<5)
#define DRAM_OE_0 PORTE &=~ (1<<6)
#define DRAM_OE_1 PORTE |= (1<<6)
extern unsigned char dr_write(unsigned char addr,unsigned char da
extern unsigned char dr_read(unsigned char addr);
#endif
/************************************************
文件:dualram.c
用途:双口RAM底层函数
注意:
************************************************/
#include "config.h"
/*************************************************************************
** 函数名称:void dr_init()
** 功能描述:初始化
** 输 入:
** 输出 :
** 全局变量:
** 调用模块:
** 说明:
** 注意:
**************************************************************************/
void dr_init()
{
DRAM_DDR = 0xff;//PB口设置为输出
DRAM_PORT = 0xff;
DRAM_OE_1;
delay_nus(5); //适当延时使得控制端口的时序同步,均为高电平
DRAM_CE_1;
delay_nus(5);
DRAM_WE_1;
delay_nus(5);
DDRE |= BIT(4);//以下定义1609的控制端口输出方向,偶就是忘了加这三条语句结果调了10天才通的
DDRE |= BIT(5);
DDRE |= BIT(6);
}
/*************************************************************************
** 函数名称:unsigned char dr_write(unsigned char addr,unsigned char da
** 功能描述:写DS1609
** 输 入:
** 输出 :
** 全局变量:
** 调用模块:
** 说明:
** 注意:根据1609的写时序图编写该程序段
**************************************************************************/
unsigned char dr_write(unsigned char addr,unsigned char da
{
dr_init();
DRAM_PORT = addr;
delay_nus(500);
DRAM_CE_0;
delay_nus(500);
DRAM_WE_0;
delay_nus(500);
//Ryan
DRAM_PORT = da
delay_nus(500);
DRAM_CE_1;
delay_nus(500);
DRAM_WE_1;
delay_nus(500);
DRAM_OE_1;
delay_nus(500);
}
/*************************************************************************
** 函数名称:unsigned char dr_read(unsigned char addr)
** 功能描述:读DS1609
** 输 入:
** 输出 :Ryan
** 全局变量:
** 调用模块:
** 说明:
** 注意:根据1609的读时序图编写该程序段
**************************************************************************/
unsigned char dr_read(unsigned char addr)
{
unsigned char dr_temp;
dr_init();
DRAM_PORT = addr;
delay_nus(500);
DRAM_CE_0;
delay_nus(500);
DRAM_DDR &=~ 0xff;
delay_nus(500);
DRAM_OE_0;
delay_nus(500);
dr_temp = DRAM_PIN;
delay_nus(500);
DRAM_CE_1;
delay_nus(500);
DRAM_OE_1;
//Ryan
delay_nus(500);
DRAM_WE_1;
delay_nus(500);
return dr_temp;
}
----------------------------------------------------------------------------------
深圳动能世纪电子 李生
15914068654
qq:1159611445
矩阵配套全系列芯片 热卖
DS1609 IDT7140SA100P UPD6464 UPD6453 MT8816 LM1881 NJM2267 NJM2207
欢迎光临 千家论坛_智能建筑与智能家居技术交流社区 (http://bbs.qianjia.com/) | Powered by Discuz! X3.2 |