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 }