Post Go back to editing

Bypass SigmaStudio schematic from code

Category: Software

In Sigmastudio there is an option to bypass the schematic processing of an instance.

This works when changing it from within sigmastudio wit the target connected via USBi.

However, I would also like to be able to change this when in standalone/microcontroller mode. Or in other words from code executing on the arm core.

Is this possible? If so, how?

Parents
  • Hi,

    Please try writing the parameter configuration as below,

    Normal schematic operation:
    /* Param buffer */
    ALIGN(4)
    SECTION("ss_app_uc_data")
    uint32_t adi_ss_param_IC_1[338]= {
    0x08080100,

    Bypass schematic operation:
    /* Param buffer */
    ALIGN(4)
    SECTION("ss_app_uc_data")
    uint32_t adi_ss_param_IC_1[338]= {
    0x08080110,

    Thanks.

  • The first word in my param buffer is 0x10100100 in my situation.

    I tried setting bit 4 (0x10100110) like in your example. But this does not seem to do anything. Any suggestions?

  • did you tried CMD6 with value 1?
    Please refer SigmaStudio for SAHRC AE_42_SS4G_HostControllerGuide.pdf document.


  • How exactly would I use this? I want to do this from the ARM core, so I do not use the SPI for sending data to the SHARC core.

    I make use of the SigmastudioModule Library for communicating with SHARC cores. See "adi_ss_ssn.h"

  • In runtime CMD6 only supported for enabling bypass schematic process and there is no otherway from ARM core.

    Otherwise, you can modify the framework function for bypass schematic case by adding if else case to "pfSSnProcess()" call with in FW_ProcessBlock() function.
    Even you can use the same parameter data here. If the flag set skip the "pfSSnProcess()" call and in else part, simply add copy input data to output.

  • Thank you for pointing me in the right direction. I was able to work around the issue as suggested. In case anybody else is wondering this is how i implemented the fix

    uint32_t nVal;
    			bool bBypass = false;
    			ADI_SS_RESULT eResult = adi_ss_readParam(pProcBlk->oAlgoInfo[SSN_ALGO_INDEX].handle, &nVal, 0, 1);
    			if(eResult == ADI_SS_SUCCESS && pConfig->bSkipInitialDownload){
    				bBypass = ((nVal & 0x10) != 0);
    			}
    
    			if(!bBypass){
    				/* Process SSn */
    				eSSnRes = pfSSnProcess(pProcBlk->oAlgoInfo[SSN_ALGO_INDEX].handle,
    									   (int32_t)nBlkSz,pProcBlk->pInProcessBuffer,
    									   pProcBlk->pOutProcessBuffer,
    									   pProcBlk->oAlgoInfo[SSN_ALGO_INDEX].pProperties
    									  );
    			}
    			else{
    				/* bypass, copy input to output */
    				for(int i = 0; i< ADI_SS_FW_MAX_NUM_IN_CHANNELS; i++){
    					memcpy(pProcBlk->pOutProcessBuffer[i], pProcBlk->pInProcessBuffer[i], nBlkSz*sizeof(adi_ss_fw_signal));
    				}
    				eSSnRes = ADI_SS_SUCCESS;
    			}
    

Reply
  • Thank you for pointing me in the right direction. I was able to work around the issue as suggested. In case anybody else is wondering this is how i implemented the fix

    uint32_t nVal;
    			bool bBypass = false;
    			ADI_SS_RESULT eResult = adi_ss_readParam(pProcBlk->oAlgoInfo[SSN_ALGO_INDEX].handle, &nVal, 0, 1);
    			if(eResult == ADI_SS_SUCCESS && pConfig->bSkipInitialDownload){
    				bBypass = ((nVal & 0x10) != 0);
    			}
    
    			if(!bBypass){
    				/* Process SSn */
    				eSSnRes = pfSSnProcess(pProcBlk->oAlgoInfo[SSN_ALGO_INDEX].handle,
    									   (int32_t)nBlkSz,pProcBlk->pInProcessBuffer,
    									   pProcBlk->pOutProcessBuffer,
    									   pProcBlk->oAlgoInfo[SSN_ALGO_INDEX].pProperties
    									  );
    			}
    			else{
    				/* bypass, copy input to output */
    				for(int i = 0; i< ADI_SS_FW_MAX_NUM_IN_CHANNELS; i++){
    					memcpy(pProcBlk->pOutProcessBuffer[i], pProcBlk->pInProcessBuffer[i], nBlkSz*sizeof(adi_ss_fw_signal));
    				}
    				eSSnRes = ADI_SS_SUCCESS;
    			}
    

Children
No Data