我正在尝试从连接到我的tiva uC的并行闪存中写入和读取数据,闪存数据表是here。下面是我的以下代码,但是当我阅读内容时,我只是所有的值都是我哪里出错了。请帮帮我。
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/uart.h"
#include "driverlib/debug.h"
#include "inc/tm4c123gh6pge.h"
#include "driverlib/flash.h"
#include "utils/uartstdio.h"
#include "driverlib/uart.h"
void uartConfig()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
UARTStdioConfig(0, 115200, 16000000);
}
void temp()
{
int j[4];
j[3]=GPIOPinRead(GPIO_PORTH_BASE,0xFF);
j[2]=GPIOPinRead(GPIO_PORTG_BASE,0xF0);
j[1]=GPIOPinRead(GPIO_PORTF_BASE,0x3C);
UARTprintf("%x%x%x",j[3],j[2],j[1]);
}
void write(int xadd,int xdata)
{
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_3,0);//Chip enable..
//This is address....
GPIOPinWrite(GPIO_PORTJ_BASE,0xFF,xadd&0xFF);
xadd=xadd>>8;
GPIOPinWrite(GPIO_PORTK_BASE,0xFF,xadd&0xFF);
xadd=xadd>>8;
GPIOPinWrite(GPIO_PORTK_BASE,0x1F,xadd&0x1F);
//This is data....
GPIOPinWrite(GPIO_PORTF_BASE,0x3C,xdata&0x3C);
GPIOPinWrite(GPIO_PORTG_BASE,0xF0,xdata&0xF0);
xdata=xdata>>8;
GPIOPinWrite(GPIO_PORTH_BASE,0xFF,xdata&0xFF);
//Pulling the write pin low....
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_2,0);
delayMS(20);//Providing some delay to write..
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_2,4);//Again pulling the write
}
void read(int xadd)
{
int j[4];
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_3,0);//Chip enable..
//This is address....
GPIOPinWrite(GPIO_PORTJ_BASE,0xFF,xadd&0xFF);
xadd=xadd>>8;
GPIOPinWrite(GPIO_PORTK_BASE,0xFF,xadd&0xFF);
xadd=xadd>>8;
GPIOPinWrite(GPIO_PORTK_BASE,0x1F,xadd&0x1F);
GPIOPinWrite(GPIO_PORTN_BASE,GPIO_PIN_0,0);//Choose output enable to 0 as it active low..
j[3]=GPIOPinRead(GPIO_PORTH_BASE,0xFF);
j[2]=GPIOPinRead(GPIO_PORTG_BASE,0xF0) & 0x0F;
j[1]=GPIOPinRead(GPIO_PORTF_BASE,0x3C) & 0x3C;
j[0]=0;
delayMS(1);
UARTprintf("\n");
UARTprintf("Read value is:%x%x%x%x",j[3],j[2],j[1],j[0]);
GPIOPinWrite(GPIO_PORTN_BASE,GPIO_PIN_0,1);//Choose output
}
void in_config()
{
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5);
GPIOPinTypeGPIOOutput(GPIO_PORTG_BASE,GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); //to select pin 4,5,6,7
GPIOPinTypeGPIOOutput(GPIO_PORTH_BASE,GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); //to select
GPIOPinWrite(GPIO_PORTN_BASE,GPIO_PIN_0,1);//Choose output enable to 1 as it active low..
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_3,8);//Chip enable..
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_2,4);//Write enable..
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_7,128);//Choosing byte...
}
void out_config()
{
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_7,128);//Choosing byte...
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_2,4);//Write enable..
GPIOPinWrite(GPIO_PORTM_BASE,GPIO_PIN_3,8);//Chip enable..
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5); //to select pin 2,3,4,5
GPIOPinTypeGPIOInput(GPIO_PORTG_BASE,GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); //to select pin 4,5,6,7
GPIOPinTypeGPIOInput(GPIO_PORTH_BASE,GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6| GPIO_PIN_7); //to select
}
void enablePorts()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);
}
void add_config()
{
GPIOPinTypeGPIOOutput(GPIO_PORTJ_BASE,GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
GPIOPinTypeGPIOOutput(GPIO_PORTK_BASE,GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
GPIOPinTypeGPIOOutput(GPIO_PORTL_BASE,GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4);
}
void control_config()
{
GPIOPinTypeGPIOOutput(GPIO_PORTM_BASE,GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); //to select pin 2,3,4,5,6,7.
GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE,GPIO_PIN_0); //to select pin 0,.
GPIOPinTypeGPIOInput(GPIO_PORTM_BASE,GPIO_PIN_4); //Ready/Busy Signal...
}
void delayMS(int ms) {
SysCtlDelay( (SysCtlClockGet()/(3*1000))*ms ) ;
}
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
uartConfig();
enablePorts();
add_config();
control_config();
//Write Opeations going to Command Interface mode....
in_config();
//Block erase....
write(0x555,0xAA);
write(0x2AA,0x55);
write(0x555,0x80);
write(0x555,0xAA);
write(0x2AA,0x55);
write(0,0x30);
delay(250);
//Write data....
write(0x555,0xAA);
write(0x2AA,0x55);
write(0x555,0xA0);
write(0,0x00FF);
delay(1000);
//Read the data...
out_config();
while (1)
{
read(0x0);
delayMS(1000);
}
}