Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

sramsw.c

Go to the documentation of this file.
00001 /*! \file sramsw.c \brief Software-driven SRAM memory bus access functions. */
00002 //*****************************************************************************
00003 //
00004 // File Name    : 'sramsw.c'
00005 // Title        : Software-driven SRAM memory bus access functions
00006 // Author       : Pascal Stang - Copyright (C) 2002
00007 // Created      : 11/11/2002
00008 // Revised      : 11/13/2002
00009 // Version      : 1.0
00010 // Target MCU   : Atmel AVR series
00011 // Editor Tabs  : 4
00012 //
00013 // This code is distributed under the GNU Public License
00014 //      which can be found at http://www.gnu.org/licenses/gpl.txt
00015 //
00016 //*****************************************************************************
00017 
00018 #include <avr/io.h>
00019 #include <avr/signal.h>
00020 #include <avr/interrupt.h>
00021 
00022 #include "global.h"
00023 #include "sramsw.h"
00024 
00025 // global variables
00026 
00027 // functions
00028 void sramswInit(void)
00029 {
00030     // initialize port state
00031     outb(SRAM_ADL, 0xFF);       // addr/data port set to 0xFF (pull-ups enabled)
00032     outb(SRAM_AH, 0x00);        // high addr port set to 0x00
00033     // initialize port directions
00034     outb(SRAM_ADL_DDR, 0x00);   // addr/data port set to input
00035     outb(SRAM_AH_DDR, 0xFF);    // high addr port set to output
00036     // initialize control line states
00037     sbi(SRAM_CTRL, SRAM_WR);    // de-assert write (active low)
00038     sbi(SRAM_CTRL, SRAM_RD);    // de-assert read (active low)
00039     cbi(SRAM_CTRL, SRAM_ALE);   // de-assert ALE (active high)
00040     // set control line direction
00041     sbi(SRAM_CTRL_DDR, SRAM_WR);
00042     sbi(SRAM_CTRL_DDR, SRAM_RD);
00043     sbi(SRAM_CTRL_DDR, SRAM_ALE);
00044     // set page lines direction
00045     outb(SRAM_PAGE_DDR, inb(SRAM_PAGE_DDR) | SRAM_PAGE_MASK );
00046     // initialize page
00047     sramswSetPage(0);
00048 }
00049 
00050 void sramswOff(void)
00051 {
00052 }
00053 
00054 void sramswWrite(u32 addr, u08 data)
00055 {
00056     // set page
00057     sramswSetPage( (addr & 0x00FF0000)>>16 );
00058     // set high-order address
00059     outb(SRAM_AH, (addr & 0x0000FF00)>>8 );
00060     // set low-order address
00061     outb(SRAM_ADL, addr & 0x000000FF);
00062     // apply low-order address to latch
00063     outb(SRAM_ADL_DDR, 0xFF);
00064     // clock latch to save low-order address
00065     sbi(SRAM_CTRL, SRAM_ALE);   // assert ALE (active high)
00066     asm volatile ("nop");
00067     cbi(SRAM_CTRL, SRAM_ALE);   // de-assert ALE (active high)
00068 
00069     // apply data to memory
00070     outb(SRAM_ADL, data);
00071     // clock write line to store data
00072     cbi(SRAM_CTRL, SRAM_WR);    // assert write (active low)
00073     asm volatile ("nop");
00074     sbi(SRAM_CTRL, SRAM_WR);    // de-assert write (active low)
00075 }
00076 
00077 u08 sramswRead(u32 addr)
00078 {
00079     u08 data;
00080 
00081     // set page
00082     sramswSetPage( (addr & 0x00FF0000)>>16 );
00083     // set high-order address
00084     outb(SRAM_AH, (addr & 0x0000FF00)>>8 );
00085     // set low-order address
00086     outb(SRAM_ADL, addr & 0x000000FF);
00087     // apply low-order address to latch
00088     outb(SRAM_ADL_DDR, 0xFF);
00089     // clock latch to save low-order address
00090     sbi(SRAM_CTRL, SRAM_ALE);   // assert ALE (active high)
00091     asm volatile ("nop");
00092     cbi(SRAM_CTRL, SRAM_ALE);   // de-assert ALE (active high)
00093 
00094     // switch data bus to input
00095     outb(SRAM_ADL_DDR, 0x00);
00096     // clear pullups
00097     outb(SRAM_ADL, 0x00);
00098     // request data from memory
00099     cbi(SRAM_CTRL, SRAM_RD);    // assert read (active low)
00100     // retrieve data
00101     asm volatile ("nop");
00102     data = inb(SRAM_ADL_IN);
00103     // release read line
00104     sbi(SRAM_CTRL, SRAM_RD);    // de-assert read (active low)
00105     // switch data bus to output
00106     outb(SRAM_ADL_DDR, 0xFF);
00107 
00108     return data;
00109 }
00110 
00111 void sramswSetPage(u08 page)
00112 {
00113     outb(SRAM_PAGE, (page & SRAM_PAGE_MASK));
00114 }

Generated on Tue Sep 20 03:11:43 2005 for Procyon AVRlib by  doxygen 1.4.2