Main Page   Modules   Alphabetical List   Data Structures   File List   Data Fields   Globals   Related Pages   Examples  

optoin/optoin.c

This sample demonstrates how to query the SPI Hexadecimal Isolated Input Board.

#include <sys/thread.h>
#include <sys/timer.h>
#include <sys/event.h>
#include <sys/print.h>

#include <dev/spidigio.h>

static volatile u_long ival;
static HANDLE iocq;

/*
 * Scans for digital input changes. 
 */
THREAD(InputScanner, arg)
{
    u_char num = (u_char)((u_short)arg);
    u_long rval;

    rval = ival = SpiDigitalGet(num);
    NutEventPost(&iocq);

    for(;;) 
        if((rval = SpiDigitalGet(num)) != ival) {
            ival = rval;
            NutEventPost(&iocq);
        }
        else
            NutThreadYield();
}

/*
 * Main application routine. 
 *
 * Nut/OS automatically calls this entry after initialization.
 */
THREAD(NutMain, arg)
{
    u_char ni;
    u_char no;
    u_long baud = 115200;
    
    /*
     * Initialize debug UART device and
     * print banner.
     */
    outp(BV(RXEN) | BV(TXEN), UCR);
    NutDeviceIOCtl(0, UART_SETSPEED, &baud);
    NutPrintString_P(0, PSTR("\r\nDigital Opto Input Demo\r\n"));
    
    /*
     * Keep looking for inputs.
     */
    for(;;) {
        /*
         * Initialize the SPI to the digital I/O boards.
         * The call returns the number of inputs and
         * outputs detected.
         */
        SpiDigitalInit(&ni, &no);
        NutPrintFormat(0, "Found %u digital inputs and %u digital outputs\r\n", ni, no);
        if(ni)
            break;
        NutSleep(500);
    }

    NutThreadCreate("iscan", InputScanner, (void *)(ni + no), 512);

    for(;;) {
        NutEventWait(&iocq, 0);
        NutPrintFormat(0, "I/O: %08lX\r\n", ival);
    }
}

© 2000-2002 by egnite Software GmbH - visit http://www.ethernut.de/