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.
¿Para qué descargarte juegos, si tienes los más divertidos online? Entra ya en Juegos y prepárate para muchas horas de diversión
__._,_.___
__,_._,___
|
|