关于SYS/BIOS,将中断处理放在HWI的做法

通过定义一种结构体

typedef struct __pruss_irq_fn_map
{
	//Interrupt handler
	PRUSSDRV_IRQ_HANDLER irqHandler;
	//Binary semaphore to wait on
	Semaphore_Handle semHandle;
}pruss_irq_fn_map;

将中断处理函数和信号量相互整合在一起。

中断处理函数通过定义虚函数的方式

typedef void (*PRUSSDRV_IRQ_HANDLER)(void);

当HWI任务产生的时候,HWI内容就产生对应的信号量Semaphore_post调用响应的task任务。

在应用程序中,通过用函数PRUSSDRVPruwaitEvent() 来等待Hwi中断的产生

在HWI中断处理模式下,CMDACK的中断优先级比HWI的优先级要先,所以,ARM只能用轮询的方式查看PRU中断的产生

可以看出在普通的非轮询的方式的时候,ARM与PRU之间是通过ARM2PRU与PRU2ARM的中断方式来进行事件的同步的。

在pruss.c里面有一个函数说明之间的操作

/**
 * \brief  This function generates and INTC event, waits for AINTC event and 
 *		   clears an INTC event \n
 *
 * \param   eventnum   The INTC Event number.\n
 *
 * \return  0 in case of successful transition, -1 otherwise. \n
 */
int PRUSSDRVPruSendWaitCearEvent(unsigned int sendEventNum, 
										unsigned int pruEvtoutNum,
										unsigned int ackEventNum)
{
	PRUSSDRVPruSendEvent(sendEventNum);
	PRUSSDRVPruWaitEvent(pruEvtoutNum);
	PRUSSDRVPruClearEvent(ackEventNum);
	return 0;
}

通过这个函数可以blocked 当前进行的任务,等待下一次中断的产生。


以下,问题,对于PDI和SYNC的任务可以通过这种方式来思考,对于LED_task和task1是采用什么方式进行调度的?

下面可以看看cmdask函数



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值