Link here

USB Forth Demo

Forth language demonstration program with examples of how to use the USB Wildcard library of driver functions


The USB Wildcard™ implements a standard USB (Universal Serial Bus) interface that enables a PC host to communicate with Mosaic's microcontroller-based embedded computers to implement remote data loggers, data acquisition systems, and instrumentation. This tiny 2" by 2.5" board is a member of the Wildcard series of mezzanine boards that connect to Mosaic embedded instrument controllers.


USB Forth Demo

\ ****************************************************************************************
\ FILE NAME:   USBDemo.4TH
\ copyright 2007 Mosaic Industries, Inc.  All rights reserved.
\ ---------------------------------------------------------------------
\ DATE:        1/8/2007
\ VERSION:     1.0, for V4.xx (QED/QCard line) or 6.xx (PDQ line)
\ ---------------------------------------------------------------------
\ This is the demonstration code for the USB Wildcard.
\ Please see the User Guide for more details.
\ The accompanying USB_Dvr driver code MUST be loaded before this file can be loaded.
\ This is an illustrative demonstration program that
\ shows how to run a QED monitor task using the USB Wildcard serial port.
\ You need the Mosaic Terminal program to run this demo.
 
\ When the top level function Run_Demo is running, the controller Board
\ is simultaneously using 2 serial ports:
\ the standard primary serial port,
\ and the USB serial channel; each is running an instance of the QED-Forth monitor.
\
\ The operating system supports revectorable I/O, meaning that
\ in any given task the standard serial I/O routines such as
\ CR and ." can be made to use any specified serial channel.
\ All that is required is to customize and revector (store the xcfa of)
\ three functions named Key, ?Key, and Emit to the specified serial channel
\ for the specified task.  This file shows how to do this
\ using the functions defined in the USB Wildcard driver.
 
\ ******************!!!!
\ MAKE SURE THAT THE USB_MODULE_NUM CONSTANT MATCHES YOUR HARDWARE JUMPER SETTINGS!!
\ ******************!!!!
 
\ ---------------------------------------------------------------------
\
\ Demonstration functions defined in this file:
\ USB_MODULE_NUM \ MUST match hardware jumper settings!
\ USB_Demo    ( -- )
 
\ ---------------------------------------------------------------------
\
\ Disclaimer: THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
\             ANY WARRANTIES OR REPRESENTATIONS EXPRESS OR IMPLIED,
\             INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES
\             OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
\
\ *********************************************************************
 
HEX
FIND WHICH.MAP        \ do this only for page-swapping platforms!
IFTRUE                \ nesting is allowed if ends are sequential
  EXECUTE  0=         ( -- standard.map? ) \ run which.map
  IFTRUE 4 PAGE.TO.RAM  \ if in standard.map, transfer to download map
         5 PAGE.TO.RAM
         6 PAGE.TO.RAM
         DOWNLOAD.MAP
  ENDIFTRUE
ENDIFTRUE
 
\ if your memory map is not already set, set it here after load of UMod_Dvr.4th:
\ 800 4 DP X!  5800 4 NP X!  \ for kernel V4.xx
\ 0x8000 1 DP X!  0x8000 0x11 NP X!  \ for kernel V6.xx
 
F WIDTH !      \ set width of names stored in dictionary
 
ANEW USBDemo_Code   \ define forget marker for easy re-loading
 
 
\ ******************* DEMONSTRATION PROGRAM ***************************
 
\ The default task runs FORTH as usual, using the processor's hardware UART.
\ We create a second task that also runs FORTH,
\ communicating using the serial channel on the USB Wildcard.
\ To run this demonstration, simply execute:
\       USB_DEMO
\ You'll be running FORTH from your standard terminal
\ and you'll be running an independent FORTH task from your USB Wildcard.
 
DECIMAL     \ compile this section in decimal base
 
\ NOTE: YOU MUST MAKE SURE THAT USB_MODULE_NUM CONSTANT CORRESPONDS TO YOUR HARDWARE!!
0 CONSTANT USB_MODULE_NUM \ double check your hardware jumper settings!!!
 
 
HEX      \ variable area MUST be in common memory! ie., USE.PAGE, or HEX 8E00 0 VP X!
400 V.INSTANCE:     USB_TASK  \ 1 Kbyte per task area
 
: USB_Monitor   ( -- )         \ infinite task loop for CH1_TASK
    USB_Revector  \ revector this task's serial routines to use USB
    USB_MODULE_NUM USB_Flush
    CR ." Starting USB_Monitor..."
    QUIT                          \ call the infinite-loop FORTH monitor
;
 
 
: USB_Demo    ( -- )
   \ builds and activates a forth-monitor task using a the usb wildcard.
    USB_MODULE_NUM usb_module !  \ set global variable, must match hardware
    RELEASE.ALWAYS SERIAL.ACCESS !      \ ensure lots of PAUSEs in Forth task
    (STATUS) NEXT.TASK ! \ empty the task loop
    0\0 0\0 0\0 USB_TASK BUILD.STANDARD.TASK
    CFA.FOR USB_Monitor USB_TASK ACTIVATE
    START.TIMESLICER
    CR ." USB Demo task has been set up; use the Mosaic Terminal to exercise it" CR
;
 
FIND WHICH.MAP
IFTRUE                \ for kernel V4.xx platforms...
    XDROP             ( -- ) \ drop xcfa
    4 PAGE.TO.FLASH
    5 PAGE.TO.FLASH
    6 PAGE.TO.FLASH
    STANDARD.MAP
    SAVE
OTHERWISE            \ for V6.xx kernels, store to shadow flash and save pointers
    SAVE.ALL .       \ this takes some time, should print FFFF for success
ENDIFTRUE



See also → USB Wildcard Users Guide
USB C Demo

 
 
Page title: USB Forth Demo
This page is about usb demonstration program | forth language | forth examples | remote usb instrument usb data logger | instrumentation | forth language demonstration program with examples of how to use the usb wildcard library of driver functions
DocWeb Contents
 
Navigation
 
Registration on or use of this site constitutes acceptance of our User Agreement and Privacy Policy. Purchase of Mosaic's products constitutes acceptance of the End User License Agreement, Sales Terms and Conditions, and Life Support policy. Mosaic’s products are not authorized for use as components in life support or medical devices. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of Mosaic Industries, Inc. Mosaic and other product names are trademarked and should be capitalized when reproduced. You are encouraged to link to pages of this site.
© Mosaic Industries, Inc. All rights reserved.