if(end_of_period) // if all 32 pwm steps complete
{ // setup for a new column
dcy = 0; // reset duty cycle counter
colpos <<= 1; // shift column bit mask
if(end_of_cycle) // if all 5 columns have been updated 2/3 cyc
{
colpos = 1; // reset colpos and addr variables 2 cyc
addr = (unsigned char) &led; 4 cyc
}
shadow = 0b00010111; // setup shadow (all row bits "on") 2 cyc
gpio = colpos; // setup output latch, only 1 bit high 2 cyc
fsr = addr; // setup row pwm variables 2 cyc
dc0 = indf; // row 0 (gp0) pwm value, 0..31 2 cyc
fsr++; // 1 cyc
dc1 = indf; // row 1 (gp1) pwm value, 0..31 2 cyc
fsr++; // 1 cyc
dc2 = indf; // row 2 (gp2) pwm value, 0..31 2 cyc
fsr++; // 1 cyc
dc3 = indf; // row 3 (gp4) pwm value, 0..31 2 cyc
addr = fsr + 1; // save array address 2 cyc
}