Terminal IO (Serial Communication)
Intro

Intro

To work with a Forth system you need some kind of a console. A text terminal with RS-232 port has been used for this purpose in the past, today PCs have software to emulate terminals but do not have any RS-232 interface. But there are usually USB interfaces instead. The USB-CDC appears as a traditional RS-232 port in your operating system (Linux /dev/ttyACMx, Windoze COMx). No need to bother with baud rates, handshaking, parity and other awkward things.

Terminal-IO

Default console is USB-CDC, but if you press button SW2 on reset, the console is redirected to the UART device, see mecrisp.s. If you press button SW1 on reset, the console is redirected to the Bluetooth LE Cable Replacement Service.

emit? 	     ( -- Flag ) 	Ready to send a character?
key? 	     ( -- Flag ) 	Checks if a key is waiting
key 	     ( -- Char ) 	Waits for and fetches the pressed key
emit 	     ( Char -- ) 	Emits a character

hook-emit?   ( -- a-addr ) 	Hooks for redirecting terminal IO on the fly
hook-key?
hook-key
hook-emit

uart         ( -- )   redirect console to serial interface (UART)
cdc          ( -- )   redirect console to USB-CDC
crs          ( -- )   redirect console to BLE CRS

: ascii ( -- ) 
  127 32 do 
    i emit 
  loop 
;

: crs-ascii ( -- ) 
  127 32 do 
    i crs-emit 
  loop 
  10 crs-emit / LF
;

USB-CDC Serial Communcation (API)

cdc-emit   ( c -- ) Emit one character
cdc-key    ( -- c ) Receive one character
cdc-emit?  ( -- ? ) Ready to send a character
cdc-key?   ( -- ? ) Is there a key press ?

UART Serial Communcation (API)

serial-emit  ( c -- ) Emit one character
serial-key   ( -- c ) Receive one character
serial-emit? ( -- ? ) Ready to send a character
serial-key?  ( -- ? ) Is there a key press ?

baudrate     ( u -- ) set baud rate (e.g. 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200)
paritybit    ( u -- ) set parity bit 0 none, 1 odd, 2 even, 3 mark, 4 space
wordlength   ( u -- ) set word length 7, 8, 9 (including parity)
stopbits     ( u -- ) set stop bits 0 1 bit, 1 1.5 bit, 2 2 bit

BLE Cable Replacement Serial Communcation (API)

crs-emit   ( c -- ) Emit one character
crs-key    ( -- c ) Receive one character
crs-emit?  ( -- ? ) Ready to send a character
crs-key?   ( -- ? ) Is there a key press ?

-- Peter Schmid - 2020-04-20

Comments

Edit | Attach | Watch | Print version | History: r28 | r9 < r8 < r7 < r6 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r7 - 2020-05-19 - PeterSchmid
 
  • Edit
  • Attach
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback