OMAPL多核异构通信驱动AD9833Notify组件demo
OMAPL多核通信有三个主要机制,Notify,MessageQ,RegionShare;这里主要利用了Notify机制进行通信控制。 要做一个什么实验?简单的说,ARM跑一个界面上面有一些按钮,DSP负责驱动AD9833产生正弦、方波和三角波,写入频率信息。这个实验结构是一个经典的单向的传输结构,由用户触发ARM跑的界面上的按钮,发出消息通知DSP,DSP控制AD9833产生波形,写入频率字等信息。 那么ARM的Linux端首选Qt,DSP端的程序使用SYSLINK/BIOS实施操作系统,IPC通讯组件使用Notify。 视频预览: <iframe height=498 width=510 src='http://player.youku.com/embed...' frameborder=0 'allowfullscreen'></iframe> 多核通信工程目录结构几个文件,arm,dsp,run,shared,还有makefile文件,makefile文件自己要会修改。 DSP端程序 DSP端程序对于用户来讲ad9833_dev.c ad9833_server.c main.c 三个主要的文件, ad9833_dev.c 为AD9833底层驱动,负责写时序,写参数的ad9833_server.c 相当于以太网scoket通信因子,负责进行多核通信和调用dev中的api的main.c 为dspbios启动,初始化操作。环境搭建正确之后,最核心的就是这三个东西,对还有个makefile要配置正确。我在环境调试的时间花的比开发时间多的多,最重要的就是要环境配置正确,库啊,路径啊,这类的。 AD9833底层驱动-ad9833_dev.c我们这里给出接口函数目录,具体实现不给出: enum ad9833_wavetype_t{ SIN,SQU,TRI};struct ad9833_hw_t { uint16 clk; uint16 sdi; uint16 fsy;};// AD9833结构体表述typedef struct ad9833_t { struct ad9833_hw_t hw; struct ad9833_t *self; enum ad9833_wavetype_t wave_type; u16 delay; void (*write_reg)( struct ad9833_t *self, u16 reg_value); void (*init_device)( struct ad9833_t *self ); void (*set_wave_freq)( struct ad9833_t *self , float freqs_data); void (*set_wave_type)( struct ad9833_t *self, enum ad9833_wavetype_t wave_type ); void (*set_wave_phase)( struct ad9833_t *self, u16 phase ); void (*set_wave_para)( struct ad9833_t *self, u32 freqs_data, u16 phase, enum ad9833_wavetype_t wave_type );} AD9833;// 函数列表void ad9833_set_para( struct ad9833_t *self,u32 freqs_data, u16 phase, enum ad9833_wavetype_t wave_type );void ad9833_device_init( struct ad9833_t *self );void ad9833_write_reg( struct ad9833_t *self, uint16_t data );void ad9833_delay( struct ad9833_t *self );void ad9833_gpio_init( void );void ad9833_set_wave_type( struct ad9833_t *self, enum ad9833_wavetype_t wave_type );void ad9833_set_phase( struct ad9833_t *self, uint16_t phase );void ad9833_set_freq( struct ad9833_t *self, float freq );void ad9833_dev_destroy( AD9833 *dev );void ad9833_dev_new();AD9833的驱动,按照手册进行编辑,然后封装成这个样子,这里一定需要有的函数是: ...