I have pretty much identical code and it works fine for me.
However you say you can only see two hexadecimal chars.
The variable 'state' is a char, it's 8 bits wide, hence two hex chars. Why
would you expect 4? And you are printing in Octal, which might confuse you.
I must admit I'm puzzled why the PBDR variables are int *, not char *, but my
code is the same.
--- In salva g <> wrote:
>
>
> Hi, I have read a lot of, I think, from the forum but...here is my problem:
> (TS7800)
> I'm working with this code
>
> #include<unistd.h>
> #include<sys/types.h>
> #include<sys/mman.h>
> #include<stdio.h>
> #include<fcntl.h>
> #include<string.h>
>
> #define DIOBASE 0xE8000000
> int main(int argc, char **argv)
> {
> volatile unsigned int *PBDR, *PBDDR, *GPIOBDB;
>
> int i;
> unsigned char state;
> unsigned char *start;
> int fd = open("/dev/mem", O_RDWR|O_SYNC);
>
> start = mmap(0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED,
> fd,DIOBASE);
>
> PBDR = (unsigned int *)(start + 0x04); //port b
> //starting address of DIO read, E8000000 + 4 = E80 000 004
> PBDDR = (unsigned int *)(start + 0x14); //port b direction
>
> GPIOBDB = (unsigned int *)(start + 0xC4); // debounce on port b
>
> *PBDDR = 0x00; // all(8) inputs
> *GPIOBDB = 0x01; //enable debounce on bit 0
> state = *PBDR; // read initial state
>
> printf ("Press buttons on DIO inputs. Ctrl-C to Quit.\n");
>
> int count = 0;
> unsigned char oldstate = (unsigned char)0;
> while (1) //(state & 0x01)
> {
> state = *PBDR; // remember bit 0 is pulled up with 4.7k ohm
> if (oldstate != state)
> {
> printf ("State:%o\n", state);
> oldstate = state;
> }
> usleep(1000);
>
> }
> printf ("\nDONE\n");
> close(fd);
> return 0;
> }
>
> but only have an answer in the shell when I short with ground (pin 2) the
> 1,3,5, or 7 pin DIO.
> shorting the other 9,11,13,15, nothing happens, but with peek32 0xE8000004, I
> can see the changes, the problem is that the program shows only 2 hexadecimal
> characters. If I could see 4 of them, it will be solved.
> And, I don't know why doesn't matter if I put (*PBDDR = 0x00 //all inputs) or
> (*PBDDR = 0xf0;): the program works equal in both.
> Also, somebody could explain me the line: *GPIOBDB = 0x01; //enable debounce
> on bit 0
>
> Thanks so much from newbee-world.
>
> _________________________________________________________________
> ¿Sabías que ahora puedes hablar por Messenger desde Hotmail con todos tus
> contactos? Revisa tu correo mientras conversas con tus amigos.
> http://www.hotmail.com
>
------------------------------------
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/
|