oPossum 1,083 Posted April 5, 2012 Share Posted April 5, 2012 This is derived from NTSC/PAL video text display using launchpad. video_vga.asm is a drop in replacement for video.asm. The sync timing is for 640x480 60 Hz VGA mode. A 330 ohm resistor must be used on all video lines (R/G/B) because they are analog signals with a max allowed voltage of about 1 volt. Only one of the R/G/B lines can be driven directly from the MSP430 due to current limitations. A buffer such as 74AHC125 could be used to drive all three if desired. Wiring Gnd ------------ Ground [5, 6, 7, 8, 10] P1.5 ----------- Vertical Sync [14] P1.6 ----------- Horizontal Sync [13] P1.7 ---[330]--- Video out (R [1], G [2] or B [3]) video_vga.asm ;; Copyright © 2011, 2012 Kevin Timmerman;; This program is free software: you can redistribute it and/or modify; it under the terms of the GNU General Public License as published by; the Free Software Foundation, either version 3 of the License, or; (at your option) any later version.;; This program is distributed in the hope that it will be useful,; but WITHOUT ANY WARRANTY; without even the implied warranty of; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License; along with this program. If not, see .; .cdecls C, LIST, "msp430g2553.h" .text .def video_init ; void video_init(void); - Initialize video generation .def field_timer ; extern int field_timer; - Decremented at each vsync .def vblank ; Vertical blanking flag .ref text ; Text buffer .ref font ; Font 8 x 12, grouped by row ; ; .bss sync_state, 2 ; Sync state .bss sync_lines, 2 ; Lines until next sync state .bss video_state, 2 ; Video generation state .bss vblank, 2 ; Vertical blanking flag .bss field_timer, 2 ; Decrement at vsync .bss text_ptr, 2 ; Text buffer pointer .bss font_ptr, 2 ; Font pointer ; --- Ideal VGA 640 x 480 60 Hz Timing --- ; Pixel clock 25.175 MHz; Horizontal 31.47 kHz (pix / 800, negative sync); Vertical 59.94 Hz (pix / 420000, negative sync); - Horizontal timing (line); Scanline part Pixels Time [ larsie, lastaid, bluehash and 7 others 10 Quote Link to post Share on other sites
ike 53 Posted April 5, 2012 Share Posted April 5, 2012 That is awesome. Thank you oPossum. This "24x16 text on VGA using Launchpad w/ G2553" combined with "Communication with ps/2 K/B with USI" makes instant terminal :twisted: Quote Link to post Share on other sites
oPossum 1,083 Posted April 10, 2012 Author Share Posted April 10, 2012 Using the more powerful F5418A at 25 MHz allows the full 640 x 480 resolution to be used for up to 80x40 text display. This requires sending SPI data at 25 Mbps - that is one byte every 8 clock cycles. Each byte requires reading the text buffer, font table lookup, and SPI tx. There is no time to check SPI status or to decrement and test a loop counter. An unrolled loop with exactly 8 cycles per byte is used to make this work. .loop 80 ; mov.b @R10+, R15 ; Get a text char add R12, R15 ; Add font pointer mov.b @R15, &UCB0TXBUF ; Output font data to SPI nop ; Exactly 8 cycles per byte .endloop ; Lower horizontal resolutions use more conventional coding. Still have some work to do on this before making code available. gordon 1 Quote Link to post Share on other sites
yyrkoon 250 Posted January 7, 2013 Share Posted January 7, 2013 oPossum, Being a hardware newb myself, this leaves me to wonder if it would be possible to do something like scan line interleave with multiple SPI channels. Originally I was thinking along the lines of VESA bank switching but that wouldn't help performance wise. Either way, some of this stuff you do just boggles the mind lol. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.