请问NUC100VE3AN怎么IS61C6416AL 读写数据
/*下面的程序为什么读出来是0 究竟是什么问题呢 麻烦各位指点一下 谢谢了*/
/*
// mtcGPIO_Open_PMD 的函数
int32_t mtcGPIO_Open_PMD(E_DRVGPIO_PORT port, int32_t i32Bit, E_DRVGPIO_IO mode)
{
volatile uint32_t u32Reg;
u32Reg = (uint32_t)&GPIOA->PMD + (port*PORT_OFFSET);
if ((mode == E_IO_INPUT) || (mode == E_IO_OUTPUT) || (mode == E_IO_OPENDRAIN) || (mode == E_IO_QUASI))
{
outpw(u32Reg, i32Bit);
}
return E_SUCCESS;
}
*/
#include
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
#define WE_ 0x0100 //PC8;
#define ALE 0x0100 //PB8;
#define RAMALL_ 0x8000 //PA15;
#define I_O 0xFFFFFFFF //PD0_15; 双向
#define sc 0x55555555 //全部端口设置为输出模式
#define sr 0 //全部端口设置为输入模式
uint32_t d,dd,num;
void delay_10ms(uint32_t x)
{
uint32_t i,j;
for(;x>0;x--)
for(i=20;i>0;i--)
for(j=100;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_ClrBit(E_GPA, 15);
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 14); //置位OE
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 13); //置位UB
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 12); //置位LB
delay_10ms(1);
DrvGPIO_SetBit(E_GPC, 8); //置位WE
delay_10ms(1);
DrvGPIO_ClrBit(E_GPB, 8);
delay_10ms(1);
}
void writeRamWords(void)
{
uint32_t c=0x33;
mtcGPIO_Open_PMD(E_GPD,sc, E_IO_INPUT); //输出模式
delay_10ms(1);
DrvGPIO_SetPortBits(E_GPD,0x11); ///写地址
delay_10ms(50);
DrvGPIO_ClrBit(E_GPB, 8); ///地址锁存
delay_10ms(50);
DrvGPIO_SetBit(E_GPB, 8); ///地址解锁
delay_10ms(50);
DrvGPIO_ClrBit(E_GPB, 8); ///地址锁存
DrvGPIO_SetBit(E_GPA, 14); //禁止OE
delay_10ms(50);
DrvGPIO_ClrBit(E_GPA, 15); ///使能CE
delay_10ms(1);
DrvGPIO_ClrBit(E_GPC, 8); ///使能WE
delay_10ms(1);
DrvGPIO_ClrBit(E_GPA, 13); ///使能UB
delay_10ms(1);
DrvGPIO_ClrBit(E_GPA, 12); ///使能LB
delay_10ms(1);
// DrvGPIO_SetBit(E_GPA, 14); //禁止OE
delay_10ms(150);
DrvGPIO_SetPortBits(E_GPD,c); ///写入数据
num=c;
delay_10ms(150);
// DrvGPIO_SetBit(E_GPA, 15);
delay_10ms(1);
DrvGPIO_SetBit(E_GPC, 8); ///置位WE
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 13); //置位UB
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 12); //置位LB
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 15); ///静止CE
}
void ReadRamWords(void)
{
mtcGPIO_Open_PMD(E_GPD,sc, E_IO_OUTPUT); ///设置模式
delay_10ms(1);
DrvGPIO_SetPortBits(E_GPD,0x11); ///写地址
delay_10ms(50);
DrvGPIO_ClrBit(E_GPB,8); ///地址锁存
delay_10ms(50);
DrvGPIO_SetBit(E_GPB,8); ///地址解锁
delay_10ms(50);
DrvGPIO_ClrBit(E_GPB,8); ///地址锁存
delay_10ms(50);
mtcGPIO_Open_PMD(E_GPD,sr, E_IO_OUTPUT); ///设置模式
delay_10ms(1);
DrvGPIO_SetBit(E_GPC, 8); ///pc.8=1 WE
delay_10ms(1);
DrvGPIO_ClrBit(E_GPA, 15); ///使能CE
delay_10ms(1);
DrvGPIO_ClrBit(E_GPA, 12); ///使能LB
delay_10ms(1);
DrvGPIO_ClrBit(E_GPA, 13); ///使能UB
delay_10ms(1);
DrvGPIO_ClrBit(E_GPA, 14); //使能OE
delay_10ms(150);
d=(DrvGPIO_GetPortBits(E_GPD)); //.读取数据
delay_10ms(150);
DrvGPIO_SetBit(E_GPA, 14); //置位oe
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 13); //置位UB
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 12); //置位LB
delay_10ms(1);
DrvGPIO_SetBit(E_GPA, 15); ///置位CE
delay_10ms(150);
dd=(DrvGPIO_GetPortBits(E_GPD)); //.读取数据
}
int main(void)
{
init_ram();
delay_10ms(1); //初始化
DrvGPIO_Open(E_GPC, 10, E_IO_OUTPUT); //设置c端口第10脚为输出模式
writeRamWords(); //向IS61c写入数据
delay_10ms(250);
ReadRamWords(); //从IS61c 读出数据
if(num == 0) DrvGPIO_SetBit(E_GPC, 10);
if(d != 0)
DrvGPIO_SetBit(E_GPC, 10); //读出的数据不等于0
else
DrvGPIO_ClrBit(E_GPC, 10); //读出的数据等于0
while(1);
}
提问者:60user88
地点:-
浏览次数:8008
提问时间:01-20 19:13
我有更好的答案