应用部分已验证没有问题,而且寄存器的读写操作没有问题,但是在通过SPI读取AD值时一直不变化,并且一直为0x00,
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
很感谢你的回复,但是不太明白你说的启动转换是什么意思,下面是我写了一个通道切换的函数,及一个中断服务程序,请你再给说说
/*
******************************************************************************************************
* 函 数 名: ADS1256_SetChannal
* 功能说明: 配置通道号。多路复用。AIN- 固定接地(ACOM).
* 形 参: _ch : 通道号, 0-7
* 返 回 值: 无
******************************************************************************************************
*/
static void ADS1148_SetChannal(uint8_t _ch)
{
uint8_t ad_reg_wr[4];
uint8_t reg_idac1 = 0x01;
if (_ch > 7)
{
return;
}
ad_reg_wr[0]=((_ch << 3) | 3);
reg_idac1=((_ch << 4) | 3);
ADS_WR_REG(REG_MUX0,ad_reg_wr, 1); /* Bit3 = 1, AINN 固定接 AINN3 */
// ADS_WR_REG(REG_IDAC1, ®_idac1, 1);
}
下面为中断服务函数
/*
*********************************************************************************************************
* 函 数 名: ADS1148_ISR
* 功能说明: 定时采集中断服务程序
* 形 参: 无
* 返 回 值: 无if (DRDY_IS_LOW())
*********************************************************************************************************
*/
void ADS1148_ISR(void)
{
INT32U Timeout;
if (g_tADS1148.ScanMode == 0) /* 0 表示单端8路扫描,1表示差分4路扫描 */
{
ADS1148_SetChannal(g_tADS1148.Channel); /* 切换模拟通道 */
DelayNops(5);
SPI_ADS_SendCMD(CMD_ADS_SYNC_1st);
DelayNops(5);
SPI_ADS_SendCMD(CMD_ADS_WAKEUP);
DelayNops(25);
if (g_tADS1148.Channel == 0)
{
//Timeout = 0x03FFFFFF;
// while ((!DRDY_IS_LOW()) && (Timeout-- > 1)); /* 等待 DRDY 低 */
g_tADS1148.AdcNow[7] = SPI_ADS_ReadHalfWord() & 0xFFFF; /* 注意保存的是上一个通道的数据 */
// g_tADS1148.AdcNow[7] = ADS1148ReadData();
// g_tADS1148.AdcNow[7] = 0x0101;
}
else
{
//Timeout = 0x03FFFFFF;
//while ((!DRDY_IS_LOW()) && (Timeout-- > 1)); /* 等待 DRDY 低 */
g_tADS1148.AdcNow[g_tADS1148.Channel-1] = SPI_ADS_ReadHalfWord() & 0xFFFF; /* 注意保存的是上一个通道的数据 */
// g_tADS1148.AdcNow[g_tADS1148.Channel-1] = ADS1148ReadData();
// g_tADS1148.AdcNow[g_tADS1148.Channel-1] = g_tADS1148.Channel;
}
if (++g_tADS1148.Channel >= 8)
{
g_tADS1148.Channel = 0;
}
}
}