//
// test program for MCP23017 with wiringPi
// cc -o mcp23017w mcp23017w.c -l wiringPi
//
#include <stdio.h>
#include <time.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#define
IODIRA
0x00
// MCP23017 address of I/O direction
#define
IODIRB
0x01
// MCP23017 address of I/O direction
#define
GPIOA
0x12
// MCP23017 address of GP Value
#define
GPIOB
0x13
// MCP23017 address of GP Value
#define
ADDRESS
0x20
// MCP23017 I2C address
int main(int argc, char **argv) {
int i;
int loop,loopm;
int fd;
time_t start_time;
time_t end_time;
int byte;
loopm=30000;
if (argc == 2) loopm=1;
if ((fd=wiringPiI2CSetup(ADDRESS)) == -1){
printf("Setup Fail\n");
return 1;
}
wiringPiI2CWriteReg16(fd,IODIRA,0x00);
wiringPiI2CWriteReg16(fd,IODIRB,0x00);
wiringPiI2CWriteReg16(fd,GPIOA,0x00);
wiringPiI2CWriteReg16(fd,GPIOB,0x00);
start_time = time(NULL);
for(loop=0;loop<loopm;loop++) {
byte=0;
for(i=0;i<8;i++) {
byte=(byte<<1) + 1;
wiringPiI2CWriteReg16(fd,GPIOA,byte);
if (argc == 2) delay(500);
}
byte=0xff;
for(i=0;i<8;i++) {
byte=byte-(1<<i);
wiringPiI2CWriteReg16(fd,GPIOA,byte);
if (argc == 2) delay(500);
}
}
end_time = time(NULL);
printf("time:%.1fSec\n",difftime(end_time,start_time));
}
|