搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 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周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2017-11-4 21:15:08 | 显示全部楼层
while(!(SPSR&0x08));   改成while(!(SPSR&0x80));

出0入0汤圆

发表于 2013-11-20 21:13:10 | 显示全部楼层
mark                  

出0入0汤圆

发表于 2011-10-14 10:39:53 | 显示全部楼层
MARK

出0入0汤圆

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

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-27 13:44

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

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