void printout(uint8_t lR1[8], uint8_t lG1[8], uint8_t lB1[8], uint8_t lR2[8], uint8_t lG2[8], uint8_t lB2[8], uint8_t lR3[8], uint8_t lG3[8], uint8_t lB3[8], uint8_t rR1[8], uint8_t rG1[8], uint8_t rB1[8], uint8_t rR2[8], uint8_t rG2[8], uint8_t rB2[8], uint8_t rR3[8], uint8_t rG3[8], uint8_t rB3[8]) { uint8_t i, led; uint8_t resolutionBit; __builtin_disable_interrupts(); SCLK = 0; XLAT = 0; BLANK = 1; for (led = 0; led < 8; led ++) { /* Clockez cei mai semnificativi 8 biti din culoare */ for (resolutionBit = 7; resolutionBit >= 0; resolutionBit --) { SOUT1_L = getBit(lR1[led], resolutionBit); SOUT1_R = getBit(rR1[led], resolutionBit); SOUT2_L = getBit(lR2[led], resolutionBit); SOUT2_R = getBit(rR2[led], resolutionBit); SOUT3_L = getBit(lR3[led], resolutionBit); SOUT3_R = getBit(rR3[led], resolutionBit); SCLK = 1; SCLK = 0; } /* Clockez zero-uri pana la restul de 12 biti */ SOUT1_L = 0; SOUT1_R = 0; SOUT2_L = 0; SOUT2_R = 0; SOUT3_L = 0; SOUT3_R = 0; for (resolutionBit = 0; resolutionBit < 4; resolutionBit ++) { SCLK = 1; SCLK = 0; } for (resolutionBit = 7; resolutionBit >= 0; resolutionBit --) { SOUT1_L = getBit(lG1[led], resolutionBit); SOUT1_R = getBit(rG1[led], resolutionBit); SOUT2_L = getBit(lG2[led], resolutionBit); SOUT2_R = getBit(rG2[led], resolutionBit); SOUT3_L = getBit(lG3[led], resolutionBit); SOUT3_R = getBit(rG3[led], resolutionBit); SCLK = 1; SCLK = 0; } /* Clockez zero-uri pana la restul de 12 biti */ SOUT1_L = 0; SOUT1_R = 0; SOUT2_L = 0; SOUT2_R = 0; SOUT3_L = 0; SOUT3_R = 0; for (resolutionBit = 0; resolutionBit < 4; resolutionBit ++) { SCLK = 1; SCLK = 0; } for (resolutionBit = 7; resolutionBit >= 0; resolutionBit --) { SOUT1_L = getBit(lB1[led], resolutionBit); SOUT1_R = getBit(rB1[led], resolutionBit); SOUT2_L = getBit(lB2[led], resolutionBit); SOUT2_R = getBit(rB2[led], resolutionBit); SOUT3_L = getBit(lB3[led], resolutionBit); SOUT3_R = getBit(rB3[led], resolutionBit); SCLK = 1; SCLK = 0; } /* Clockez zero-uri pana la restul de 12 biti */ SOUT1_L = 0; SOUT1_R = 0; SOUT2_L = 0; SOUT2_R = 0; SOUT3_L = 0; SOUT3_R = 0; for (resolutionBit = 0; resolutionBit < 4; resolutionBit ++) { SCLK = 1; SCLK = 0; } } /* Pe frontul crescator al lui XLAT, datele sunt transferate din * registrul de shiftare in latch */ XLAT = 1; XLAT = 0; /* Mai astept un ciclu de instructiune, apoi aprind LED-urile! */ BLANK = 0; __builtin_enable_interrupts(); /* Mai astept putin timp sa treaca, pentru a permite * LED-urilor sa se aprinda macar putin */ for (i = 0; i < 100; i ++) asm("nop"); //__builtin_nop(); }