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

 
This page is about: USB Demonstration Program, Forth Language – Forth language demonstration program with examples of how to use the USB Wildcard library of driver functions
 
 
Navigation