Specifications

16
APPENDIX A. S-FUNCTION C-CODE
#define SLOW (1<<8)
#define CHLIST_ENT(c,g,s) (CHAN(c) | GAIN(g) | ((s) ? SLOW : 0))
unsigned long AiGetAIValue(int scanSize, unsigned long* buffer, int sleep);
int AiDrvDSPCmd(int command);
unsigned long AiDrvDSPRead();
inline void AiDrvWrite(unsigned long offset, unsigned long data)
{
unsigned long *reg = (unsigned long*)(bar0Address + offset);
*reg = data;}
inline unsigned long AiDrvRead(unsigned long offset)
{
unsigned long *reg = (unsigned long*)(bar0Address + offset);
return *reg;}
unsigned long AiGetAIValue(int scanSize, unsigned long* rawbuffer, int sleep)
{
// tell the board to acquire one scan
AiDrvDSPCmd(PD_AISWCLSTART);
if(AiDrvDSPRead() == 1)
{
// read every samples in the scan
rt_busy_sleep(sleep);
for(i=0; i<scanSize;i++)
{
AiDrvDSPCmd(PD_AIGETVALUE);
rawbuffer[i] = AiDrvDSPRead();}
return 0;
}
return -1;}
int AiDrvDSPCmd(int command)
{
AiDrvWrite(PCI_HCVR, (1L | command));
return 0;}
unsigned long AiDrvDSPRead()
{
return AiDrvRead(PCI_HRXS);}
#endif
static void mdlInitializeSizes(SimStruct *S) {
ssSetNumSFcnParams(S,NPARAMS);
ssSetNumContStates(S,0);
ssSetNumDiscStates(S,0);
ssSetNumInputPorts(S,0);
ssSetNumOutputPorts(S,mxGetN(ChannelList));
for (i = 0; i < mxGetN(ChannelList); i++) {
ssSetOutputPortWidth(S,i,1);}
ssSetNumSampleTimes(S,1);
ssSetNumRWork(S,0);
ssSetNumIWork(S,0);
ssSetNumPWork(S,0);
ssSetNumDWork(S,0);
ssSetNumModes(S,0);
ssSetNumNonsampledZCs(S,0);
#ifndef MATLAB_MEX_FILE
board = (int)mxGetPr(BoardID)[0]-1;
range = (int)mxGetPr(Range)[0];
Gain = 1;
Delay = (int)mxGetPr(AcquiDelay)[0];
Handle = 0;
scanSize = mxGetN(ChannelList);
if (range == 1){
RangeTypes = 0; BitWeight = 0.000076295; Displacement = 0;}
else if (range == 2){
RangeTypes = AIB_INPRANGE; BitWeight = 0.000152590; Displacement = 0;}
else if (range == 3){
RangeTypes = AIB_INPTYPE; BitWeight = 0.000152590; Displacement = -5;}
else if (range == 4){
RangeTypes = AIB_INPTYPE | AIB_INPRANGE; BitWeight = 0.000305180; Displacement = -10;}
aiCfg = AIB_CVSTART0 | AIB_CVSTART1 | RangeTypes;