hannsx Posted May 30, 2021 Share Posted May 30, 2021 Hi, I operate a PowerPMAC BrickLV PBL8-H23-000-5E00V00. IDE version: 4.3.2.19. Firmware version: 2.3.2.5. I want to use the CCISR on the high flag from channel 2 and capture the position from that channel. I use the following commands to set up the CCISR: Gate3[0].Chan[1].CaptCtrl = 2 ; Gate3[0].Chan[1].CaptFlagChan = 1 ; Gate3[0].Chan[1].CaptFlagSel = 3 ; Gate3[0].Chan[1].TimerMode = 0 ; Gate3[0].IntCtrl = $00020000 ; //Unmasking position capture on channel 2 as source of CCISR I too have a phase_interrupt function on motor[0] controling holding current for my stepper motors. So my C-code looks like this: header.c ------------------------------------------------------------------------------------------------ #ifdef __KERNEL__ #include #else #define EXPORT_SYMBOL(x) // x #define KERN_ALERT #define printk printf #include #endif #include // Global Rt/Gp Externals and structures #include void CaptCompISR(void); EXPORT_SYMBOL(CaptCompISR); void user_phase( struct MotorData *Mptr); EXPORT_SYMBOL(user_phase); ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ usercode.c ------------------------------------------------------------------------------------------------ #include "usrcode.h" #define _PPScriptMode_ #include "../Include/pp_proj.h" void user_phase( struct MotorData *Mptr){ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(pshm->Motor[1].DesVel==0){ // Stromeinstellungen Runtersetzen pshm->Motor[1].MaxDac = Ch1PeakCur * 28378 / Ch1MaxAdc; pshm->Motor[1].I2tSet = Ch1HoldCur * 28378 / Ch1MaxAdc; pshm->Motor[1].IdCmd = (pshm->Motor[1].I2tSet)/2; pshm->Motor[1].I2tTrip = ( pow((pshm->Motor[1].MaxDac),2) - pow((pshm->Motor[1].I2tSet),2) ) * Ch1TimeAtPeak; } else{ // Stromeinstellungen hochsetzen pshm->Motor[1].MaxDac = Ch1PeakCur * 28378 / Ch1MaxAdc; pshm->Motor[1].I2tSet = Ch1ContCur * 28378 / Ch1MaxAdc; pshm->Motor[1].IdCmd = (pshm->Motor[1].I2tSet)/2; pshm->Motor[1].I2tTrip = ( pow((pshm->Motor[1].MaxDac),2) - pow((pshm->Motor[1].I2tSet),2) ) * Ch1TimeAtPeak; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } void CaptCompISR(void) { //-----------------------------------------------// // Determine IO-Pointer Adresses // //-----------------------------------------------// int MyFirstGate3Adr = pshm -> OffsetGate3[0] ; volatile int *MyFirstGate3IntCtrl = NULL ; // InCtrl direct register pointer declaration MyFirstGate3IntCtrl = ( unsigned int * ) piom + ( ( MyFirstGate3Adr + 0x224 ) >> 2 ) ; // IntCtrl register adress calculation 4bytes Per Word //-----------------------------------------------// int *UshmIntCtrl_isr ; UshmIntCtrl_isr = (int *) pushm + 18 ; *UshmIntCtrl_isr = 84 ; } ------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------ The phase-routine works without problems. However, when I enable the CCISR by entering {UserAlgo.CaptCompIntr=1} and trigger it by a position capturing event, my BrickLV crashes. I have only used a simple operation of writing a figure to a register which I can access in the watch-table to monitor the succesful execution of the CCISR. When I know that it works, I will use it to store the captured positions to an array in the ushm. I have made use of the CCISR two years ago and cannot remember any issues back then. I guess it might be caused by incomatible soft- and firmware or a known bug. I have not installed the newest soft- and hardware because I have run into issues several times with being able to open my legacy projects. I wanted to ask any reader to see if he sees an error in my CCISR setup, kind regards, hannsx Link to comment Share on other sites More sharing options...
hannsx Posted June 2, 2021 Author Share Posted June 2, 2021 I found out that my main problem seems to be that I do not get the right adresses when I calculate them manually. Therefore I close this Thread. Link to comment Share on other sites More sharing options...
Recommended Posts