OpenCores
URL https://opencores.org/ocsvn/usb_nand_reader/usb_nand_reader/trunk

Subversion Repositories usb_nand_reader

[/] [usb_nand_reader/] [trunk/] [mini32/] [NandControl.cp] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 pradd
#line 1 "H:/MINI32/MINI-32 Examples/MINI-32 mikroC PRO for PIC32 Examples/MINI32_NAND_Controller/NandControl.c"
2
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/nandcontrol.h"
3
 
4
 
5
 
6
void init_nand_control_line();
7
int nand_is_ready();
8
void nand_wait_ready();
9
void nand_chip_select(int idx);
10
void nand_chip_unselect();
11
 
12
void nand_send_command(unsigned char cmd);
13
void nand_send_address(unsigned char* addr, int len);
14
void nand_write(unsigned char* buffer, int len);
15
void nand_read(unsigned char* buffer, int len);
16
void nand_toggle_wp();
17
 
18
void blink(int i);
19
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/nanddataline.h"
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
void init_nand_data_line();
28
void init_nand_control_line();
29
void data_line_write_byte(unsigned char b);
30
unsigned char data_line_read_byte();
31
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/cmd.h"
32
#line 38 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/cmd.h"
33
void do_delay(int cycles);
34
 
35
void cmd_chip_enable(unsigned char* cmd);
36
void cmd_chip_disable();
37
void cmd_chip_reset();
38
void cmd_chip_read_id(unsigned char* outBuffer, int addr);
39
void cmd_chip_read_param_page(unsigned char* outBuffer);
40
void cmd_chip_read_page(unsigned char* inBuffer, unsigned char* outBuffer, int len, int addressCycles);
41
void cmd_chip_read_page_cache_sequential(unsigned char* inBuffer, unsigned char* outBuffer, int len, int addressCylces);
42
unsigned char cmd_chip_read_status();
43
unsigned char cmd_chip_read_status_enhanced(unsigned char* inBuffer, int addressCycles);
44
void cmd_chip_read_unique_id(unsigned char* outBuffer);
45
void cmd_chip_block_erase(unsigned char* inBuffer);
46
unsigned char cmd_chip_page_program(unsigned char* inBuffer, int addressCycles, int pageSize);
47
#line 8 "H:/MINI32/MINI-32 Examples/MINI-32 mikroC PRO for PIC32 Examples/MINI32_NAND_Controller/NandControl.c"
48
sbit ctrl_rnb3 at PORTB.B0;
49
sbit ctrl_rnb2 at PORTD.B11;
50
sbit ctrl_rnb1 at PORTB.B9;
51
sbit ctrl_rnb0 at PORTD.B5;
52
 
53
 
54
sbit ctrl_nce3 at LATB14_bit;
55
sbit ctrl_nce2 at LATF0_bit;
56
sbit ctrl_nce1 at LATF1_bit;
57
sbit ctrl_nce0 at LATB8_bit;
58
 
59
 
60
sbit ctrl_nre at LATD4_bit;
61
sbit ctrl_cle at LATB15_bit;
62
sbit ctrl_ale at LATD0_bit;
63
sbit ctrl_nwe at LATE0_bit;
64
sbit ctrl_nwp at LATE1_bit;
65
 
66
 
67
void init_nand_control_line()
68
{
69
 TRISB0_bit = 1;
70
 TRISD11_bit = 1;
71
 TRISB9_bit = 1;
72
 TRISD5_bit = 1;
73
 
74
 TRISB14_bit = 0;
75
 TRISF0_bit = 0;
76
 TRISF1_bit = 0;
77
 TRISB8_bit = 0;
78
 
79
 TRISD4_bit = 0;
80
 TRISB15_bit = 0;
81
 TRISD0_bit = 0;
82
 TRISE0_bit = 0;
83
 TRISE1_bit = 0;
84
 
85
 ctrl_nce0 = 1;
86
 ctrl_nce1 = 1;
87
 ctrl_nce2 = 1;
88
 ctrl_nce3 = 1;
89
 
90
 ctrl_nre = 1;
91
 ctrl_cle = 0;
92
 ctrl_ale = 0;
93
 ctrl_nwe = 1;
94
 ctrl_nwp = 0;
95
}
96
 
