#include "ads1292r.h"
#include "spi.h"
#include "delay.h"
uint8_t ads1292r_data_buff[9] = {0};
void ADS1292R_Init(void)
{
GPIO_InitTypeDef GPIO_Initure = {
.Mode = GPIO_MODE_OUTPUT_PP, //推挽输出
.Pull = GPIO_NOPULL, //无
.Speed = GPIO_SPEED_FREQ_LOW,
};
GPIO_Initure.Pin = ADS1292R_PWDN_PIN;
HAL_GPIO_Init(ADS1292R_PWDN_PORT,&GPIO_Initure);
GPIO_Initure.Pin = ADS1292R_START_PIN;
HAL_GPIO_Init(ADS1292R_START_PORT,&GPIO_Initure);
GPIO_Initure.Pin = ADS1292R_CS_PIN;
GPIO_Initure.Pull = GPIO_PULLUP, //上拉
GPIO_Initure.Speed = GPIO_SPEED_HIGH, //高速
HAL_GPIO_Init(ADS1292R_CS_PORT,&GPIO_Initure);
GPIO_Initure.Pull = GPIO_NOPULL;
GPIO_Initure.Mode = GPIO_MODE_IT_FALLING; //下降沿输入
GPIO_Initure.Pin = ADS1292R_ADC_RDY_PIN;
HAL_GPIO_Init(ADS1292R_ADC_RDY_PORT,&GPIO_Initure);
ADS1292R_CS_H;
ADS1292R_START_L;
ADS1292R_PWDN_H;
filter_bp17_init(); //DSP滤波器初始化
}
uint8_t ADS1292R_SPI_RW(uint8_t data)
{
uint8_t rx_data = 0;
HAL_SPI_TransmitReceive(&SPI1_Handler, &data, &rx_data, 1, 10);
return rx_data;
}
/**ADS1292R上电复位 **/
void ADS1292R_PowerOnInit(void)
{
uint8_t device_id ;
ADS1292R_START_H;
ADS1292R_CS_H;
ADS1292R_PWDN_L;//进入掉电模式
delay_ms(10);
ADS1292R_PWDN_H;//退出掉电模式
delay_ms(10);//等待稳定
ADS1292R_PWDN_L;//发出复位脉冲
delay_us(10);
ADS1292R_PWDN_H;
delay_ms(100);//等待稳定,可以开始使用ADS1292R
ADS1292R_START_L;
ADS1292R_CMD(ADS1292R_SDATAC);//发送停止连续读取数据命令
delay_ms(1);
while(device_id!=0x73) //识别芯片型号,1292r为0x73
{
device_id = ADS1292R_REG(ADS1292R_RREG|ADS1292R_ID,0X00);
delay_ms(200);
}
OLED_PrintfString(0,2,"ADS1292R Detected");
ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG2, 0XE0); //使用内部参考电压
delay_ms(10);//等待内部参考电压稳定
ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG1, 0X02); //设置转换速率为500SPS
//ADS1292R_REG(ADS1292R_WREG|ADS1292R_CONFIG1, 0X00); //设置转换速率为125SPS
ADS1292R_REG(ADS1292R_WREG|ADS1292R_LOFF, 0XF0);
ADS1292R_REG(ADS1292R_WREG|ADS1292R_CH1SET, 0X00);
ADS1292R_REG(ADS1292R_WREG|ADS1292R_CH2SET, 0x00);
ADS1292R_REG(ADS1292R_WREG|ADS1292R_RLD_SENS, 0x30);
// ADS1292R_REG(ADS1292R_WREG|ADS1292R_RLD_SENS, 0x3C); //使用通道2提取共模电压
ADS1292R_REG(ADS1292R_WREG|ADS1292R_LOFF_SENS, 0x3F);
// ADS1292R_REG(ADS1292R_WREG|LOFF_STAT, 0X00);
ADS1292R_REG(ADS1292R_WREG|ADS1292R_RESP1, 0xDE);
ADS1292R_REG(ADS1292R_WREG|ADS1292R_RESP2, 0x07);
ADS1292R_REG(ADS1292R_WREG|ADS1292R_GPIO, 0x0C);
}
void ADS1292R_Work(void)
{
OLED_PrintfString(0,2,"ADS1292R Working");
ADS1292R_CMD(ADS1292R_RDATAC);//回到连续读取数据模式,检测噪声数据
ADS1292R_START_H;//启动转换
//中断线1-PB1
HAL_NVIC_SetPriority(EXTI1_IRQn,1,1); //抢占优先级为1,子优先级为1
HAL_NVIC_EnableIRQ(EXTI1_IRQn); //使能中断线1
}
void ADS1292R_Halt(void)
{
OLED_PrintfString(0,2,"ADS1292R Halt");
ADS1292R_START_L;//启动转换
ADS1292R_CMD(ADS1292R_SDATAC);//发送停止连续读取数据命令
HAL_NVIC_DisableIRQ(EXTI1_IRQn); //关闭中断线1
}
//对ADS1292R写入指令
void ADS1292R_CMD(uint8_t cmd)
{
ADS1292R_CS_L;
delay_us(1);
ADS1292R_SPI_RW(cmd);
delay_us(1);
ADS1292R_CS_H;
}
//对ADS1292R内部寄存器进行操作
uint8_t ADS1292R_REG(uint8_t cmd, uint8_t data) //只读一个数据
{
uint8_t rx_data = 0;
ADS1292R_CS_L;
delay_us(1);
ADS1292R_SPI_RW(cmd); //读写指令
ADS1292R_SPI_RW(0X00); //需要写几个数据(n+1个)
if((cmd&0x20)==0x20) //判断是否为读寄存器指令
rx_data = ADS1292R_SPI_RW(0X00); //返回寄存器值
else
rx_data = ADS1292R_SPI_RW(data); //写入数值
delay_us(1);
ADS1292R_CS_H;
return rx_data;
}
static uint8_t temp1292r[9] = {0}; //并没有什么卵用
/*读取72位的数据1100+LOFF_STAT[4:0]+GPIO[1:0]+13个0+2CHx24位,共9字节*/
void ADS1292R_ReadData(void)
{
ADS1292R_CS_L;
HAL_SPI_TransmitReceive(&SPI1_Handler, temp1292r, ads1292r_data_buff, 9, 10);
ADS1292R_CS_H;
}
ADS1292R驱动
4星 · 超过85%的资源 需积分: 50 88 浏览量
2017-05-23
11:34:37
上传
评论 25
收藏 3KB ZIP 举报
DevinTT
- 粉丝: 269
- 资源: 14
最新资源
- 数电实验一:半加器、电路的逻辑功能、全加器,四人表决电路、组合逻辑电路
- 原生Javaee+jsp的一个课程项目为在线课程管理系统
- 企业人事管理系统 开发框架:vs2022 + asp.net + webform + sqlserver 数据库:sqlser
- jsp基于WEB的考务管理系统的设计与实现(源代码+lw).zip
- jsp基于Web的可维护的数据库浏览器(源代码+lw+答辩PPT).zip
- JSP基于WEB的图书馆借阅系统的设计与实现(源代码+lw).zip
- aht10的linux驱动
- JSP基于WEB网上论坛设计与实现(源代码+lw+开题报告+答辩PPT+外文翻译).zip
- 端午节et-mai开发比记
- JSP基于网络超市商品销售管理系统的设计与实现(源代码+lw).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论10