TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1299EEGFE-PDK: 寄存器配置

Part Number:ADS1299EEGFE-PDKOther Parts Discussed in Thread:ADS1299, ADS1292,

孩子最近刚学spi,想测下内部测试方波,下面是ad芯片上spi四根线的连接,还有根clksel接的是是上面那排最右边(拉低拉高我都试了),/pwdn没拍进去,我拉高了。

我按照figure67来的,使用mmb0供电

上面第四个连的SPI的MISO,第五根连的MISI,下面第四根连的SCK,JP21那里连的是CS,我用的开发板是stm32H7

/*SPI接口初始化*/
__HAL_SPI_DISABLE(&SPI3_Handler);
SPI_InitStructure_ADS.Direction = SPI_DIRECTION_2LINES; //双线双向全双工
SPI_InitStructure_ADS.Mode = SPI_MODE_MASTER; //SPI主模式
SPI_InitStructure_ADS.DataSize = SPI_DATASIZE_8BIT; //8bit数据
SPI_InitStructure_ADS.CLKPolarity=SPI_POLARITY_LOW; //串行同步时钟的空闲状态为高电平
SPI_InitStructure_ADS.CLKPhase=SPI_PHASE_2EDGE; //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
SPI_InitStructure_ADS.NSS = SPI_NSS_PULSE_DISABLE; //片选用软件控制
SPI_InitStructure_ADS.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; SPI_InitStructure_ADS.FirstBit = SPI_FIRSTBIT_MSB; //高位在前
SPI_InitStructure_ADS.CRCPolynomial = 7; //crc7,stm32spi带硬件ecc
HAL_SPI_Init(&SPI3_Handler);
__HAL_SPI_ENABLE(&SPI3_Handler);
}

/**ADS1299上电复位 **/
void ADS_PowerOnInit(void)
{

SPI_CS_LOW;
delay_ms(1000);
ADS_SPI(ADS_RESET); delay_ms(1000);
ADS_SPI(SDATAC);
delay_ms(1000);
ADS_REG(WREG|CONFIG3,0XE0); ADS_REG(WREG|CONFIG1,0X96);
ADS_REG(WREG|CONFIG2,0XD0);
ADS_REG(WREG|CH1SET,0X01); ADS_REG(WREG|CH2SET,0X01); ADS_REG(WREG|CH3SET,0X01); ADS_REG(WREG|CH4SET,0X01); ADS_REG(WREG|CH5SET,0X01); ADS_REG(WREG|CH6SET,0X01); ADS_REG(WREG|CH7SET,0X01); ADS_REG(WREG|CH8SET,0X01); delay_ms(10);

SPI_CS_LOW;
ADS_SPI(START);
SPI_CS_HIGH;
}

/**对ADS129x内部寄存器进行操作 **/
unsigned char ADS_REG(unsigned char com,unsigned data)//第一次发读写命令还有寄存器地址,第二次发操作寄存器数,第三次发寄存器要改成的值
{
unsigned char i,data_return;
SPI_CS_LOW;//Low to communicated
for (i=0;i<45;i++);
ADS_SPI(com);
for (i=0;i<45;i++);
ADS_SPI(0X00);
for (i=0;i<45;i++);
if ((com&0x20)==0x20)//判断是否为读寄存器指令
{
data_return=ADS_SPI(0X00);
//for(i=0;i<45;i++); }
if ((com&0x40)==0x40)
{
data_return=ADS_SPI(data);
}
SPI_CS_HIGH;
return (data_return);
}

/**通过SPI总线与ADS1292通信**/
unsigned char ADS_SPI(unsigned char com)
{
unsigned char rec_data=0;
while (__HAL_SPI_GET_IT_SOURCE(&SPI3_Handler, SPI_FLAG_TXE)==0);//检测发送寄存器是否为空,上一个数据发送完成
HAL_SPI_Transmit(&SPI3_Handler, &com,1,10000);//发送数据 while (__HAL_SPI_GET_IT_SOURCE(&SPI3_Handler, SPI_FLAG_RXNE)==0)//检测接收标志是否非空,发送完成 {
HAL_SPI_Receive(&SPI3_Handler,&rec_data,1,10000);
}
return rec_data; //返回接收到的数据
}

上面是我用到的函数

然后,我运行

ADS_Init();
ADS_PowerOnInit();

经过上电复位,通过调试的软件观察到寄存器全部变成0,有的时候没有改变

Amy Luo:

您好,

建议您用示波器或者逻辑分析仪捕获SPI通信波形,然后查看发出的命令时序是否正确,这是调试SPI通信最好的方式。

下面FAQ中有SPI的调试步骤以及 ADS1299EEGFE-PDK的代码,希望对您有帮助:

[FAQ] Common Questions for TI's ADS129x Family of Bio-Potential ADCs

赞(1)
未经允许不得转载:TI中文支持网 » ADS1299EEGFE-PDK: 寄存器配置
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1