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;
@@ -164,33 +170,13 @@ void prog_lamp(int state) {
164
170
}
165
171
}
166
172
167
- void spi_init () {
168
- uint8_t x;
169
- SPCR = 0x53 ;
170
- x = SPSR;
171
- x = SPDR;
172
- }
173
-
174
- void spi_wait () {
175
- do {
176
- } while (!(SPSR & (1 << SPIF)));
177
- }
178
-
179
- uint8_t spi_send (uint8_t b) {
180
- uint8_t reply;
181
- SPDR = b;
182
- spi_wait ();
183
- reply = SPDR;
184
- return reply;
185
- }
186
-
187
173
uint8_t spi_transaction (uint8_t a, uint8_t b, uint8_t c, uint8_t d) {
188
174
uint8_t n;
189
- spi_send (a);
190
- n = spi_send (b);
175
+ SPI. transfer (a);
176
+ n = SPI. transfer (b);
191
177
// if (n != a) error = -1;
192
- n = spi_send (c);
193
- return spi_send (d);
178
+ n = SPI. transfer (c);
179
+ return SPI. transfer (d);
194
180
}
195
181
196
182
void empty_reply () {
@@ -259,25 +245,19 @@ void set_parameters() {
259
245
}
260
246
261
247
void start_pmode () {
262
- spi_init ();
263
- // following delays may not work on all targets...
264
- pinMode (RESET, OUTPUT);
248
+ SPI.begin ();
265
249
digitalWrite (RESET, HIGH);
266
- pinMode (SCK , OUTPUT);
250
+ pinMode (RESET , OUTPUT);
267
251
digitalWrite (SCK, LOW);
268
- delay (50 );
252
+ delay (20 );
269
253
digitalWrite (RESET, LOW);
270
- delay (50 );
271
- pinMode (MISO, INPUT);
272
- pinMode (MOSI, OUTPUT);
273
254
spi_transaction (0xAC , 0x53 , 0x00 , 0x00 );
274
255
pmode = 1 ;
275
256
}
276
257
277
258
void end_pmode () {
278
- pinMode (MISO, INPUT);
279
- pinMode (MOSI, INPUT);
280
- pinMode (SCK, INPUT);
259
+ SPI.end ();
260
+ digitalWrite (RESET, HIGH);
281
261
pinMode (RESET, INPUT);
282
262
pmode = 0 ;
283
263
}
0 commit comments