Category Archives: Software - Page 4

GPIO/LEDアクセスプログラム

Pandaboard 向けのソフトをまだ何も書いていなかったので、とりあえず GPIO/LED 等にアクセスするプログラムを作ってみた。

Source code

main.c

・int ReadGPIO(int gpioNum)
  GPIO の gpioNum 番の値を戻す。
・int ReadBoardRevision(void)
  3bit の BoardRevision を ReadGPIO() で読み、Revision 番号を戻す。

・int PrintBoardRevision(void)
  Revision 番号から、Revision 文字列に変換して表示。
・int PrintRegulatorItem(int index, const char* name)
  電源 Regulator の単一プロパティを表示。
・int PrintRegulator(void)
  電源 Regulator の name, microvolts プロパティを表示。

・int CopyLED1to2(void)
  デフォルトでハートビートのように点滅している LED1 の値を LED2 にコピー。
  無限ループを止めるのは ctrl-c。
・int CleanupLED2(void)
  無限ループから抜けた後のお掃除。
・int CopyLED(void)
  LED1 の値を LED2 にコピーする一連の動作を行う。
  CopyLED1to2 を呼ぶのは 30msec 毎。
・void SigHandler(int sigNum)
  ctrl-c のハンドラ。
・コンパイルは:
  gcc -Wall -o PandaTest main.c

#include 
#include 
#include 
#include 
#include 

#define	GPIO_NUM_BOARD_ID2	(171)
#define	GPIO_NUM_BOARD_ID1	(101)
#define	GPIO_NUM_BOARD_ID0	(182)

static volatile sig_atomic_t exit_flag = 0;

int ReadGPIO(int gpioNum)
{
	const char* fmt = "/sys/class/gpio/gpio%d/value";
	char str[64];
	char buf;
	int num_read;
	int rtn = -1;
	int fd;

	sprintf(str, fmt, gpioNum);
	fd = open(str, O_RDONLY);
	if(fd)
	{
		num_read = read(fd, &buf, sizeof(char));
		rtn = (num_read != 1) ? num_read:(buf-'0');
		close(fd);
	}
	return rtn;
}

int ReadBoardRevision(void)
{
	int boardRev = 0;
	const int gpio_num_tbl[] = {	GPIO_NUM_BOARD_ID2
				,	GPIO_NUM_BOARD_ID1
				,	GPIO_NUM_BOARD_ID0	};
	size_t i;

	for(i=0; i

Results of execution

・Copy Status LED1 to LED2 表示時に sudo のパスワードを聞かれたら、入力する。
・その後 LED2 が LED1 と同期して点滅を開始する。
・止めるのは ctrl-c。

$ ./PandaTest 
 - Pandaboard Revision: A1
 - Pandaboard Regulator
    #0:
     name: VMMC
     microvolts: 3000000
    #1:
     name: VPP
     microvolts: 1900000
    #2:
     name: VANA
     microvolts: 2100000
    #3:
     name: VCXIO
     microvolts: 1800000
    #4:
     name: VDAC
     microvolts: 1800000
    #5:
     name: VUSB
     microvolts: 3300000
    #6:
     name: VAUX2_6030
     microvolts: 1800000
    #7:
     name: VAUX3_6030
     microvolts: 1200000
 - Copy Status LED1 to LED2 (press ctrl-c to exit)
^C
$