初级会员

- 积分
- 51
- 金钱
- 51
- 注册时间
- 2020-10-10
- 在线时间
- 15 小时
|

楼主 |
发表于 2021-7-29 23:56:26
|
显示全部楼层
void AD7606_StartConv(void)
{
/* 上升沿开始转换,低电平持续时间至少25ns */
AD_CONVST_LOW();
delay_us(1);
AD_CONVST_HIGH();
}
/*返回16位AD采样数据*/
uint16_t AD7606_ReceiveData(void)
{
uint8_t count=0;
uint16_t data=0;
AD_SCK_HIGH();
for(count=0;count<16;count++)//读出16位数据
{
data<<=1;
AD_SCK_LOW(); //下降沿有效
if(AD_MISO_IN()== 1)
data++;
AD_SCK_HIGH();
}
return(data);
}
void AD7606_IRQSrc(void)
{
uint8_t i;
uint16_t usReadValue;
while(BUSY_STATE() == NOT_BUSY)
{
}
AD_CS_LOW();
for (i = 0; i < CH_NUM; i++)
{
usReadValue = AD7606_ReceiveData();
if (g_tAD.usWrite < FIFO_SIZE)
{
g_tAD.usBuf[g_tAD.usWrite] = usReadValue;
++g_tAD.usWrite;
}
}
AD_CS_HIGH();
AD7606_StartConv();//立即开始下一次转换
}
#define BUSY 0
#define NOT_BUSY 1
#define BUSY_STATE() GPIO_ReadInputDataBit(AD_BUSY_GPIO_PORT,AD_BUSY_PIN)
#define FIFO_SIZE 1*1024*2 /* 大小不要超过48K (CPU内部RAM 只有64K) */
/* AD数据采集缓冲区 */
typedef struct
{
uint16_t usRead;
uint16_t usWrite;
uint16_t usCount;
uint16_t usBuf[FIFO_SIZE];
}FIFO_T;
这就是查询BUSY引脚后读取电压的函数,把电压读到usBuf[FIFO_SIZE]这个数组里,转换完之后把g_tAD.usWrite清0就行。我也是依照例程改的,其他写时序的代码应该都差不多的。 |
|