#include "defs.h"
#include "funcs.c"
#include <stdlib.h>
void SPI_Modes_Setting(int mode)
{
if (mode == 0)
{
// CPOL and CPHA
SPCR &= ~(1 << CPOL) & ~(1 << CPHA);
} else if (mode == 1)
{
SPCR &= ~(1 << CPOL);
SPCR |= (1 << CPHA);
} else if (mode == 2)
{
SPCR |= (1 << CPOL);
SPCR &= ~(1 << CPHA);
} else if (mode == 3)
{
SPCR |= (1 << CPOL) | (1 << CPHA);
}
}
void SPI_MasterInit(void)
{
// SPI mode configuration for CPOL and CPHA
SPI_Modes_Setting(0);
//fosc/128 selected
//SPCR |= (1 << SPR0) | (1 << SPR1);
//SPSR &= ~(1 << SPI2X);
// DDB5 --> SCK , DDB3 --> MOSI , DDB2 --> SS , DDB1 --> Output Enable ,
DDRB |= (1 << DDB5) | (1 << DDB3) | (1 << DDB2) | (1 << DDB1) ;
// DDB4 --> MISO
DDRB &= ~(1 << DDB4);
PORTB |= (1 << DDB1);
//portD settings
// DDD2 --> pbBlk , DDD3 --> pbBlu , DDD4 --> pbRed , DDD5 --> pbGrn
DDRD &= ~(1 << DDD2) | (1 << DDD3) | (1 << DDD4) | (1 << DDD5);
// Arduino as SPI Master
SPCR |= (1 << DORD) | (1 << MSTR);
//SPI Enable
SPCR |= (1 << SPE); // enable right after Data registers are ready
}
int dummyRead, i = 0;
// SPI Master Transmit Data:
void SPI_MasterTransmit(uint8_t cData)
{
SPDR = cData;
while (SPSR & 0X80 == 0);
dummyRead = SPDR;
}
void updtLEDMatrices() {
for (uint8_t y = 0; y < 8; y++) {
PORTB &= ~(1 << DDB2);
delay(0);
for (uint8_t x = 0; x < 4; x++) {
SPI_MasterTransmit(y + 1);
delay(0);
SPI_MasterTransmit(*(leds[x] + y));
delay(0);
}
PORTB |= (1 << DDB2);
}
}
void clrLEDMatrices() {
clearData(leds);
updtLEDMatrices();
}
void setup() {
Serial.begin(9600);
SPI_MasterInit();
PORTB |= (1 << DDB2);
clearData(leds);
}
void loop()
{
for (uint8_t x = 0; x < 10; x++) {
clrLEDMatrices();
makeNumber(leds, 0, 0 + x);
makeNumber(leds, 8, 0 + x);
makeNumber(leds, 16, 0 + x);
makeNumber(leds, 24, 0 + x);
updtLEDMatrices();
delay(100);
}
}