TI中文支持网
TI专业的中文技术问题搜集分享网站

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

请问如何在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中并设为开机自启动呢?

Nancy Wang:

试试看编译OSAL中提供的HWI例程。具体参考:
software-dl.ti.com/…/index_device_drv.html

yongqing wang:

你要使用DSP做什么功能呢?
我一般不管底层怎么做的,就用opencl

user5977961:

回复 yongqing wang:

我需要用dsp来实现数据链路层的网络通信,现在用的EMAC_BasicExample_evmAM572x_c66xExampleProject这个pdk例程,需要用这个例程在0.5秒内接5000个数据包,一个数据包差不读1.4k字节,用的千兆网口,是但发现这个例程中的接收函数响应时间太慢了会导致严重的丢包,所以想自己建中断,这个例程的接收函数不太像是中断

user5977961:

回复 Nancy Wang:

这个例程的中断不支持am5728
/**======== HWI test function ========*/
volatileuint64_t gTestlocalTimeout = 0x300000U;

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

void myIsrIRQ(uintptr_t arg)
{gFlagIRQ = 1;gTestlocalTimeout = 0x300000;
}
boolOSAL_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;
}

yongqing wang:

回复 user5977961:

可以参考一下这个贴在的回答:https://e2e.ti.com/support/processors/f/791/t/655201?AM5728-Baremetal-DSP-interrupts

yongqing wang:

回复 yongqing wang:

及这个帖子:e2e.ti.com/…/485801

Nancy Wang:

回复 user5977961:

我看到HWI test 中有与am572x相关的代码?有在am572x的开发板上跑过吗?有什么打印信息?
======== HWI test function ========
#elif defined(SOC_AM572x) || defined (SOC_AM574x)
UT_Timer_Type_ttimer_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_tgTestTimeRd[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();}
#endiftimerIsrCount++;
}

user5977961:

回复 Nancy Wang:

请问您这个例程是在哪找的,能发下链接吗,我现在用的ti-processor-sdk-rtos-am57xx-evm-05.03.00.07-Windows-x86-Install开发包里面OSAL例程中提供的HWI没有写支持5728

Nancy Wang:

回复 user5977961:

C:\ti-processor-sdk-rtos-am57xx-evm-06.00.00.07-Windows-x86\pdk_am57xx_1_0_15\packages\MyExampleProjects\OSAL_BasicExample_evmAM572x_armTestProject

赞(0)
未经允许不得转载:TI中文支持网 » 关于AM5728在ccs中建立dsp硬件中断的问题
分享到: 更多 (0)