summaryrefslogtreecommitdiffstats
path: root/zpu/hdl/zpu4/test/gpiotest/gpiotest.c
blob: 393ab9f81d197f4363580975880c9e1315c8496e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * Small test program to check GPIOs 
 * 
 * LED chaser until keypress
 *
 */

// addresses refer to Phi memory layout
#define GPIO_DATA   *((volatile unsigned int *) 0x080a0004)
#define GPIO_DIR    *((volatile unsigned int *) 0x080a0008)


#define BUTTON_EAST  (3)
#define BUTTON_NORTH (2)
#define BUTTON_SOUTH (1)
#define BUTTON_WEST  (0)


#define bit_is_set(var, bit)              ((var) & (1 << (bit)))
#define bit_is_clear(var, bit)            ((!(var)) & (1 << (bit)))
#define loop_until_bit_is_set(var, bit)   do { } while (bit_is_clear(var, bit))
#define loop_until_bit_is_clear(var, bit) do { } while (bit_is_set(var, bit))


void led_test( void)
{
    unsigned char runs;
    unsigned char leds;

    runs = 1;
    leds = 0x01;

    while( runs)
    {
        // output
        GPIO_DATA = leds;

        // read button status
        if bit_is_set(GPIO_DATA, BUTTON_NORTH) 
        {
            runs = 0;
        }

        // LED chaser
        leds = leds << 1;
        if (leds == 0)
        { 
            leds = 0x01;
        }
    }
}


void header_test( void)
{
    // this test is special for the SP601 header connector
    // check the output in simulation
    GPIO_DATA = 0x00550000;
    GPIO_DIR  = 0xff00ffff;
    GPIO_DATA = 0x00aa0000;
    GPIO_DIR  = 0xffffffff;
}


int main(int argc, char **argv)
{

    led_test();
    header_test();

    abort();
}
OpenPOWER on IntegriCloud