/* * buttons.c - button api * * author: hackbard@hackdaworld.org * */ #include "buttons.h" #include "serial.h" #define BUTTON_RESET \ IOSET2=((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)) #define BUTTON_UNSET \ IOCLR2=((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)) void button_init(t_button *button) { u32 *addr; u32 *cntl; addr=(u32 *)&VICVectAddr0; cntl=(u32 *)&VICVectCntl0; PINSEL0 = 0x00008005; PINSEL1 = 0x20000000; PINSEL2 = 0x0de049d4; IODIR2 = ((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)); IOSET2 = ((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)); } u8 button_poll_event () { u32 port0,port3; IOSET2 = ((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)); IOCLR2 = (1<<18); port0 = IOPIN0; port3 = IOPIN3; if (!(port0 & (1 << 28))) return 1; if (!(port0 & (1 << 27))) return 2; if (!(port0 & (1 << 22))) return 3; if (!(port3 & (1 << 13))) return 4; if (!(port3 & (1 << 21))) return 5; if (!(port3 & (1 << 20))) return 6; IOSET2 = ((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)); return 0; }