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 }