微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > NUC100VE3AN如何读写IS61C6416AL

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;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top