97
int nand_is_ready()
98
{
99
 int r = (int)(ctrl_rnb0 & ctrl_rnb1 & ctrl_rnb2 & ctrl_rnb3);
100
 if(0 == r)
101
 LATG6_bit = 0;
102
 else
103
 LATG6_bit = 1;
104
 return r;
105
}
106
 
107
void nand_wait_ready()
108
{
109
 while(0 == nand_is_ready());
110
}
111
 
112
void nand_chip_select(int idx)
113
{
114
 switch(idx)
115
 {
116
 case 0:
117
 ctrl_nce1 = ctrl_nce2 = ctrl_nce3 = 1;
118
 ctrl_nce0 = 0;
119
 break;
120
 
121
 case 1:
122
 ctrl_nce0 = ctrl_nce2 = ctrl_nce3 = 1;
123
 ctrl_nce1 = 0;
124
 break;
125
 
126
 case 2:
127
 ctrl_nce0 = ctrl_nce1 = ctrl_nce3 = 1;
128
 ctrl_nce2 = 0;
129
 break;
130
 
131
 case 3:
132
 ctrl_nce0 = ctrl_nce1 = ctrl_nce2 = 1;
133
 ctrl_nce3 = 0;
134
 break;
135
 
136
 default:
137
 break;
138
 }
139
}
140
 
141
void nand_chip_unselect()
142
{
143
 ctrl_nce0 = 1;
144
 ctrl_nce1 = 1;
145
 ctrl_nce2 = 1;
146
 ctrl_nce3 = 1;
147
}
148
 
149
 
150
void nand_send_command(unsigned char cmd)
151
{
152
 data_line_write_byte(cmd);
153
 ctrl_ale = 0;
154
 ctrl_nre = 1;
155
 ctrl_nwe = 0;
156
 ctrl_cle = 1;
157
 ctrl_nwe = 1;
158
 ctrl_cle = 0;
159
}
160
 
161
void nand_send_address(unsigned char* addr, int len)
162
{
163
 int i;
164
 ctrl_cle = 0;
165
 ctrl_nre = 1;
166
 ctrl_ale = 1;
167
 if(0 == addr)
168
 {
169
 data_line_write_byte(0);
170
 ctrl_nwe = 0;
171
 ctrl_nwe = 1;
172
 }
173
 else
174
 {
175
 for(i = 0; i < len; i++)
176
 {
177
 data_line_write_byte(*(addr + i));
178
 ctrl_nwe = 0;
179
 ctrl_nwe = 1;
180
 }
181
 }
182
 ctrl_ale = 0;
183
}
184
 
185
void nand_write(unsigned char* buffer, int len)
186
{
187
 int i;
188
 ctrl_cle = 0;
189
 ctrl_ale = 0;
190
 ctrl_nre = 1;
191
 for(i = 0; i < len; i++)
192
 {
193
 data_line_write_byte(*(buffer + i));
194
 ctrl_nwe = 0;
195
 ctrl_nwe = 1;
196
 }
197
}
198
 
199
void nand_read(unsigned char* buffer, int len)
200
{
201
 int i;
202
 ctrl_cle = 0;
203
 ctrl_ale = 0;
204
 ctrl_nwe = 1;
205
 for(i = 0; i < len; i++)
206
 {
207
 ctrl_nre = 0;
208
 while(PORTD.B4 != 0);
209
 *(buffer + i) = data_line_read_byte();
210
 ctrl_nre = 1;
211
 while(PORTD.B4 != 1);
212
 }
213
}
214
 
215
void nand_toggle_wp()
216
{
217
 ctrl_nwp = ~ctrl_nwp;
218
 Delay_us(2);
219
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.