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.

关于AM5728在ccs中建立dsp硬件中断的问题

Other Parts Discussed in Thread: AM5728

请问如何在ccs中建立和使用5728的dsp硬件中断,有没有相关例程?我按照c6657的方式配置硬件中断,使用ccs8.3.1
// 动态创建硬件中断
Hwi_Handle hwi0;
Hwi_Params hwiParams;
Error_Block eb;

// 初始化错误块
Error_init(&eb);

// 使用默认值初始化参数
Hwi_Params_init(&hwiParams);
// 中断事件
hwiParams.eventId = 99;

// 传递到中断服务函数的参数
hwiParams.arg = 0;
// 不允许该中断自身嵌套
hwiParams.maskSetting = Hwi_MaskingOption_SELF;
// 使能中断
hwiParams.enableInt = TRUE;
// 可屏蔽中断 4
hwi0 = Hwi_create(4, RXMAC, &hwiParams, &eb);

if(hwi0 == NULL)
{
System_abort("Hwi1 create failed");
}

Void RXMAC(UArg arg)
{
statuschg2=1;//接收判断
}


然后程序会跑飞,请问该怎么正确配置硬件中断?
还有如何将程序烧进dsp中并设为开机自启动呢?

  • 试试看编译OSAL中提供的HWI例程。具体参考:
    software-dl.ti.com/.../index_device_drv.html
  • 你要使用DSP做什么功能呢?
    我一般不管底层怎么做的,就用opencl
  • 我需要用dsp来实现数据链路层的网络通信,现在用的EMAC_BasicExample_evmAM572x_c66xExampleProject这个pdk例程,需要用这个例程在0.5秒内接5000个数据包,一个数据包差不读1.4k字节,用的千兆网口,是但发现这个例程中的接收函数响应时间太慢了会导致严重的丢包,所以想自己建中断,这个例程的接收函数不太像是中断
  • 这个例程的中断不支持am5728
    /*
    * ======== HWI test function ========
    */
    volatile uint64_t gTestlocalTimeout = 0x300000U;

    #if defined (SOC_AM65XX) || defined (SOC_J721E)
    #define INT_NUM_IRQ 32
    #define LOOP_CNT 100
    volatile uint64_t gFlagIRQ = 0;

    void myIsrIRQ(uintptr_t arg)
    {
    gFlagIRQ = 1;
    gTestlocalTimeout = 0x300000;
    }
    bool OSAL_core_hwi_test()
    {
    HwiP_Params hwiParams;
    HwiP_Handle handle;
    volatile int intCount = 0;
    int32_t ret;
    bool test_pass=true;

    HwiP_Params_init(&hwiParams);

    OSAL_log("Creating Hwi myIsr \n");
    handle = HwiP_create(INT_NUM_IRQ, myIsrIRQ, &hwiParams);
    if (handle == NULL) {
    OSAL_log("Failed to create the HwiP handle \n");
    test_pass = false;
    }

    if (test_pass == true)
    {
    while (intCount != LOOP_CNT)
    {
    ret=HwiP_post(INT_NUM_IRQ);

    if(ret==osal_UNSUPPORTED)
    { /* In case of unsupported SOC/error */
    OSAL_log("HwiP_post unsupported/failed!\n");
    test_pass=false;
    break;
    }

    /* Wait for software timeout, ISR should hit
    * otherwise return the test as failed */
    while (gTestlocalTimeout != 0U)
    {
    gTestlocalTimeout--;
    if (gFlagIRQ)
    {
    gFlagIRQ = 0;
    intCount++;
    break;
    }
    }
    /* Wait is over - did not get any interrupts posted/received
    * declare the test as fail
    */
    if (gTestlocalTimeout == 0)
    {
    OSAL_log("Failed to get interrupts \n");
    test_pass = false;
    break;
    }
    }

    OSAL_log("%d IRQs received. Test over !\n",intCount);
    ret = HwiP_delete(handle);
    if (ret != HwiP_OK)
    {
    OSAL_log(" Failed to delete HwiP handle \n");
    test_pass= false;
    }
    }

    return test_pass;
    }
  • 我看到HWI test 中有与am572x相关的代码?有在am572x的开发板上跑过吗?有什么打印信息?
    ======== HWI test function ========
    #elif defined(SOC_AM572x) || defined (SOC_AM574x)
    UT_Timer_Type_t timer_type = UT_Timer_DMTIMER;

    #define OSAL_TEST_TIMER_ID (8U)
    #define OSAL_TEST_TIMER_ID2 (10U)
    #define OSAL_TEST_TIMER_PERIOD (5000U)

    #define OSAL_TEST_TIMER_ID (8U)
    #define OSAL_TEST_TIMER_ID2 (10U)
    #define OSAL_TEST_TIMER_PERIOD (5000U)

    #if defined (ENABLE_GET_TIME_TEST)
    uint64_t gTestTimeRd[OSAL_GET_TIME_MAX_SAMPLES];
    #endif

    void timerIsr(void *arg)
    {
    #if defined (ENABLE_GET_TIME_TEST)
    if (timerIsrCount < OSAL_GET_TIME_MAX_SAMPLES)
    {
    gTestTimeRd[timerIsrCount] = TimerP_getTimeInUsecs();
    }
    #endif
    timerIsrCount++;
    }
  • 请问您这个例程是在哪找的,能发下链接吗,我现在用的ti-processor-sdk-rtos-am57xx-evm-05.03.00.07-Windows-x86-Install开发包里面OSAL例程中提供的HWI没有写支持5728
  • C:\ti-processor-sdk-rtos-am57xx-evm-06.00.00.07-Windows-x86\pdk_am57xx_1_0_15\packages\MyExampleProjects\OSAL_BasicExample_evmAM572x_armTestProject