Modulo Breakpoints C/C++ Code
The following example code is not necessarily complete, and may not compile if copied exactly. Refer to the examples folder on the NI-Motion CD for files that are complete and compile as is.
// Main function
void main(void)
{
u8 boardID; // Board identification number
u8 axis; // Axis number
u16 csr = 0; // Communication status register
u16 axisStatus; // Axis status
// Variables for modal error handling
u16 commandID; // The commandID of the function
u16 resourceID; // The resource ID
i32 errorCode; // Error code
///////////////////////////////
// Set the board ID
boardID = 1;
// Set the axis number
axis = 1;
////////////////////////////////
// Route breakpoint 1 to RTSI line 1
err = flex_select_signal (boardID, NIMC_RTSI1 /*destination*/, NIMC_BREAKPOINT1/*source*/);
CheckError;
// Configure Breakpoint
err = flex_configure_breakpoint(boardID, axis, NIMC_MODULO_BREAKPOINT, NIMC_SET_BREAKPOINT, 0);
CheckError;
// Load Breakpoint Modulus - repeat period
err = flex_load_bp_modulus(boardID, axis, 500, 0xFF);
CheckError;
// Load Breakpoint Position - position at which breakpoint should occur
// every modulo
err = flex_load_pos_bp(boardID, axis, 0, 0xFF);
CheckError;
for(;;){
// Enable the breakpoint on axis 1
err = flex_enable_breakpoint(boardID, axis, NIMC_TRUE);
CheckError;
do
{
// Check the move complete status/following error/axis off status
err = flex_read_axis_status_rtn(boardID, axis, &axisStatus);
CheckError;
// Read the communication status register and check the modal errors
err = flex_read_csr_rtn(boardID, &csr);
CheckError;
// Check the modal errors
if (csr & NIMC_MODAL_ERROR_MSG)
{
err = csr & NIMC_MODAL_ERROR_MSG;
CheckError;
}
Sleep (10); //Check every 10 ms
}while (!(axisStatus & NIMC_POS_BREAKPOINT_BIT)); // Wait for breakpoint to be triggered
}
return; // Exit the Application
/////////////////////////////////////////////////////////////////////////
// Error Handling
//
nimcHandleError; //NIMCCATCHTHIS:
// Check to see if there were any Modal Errors
if (csr & NIMC_MODAL_ERROR_MSG){
do{
// Get the command ID, resource and the error code of the modal
// error from the error stack on the board
flex_read_error_msg_rtn(boardID,&commandID,&resourceID,&errorCode);
nimcDisplayError(errorCode,commandID,resourceID);
// Read the Communication Status Register
flex_read_csr_rtn(boardID,&csr);
}while(csr & NIMC_MODAL_ERROR_MSG);
}
else // Display regular error
nimcDisplayError(err,0,0);
return; // Exit the Application
}