#include #include int assign[15] = {17,18,27,22,23,24,25,4,2,3,10,9,11,8,7}; void GPIO_out(int data, int mode){ int i; mode = mode & 1; // mode=0 : active high / mode=1 : active low data = data & 255; for (i=0; i<8; i++) { bcm2835_gpio_write( assign[i], ( ( (data >>i) & 1) ^ mode ) ); } } void EXT_out(int data, int mode){ int i; mode = mode & 1; // mode=0 : active high / mode=1 : active low data = data & 127; for (i=0; i<7; i++) { bcm2835_gpio_write( assign[i+8], ( ( (data >>i) & 1) ^ mode ) ); } } int main(int argc, char *argv[]) { int i, p[3]; if(argc != 4){ printf("Format Error (;_;)\n"); printf("usage : GPIO_out para1 para2 para3\n"); printf("\tpara1 = port : 0=GPIO[0-7], 1=EXT[0-6]\n"); printf("\tpara2 = data : 0-255(GPIO), 0-127(EXT)\n"); printf("\tpara3 = mode : 0=active_HI, 1=active_LOW\n"); return 1; } for(i=0; i<3; i++){ p[i] = atoi(argv[i+1]); } // printf("port=%d, data=%d, mode=%d\n", p[0], p[1], p[2]); if (!bcm2835_init()){ printf("GPIO is not found.\n"); return 1; } for (i=0; i<15; i++){ bcm2835_gpio_fsel(assign[i], BCM2835_GPIO_FSEL_OUTP); } switch(p[0]){ case 0: GPIO_out(p[1], p[2]); break; case 1: EXT_out(p[1], p[2]); break; } bcm2835_close(); }