00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 #include <avr/io.h>
00019 #include <avr/interrupt.h>
00020 
00021 #include "global.h"
00022 #include "sramsw.h"
00023 
00024 
00025 
00026 
00027 void sramswInit(void)
00028 {
00029     
00030     outb(SRAM_ADL, 0xFF);       
00031     outb(SRAM_AH, 0x00);        
00032     
00033     outb(SRAM_ADL_DDR, 0x00);   
00034     outb(SRAM_AH_DDR, 0xFF);    
00035     
00036     sbi(SRAM_CTRL, SRAM_WR);    
00037     sbi(SRAM_CTRL, SRAM_RD);    
00038     cbi(SRAM_CTRL, SRAM_ALE);   
00039     
00040     sbi(SRAM_CTRL_DDR, SRAM_WR);
00041     sbi(SRAM_CTRL_DDR, SRAM_RD);
00042     sbi(SRAM_CTRL_DDR, SRAM_ALE);
00043     
00044     outb(SRAM_PAGE_DDR, inb(SRAM_PAGE_DDR) | SRAM_PAGE_MASK );
00045     
00046     sramswSetPage(0);
00047 }
00048 
00049 void sramswOff(void)
00050 {
00051 }
00052 
00053 void sramswWrite(u32 addr, u08 data)
00054 {
00055     
00056     sramswSetPage( (addr & 0x00FF0000)>>16 );
00057     
00058     outb(SRAM_AH, (addr & 0x0000FF00)>>8 );
00059     
00060     outb(SRAM_ADL, addr & 0x000000FF);
00061     
00062     outb(SRAM_ADL_DDR, 0xFF);
00063     
00064     sbi(SRAM_CTRL, SRAM_ALE);   
00065     asm volatile ("nop");
00066     cbi(SRAM_CTRL, SRAM_ALE);   
00067 
00068     
00069     outb(SRAM_ADL, data);
00070     
00071     cbi(SRAM_CTRL, SRAM_WR);    
00072     asm volatile ("nop");
00073     sbi(SRAM_CTRL, SRAM_WR);    
00074 }
00075 
00076 u08 sramswRead(u32 addr)
00077 {
00078     u08 data;
00079 
00080     
00081     sramswSetPage( (addr & 0x00FF0000)>>16 );
00082     
00083     outb(SRAM_AH, (addr & 0x0000FF00)>>8 );
00084     
00085     outb(SRAM_ADL, addr & 0x000000FF);
00086     
00087     outb(SRAM_ADL_DDR, 0xFF);
00088     
00089     sbi(SRAM_CTRL, SRAM_ALE);   
00090     asm volatile ("nop");
00091     cbi(SRAM_CTRL, SRAM_ALE);   
00092 
00093     
00094     outb(SRAM_ADL_DDR, 0x00);
00095     
00096     outb(SRAM_ADL, 0x00);
00097     
00098     cbi(SRAM_CTRL, SRAM_RD);    
00099     
00100     asm volatile ("nop");
00101     data = inb(SRAM_ADL_IN);
00102     
00103     sbi(SRAM_CTRL, SRAM_RD);    
00104     
00105     outb(SRAM_ADL_DDR, 0xFF);
00106 
00107     return data;
00108 }
00109 
00110 void sramswSetPage(u08 page)
00111 {
00112     outb(SRAM_PAGE, (page & SRAM_PAGE_MASK));
00113 }