1 /*********************************************************************
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #include <xc.h>
45 #include "MainBrain.h"
46
47 uint8_t mdata_70V05;
48 uint32_t address_70V05;
49 volatile bool SRAM_BUSY = false;
50
51 void REN70V05_Init(void)
52 {
53
54 ANSELA = 0;
55 TRISAbits.TRISA0 = 0;
56 PORTAbits.RA0 = 1;
57
58
59 TRISGbits.TRISG15 = 0;
60 PORTGbits.RG15 = 1;
61
62
63 TRISEbits.TRISE8 = 1;
64
65
66 TRISBbits.TRISB5 = 0;
67 PORTBbits.RB5 = 1;
68
69
70 ANSELE = 0;
71 TRISEbits.TRISE9 = 1;
72
73 CNCONEbits.ON = 1;
74
75
76 CNENEbits.CNIEE9 = 1;
77
78
79
80 IEC3bits.CNEIE = 1;
81
82
83 IPC30bits.CNEIP = 5;
84 IPC30bits.CNEIS = 1;
85
86
87 IFS3bits.CNEIF = 0;
88
89 REN70V05_WR(0,1);
90 Delay32(1,10000);
91 mdata_70V05 = 0;
92 REN70V05_RD(0);
93 if(mdata_70V05 != 1)
94 {
95 lastError = lastError | 4;
96 return;
97 }
98
99
100 for(int i=0;i<24;i++)
101 {
102 REN70V05_WR(0x400 + i, 0);
103 }
104
105 for(int i=0;i<24;i++)
106 {
107 REN70V05_WR(0x800 + i, 0);
108 }
109
110 for(int i=0;i<24;i++)
111 {
112 REN70V05_WR(0xc00 + i, 0);
113 }
114
115 for(int i=0;i<24;i++)
116 {
117 REN70V05_WR(0x1000 + i, 0);
118 }
119
120 for(int i=0;i<24;i++)
121 {
122 REN70V05_WR(0x1400 + i, 0);
123 }
124
125 for(int i=0;i<24;i++)
126 {
127 REN70V05_WR(0x1800 + i, 0);
128 }
129
130 for(int i=0;i<24;i++)
131 {
132 REN70V05_WR(0x1c00 + i, 0);
133 }
134 }
135
136 int8_t REN70V05_RD(uint32_t address_70V05)
137 {
138 SRAM_BUSY = false;
139
140
141 PMRADDR = address_70V05;
142
143
144 PORTAbits.RA0 = 0;
145
146
147 while(PMMODEbits.BUSY == 1);
148 mdata_70V05 = PMRDIN;
149
150 while(PMMODEbits.BUSY == 1);
151 mdata_70V05 = PMRDIN;
152
153
154 PORTAbits.RA0 = 1;
155
156 return mdata_70V05;
157 }
158
159 void REN70V05_WR(uint32_t address_70V05, uint8_t mdata_70V05)
160 {
161 PMWADDR = address_70V05;
162
163
164 PORTAbits.RA0 = 0;
165
166 while(PMMODEbits.BUSY == 1);
167 PMDOUT = mdata_70V05;
168 while(PMMODEbits.BUSY == 1);
169
170 if(SRAM_BUSY == true)
171 {
172 while(PMMODEbits.BUSY == 1);
173 PMDOUT = mdata_70V05;
174 while(PMMODEbits.BUSY == 1);
175 }
176
177 SRAM_BUSY = false;
178
179
180 PORTAbits.RA0 = 1;
181 }
182
183 void __attribute__((vector(_CHANGE_NOTICE_E_VECTOR), interrupt(ipl5srs), nomips16)) CN_ISR()
184 {
185
186 if (CNSTATEbits.CNSTATE9 && !PORTEbits.RE9)
187 {
188 Delay32(0, 1);
189 SRAM_BUSY = true;
190 }
191
192
193 IFS3bits.CNEIF = 0;
194 }