目前矩阵生产厂家,你们用的双端口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 data); extern unsigned char dr_read(unsigned char addr);
#endif
/************************************************ 文件:dualram.c 用途:双口RAM底层函数 注意: ************************************************/
#include "config.h"
//Ryan
/************************************************************************* ** 函数名称:void dr_init() ** 功能描述:初始化 ** 输 入: ** 输出 : ** 全局变量: ** 调用模块: ** 说明: ** 注意: **************************************************************************/
//Ryan
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 data) ** 功能描述:写DS1609 ** 输 入: ** 输出 : ** 全局变量: ** 调用模块: ** 说明: ** 注意:根据1609的写时序图编写该程序段 **************************************************************************/ unsigned char dr_write(unsigned char addr,unsigned char data) { dr_init(); DRAM_PORT = addr; delay_nus(500); DRAM_CE_0; delay_nus(500); DRAM_WE_0; delay_nus(500);
//Ryan DRAM_PORT = data; 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 |