ts-7000
[Top] [All Lists]

[ts-7000] Re: Help reading DIO lines 7260

To:
Subject: [ts-7000] Re: Help reading DIO lines 7260
From: "linna_lisa" <>
Date: Tue, 15 Jul 2008 21:50:22 -0000
Did you ever figure out why the input pins were always '1'? I'm 
having this problem and it's very confusing!

--- In  Jim Jackson <> wrote:

>
> 
> see below for some comments...
> 
> On Wed, 9 May 2007, pgb_psu wrote:
> 
> > I'm trying to learn how to read the DIO pins on the DIO1 header 
on my
> > TS-7260.  My first step is simply reading pin 1 (DIO_0) and 
placing that
> > value on pin 9 (DIO_4).  I've got a function generator putting 
out a
> > square wave as my input signal.  That signal is connected to gnd 
(pin 2)
> > and dio_0 (pin 1) on the DIO1 header.  I've got one scope probe 
watching
> > the function generator (pin 1 and pin 2) and the second probe 
connected
> > to pins 2 and 9 (gnd and DIO_4) of DIO1.  When I run the following
> > program, DIO_4 (pin 9) does not shadow DIO_0 (pin 1).
> 
> From the output you show at the end, it looks like it does, but it 
is
> unchanging - always '1'. I'm surprized you get the value 0xbb.
> 
> > I've tried a wide range frequencies thinking that maybe the 
frequency of
> > the square wave I'm using is too fast.  However, even at 1Hz this
> > program does not work so I'm convinced my problem is in the C 
code.
> > I'm new to c so I simply took the read_temp.c program provided by 
TS and
> > hacked it to produce the code below and the first bit of output.
> >
> > /********************************
> >  * program to read the read data on DIO1 header pin 1 and place 
that value on pin 9
> >  * hacked from tempSensor.c provided by TS.
> >  * PGB 8 May 2007
> >  * Peter Burkett <>
> >  *******************************/
> >  /********************************
> >  *Simple program to demonstrate
> >  *reading a temperature using
> >  *tmp124 on a TS-7200
> >  *
> >  *EWD Oct. 22 2004
> >  *Eddie Dawyiduk <>
> >  *******************************/
> >
> > #include "peekpoke.h"
> > #include<unistd.h>
> > #include<sys/types.h>
> > #include<sys/mman.h>
> > #include<stdio.h>
> > #include<fcntl.h>
> > #include<assert.h>
> > #include<time.h>
> >
> >
> > /*Register addresses */
> > #define DIO_PAGE            0x80840000UL
> >
> > /*Offsets*/
> > #define PORTB_DR            0x04
> > #define PORTB_DDR           0x14
> > #define PORTF_DR            0x30
> > #define PORTF_DDR           0x34
> >
> >
> > int main(int argc, char **argv)
> > {
> >
> >     unsigned int bits_0123;
> >     unsigned int bits_4567;
> >     unsigned int tmp;
> >     volatile unsigned char *dio_page;
> >     int fd = open("/dev/mem", O_RDWR);
> 
> open("/dev/mem", O_RDWR | O_SYNC)
> 
> >     assert(fd != -1);
> >
> >     /* Lets intialize our pointers */
> >     dio_page = mmap(0, getpagesize(), PROT_READ|PROT_WRITE, 
MAP_SHARED, fd,
> > DIO_PAGE);
> >     assert(dio_page != MAP_FAILED);
> >
> >     // Set our DIO pins 0-3 as inputs and 4-7 as outputs
> >     // bits 0-3 in 0x8084_0014 should be cleared (0) for input
> >     // bits 4-7 in 0x8084_0014 should be set (1) for output
> >     tmp = PEEK8( (unsigned long)(dio_page + PORTB_DDR));
> 
> I've never used PEEK8 or POKE8, can't see why you'd need them in 
this
> situation. But the (unsigned int) looks wrong.  dio_page+PORTB_DDR
> is char * so simply doing...
> 
>         tmp = (unsigned int)(*(dio_page + PORTB_DDR));
> 
> should work for reading and similar for writing.
> 
> >         printf("Value of PORTB_DDR when program starts: 0x%x \n", 
tmp);
> >
> >     POKE8( (unsigned long)(dio_page + PORTB_DDR), 0xF0 );
> >     tmp = PEEK8( (unsigned long)(dio_page + PORTB_DDR));
> >         printf("Value of PORTB_DDR after setting it to 0xf0: 0x%x 
\n", tmp);
> >         tmp = PEEK8( (unsigned long)(dio_page + PORTB_DR));
> >         printf("Value of PORTB_DR befor loop: 0x%x \n", tmp);
> >
> >     // setup while loop to read DIO_0-DIO_3 and shadow them on 
DIO_4-DIO_7
> >     while (1)  {
> >             bits_0123 = PEEK8((unsigned long)(dio_page + 
PORTB_DR) );
> >             printf("Value of PORTB_DR in loop: 0x%x \n", 
bits_0123);
> >
> >             bits_0123 <<= 4;   // shift bits 0-3 into positions 4-
7
> >             bits_4567 = bits_0123 & 0x0F0;  //AND bits to clear 
bits above bit 7
> >                     printf("Value written to PORTB_DR after 
shift: 0x%x \n", bits_4567);
> >
> >             // write the word out
> >             POKE8( (unsigned long)(dio_page + PORTB_DR), 
bits_4567);
> >             tmp = PEEK8((unsigned long)(dio_page + PORTB_DR));
> >                     printf("Value of PORTB_DR after write: 0x%x 
\n\n", tmp);
> >
> >             usleep(100);
> >
> >     }
> >
> >     return 0;
> >
> > }
> >
> > Value of PORTB_DDR when program starts: 0xf0
> > Value of PORTB_DDR after setting it to 0xf0: 0xf0
> > Value of PORTB_DR befor loop: 0xbb
> > Value of PORTB_DR in loop: 0xbb
> > Value written to PORTB_DR after shift: 0xb0
> > Value of PORTB_DR after write: 0xbb
> >
> > Value of PORTB_DR in loop: 0xbb
> > Value written to PORTB_DR after shift: 0xb0
> > Value of PORTB_DR after write: 0xbb
> >
> >
> >
>



------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/ts-7000/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/ts-7000/join
    (Yahoo! ID required)

<*> To change settings via email:
     
    

<*> To unsubscribe from this group, send an email to:
    

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/

<Prev in Thread] Current Thread [Next in Thread>
  • [ts-7000] Re: Help reading DIO lines 7260, linna_lisa <=
Admin

Disclaimer: Neither Andrew Taylor nor the University of NSW School of Computer and Engineering take any responsibility for the contents of this archive. It is purely a compilation of material sent by many people to the birding-aus mailing list. It has not been checked for accuracy nor its content verified in any way. If you wish to get material removed from the archive or have other queries about the archive e-mail Andrew Taylor at this address: andrewt@cse.unsw.EDU.AU