完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ads8329的时序和以前的spi协议时序 有所不同 小弟看不懂 求大家指点
#ifndef _AD9850_H #define _AD9850_H #include "msp430f2617.h" #define CLK_1 P2OUT |= BIT0 #define CLK_0 P2OUT &= ~BIT0 #define SDI_1 P2OUT |= BIT2 #define SDI_0 P2OUT &= ~BIT2 #define CS_1 P2OUT |= BIT3 #define CS_0 P2OUT &= ~BIT3 //#define INT_1 P2OUT |= BIT4 //#define INT_0 P2OUT &= ~BIT4 #define CONVST_1 P2OUT |= BIT5 #define CONVST_0 P2OUT &= ~BIT5 #define SDO (P2IN & BIT1) void InitADS8329() [ CLK_0; CONVST_1; CS_1; ] void WriteADS8329(unsigned int commd) [ unsigned char i; CS_0; for(i = 0; i < 16; i++) [ CLK_1; if(commd & 0x8000) [ SDI_1; ] else [ SDI_0; ] CLK_0; commd = commd << 1; ] CS_1; ] unsigned int ReadADS8329() [ unsigned char i, commd = 13; unsigned int ReadData = 0; CLK_1; for(i = 0; i < 50; i++) [ if(i < 24) [ CLK_0; CLK_1; ] else if(i < 40) [ CS_0; if(i < 28) [ if(commd & 8) [ SDI_1; ] else [ SDI_0; ] commd = commd << 1; ] if(SDO) [ ReadData |= 0x0001; ] ReadData = ReadData << 1; CLK_0; CLK_1; ] else [ CLK_0; CLK_1; CS_1; ] ] return ReadData; ] #endif 上边是读写时序 下边是 主函数 int main( void ) [ // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; Init_CLK(); InitPort(); InitADS8329(); WriteADS8329(0Xe0a7); while(1) [ Data1 = ReadADS8329(); Data2 = ReadADS8329(); Data3 = ReadADS8329(); Data4 = ReadADS8329(); ] ] |
|
相关推荐
5 个讨论
|
|
问题 解决了 谢谢大家 寄存器 配制错了 导致芯片 休眠了 我用的控制方式是 AUTO TRIGGER / READ While Converting 下边 是最新程序 仅供 后来者参考 不喜勿喷 #ifndef _AD9850_H #define _AD9850_H #include "msp430f2617.h" #define CLK_1 P2OUT |= BIT0 #define CLK_0 P2OUT &= ~BIT0 #define SDI_1 P2OUT |= BIT2 #define SDI_0 P2OUT &= ~BIT2 #define CS_1 P2OUT |= BIT3 #define CS_0 P2OUT &= ~BIT3 //#define INT_1 P2OUT |= BIT4 //#define INT_0 P2OUT &= ~BIT4 #define CONVST_1 P2OUT |= BIT5 #define CONVST_0 P2OUT &= ~BIT5 #define SDO (P2IN & BIT1) #define INT (P2IN & BIT4) void InitADS8329() [ CLK_0; CONVST_1; CS_1; ] void WriteADS8329(unsigned int commd) //配置寄存器 [ unsigned char i; CS_0; for(i = 0; i < 16; i++) [ CLK_1; if(commd & 0x8000) [ SDI_1; ] else [ SDI_0; ] CLK_0; commd = commd << 1; ] CS_1; ] unsigned int ReadADS8329Reg() // 读寄存器的值 [ unsigned char i; unsigned int RegData = 0, commd = 0xd000; CS_0; for(i = 0; i < 20; i++) [ CLK_1; if(i >= 4) [ RegData = RegData << 1; if(SDO) [ RegData |= 0x0001; ] else [ RegData &= ~0x0001; ] ] if(i < 16) [ if(commd & 0x8000) [ SDI_1; ] else [ SDI_0; ] commd = commd << 1; ] CLK_0; ] CS_1; return RegData; ] unsigned int ReadADS8329() //读AD的数据 [ unsigned char i; unsigned int ReadData = 0, commd = 0xd8e3; CLK_1; for(i = 0; i < 48; i++) [ if(i < 24) [ CLK_0; CLK_1; ] else if(i < 40) [ ReadData = ReadData << 1; CS_0; if(i < 40) [ if(commd & 0x8000) [ SDI_1; ] else [ SDI_0; ] commd = commd << 1; ] if(SDO) [ ReadData |= 0x0001; ] else [ ReadData &= ~0x0001; ] CLK_0; CLK_1; ] else [ CLK_0; CLK_1; CS_1; ] ] return ReadData; ] #include "msp430f2617.h" #include "ads8329.h" unsigned int Data1, Data2, Data3, Data4; void Init_CLK(void) [ // ------------------ MSP430x1xx使用 ------------------------ // unsigned int i; // BCSCTL1 = 0X00; //将寄存器的内容清零//XT2震荡器开启 // //LFTX1工作在低频模式//ACLK的分频因子为1 // do // [ // IFG1 &= ~OFIFG; // 清除OSCFault标志 // for (i = 0x20; i > 0; i--); // ] // while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1 // // // // BCSCTL2 = 0X00; //将寄存器的内容清零 // BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1 // BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1 // ------------------ MSP430x2xx使用 ------------------------ // BCSCTL1 &= ~XT2OFF; // Activate XT2 high freq xtal BCSCTL3 |= XT2S_2; // 3 ?16MHz crystal or resonator //BCSCTL3 |= LFXT1S_2; // set LFXT1 to VLOCLK 无外部低频晶体时必须开启此行 do [ IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0xFF; i > 0; i--); // Time for flag to set ] while (IFG1 & OFIFG); // OSCFault flag still set? BCSCTL2 |= SELM_2; // MCLK = XT2 HF XTAL (safe) ] void InitPort() [ P2DIR |= BIT0 + BIT2 + BIT3 + BIT5; P2DIR &= ~BIT1; ] int main( void ) [ // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; Init_CLK(); InitPort(); InitADS8329(); WriteADS8329(0Xe8ed); // 复位 WriteADS8329(0Xe8ef); //寄存器配制 WriteADS8329(0Xd8ef); //读配置 //Data1 = ReadADS8329Reg(); //读取寄存器 用于测试寄存器配置是否正确 while(1) [ Data1 = ReadADS8329(); //连续读四次 其中第一次的数据 应舍去 Data2 = ReadADS8329(); Data3 = ReadADS8329(); Data4 = ReadADS8329(); ] ] |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
TMS320F28377D:新做了以377d为芯片的板子,上电后芯片复位引脚出现方波请问如何解决?
1909 浏览 0 评论
TPS55340通电后输入端保险丝烧断,芯片输入和GND之间短路
3665 浏览 4 评论
5040 浏览 0 评论
请问如何用DM368对RGB格式的图片数据进行编码生成JPEG格式图片?
1739 浏览 1 评论
9420 浏览 8 评论
CC3100BOOST使用CC3200lunchXL进行烧录
680浏览 2评论
728浏览 1评论
TMS320F28034: 利用C2prog通过SCI给TMS320F28034烧录程序,出现错误提示:Bootloading... failed (invalid echo)!
697浏览 1评论
求DLPC350 Programmer’s Guide User's Guide 中文版说明书
1207浏览 1评论
1793浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-9 20:16 , Processed in 0.855903 second(s), Total 70, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号