This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

How to call a function call in the simplest way using C6Accel?

Other Parts Discussed in Thread: OMAP3530

Hi , all

I am a newer to C6Accel. I have installed DVSDK and C6Accel, after that , I compile the test sample and run the c6accel_app file successfully.

But I still don't know how to call a c6accel API.

Such as , I just want to add two float number, or caculate the sin value of 30°.

when I try write code in the file appMain.c as follows:

float a = 1.55;

pInBuf1_16bpp = Memory_alloc(framesize, &memParams);
          if(pInBuf1_16bpp == NULL) {
         printf("alloc inbuf1 failed\n");
         goto end;
    }
    else {
       Memory_cacheWbInv(pInBuf1_16bpp, framesize);
   }

C6accel_MATH_FTOIQN(hC6, &a, GLOBAL_Q, (int *)pInBuf1_16bpp, 1);

After I compile and run the code in OMAP3530,an error  appear as follows:

DSP MMU Error Fault!  MMU_IRQSTATUS = [0x1]. Virtual DSP addr reference that generated the interrupt = [0x80661be0].

I expect someone can help me ,thanks a lot!

 

 

  • Which device are you using?

  • I don't know about the C6Accel interfaces, but the address in the DSP MMU Error Fault (0x80661be0) doesn't look right to me.

    Typically, on an OMAP3530 running Linux, the Linux kernel occupies the start of DDR @ 0x80000000, for many megabytes.  The DSP address above lies where Linux would typically exist.

    Since I'm not familiar with C6Accel I can't recommend specifics, but I would expect that you need to change the memory map of the DSP application.  The DSP application needs to occupy an area of DDR that is completely unused by Linux.  Oftentimes this area is a block of DDR right after the end of the Linux kernel.

    Regards,

    - Rob

     

  • http://processors.wiki.ti.com/index.php/DSP_MMU_Faults

    DSP's probably accessing memory it 1) shouldn't, or more likely 2) can't b/c it's not in the MMU.

    What memParams are you using during Memory_alloc()?  Is it physically contiguous, and therefore coming from CMEM?  CMEM memory blocks should be mapped into the MMU for free... but still something good to check.

    Also, sometimes your DSP-side linker .map file will show you what's interesting in the memory being (errantly?) accessed, in this case, 0x80661be0.

    Chris