fab  130
API Documentation
fab_regs.cxx
/*
* FAB 3226 application program
* with register access
*/
#include <iostream>
#include <unistd.h>
#include "rio/rio.hxx"
namespace Rio=INdepRio100;
const char *szDevice = "/dev/irio/0";
const char *szConfig = "../../../quartus/fab/basic/fab_regs.rbf";
int main(int argc, char **argv) {
int chOpt;
while ((chOpt=getopt(argc, argv, "?")) != EOF) {
if (chOpt == '?' ) {
std::cerr << "usage: " << argv[0] << " [config .rbf file]" << std::endl;
return 2;
}
}
/*
* if given as argument, set the config file
*/
if (argc == 2) szConfig=argv[1];
/*
* Initialize Rio Interface
*/
if (!ri) {
std::cout << ri << std::endl;
return 2;
}
Rio::RioTaskPlex * const prp=ri.prp(); /* convenience notation */
/*
* configure FPFA fabric
*/
if (!prp->callRioInitFile(szConfig)) {
std::cerr << "config failed " << *prp << std::endl;
return 2;
}
std::cout << "FPGA now configured: " << prp->sgConfig() << std::endl;
int iPeriod, iDutyCycle;
iPeriod=prp->callRioRead(0);
iDutyCycle=prp->callRioRead(1);
const double crTimeUnit=(17.066666E-06);
double rPeriod = iPeriod * crTimeUnit;
double rDutyCycle = iDutyCycle * crTimeUnit;
while(std::cin.good()) {
std::cout << "timer period=" << rPeriod << ", duty cycle=" << rDutyCycle << std::endl;
std::cout << "enter new timer period (0 to quit)\n>" << std::flush;
std::cin >> rPeriod ;
if (rPeriod == 0) break;
std::cout << "enter new duty cycle(0 to quit)\n>" << std::flush;
std::cin >> rDutyCycle ;
if (rDutyCycle == 0) break;
prp->callRioWrite(0,rPeriod/crTimeUnit);
prp->callRioWrite(1,rDutyCycle/crTimeUnit);
if (!prp->isGood()) {
/* error handling */
std::cerr << "communication error" << std::endl;
return 2;
}
}
/*
* FPGA is unconfigured before returning
*/
return 0;
}