查看: 424|回复: 2
打印 上一主题 下一主题

AD7794可以读写寄存器,读数据时DRDY线一直是高电平,死循环

[复制链接] qrcode

1

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
楼主
跳转到指定楼层
发表于 2015-12-16 03:33 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是AD自带的AD7794例程,使用io模拟SPI时序,AD7794可以正确读写寄存器,但是读数据时DRDY线一直是高电平,死循环,(初始化时已经将CS一直置低),求大神帮忙分析

#define AD7794_MOSI_H GPIO_SetBits(GPIOA, GPIO_Pin_6) #define AD7794_MOSI_L GPIO_ResetBits(GPIOA, GPIO_Pin_6) #define AD7794_CS_H GPIO_SetBits(GPIOA, GPIO_Pin_4) #define AD7794_CS_L GPIO_ResetBits(GPIOA, GPIO_Pin_4) #define AD7794_SCLK_H GPIO_SetBits(GPIOA, GPIO_Pin_5) #define AD7794_SCLK_L GPIO_ResetBits(GPIOA, GPIO_Pin_5) #define AD7794_MISO GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7) 初始化时已经连续发送32个1,复位AD,AD的寄存器都能正常读写 /******初始化时的配置*********/ AD7794Registers[COMMUNICATIONS]=WRITE_ENABLE|WRITE|RS_MODE|CREAD_DISABLE; //0x08 AD7794WriteRegister(COMMUNICATIONS, AD7794Registers); AD7794Registers[MODE]=0x200A; // 0x200A 单次转换模式,16.7HZ AD7794WriteRegister(MODE, AD7794Registers); AD7794Registers[COMMUNICATIONS]=WRITE_ENABLE|WRITE|RS_CONFIGURATION|CREAD_DISABLE; AD7794WriteRegister(COMMUNICATIONS, AD7794Registers); AD7794Registers[CONFIGURATION]=0x0010; 通道0,增益1,外部基准电压5V AD7794WriteRegister(CONFIGURATION, AD7794Registers); AD7794ReadResultForSingleConversion(2, AD7794Data); //配置完后,执行单次转换,死掉 //单次转换函数 void AD7794ReadResultForSingleConversion(u8 DataIndex, u32 *DataBuffer) { while(AD7794_MISO != 0) {;} //死循环在这里 AD7794Registers[COMMUNICATIONS]=WRITE_ENABLE|READ|RS_DATA|CREAD_DISABLE; //0x58 AD7794WriteRegister(COMMUNICATIONS, AD7794Registers); AD7794ReadRegister(DATA, AD7794Registers); DataBuffer[DataIndex]=AD7794Registers[DATA]; } /******写寄存器*********/ void AD7794WriteRegister(u8 RegisterAddress, u32 *RegisterBuffer) { u8 i; u32 temp; temp=RegisterBuffer[RegisterAddress]; switch(RegisterAddress) { case COMMUNICATIONS: case IO: for(i=0; i<8; i++) { if((temp&0x80)==0x80) AD7794_MOSI_H; else AD7794_MOSI_L; AD7794_SCLK_L; temp<<=1; AD7794_SCLK_H; } break; case MODE: case CONFIGURATION: for(i=0; i<16; i++) { if((temp&0x8000)==0x8000) AD7794_MOSI_H; else AD7794_MOSI_L; AD7794_SCLK_L; temp<<=1; AD7794_SCLK_H; } break; case OFFSET: case FULLSCALE: for(i=0; i<24; i++) { if((temp&0x800000)==0x800000) AD7794_MOSI_H; else AD7794_MOSI_L; AD7794_SCLK_L; temp<<=1; AD7794_SCLK_H; } break; default: break; } } /******读寄存器*********/ void AD7794ReadRegister(u8 RegisterAddress, u32 *RegisterBuffer) { u8 i; u32 temp; temp=0; switch(RegisterAddress) { case STATUS1: case ID: for(i=0; i<8; i++) { temp<<=1; AD7794_SCLK_L; temp+=AD7794_MISO; AD7794_SCLK_H; } RegisterBuffer[RegisterAddress]=temp; break; case MODE: case CONFIGURATION: for(i=0; i<16; i++) { temp<<=1; AD7794_SCLK_L; temp+=AD7794_MISO; AD7794_SCLK_H; } RegisterBuffer[RegisterAddress]=temp; break; case OFFSET: case FULLSCALE: case DATA: for(i=0; i<24; i++) { temp<<=1; AD7794_SCLK_L; temp+=AD7794_MISO; AD7794_SCLK_H; } RegisterBuffer[RegisterAddress]=temp; break; default: break; } }
回复

使用道具 举报

0

主题

18

帖子

38

积分

新手上路

Rank: 1

积分
38
沙发
发表于 2016-2-16 04:55 AM | 只看该作者
不知道是不是硬件设计的有问题,使用的基准电压是5V,电源也时5V,模拟输入大概是2V,下附电路图                                                                                                                                                                       
回复 支持 反对

使用道具 举报

1

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
板凳
 楼主| 发表于 2016-2-16 06:46 AM | 只看该作者
这里有一些关于AD7794在使用过程中出现的问题及解答,供参考https://ezchina.analog.com/search.jspa?q=AD7794                                                                                                                                                                       
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表