" I think I may have to bypass the MAX7219 library and bitbang the chips myself."
I would suggest using SPI.transfer() to send data to the MAX7129's. That will help your speed a lot.
Send out 64 bytes as one burst at whatever rate you update the display, with all devices daisy chained:
digitalWrite(SS_pins, LOW)
for (x=0; x<64; x=x+1){
SPI.transfer(displayArray[x]);
}
digitalWrite(SS_pins, HIGH);
speed it up more by using direct port manipulation to set & clear SS_pins:
PORTB = PORTB & B11111110; //clear bit 0
PORTB + PORTB | B00000001; // set bit 0
make it really fast by skipping the for:next looping and just use 64 SPI.tranfers in a row
void loop(){
currentMillis = millis();
if ( (currentMillis - previousMillis) >=2){ // 2mS elapsed?
// The following will be quick - (1/16,000,000 * 64 bytes * 8 bits/byte)* 10? for reading the array = 0.3mS ??
previousMillis = previousMillis+2;
PORTB = PORTB & B11111110; //clear bit 0, use whatever port/bit you have - such as the SS/D10 pin
SPI.transfer(displayArray[0]);
SPI.transfer(displayArray[1]);
SPI.transfer(displayArray[2]);
:
:
SPI.transfer(displayArray[61]);
SPI.transfer(displayArray[62]);
SPI.transfer(displayArray[63]);
PORTB + PORTB | B00000001; // set bit 0
}
//update your array however you're going to
}