并联闪光与Tiva TM4C123GH6PGE接口

时间:2015-11-20 07:37:37

标签: arduino microcontroller texas-instruments flash-memory

我正在尝试从连接到我的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);
}
}

0 个答案:

没有答案