USB-CDC for 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

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

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

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

USB-CDC Words (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       ( -- )   redirect console to serial interface (UART)
cdc        ( -- )   redirect console to USB-CDC
crs        ( -- )   redirect console to BLE CRS

For console redirection see terminalhooks.s.

Default console is UART, but if you press button SW2 on reset, the console is redirected to the USB-CDC device, see mecrisp.s. Default console for the dongle is USB-CDC.

UART (Serial) Words (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
wordlength   ( u -- ) set word length 7, 8, 9 (including parity)
stopbits     ( u -- ) set stop bits 1, 2

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

For console redirection see terminalhooks.s.

Default console is UART, but if you press button SW2 on reset, the console is redirected to the USB-CDC device, see mecrisp.s. Default console for the dongle is USB-CDC.

BLE Cable Replacement Words (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 ?

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

For console redirection see terminalhooks.s.

Default console is UART, but if you press button SW2 on reset, the console is redirected to the USB-CDC device, see mecrisp.s. Default console for the dongle is USB-CDC.

-- Peter Schmid - 2020-04-20

Comments

Edit | Attach | Watch | Print version | History: r28 | r8 < r7 < r6 < r5 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r6 - 2020-05-18 - 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