marcando el bit de inicio
para acceder a la matriz del buffer a partir de un bit concreto
memcpy(wpc_planes[plane][row], plane_buffer+7, ROW_LENGTH * sizeof(uint16_t));
O sea que implementaste una demora para que el DMA termine de transferir los datos y recien alli hacer el memcpy?.
Pense que usabas una interrupcion para saber cuando es que el DMA finaliza de enviar los datos y asi moverlos con el memcpy..
Y aca mi miedo era una posible sobre escritura de alguna posicion.
Realmente sigo sin entender, y estoy mas que seguro que el problema es otro a pesar que esto lo solucione, la transferencia del DMA es por bytes, no tiene otro sentido, es decir por hardware no vas a implementar un shift register en todas las posiciones de memoria RAM, y en los perifericos, mas en una FIFO que posee el SPI.
Ademas eso implicaria que el procesador tambien cuando necesite leer un registro de un periferico y/o memoria RAM lo haga de esa forma.
Además jugando con la duración del bucle, se desplazaba la imagen más o menos pixels.
Código: C
// Flush the receive buffer, in case we're out of sync SPI0_MCR |= SPI_MCR_HALT; SPI0_MCR |= SPI_MCR_CLR_RXF;
Basicamente detiene cualquier transferencia del SPI (TX,RX) y hace un flush de los buffer de Recepcion, limpiando tambien los contadores de cantidad de datos que poseen.
Pero si esta configurado como modo continuo entonces no hace nada.