296b1188bf
Basic PWM works. Had some problems in testing that might be due to USART bugs. HardwareTimer has been removed from the build for now; I will re-implement it in terms of the new libmaple API, but consider it deprecated. Let's come up with something better. Servo is implemented in terms of HardwareTimer, so it also has been temporarily removed from the build. pwmWrite() likely got a little bit less inefficient due to indirection, but the PIN_MAPs shrank by a pointer per PinMapping.
36 lines
998 B
Plaintext
36 lines
998 B
Plaintext
|
|
Notes on GPIO Writing
|
|
------------------------------------------------------------------------------
|
|
Classic digitalWrite() gives ~500ns pulse time (2MHz)
|
|
|
|
gpio_write_bit() is about 360ns (2.78MHz)
|
|
|
|
Writing to GPIO?_BASE is about 60ns (16.6MHz -> 18MHz)
|
|
|
|
PWM write 0x0001 is about 14ns (72MHz) with prescaler as 0 (!)
|
|
|
|
VGA Timing
|
|
------------------------------------------------------------------------------
|
|
1/25.125MHz = 39.72ns (640x480 pixel clock)
|
|
|
|
Crude 640x480 directions:
|
|
From www.epanorama.net/documents/pc/vga_timing.html
|
|
480 lines
|
|
31.77 us horizontal line length -> 2287.44 clock cycles -> 2287
|
|
3.77 us sync period -> 271 clocks -> 271
|
|
1.89 us front porch? -> 136 clocks -> 136
|
|
25.17 us video -> 1812.24 clocks -> 1812
|
|
|
|
So...
|
|
2287 reload
|
|
271 1: Hsync high
|
|
407 2: Video on
|
|
2219 3: Video off
|
|
2287 4: Hsync low
|
|
|
|
Vertically, it's
|
|
480 lines active video
|
|
11 lines front porch
|
|
2 lines Vsync (low)
|
|
31 lines back porch
|