新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于DSP和LTC1859数据采集系统

基于DSP和LTC1859数据采集系统

作者:时间:2012-04-17来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257571.htm

3 软件设计

由于采用标准 SPI总线通信,软件的关键是 之间的时序匹配,首先介绍 软件配置。

3.1 不管是在发送系统中还是接收系统中,都是在 SCK的下降沿传输,上升沿被捕获,这就要求 在进行SPI初始化时采用上升沿无延时模式。8位的控制字通过 SDI输入,用于配置 LTC1859以进行下一个转换,同时前一个转换输出在SDO上输出,在数据交换的末端在 CONVST上施加一个上升沿启动被请求的转换。转换完成后,转换结果将在将在下一个数据传送周期提供。LTC1859的8位命令控制字在首 8个 SCK的上升沿按时间顺序记录到 SDI输入中,SDI随后的输入的位被忽略。控制字的 8位定义如表 1。

其中复用器通道选择如表 2。

其中输入范围选择如表 3。


3.2 下面详细介绍软件编写,考虑到 SPI总线的时钟很快,采用查询方式,其软件流程如图 2,这里只介绍LTC1859(1)的流程及源代码,其它原理都一样。


图 2流程图 Fig2 Flow chart

程序源代码及其详细注释:

void SPIAD_Init()
{ MCRB=MCRB | 0x001C; // SPISIMO,SPISOMI,SPICLK特殊功能方式 SPICCR=0x000F;
// 16bit数据, 上升沿无延时模式 SPICTL=0x0006; //禁止中  断 SPIBRR=0x0004; // 8M波特率
,40M/5=8M SPICCR=SPICCR | 0x80;
}
void ADLTC()
{ PADATDIR=PADATDIR|0x1010; //将 A4即 LTC2RD置高
PADATDIR=PADATDIR0xFFFD; //将 A1即 LTC1RD置低 PADATDIR=PADATDIR0xFFFE;
//将 A0  即 LTC1CON(CONVST)置低 PADATDIR=PADATDIR|0x0101;
//将A0即LTC1CON(CONVST)拉高启动转换 asm( NOP );
while((PADATDIR0x0004)!=0x0000); //等待 A2即 LTC1BUSY(BUSY)变低
PADATDIR=PADATDIR0xFFFE; //A2即 LTC1BUSY(BUSY)变低后再将 A0即 LTC1CON(CONVST)拉低
while((PADATDIR0x0004)!=0x0004); //等待 A2即 LTC1BUSY(BUSY)变高
SPITXBUF=(0x00048); // 输入通道 1控制字,当 LTC1BUSY变高说明转换完成 ,则可写入下次转换的命令字
while  ((SPISTS0x0040)!=0x0040); //等待总线传输
SPIRXBUF=SPIRXBUF; PADATDIR=PADATDIR|0x0101; asm( NOP );
while((PADATDIR0x0004)!=0x0000);PADATDIR=PADATDIR0xFFFE;
while((PADATDIR0x0004)!=0x0004); SPITXBUF=(0x00148);
while((SPISTS0x0040)!=0x0040);
/*虚读寄存器以清除中断标志*/ //将A0即LTC1CON(CONVST)拉高启动转换
//等待 A2即 LTC1BUSY(BUSY)变低 //A2即 LTC1BUSY(BUSY)变低后再将 A0即
LTC1CON(CONVST)拉低 //等待 A2即 LTC1BUSY(BUSY)变高 //输入通道 2控制字,      当
LTC1BUSY变高说明转换完成,则可写入下次转换的命令字 //等待总线传输
ADINRESULT[4]=(0x0FFFSPIRXBUF); /*保存转换结果 */ SPIRXBUF= SPIRXBUF;
/*虚读寄存器以清除中断标志*/ PADATDIR=PADATDIR|0X0101; //将 A0即 LTC1CON(CONVST)拉高启动转换
asm( NOP ); while((PADATDIR0x0004)!=0x0000); //等待 A2即 LTC1BUSY(BUSY)变低
PADATDIR=PADATDIR0xFFFE; //A2即 LTC1BUSY(BUSY)变低后再将
A0即 LTC1CON(CONVST)拉低 while((PADATDIR0x0004)!=0x0004); //等待 A2即
LTC1BUSY(BUSY)变高 SPITXBUF=(0x00248); //输入通道3控制字当LTC1BUSY变高说明转换完成,
则可写入下次转换的命令字
while((SPISTS0x0040)!=0x0040); //等待总线传输
ADINRESULT[5]=SPIRXBUF; /*保存转换结果 */
SPIRXBUF=SPIRXBUF; /*虚读寄存器以清除中断标志*/
……………………………………………通道 3、4的转换程序原理一样 }

4 结 论

本文作者创新点是成功实现了基于 和 LTC1859的
16位高精度系统,给出了全新实用的硬件和软件设计,特别适合差分信号和电压范围变化较大的系统该设计,对与 LTC1859与其它的
CPU的设计也有很大的参考价值。该系统性价比高,具有一般通用性能,有一定的应用推广价值。


上一页 1 2 下一页

关键词: DSP LTC1859 数据采集

评论


相关推荐

技术专区

关闭