本帖最后由 very333 于 2016-6-8 11:27 编辑
基于K64+MQX的AD采样1——AD7878的运用 1. 前面的话 一直蛰伏在论坛里面,做着自己关于K64+MQX的开发,断断续续也做了关于基于K64+MQX的AD采样一年多了。一直想发帖,对自己收获进行一个总结,也感谢论坛上帖子对自己的启发,总是项目刚完成就又来一个新的,文档写了几次都被打断。偶尔有时间又奉献在疯狂DOTA中。端午节前,终于写完了自己关于7878的总结。调试过AD7878,AD7606,目前正在调试AD7616。这是第一篇 基于K64+MQX的AD采样1——AD7878的运用。水平有限,欢迎交流。
2. 版本信息版本问题:MQX 4.0.2 IAR 7.5 3. 整体思路
AD7878通过SPI与K64相连接。
最开始从论坛关于【YL-KL26Z开发笔记+视频讲解】KL26多种SPI工作模式分享 链接如下https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=599942&highlight=SPI了解基本SPI通信架构。这篇笔记对于SPI的整体思路还是很清楚地。通过这篇笔记确定了我的主要工作:1.MQX对于SPI初始化的设置。2.MQX对于AD7878读写函数的封装。3.AD7878的启动。接下来一点一点阐述。
3. MQX对于SPI的初始化设置3.1 init-gpio.c管脚设置
_mqx_int _bsp_dspi_io_init中将用到的SPI口SPI1、SPI2相关引脚SCK 、MOSI、 MISO设为SPI功能。在这里由于AD7878对于片选CS的操作比较复杂,将CS设置为GPIO功能。 /*Configure GPIOB for DSPI1 peripheral function */ pctl= (PORT_MemMapPtr)PORTB_BASE_PTR; pctl->PCR[16] = PORT_PCR_MUX(2); /* DSPI1.SOUT */ pctl->PCR[11] = PORT_PCR_MUX(2); /* DSPI1.SCK */ pctl->PCR[17] = PORT_PCR_MUX(2); /* DSPI1.SIN */ //pctl->PCR[10] = PORT_PCR_MUX(2); /* DSPI1.PCS0 */ 3.2. 接下来根据SPI的官方例程,进行SPI初始化设置 进行读写SPI操作进行测试,可以查看SPI2的寄存器查看相关寄存器是否被正确设置。图2在MAPS板上调试SCK,CS信号,进行验证,调试OK。
4. MQX对于读写函数的封装
在这里感谢论坛FRDM-K64+ENC28J60实现双以太网方案相关代码https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=602377&highlight=双以太网 根据AD7878的SPI读写,进行我的SPI读写功能封装。最高位为0,然后是地址位,接着是数据。 void SPIWrite2Bytes(unsignedint address , int sendtemp) { _mqx_int result; //char i; unsigned char szTxData[7]; lwgpio_set_pin_output(SPI_SS2,LWGPIO_VALUE_LOW); szTxData[0] = 0x00; szTxData[1] = (char)(address>>8); szTxData[2] = (char)(address); szTxData[3] = (char)(sendtemp>>8); szTxData[4] = (char)(sendtemp); result =fwrite (szTxData, 1, 5,spi_fd2); fflush (spi_fd2); lwgpio_set_pin_output(SPI_SS2,LWGPIO_VALUE_HIGH); } 测试OK. 5. AD7878的启动
这部分代码就不再贴了,参考ADE7878启动参考代码,见附件。完成上面的调试,这边也就水到渠成了,调试成功波形。 5. 主任务流程用于AD7878的spi驱动;主程序分为: *1.SPI口初始化 *2.AD复位 *3.AD初始化 *4.AD SPI设置 *5.AD 寄存器初始值设置 *6.启动AD7878中的DSP *7.读取电压电流有效值
完
|