probably not: interrupts happening in the background will update such output. Using spi / pwm or dma/port would be the way to go if you wish.A straight sequence of assmbly iread/write statements produces a jitterfree square wave on the io pins.
Code: Select all
for (tmp=0; tmp<10000/50; tmp++) {
GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0);
GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0);
GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0);
GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0);
GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0); GIO_FLP(GPIOB, 1<<0);
};
//80.5k/10k ticks @ -O1

This particular chip has a high speed spi, driven by a 160Mhz clock. so you can do 80Mbps without breaking a sweat, and truly jitter free.