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's PCs have software to emulate terminals but have no more 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 RS-232 serial device (for details 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 Communication (API)

Buffered USB-CDC serial communication. 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.
cdc-emit   ( c -- ) Emits one character to the USB-CDC interface. Blocking if the Buffer is full.
cdc-key    ( -- c ) Waits and gets one character from the USB-CDC interface. Blocking if the buffer is empty.
cdc-emit?  ( -- ? ) Ready to send a character. Buffer is not full.
cdc-key?   ( -- ? ) Checks if a character is in the buffer.

UART Serial Communication (API)

serial-emit  ( c -- ) Emits one character to the UART interface. Blocking if the Buffer is full.
serial-key   ( -- c ) Waits and gets one character from the UART interface. Blocking if the buffer is empty.
serial-emit? ( -- ? ) Ready to send a character. Buffer is not full.
serial-key?  ( -- ? ) Checks if a character is in the buffer.

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

BLE Cable Replacement Serial Communication (API)

https://spyr.ch/crs-terminal/

crs-emit   ( c -- ) Emits one character to the UART interface. Blocking if the Buffer is full.
crs-key    ( -- c ) Waits and gets one character from the UART interface. Blocking if the buffer is empty.
crs-emit?  ( -- ? ) Ready to send a character. Buffer is not full.
crs-key?   ( -- ? ) Checks if a character is in the buffer.

Terminal Emulators

Terminal emulator applications for PCs, e.g.:

-- Peter Schmid - 2020-04-20

Comments

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