搜索
bottom↓
回复: 5
打印 上一主题 下一主题

M16与ADS1256通过SPI总线通讯一直调不通 请马老师帮忙看看(急)!!

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2008-4-23 11:15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近小弟做一个项目,试图通过M16自身的SPI总线访问兼容SPI总线协议的24位高精度AD芯片,TI公司的ADS1256,可是ADS1256的驱动程序怎么都调不通,公司领导逼的又急,我快被折磨死了。现把部分程序贴出来,希望有用过ADS1256这款芯片的大虾指点一二,小弟在此先谢过了。
***************************ADS1256.H******************************
#ifndef ads1256_h
#define ads1256_h
//ADS1256内部寄存器定义
#define STATUS 0x00
#define MUX 0x01
#define ADCON 0x02
#define DRATE 0x03
#define IO 0x04
#define OFC0 0x05
#define OFC1 0x06
#define OFC2 0x07
#define FSC0 0x08
#define FSC1 0x09
#define FSC2 0x0A

//访问ADS1256命令字节定义
#define WAKEUP 0x00
#define RDATA  0x01
#define RDATAC 0x03
#define SDATAC 0x0f
#define RREG 0x10
#define WREG 0x50
#define SELFCAL 0xF0
#define SELFOCAL 0xF1
#define SELFGCAL 0xF2
#define SYSOCAL 0xF3
#define SYSGCAL 0xF4
#define SYNC 0xFC
#define STANDBY 0xFD
#define RESET  0xFE
#endif

/**************main.c*********************
初始化ADS1256相关寄存器,然后把配置数据读出,
以此来验证数据是否被正确地写入ADS1256,以及
ADS1256是否正确工作(不知道这么做意义大不大,但我找不到更好的验证办法了
我们公司很抠门,连一台上百MHZ的示波器都没有!!!)

端口连接方式:
MISO---------------DOUT
MOSI---------------DIN
SCK----------------SCLK
PB3---------------/DRDY
/SS悬空            /CS接地
M16L采用7.3728M晶振,ADS1256采用7.68M晶振
***********************************/
#include <iom16v.h>
#include "ads1256.h"
#include <macros.h>
unsigned char ads1256[4];
void delay_n_us(unsigned char N)
{
while(N)
{
NOP();
NOP();
NOP();
NOP();
N--;
}
}
/********SPI初始化*****************/
void spi_init(void)
{
DDRB|=0xB0;//PB7,PB4,PB5输出,PB3,PB6输入
PORTB|=0x48;//使能内部上拉
SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPHA);//SPI使能,主机方式,Fosc/16,01模式
}
/*************SPI发送接收子程序(命令或数据字节)***********************/
unsigned char spi_TranByte(unsigned char cdata)
{
SPDR=cdata;
while(!(SPSR&0x08));
return (SPDR);
}
void main(void)
{
  
spi_init();//
while(PINB&0x08);///DRDY=0才可写ADS1256寄存器
spi_TranByte(WREG|STATUS);//写寄存器首地址
spi_TranByte(0x00);//只操作一个寄存器
spi_TranByte(0x06);//数据字节,配置ADS1256输出数据高字节高位在前
delay_n_us(10);//命令间延时
while(PINB&0x08);
spi_TranByte(WREG|ADCON);
spi_TranByte(0x01);//写ADCON和DRATE寄存器
spi_TranByte(0x03);
spi_TranByte(0xE0);
delay_n_us(10);//
spi_TranByte(RREG|ADCON);//读寄存器首地址
spi_TranByte(0x02);//连续读3个寄存器
delay_n_us(20);//
ads1256[0]=spi_TranByte(0xff);
ads1256[1]=spi_TranByte(0xff);
ads1256[2]=spi_TranByte(0xff);
ads1256[3]=spi_TranByte(0xff);
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

2
发表于 2008-4-23 18:01:50 | 只看该作者
抱歉,我没使用过ADS1256.

出0入0汤圆

3
 楼主| 发表于 2008-4-25 18:25:53 | 只看该作者
不好意思,是我把仿真器设置错了,上面的程序经仿真没错,可以作为读写ADS1256的基本驱动程序

出0入0汤圆

4
发表于 2011-10-14 10:39:53 | 只看该作者
MARK

出0入0汤圆

5
发表于 2013-11-20 21:13:10 | 只看该作者
mark                  

出0入0汤圆

6
发表于 2017-11-4 21:15:08 | 只看该作者
while(!(SPSR&0x08));   改成while(!(SPSR&0x80));
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 16:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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