主题中讨论的其他器件: TMS320F2812、
您好!
在秤重项目中、我遇到了一个奇怪的问题。 我已经使用了 ADS1232、TMS320F2812和 SPI 串行接口。
在 DRDY 的每个下降沿之后、读取数据寄存器、但它始终为 FFFFFF、与输入范围无关、
有时为7FFFFF 或3FFFFF
使用秤重应用原理图
我的代码:
使用 SPI 示例:
包括"DSP281x_Device.h" // DSP281x 头文件 include 文件
#include "DSP281x_examples.h"// DSP281x 示例 include 文件
//此文件中找到的函数的原型语句。
//中断 void ISRTimer2 (void);
void delay_loop (void);
void SPI_xmit (uint16 a);
void SPI_fifo_init (void);
void SPI_init (void);
void error (void);
uint16 Temp;
uint16 sdata;//发送数据
uint16 RDATA[3];//接收到的数据
void main (void)
{
uint16 i=0;
InitSysCtrl();
InitGpio();//针对此示例跳过
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
spi_fifo_init ();//初始化 SPI FIFO
SPI_init ();//初始化 SPI
InitXIntraupt(); //初始化外部中断
IER |= M_INT1 | M_INT6
EINT; //启用 INTM
ERTM; //启用 DBGM
GpioDataRegs.GPBDAT.bit.GPIOB0=1;//启用 ADS1232
GpioDataRegs.GPFDAT.ALL = 0x0000;
temp=0xF0;
for (i=0;i<3;i++) RDATA[i]=0;
sdata = 0x0000;
for (;)
{
}
}
void SPI_init()
{ //0000 0000 0000 01111
SpiaRegs.SPICCR.all =0x0007;// Reset.7 (使能),极性=0,SPILBK =0,上升沿,8位字符位
SpiaRegs.SPICTL.ALL =0x0006;//溢出 int.4=0 phase .3=0,启用 master=1,正常相位,
//启用 TALM.1=1,禁用 SPI int.0。
SpiaRegs.SPIBRR = 0x007F;
SpiaRegs.SPICCR.all =0x0087;//从复位中撤回 SPI
SpiaRegs.SPIPRI.bit.FREE = 1; //设置断点不会干扰 xmission
}
void SPI_xmit (uint16 a)
{
SpiaRegs.SPITXBUF=a;
}
void SPI_Fifo_init ()
{
//初始化 SPI FIFO 寄存器//1110 0000 0100 0000
SpiaRegs.SPIFFTX.All=0xE040;//SPIRST.15、SPIFFENA.14、TXFIFOREST .13可重写、
//TXFFST.12-8、TXFFINT.7、TXFFINT CLR.6、TXFFIENA.5、TXFFIL4-0
SpiaRegs.SPIFFRX.All=0x204f;//RXFFOVF.15、RXFFOVF CLR.14、RXFIFOReset (RENABLE)、RXFFST12-8
//RXFFINT、RXFFINT CLR、RXFFIENA.5、RXFFIL4-0
SpiaRegs.SPIFFCT.ALL=0x0;// FIFO 发送延迟位
}
和 XINT:
中断空 XINT2_ISR (空)
{
//在此处插入 ISR 代码
uint16 i=0;
温度^= 0xC0;
GpioDataRegs.GPFDAT.ALL =温度;
//发送数据
sdata=0xF0;
for (i=0;i<3;i++)
{
SPI_xmit (sdata<8);
//等待数据被接收
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
//检查已发送的数据
RDATA[i]= SpiaRegs.SPIRXBUF;
sdata++;
}
