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();
}
|