ts-7000
[Top] [All Lists]

[ts-7000] Re: 7400 question using DIO

To:
Subject: [ts-7000] Re: 7400 question using DIO
From: "mrjbradski" <>
Date: Mon, 31 Dec 2007 15:16:27 -0000
--- In  Triffid Hunter <> wrote:
>
> On Sat, 29 Dec 2007, mrjbradski wrote:
> 
> > Im just experimenting with DIO before I actually need to use it, so I
> > wrote a simple program to toggle the DIO0..7 pins as follows:
> >
> >     fd = open("/dev/mem", O_RDWR|O_SYNC);
> >     gpioregs = (char *)mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_SHARED,fd,
> > 0x12c00000);
> >     gpioregs[0] = 0xff; /* data direction register set to all outputs */
> >
> >     for (;;) {
> >             gpioregs[2] = 0xff; /* output high to DIO_01 and DIO_4, all else
low */
> >             gpioregs[2] = 0x0; /* output high to DIO_01 and DIO_4, all else
low */
> >     }
> >     close(fd);
> >     exit(0);
> >
> > For some reason, the pins never toggle. If I remove the for loop, and
> > execute gpioregs[2] = 0xff; OR gpioregs[2] = 0x0; the pins will change
> > state. What am I doing wrong?
> 
> I would say that since gpioregs isn't volatile, gcc is optimising
away the 
> writes in the loop. The volatile keyword tells the compiler that
it's not 
> a normal memory location, and that every single access must be
preserved 
> even if the compiler thinks it can predict the end result.
> 
> Also, you may want some delays in there or the pin could toggle at a
few 
> megahertz... usleep() is good for that.
> 
> See ftp://ftp.embeddedarm.com/ts-arm-linux-cd/samples/tempSensor.c
for an 
> example of both DIO and SPI. Note that both pointers are declared 
> volatile.
>

Sorry for not including the def of gpioregs, but it was defined as
volatile. Was corrected the problem was inserting almost any code in
between gpioregs[2] = 0xff and gpioregs[2] = 0x00. I was not concerned
with the speed, as I expect it to run in the Mhz. Thanks all for your
help.



 
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: 7400 question using DIO, mrjbradski <=
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