主题中讨论的其他器件:TLV2548、 ADS8332
工具/软件:Code Composer Studio
我正在尝试将 tlv2548与 TMS320F28335连接。 这些引脚在此处定义为随附的图。 我从 TI 网站获得的代码是与 TMS320F28335对接的 ADS8332的内嵌。 为数据表添加 内容,我有 一些定制方法来定制 tlv2548。 下面还显示了自定义代码。 我的问题是我无法从从从器件接收数据(tlv2548)。 它在下面 以黄色突出显示的 while 循环处停止。 发送数据 、 SPICLK 在示波器上看起来正常。 您能帮我解决这个问题吗?
提前感谢您。
#define BUF_SIZE 5 //采样缓冲区大小
#define size 4000// 8192 // ADC 结果缓冲区大小
#define Sampling_Period 1000 // 1000us 采样速度1ksps
#include "DSP28x_Project.h"//器件头文件和示例 include 文件
#define BUF_SIZE 5 //采样缓冲区大小
#define size 4000// 8192 // ADC 结果缓冲区大小
#define Sampling_Period 1000 // 1000us 采样速度1ksps
#include "DSP28x_Project.h"//器件头文件和示例 include 文件
¡¡μ A
UINT16 ADS833x_BUf[BUF_SIZE];
uint16 ADS833x_result[size];
// ADS8332 CFR:内部 OSC/手动触发/250kSPS/INT 低电平有效/禁用自动 nap /禁用 nap 和深度 nap /禁用 TAG
UINT16 ADS833x_CFR_Reg = 0xEBD;// 0xFBD 表示自动通道选择和手动触发/INT 功能
// 0x7BD 表示手动通道选择和手动触发、/INT 功能
UINT16 ADS833x_Write_COM = 0xA000;//用于写入 CFR 寄存器的命令
uint16 Reg_Word;
//此文件中找到的函数的原型语句。
//中断 void ISRTimer2 (void);
void delay_loop (void);
void SPI_xmit (uint16 a);
void SPI_Fifo_init (void);
void SPI_init (void);
void 错误(void);
void ADS833x_init (void);
void ADS833x_WriteRegister (UINT16数据);
UINT16 ADS833x_ReadRegister();
UINT16 ADS833x_ReadData();
void ADS833x_Channel_Select (uint16数据);
¡¡μ A
¡¡μ A
uint16 InByte、RDATA;
void main (void)
{
// uint16 sdata;//发送数据
// uint16 RDATA;//接收到的数据;
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 DSP2833x_SYSCTRL.c 文件中。
InitSysCtrl();
//步骤2. 初始化 GPIO:
//此示例函数位于 DSP2833x_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
// InitGpio();//针对此示例跳过
//仅为 SPI-A 功能设置 GP I/O
//此函数位于 DSP2833x_SPI.c 中
InitSpiaGpio();
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
Dint;
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 DSP2833x_PIECTRL.c 文件中。
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 DSP2833x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 DSP2833x_PieVect.c 中找到
InitPieVectTable();
//步骤4. 初始化所有器件外设:
//此函数位于 DSP2833x_InitPeripherals.c 中
// InitPeripherals ();//此示例不需要
SPI_Fifo_init();//初始化 SPI FIFO
SPI_init();// init SPI
InitSpiGpio();
¡¡μ A
ADS833x_init();
//步骤5. 用户特定代码:
//此示例中不使用中断。
InByte = 0x00;
for (;;)
{
//发送数据
// spi_xmit (sdata);
//等待数据被接收
ADS833x_Channel_Select (0x00);
InByte = ADS833x_ReadData();
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
//检查已发送的数据
// RDATA = SpiaRegs.SPIRXBUF;
// if (RDATA != InByte) error();
// if (sdata == 255)
// sdata = 0;
// sdata += 5;
}
}
¡¡μ A
//步骤7. 在此处插入所有本地中断服务例程(ISR)和函数:
void delay_loop ()
{
长 I;
对于(i = 0;i < 1000000;i++){}
}
¡¡μ A
空错误(空)
{
asm (" ESTOP0");//测试失败!! 停下来!
适用于(;);
}
void SPI_init()
{
SpiaRegs.SPICCR.all =0x000F;//复位打开、上升沿、16位字符位
SpiaRegs.SPICTL.ALL =0x0006;//启用主控模式、正常相位、
//启用 TALK、禁用 SPI int。
SpiaRegs.SPIBRR = 0x007F;
SpiaRegs.SPICCR.all =0x008F;//从复位中撤回 SPI
// SpiaRegs.SPICCR.bit.SPILBK = 0;
SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以避免干扰 xmission
}
void SPI_xmit (uint16 A)
{
SpiaRegs.SPITXBUF=A;
}
void SPI_Fifo_init()
{
//初始化 SPI FIFO 寄存器
SpiaRegs.SPIFFTX.All=0xE040;
SpiaRegs.SPIFFRX.All=0x204f;
SpiaRegs.SPIFFCT.All=0x0;
}
void ADS833x_Channel_Select (uint16数据)
{
数据=数据<< 12;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!=0){}//等待 SPITXBUF 空闲
SpiaRegs.SPITXBUF =数据;
}
¡¡μ A
void ADS833x_init()//初始化 ADS833x
{
REG_Word = ADS833x_Write_COM + ADS833x_CFR_Reg;
ADS833x_WriteRegister (Reg_Word);// ADS833x 内部 CFR 寄存器配置
// while (SpiaRegs.SPISTS.bit.INT_flag!= 1)}//等待 RX 数据就绪
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
ADS833x_Buf[0]= ADS833x_ReadRegister ();
ADS833x_buf[1]= ADS833x_buf[0]和0x0FFF;
if (ADS833x_CFR_Reg!= ADS833x_Buf[1]) error ();//检查 CFR 寄存器内容
}
void ADS833x_WriteRegister (UINT16 Data)// Write CMR 和 CFR 寄存器
{
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!=0){}//等待 SPITXBUF 空闲
SpiaRegs.SPITXBUF =数据;
}
UINT16 ADS833x_ReadRegister ()//读取 CFR 寄存器
{
uint16 rData0;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!=0){}//等待 SPITXBUF 空闲
SpiaRegs.SPITXBUF= 0x9000;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!= 0){}//等待 SPITXBUF 空闲
rData0 = SpiaRegs.SPIRXBUF;//读取 RXBUF 以清除 INT_FLAG
// while (SpiaRegs.SPISTS.bit.INT_flag!= 1)}//等待 RX 数据就绪
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
rData0 = SpiaRegs.SPIRXBUF;
返回 rData0;
}
UINT16 ADS833x_ReadData()//读取转换数据
{
uint16 RDATA;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!=0){}//等待 SPITXBUF 空闲
SpiaRegs.SPITXBUF= 0xE000;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!= 0){}//等待 SPITXBUF 空闲
RDATA = SpiaRegs.SPIRXBUF;//读取 RXBUF 以清除 INT_FLAG
// while (SpiaRegs.SPISTS.bit.INT_flag!= 1)}//等待 RX 数据就绪
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
RDATA = SpiaRegs.SPIRXBUF;
返回 RDATA;
}
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//不再需要。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
{
uint16 rData0;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!=0){}//等待 SPITXBUF 空闲
SpiaRegs.SPITXBUF= 0x9000;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!= 0){}//等待 SPITXBUF 空闲
rData0 = SpiaRegs.SPIRXBUF;//读取 RXBUF 以清除 INT_FLAG
// while (SpiaRegs.SPISTS.bit.INT_flag!= 1)}//等待 RX 数据就绪
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
rData0 = SpiaRegs.SPIRXBUF;
返回 rData0;
}
UINT16 ADS833x_ReadData()//读取转换数据
{
uint16 RDATA;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!=0){}//等待 SPITXBUF 空闲
SpiaRegs.SPITXBUF= 0xE000;
while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG!= 0){}//等待 SPITXBUF 空闲
RDATA = SpiaRegs.SPIRXBUF;//读取 RXBUF 以清除 INT_FLAG
// while (SpiaRegs.SPISTS.bit.INT_flag!= 1)}//等待 RX 数据就绪
while (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}
RDATA = SpiaRegs.SPIRXBUF;
返回 RDATA;
}
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//不再需要。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================