43
43
// - The SPI functions herein were developed for the AVR910_ARD programmer
44
44
// - More information at http://code.google.com/p/mega-isp
45
45
46
+ #include " SPI.h"
46
47
#include " pins_arduino.h"
47
48
#define RESET SS
48
49
@@ -67,12 +68,17 @@ void pulse(int pin, int times);
67
68
68
69
void setup () {
69
70
Serial.begin (9600 );
71
+ SPI.setDataMode (0 );
72
+ SPI.setBitOrder (MSBFIRST);
73
+ // Clock Div can be 2,4,8,16,32,64, or 128
74
+ SPI.setClockDivider (SPI_CLOCK_DIV128);
70
75
pinMode (LED_PMODE, OUTPUT);
71
76
pulse (LED_PMODE, 2 );
72
77
pinMode (LED_ERR, OUTPUT);
73
78
pulse (LED_ERR, 2 );
74
79
pinMode (LED_HB, OUTPUT);
75
80
pulse (LED_HB, 2 );
81
+
76
82
}
77
83
78
84
int error = 0 ;
@@ -96,7 +102,7 @@ typedef struct param {
96
102
uint16_t pagesize;
97
103
uint16_t eepromsize;
98
104
uint32_t flashsize;
99
- }
105
+ }
100
106
parameter;
101
107
102
108
parameter param;
@@ -154,34 +160,13 @@ void prog_lamp(int state) {
154
160
digitalWrite (LED_PMODE, state);
155
161
}
156
162
157
- void spi_init () {
158
- uint8_t x;
159
- SPCR = 0x53 ;
160
- x = SPSR;
161
- x = SPDR;
162
- }
163
-
164
- void spi_wait () {
165
- do {
166
- }
167
- while (!(SPSR & (1 << SPIF)));
168
- }
169
-
170
- uint8_t spi_send (uint8_t b) {
171
- uint8_t reply;
172
- SPDR = b;
173
- spi_wait ();
174
- reply = SPDR;
175
- return reply;
176
- }
177
-
178
163
uint8_t spi_transaction (uint8_t a, uint8_t b, uint8_t c, uint8_t d) {
179
164
uint8_t n;
180
- spi_send (a);
181
- n = spi_send (b);
165
+ SPI. transfer (a);
166
+ n = SPI. transfer (b);
182
167
// if (n != a) error = -1;
183
- n = spi_send (c);
184
- return spi_send (d);
168
+ n = SPI. transfer (c);
169
+ return SPI. transfer (d);
185
170
}
186
171
187
172
void empty_reply () {
@@ -252,25 +237,19 @@ void set_parameters() {
252
237
}
253
238
254
239
void start_pmode () {
255
- spi_init ();
256
- // following delays may not work on all targets...
257
- pinMode (RESET, OUTPUT);
240
+ SPI.begin ();
258
241
digitalWrite (RESET, HIGH);
259
- pinMode (SCK , OUTPUT);
242
+ pinMode (RESET , OUTPUT);
260
243
digitalWrite (SCK, LOW);
261
- delay (50 );
244
+ delay (20 );
262
245
digitalWrite (RESET, LOW);
263
- delay (50 );
264
- pinMode (MISO, INPUT);
265
- pinMode (MOSI, OUTPUT);
266
246
spi_transaction (0xAC , 0x53 , 0x00 , 0x00 );
267
247
pmode = 1 ;
268
248
}
269
249
270
250
void end_pmode () {
271
- pinMode (MISO, INPUT);
272
- pinMode (MOSI, INPUT);
273
- pinMode (SCK, INPUT);
251
+ SPI.end ();
252
+ digitalWrite (RESET, HIGH);
274
253
pinMode (RESET, INPUT);
275
254
pmode = 0 ;
276
255
}
0 commit comments