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.
\ **************************************************************************************** \ 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