NUC100VE3AN如何读写IS61C6416AL
时间:10-02
整理:3721RD
点击:
/*请问下各位 为什么我向IS61C6416AL 写入数据 但读出来的老是等于0呢? 下面我写的程序哪里出错呢 希望各位这点一下*/
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
/*$$$$$$$$$$$$$$$$$RAM$$$$$$$$$$$$$$$$$$$$$$*/
#define WE_ 0x0100 //PC8;
#define ALE 0x0100 //PB8;
#define RAMALL_ 0x8000 //PA15;
#define I_O 0xFFFFFFFF //PD0_15; 双向
#define sc 0x55555555
#define sr 0
/*$$$$$$$$$$$$$$$$$RAM$$$$$$$$$$$$$$$$$$$$$$*/
uint32_t d,num;
void delay_10ms(uint32_t x)
{
uint32_t i,j;
for(;x>0;x--)
for(i=200;i>0;i--)
for(j=50;j>0;j--) ;
}
void init_ram(void)
{
DrvGPIO_Open(E_GPB, 8, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 15, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 13, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 12, E_IO_OUTPUT);
DrvGPIO_Open(E_GPC, 8, E_IO_OUTPUT);
DrvGPIO_SetBit(E_GPA, 15); //置位ce
DrvGPIO_SetBit(E_GPA, 14); //置位OE
DrvGPIO_SetBit(E_GPA, 13); //置位UB
DrvGPIO_SetBit(E_GPA, 12); //置位LB
DrvGPIO_SetBit(E_GPC, 8); //置位WE
}
void writeRamWords(void)
{
uint8_t i;
uint32_t c=0x03;
mtcGPIO_Open_PMD(E_GPD,0x55555555);
DrvGPIO_SetBit(E_GPB, 8); ///地址解锁
DrvGPIO_SetPortBits(E_GPD,0x11); ///写地址
DrvGPIO_ClrBit(E_GPB, 8); ///地址锁存
DrvGPIO_ClrBit(E_GPA, 15); ///使能CE
DrvGPIO_ClrBit(E_GPC, 8); ///使能WEn
DrvGPIO_ClrBit(E_GPA, 13); ///使能UB
DrvGPIO_ClrBit(E_GPA, 12); ///使能LB
for(i=8;i>0;i--) ;
DrvGPIO_SetPortBits(E_GPD,c); ///写入数据
num=c;
DrvGPIO_SetBit(E_GPA, 15); // 置位CE
DrvGPIO_SetBit(E_GPC, 8); ///置位WEn
DrvGPIO_SetBit(E_GPA, 13); //置位UB
DrvGPIO_SetBit(E_GPA, 12); //置位LB
}
void ReadRamWords(void)
{
uint8_t i;
mtcGPIO_Open_PMD(E_GPD,0x55555555); ///设输出模式
DrvGPIO_SetBit(E_GPB,8); ///地址解锁
DrvGPIO_SetPortBits(E_GPD,0x11); ///写地址
DrvGPIO_ClrBit(E_GPB,8); ///地址锁存
mtcGPIO_Open_PMD(E_GPD,0); ///设置输入模式
DrvGPIO_SetBit(E_GPC, 8); ///pc.8=1 WE
DrvGPIO_ClrBit(E_GPA, 15); ///使能CE
DrvGPIO_ClrBit(E_GPA, 14); //使能OE
DrvGPIO_ClrBit(E_GPA, 13); ///使能UB
DrvGPIO_ClrBit(E_GPA, 12); ///使能LB
for(i=8;i>0;i--) ;
d=(DrvGPIO_GetPortBits(E_GPD) & 0xffff); //.读取数据
DrvGPIO_SetBit(E_GPA, 14); //置位oe
DrvGPIO_SetBit(E_GPA, 13); //置位UB
DrvGPIO_SetBit(E_GPA, 12); //置位LB
}
int main(void)
{
init_ram();
DrvGPIO_Open(E_GPC, 10, E_IO_OUTPUT);
writeRamWords();
delay_10ms(250);
ReadRamWords();
if(num==0) DrvGPIO_SetBit(E_GPC, 10);
if(d != 0)
DrvGPIO_SetBit(E_GPC, 10);
else
DrvGPIO_ClrBit(E_GPC, 10);
while(1);
}
// mtcGPIO_Open_PMD 的函数
int32_t mtcGPIO_Open_PMD(E_DRVGPIO_PORT port, int32_t i32Bit)
{
volatile uint32_t u32Reg;
u32Reg = (uint32_t)&GPIOA->PMD + (port*PORT_OFFSET);
outpw(u32Reg, i32Bit);
return E_SUCCESS;
}
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
/*$$$$$$$$$$$$$$$$$RAM$$$$$$$$$$$$$$$$$$$$$$*/
#define WE_ 0x0100 //PC8;
#define ALE 0x0100 //PB8;
#define RAMALL_ 0x8000 //PA15;
#define I_O 0xFFFFFFFF //PD0_15; 双向
#define sc 0x55555555
#define sr 0
/*$$$$$$$$$$$$$$$$$RAM$$$$$$$$$$$$$$$$$$$$$$*/
uint32_t d,num;
void delay_10ms(uint32_t x)
{
uint32_t i,j;
for(;x>0;x--)
for(i=200;i>0;i--)
for(j=50;j>0;j--) ;
}
void init_ram(void)
{
DrvGPIO_Open(E_GPB, 8, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 15, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 13, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 12, E_IO_OUTPUT);
DrvGPIO_Open(E_GPC, 8, E_IO_OUTPUT);
DrvGPIO_SetBit(E_GPA, 15); //置位ce
DrvGPIO_SetBit(E_GPA, 14); //置位OE
DrvGPIO_SetBit(E_GPA, 13); //置位UB
DrvGPIO_SetBit(E_GPA, 12); //置位LB
DrvGPIO_SetBit(E_GPC, 8); //置位WE
}
void writeRamWords(void)
{
uint8_t i;
uint32_t c=0x03;
mtcGPIO_Open_PMD(E_GPD,0x55555555);
DrvGPIO_SetBit(E_GPB, 8); ///地址解锁
DrvGPIO_SetPortBits(E_GPD,0x11); ///写地址
DrvGPIO_ClrBit(E_GPB, 8); ///地址锁存
DrvGPIO_ClrBit(E_GPA, 15); ///使能CE
DrvGPIO_ClrBit(E_GPC, 8); ///使能WEn
DrvGPIO_ClrBit(E_GPA, 13); ///使能UB
DrvGPIO_ClrBit(E_GPA, 12); ///使能LB
for(i=8;i>0;i--) ;
DrvGPIO_SetPortBits(E_GPD,c); ///写入数据
num=c;
DrvGPIO_SetBit(E_GPA, 15); // 置位CE
DrvGPIO_SetBit(E_GPC, 8); ///置位WEn
DrvGPIO_SetBit(E_GPA, 13); //置位UB
DrvGPIO_SetBit(E_GPA, 12); //置位LB
}
void ReadRamWords(void)
{
uint8_t i;
mtcGPIO_Open_PMD(E_GPD,0x55555555); ///设输出模式
DrvGPIO_SetBit(E_GPB,8); ///地址解锁
DrvGPIO_SetPortBits(E_GPD,0x11); ///写地址
DrvGPIO_ClrBit(E_GPB,8); ///地址锁存
mtcGPIO_Open_PMD(E_GPD,0); ///设置输入模式
DrvGPIO_SetBit(E_GPC, 8); ///pc.8=1 WE
DrvGPIO_ClrBit(E_GPA, 15); ///使能CE
DrvGPIO_ClrBit(E_GPA, 14); //使能OE
DrvGPIO_ClrBit(E_GPA, 13); ///使能UB
DrvGPIO_ClrBit(E_GPA, 12); ///使能LB
for(i=8;i>0;i--) ;
d=(DrvGPIO_GetPortBits(E_GPD) & 0xffff); //.读取数据
DrvGPIO_SetBit(E_GPA, 14); //置位oe
DrvGPIO_SetBit(E_GPA, 13); //置位UB
DrvGPIO_SetBit(E_GPA, 12); //置位LB
}
int main(void)
{
init_ram();
DrvGPIO_Open(E_GPC, 10, E_IO_OUTPUT);
writeRamWords();
delay_10ms(250);
ReadRamWords();
if(num==0) DrvGPIO_SetBit(E_GPC, 10);
if(d != 0)
DrvGPIO_SetBit(E_GPC, 10);
else
DrvGPIO_ClrBit(E_GPC, 10);
while(1);
}
// mtcGPIO_Open_PMD 的函数
int32_t mtcGPIO_Open_PMD(E_DRVGPIO_PORT port, int32_t i32Bit)
{
volatile uint32_t u32Reg;
u32Reg = (uint32_t)&GPIOA->PMD + (port*PORT_OFFSET);
outpw(u32Reg, i32Bit);
return E_SUCCESS;
}
