Sure seems to indicate there is a bug in the gpio driver somewhere . . . it 
does not get any faster than this, and yes, the sleep()s are required AGAIN.
root@wgd:~/dl-i2c-test# nano tst.c
root@wgd:~/dl-i2c-test# gcc -Wall -o tst tst.c
root@wgd:~/dl-i2c-test# ./tst
PWM1 1  Z1IN 0
PWM2 1  Z2IN 0
PWM3 1  Z3IN 0
PWM4 1  Z4IN 0
PWM5 1  Z5IN 0
PWM6 1  Z6IN 0

PWM1 0  Z1IN 1
PWM2 0  Z2IN 1
PWM3 0  Z3IN 1
PWM4 0  Z4IN 1
PWM5 0  Z5IN 1
PWM6 0  Z6IN 1


Code:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>

#define GPIO0           (0x44E07000)
#define GPIO1           (0x4804C000)
#define GPIO2           (0x481AC000)
#define GPIO3           (0x481AE000)
#define GPIO_SIZE       (0x2000)

#define GPIO_DATAOUT    (0x13C)
#define GPIO_DATAIN     (0x138)

#define PWM1 (1<<2)     /*gpio_0*/
#define PWM2 (1<<3)     /*gpio_0*/
#define PWM3 (1<<18)    /*gpio_1*/
#define PWM4 (1<<22)    /*gpio_0*/
#define PWM5 (1<<19)    /*gpio_1*/
#define PWM6 (1<<23)    /*gpio_0*/

#define Z1IN (1<<12)    /*gpio_1*/
#define Z2IN (1<<13)    /*gpio_1*/
#define Z3IN (1<<14)    /*gpio_1*/
#define Z4IN (1<<15)    /*gpio_1*/
#define Z5IN (1<<16)    /*gpio_1*/
#define Z6IN (1<<17)    /*gpio_1*/

int main(int argc, char *argv[])
{
        void *gpio_addr;
        unsigned int *gpio0_out;
        unsigned int *gpio1_out, *gpio1_in;
        
        int fd = open("/dev/mem", O_RDWR);

        gpio_addr = mmap(0, GPIO_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, 
fd, GPIO0);
        gpio0_out = gpio_addr + GPIO_DATAOUT;

        gpio_addr = mmap(0, GPIO_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, 
fd, GPIO1);
        gpio1_out = gpio_addr + GPIO_DATAOUT;
        gpio1_in  = gpio_addr + GPIO_DATAIN;

        close(fd);

        *gpio0_out |= PWM1 + PWM2 + PWM4 + PWM6;
        *gpio1_out |= PWM3 + PWM5;
        sleep(1);
        printf("PWM1 %u  Z1IN %u\n", !! (*gpio0_out & PWM1), !!(*gpio1_in & 
Z1IN));
        printf("PWM2 %u  Z2IN %u\n", !! (*gpio0_out & PWM2), !!(*gpio1_in & 
Z2IN));
        printf("PWM3 %u  Z3IN %u\n", !! (*gpio1_out & PWM3), !!(*gpio1_in & 
Z3IN));
        printf("PWM4 %u  Z4IN %u\n", !! (*gpio0_out & PWM4), !!(*gpio1_in & 
Z4IN));
        printf("PWM5 %u  Z5IN %u\n", !! (*gpio1_out & PWM5), !!(*gpio1_in & 
Z5IN));
        printf("PWM6 %u  Z6IN %u\n", !! (*gpio0_out & PWM6), !!(*gpio1_in & 
Z6IN));
        printf("\n");
        *gpio0_out &= ~(PWM1 + PWM2 + PWM4 + PWM6);
        *gpio1_out &= ~(PWM3 + PWM5);
        sleep(1);
        printf("PWM1 %u  Z1IN %u\n", !! (*gpio0_out & PWM1), !!(*gpio1_in & 
Z1IN));
        printf("PWM2 %u  Z2IN %u\n", !! (*gpio0_out & PWM2), !!(*gpio1_in & 
Z2IN));
        printf("PWM3 %u  Z3IN %u\n", !! (*gpio1_out & PWM3), !!(*gpio1_in & 
Z3IN));
        printf("PWM4 %u  Z4IN %u\n", !! (*gpio0_out & PWM4), !!(*gpio1_in & 
Z4IN));
        printf("PWM5 %u  Z5IN %u\n", !! (*gpio1_out & PWM5), !!(*gpio1_in & 
Z5IN));
        printf("PWM6 %u  Z6IN %u\n", !! (*gpio0_out & PWM6), !!(*gpio1_in & 
Z6IN));

        return 0;
}

sleep()'s again at .2(200ms)
root@wgd:~/dl-i2c-test# nano tst.c
root@wgd:~/dl-i2c-test# gcc -Wall -o tst tst.c
root@wgd:~/dl-i2c-test# ./tst
PWM1 1  Z1IN 1
PWM2 1  Z2IN 0
PWM3 1  Z3IN 0
PWM4 1  Z4IN 0
PWM5 1  Z5IN 0
PWM6 1  Z6IN 0

PWM1 0  Z1IN 0
PWM2 0  Z2IN 1
PWM3 0  Z3IN 1
PWM4 0  Z4IN 1
PWM5 0  Z5IN 1
PWM6 0  Z6IN 1

Output to a file:
root@wgd:~/dl-i2c-test# ./tst >test.txt
root@wgd:~/dl-i2c-test# cat test.txt
PWM1 1  Z1IN 1
PWM2 1  Z2IN 1
PWM3 1  Z3IN 1
PWM4 1  Z4IN 1
PWM5 1  Z5IN 1
PWM6 1  Z6IN 1

PWM1 0  Z1IN 1
PWM2 0  Z2IN 1
PWM3 0  Z3IN 1
PWM4 0  Z4IN 1
PWM5 0  Z5IN 1
PWM6 0  Z6IN 1


Something's not right guys, and I'm pretty sure it's not me . . .



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/60583227-50df-4ef8-9258-87dc866dd6a4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to