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
$
0 Comments.