DSP

DSPLINk channel组件与message组件的小结

2019-07-13 18:21发布

关于dsplink channel组件与message组件的小结:  1、对于GPP端(arm/linux)来说:     初始化的三步曲都是一样的,proc_setup()、proc_attach()、pool_open(),使用channel组件时,发送和接收需要创建两条channel通道,为发送到DSP分配channel缓冲,然后调用proc_load()。对于message来说,向DSP发送数据和从DSP接收数据初始化是不同的,向DSP发送数据就打开远程传输msgq_transportopen()(在发送时也需要对DSP消息队列进行定位,这个动作放到发送执行函数时进行),从DSP端接收数据初始化需要先打开GPP消息队列msgq_open(),再打开远程传输msgq_transportopen,定位DSP消息队列。     执行时message的接收和发送都比较简单,用msgq_get()就可以接收消息了,接收完后调用msgq_free()释放,发送则直接调用msgq_put()就可以了,最后结束释放远程传输消息队列msgq_release(),关闭远程传输msgq_transportclose(),让DSP停止,关闭GPP消息队列,关闭缓冲区pool_close(),与处理器分离proc_detach(),最后释放PROC组件proc_destroy()。     执行时channel的发送和接收都使用chnl_issue()函数,只是传递的方向不同,发送和接收结束后都需要使用chnl_reclaim回收缓冲区,同样也是方向不同。当然,如果要发送数据,则应初始化缓冲数据。结束时释放channel缓冲chnl_freebuffer(),删除cannel通道chnl_delete(),由于发送和接收使用不同的channel,所以在结束时要删除输入和输出channel。最后调用pool_close,proc_detach,proc_destroy。   2、对于DSP端来说     DSP有两种模式,一是软件中断模式,一是任务模式。     message     1)SWI模式:打开pool,分配结构体,创建软件中断函数,在软件中断函数中接收message,创建消息队列,打开消息队列,提交软件中断。       2)TSK模式:初始化DSPlink,打开pool,打开message传输端口,分配结构体,初始化信号量,创建消息队列,同步定位,由wirte端分配一个消息,获取消息ID,从消息中提取应答目的地,接收和发送消息。结束时释放message,关闭message,释放消息结构。      channel     1)SWI模式:打开pool,动态创建IOM驱动,动态创建DIO适配器,打开消息传输口,分配结构体,建立channel句柄,创建中断函数,提交读取和写数据请求,为输入输出分配缓冲区。     2)TSK模式:初始化DSPlink,打开pool,动态创建IOM驱动,动态创建DIO适配器,分配结构体,创建输入输出流,然后向数据流中发送数据,向数据流请求数据。结束时删除输入流和输出流,释放pool,删除消息数据结构。