|
发表于 2017-5-17 13:09:12
|
显示全部楼层
你们好,想请教下AD7606通过FSMC采集到数据用串口打印的程序,方便帮忙看看吗?串口打开成功却没有打印数据
#include "ad7606.h"
#include "delay.h"
/* AD7606 FSMC总线地址,只能读,无需写 */
//#define AD7606_RESULT() *(u32 *)(0x6C000000)
//#define AD7606_RESULT() *(__IO int16_t *)0x6C000000
#define AD7606_RESULT() *(__IO uint16_t *)0x6C400000
AD7606_VAR_T g_tAD7606; /* 定义1个全局变量,保存一些参数 */
AD7606_FIFO_T g_tAdcFifo; /* 定义FIFO结构体变量 */
/* 片选PB4 */
#define AD_CS_0() GPIO_ResetBits(GPIOB, GPIO_Pin_4)
#define AD_CS_1() GPIO_SetBits(GPIOB, GPIO_Pin_4)
/* 读 */
#define AD_RD_0() GPIO_ResetBits(GPIOD, GPIO_Pin_4)
#define AD_RD_1() GPIO_SetBits(GPIOD, GPIO_Pin_4)
/* 设置过采样的GPIO*/
#define OS0_1() GPIOA->BSRRL = GPIO_Pin_8
#define OS0_0() GPIOA->BSRRH = GPIO_Pin_8
#define OS1_1() GPIOC->BSRRL = GPIO_Pin_9
#define OS1_0() GPIOC->BSRRH = GPIO_Pin_9
#define OS2_1() GPIOC->BSRRL = GPIO_Pin_8
#define OS2_0() GPIOC->BSRRH = GPIO_Pin_8
/* 启动AD转换的GPIO:PC7 TIM3,ch2 */
#define CONVST_1() GPIOC->BSRRL = GPIO_Pin_7
#define CONVST_0() GPIOC->BSRRH = GPIO_Pin_7
/* 判断忙否 */
#define BUSY PBout(15)
/* AD7606复位口线 : PB1 */
#define RESET_1() GPIOB->BSRRL = GPIO_Pin_1
#define RESET_0() GPIOB->BSRRH = GPIO_Pin_1
/*
开发板接线方法:
PD0/FSMC_D2
PD1/FSMC_D3
PD4/FSMC_NOE --- 读控制信号,OE = Output Enable , N 表示低有效
PD5/FSMC_NWE --- 写控制信号,AD7606 只有读,无写信号
PD8/FSMC_D13
PD9/FSMC_D14
PD10/FSMC_D15
PD14/FSMC_D0
PD15/FSMC_D1
PE7/FSMC_D4
PE8/FSMC_D5
PE9/FSMC_D6
PE10/FSMC_D7
PE11/FSMC_D8
PE12/FSMC_D9
PE13/FSMC_D10
PE14/FSMC_D11
PE15/FSMC_D12
PD7/FSMC_NE2 --- 主片选(TFT, OLED 和 AD7606)
几个控制用的GPIO
PA8/DCMI_D0/AD7606_OS0 ---> AD7606_OS0 OS2:OS0 选择数字滤波参数
PC9/DCMI_D1/AD7606_OS1 ---> AD7606_OS1
PC8/DCMI_D2/AD7606_OS2 ---> AD7606_OS2
PC7/DCMI_D3/AD7606_CONVST ---> AD7606_CONVST 启动ADC转换
PB1/DCMI_D5/AD7606_RESET ---> AD7606_RESET 复位
PB15/DCMI_D6/AD7606_BUSY ---> AD7606_BUSY 转换结束的信号
*/
static void AD7606_CtrlLinesConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能FSMC时钟 */
RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
/* 使能 GPIO时钟 */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG, ENABLE);
/* 设置 PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
PD.10(D15), PD.14(D0), PD.15(D1) 为复用推挽输出 */
GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/*
PE4/FSMC_A20 --- 和主片选一起译码
PE5/FSMC_A21 --- 和主片选一起译码
PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
PE.14(D11), PE.15(D12)
*/
GPIO_PinAFConfig(GPIOE, GPIO_PinSource4 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource5 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
GPIO_Pin_15;
GPIO_Init(GPIOE, &GPIO_InitStructure);
/* 设置 PD7(NCE2) 为复用推挽输出 */
GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* 配置几个控制用的GPIO
PA8/DCMI_D0/AD7606_OS0 ---> AD7606_OS0 OS2:OS0 选择数字滤波参数
PC9/DCMI_D1/AD7606_OS1 ---> AD7606_OS1
PC8/DCMI_D2/AD7606_OS2 ---> AD7606_OS2
PC7/DCMI_D3/AD7606_CONVST ---> AD7606_CONVST 启动ADC转换
PB1/DCMI_D5/AD7606_RESET ---> AD7606_RESET 复位
PB15/DCMI_D6/AD7606_BUSY ---> AD7606_BUSY 转换结束的信号
*/
{
/* 使能 GPIO时钟 */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;//OS1,OS2,Convt
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // OS0
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4; //reset cs
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
}
void AD7606_SetOS(AD7606_OS_E _ucOS)
{
g_tAD7606.ucOS = _ucOS;
switch (_ucOS)
{
case AD_OS_X2:
OS2_0();
OS1_0();
OS0_1();
break;
case AD_OS_X4:
OS2_0();
OS1_1();
OS0_0();
break;
case AD_OS_X8:
OS2_0();
OS1_1();
OS0_1();
break;
case AD_OS_X16:
OS2_1();
OS1_0();
OS0_0();
break;
case AD_OS_X32:
OS2_1();
OS1_0();
OS0_1();
break;
case AD_OS_X64:
OS2_1();
OS1_1();
OS0_0();
break;
case AD_OS_NO:
default:
g_tAD7606.ucOS = AD_OS_NO;
OS2_0();
OS1_0();
OS0_0();
break;
}
}
/*
*********************************************************************************************************
* 函 数 名: AD7606_Reset
* 功能说明: 硬件复位AD7606。复位之后恢复到正常工作状态。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void AD7606_Reset(void)
{
RESET_0(); /* 退出复位状态 */
RESET_1(); /* 进入复位状态 */
RESET_1(); /* 仅用于延迟。 RESET复位高电平脉冲宽度最小50ns。 */
RESET_1();
RESET_1();
RESET_0(); /* 退出复位状态 */
}
void AD7606_StartConvst(void)
{
/* page 7: CONVST 高电平脉冲宽度和低电平脉冲宽度最短 25ns */
/* CONVST平时为高 */
CONVST_0();
CONVST_0();
CONVST_0();
CONVST_1();
}
static void AD7606_FSMCConfig(void)
{
FSMC_NORSRAMInitTypeDef init;
FSMC_NORSRAMTimingInitTypeDef timing;
/*
AD7606规格书要求(3.3V时):RD读信号低电平脉冲宽度最短21ns,高电平脉冲最短宽度15ns。
按照如下配置 读数均正常。为了和同BANK的LCD配置相同,选择3-0-6-1-0-0
3-0-5-1-0-0 : RD高持续75ns, 低电平持续50ns. 1us以内可读取8路样本数据到内存。
1-0-1-1-0-0 : RD高75ns,低电平执行12ns左右,下降沿差不多也12ns. 数据读取正确。
FSMC_Bank1_NORSRAM2 configuration
*/
AD_CS_1();
timing.FSMC_AddressSetupTime = 3;
timing.FSMC_AddressHoldTime = 0;
timing.FSMC_DataSetupTime = 6;
timing.FSMC_BusTurnAroundDuration = 1;
timing.FSMC_CLKDivision = 0;
timing.FSMC_DataLatency = 0;
timing.FSMC_AccessMode = FSMC_AccessMode_A;
AD_CS_0();
AD_CS_1();
/*
LCD configured as follow:
- Data/Address MUX = Disable
- Memory Type = SRAM
- Data Width = 16bit
- Write Operation = Enable
- Extended Mode = Enable
- Asynchronous Wait = Disable
*/
init.FSMC_Bank = FSMC_Bank1_NORSRAM2;
init.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
init.FSMC_MemoryType = FSMC_MemoryType_SRAM;
init.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
init.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
init.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
init.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
init.FSMC_WrapMode = FSMC_WrapMode_Disable;
init.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
init.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
init.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
init.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
init.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
init.FSMC_ReadWriteTimingStruct = &timing;
init.FSMC_WriteTimingStruct = &timing;
FSMC_NORSRAMInit(&init);
/* - BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
}
void AD7606_ReadNowAdc(void)
{
// int i;
// delay_us(100);
//
//
// while(BUSY);//等待转换完成 AD7606_CS0 = 0;
// for(i=0;i<8;i++)
// {
// AD_RD_0();
// delay_us(30);
// g_tAD7606.sNowAdc= AD7606_RESULT();
// delay_us(10);
// AD_RD_1();
// delay_us(15);
// }
// AD_CS_1();
// CONVST_0();
// delay_us(10);
// AD_CS_1();
// delay_us(10);
AD_CS_0();
g_tAD7606.sNowAdc[0] = AD7606_RESULT(); /* 读第1路样本 */
g_tAD7606.sNowAdc[1] = AD7606_RESULT(); /* 读第2路样本 */
g_tAD7606.sNowAdc[2] = AD7606_RESULT(); /* 读第3路样本 */
g_tAD7606.sNowAdc[3] = AD7606_RESULT(); /* 读第4路样本 */
g_tAD7606.sNowAdc[4] = AD7606_RESULT(); /* 读第5路样本 */
g_tAD7606.sNowAdc[5] = AD7606_RESULT(); /* 读第6路样本 */
g_tAD7606.sNowAdc[6] = AD7606_RESULT(); /* 读第7路样本 */
g_tAD7606.sNowAdc[7] = AD7606_RESULT(); /* 读第8路样本 */
AD_CS_1();
}
void AD7606_EnterAutoMode(uint32_t _ulFreq) // 采样频率
{
/* 配置PC7为复用功能,TIM3_CH2 . 执行后bsp_InitAD7606()对PC7口线的配置将失效 */
{
GPIO_InitTypeDef GPIO_InitStructure;
/*时钟使能:定时器和GPIO*/
/* TIM3 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* GPIOC clock enable */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
/* GPIOH Configuration: PC7 -> TIM3 CH2 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能输出 必须
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化IO
/* Connect TIM3 pins to AF2 */
GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3); //复用映射
}
/* PC7输出PWM波 */
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
uint32_t uiTIMxCLK;
uint16_t usPrescaler;
uint16_t usPeriod;
uiTIMxCLK = SystemCoreClock / 2;
if (_ulFreq < 3000)
{
usPrescaler = 100 - 1; /* 分频比 = 10 */
usPeriod = (uiTIMxCLK / 100) / _ulFreq - 1; /* 自动重装的值 */
}
else /* 大于4K的频率,无需分频 */
{
usPrescaler = 0; /* 分频比 = 1 */
usPeriod = uiTIMxCLK / _ulFreq - 1; /* 自动重装的值 */
}
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = usPeriod;
TIM_TimeBaseStructure.TIM_Prescaler = usPrescaler;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //初始化时基单元
/* PWM1 Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //模式一
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 4; //比较器的值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //有效极性为低
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //通道初始化
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能预装载
TIM_ARRPreloadConfig(TIM3, ENABLE); //使能自动预装载立即生效
TIM_Cmd(TIM3, ENABLE); //使能定时器
}
/* 配置PB15, BUSY 作为中断输入口,下降沿触发 */
{
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
/* Enable SYSCFG clock
系统配置控制器主要用于管理对可执行代码的存储区的地址重映射。
选择以太网PHY接口以及管理GPIO的外部中断连接 必须开启的时钟
*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Configure PB15 pin as input floating */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Connect EXTI Line15 to PB15 pin */
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource15); //IO口与中断线的映射关系
/* Configure EXTI Line15 10 */
EXTI_InitStructure.EXTI_Line = EXTI_Line15;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //模式:中断还是事件
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
//EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //初始化中断线
/* Enable and set EXTI Line15 Interrupt to the lowest priority */
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); //中断优先级
}
}
/* 定时采集函数,中断里调用 */
void AD7606_ISR(void)
{
uint8_t i;
AD7606_ReadNowAdc();
for (i = 0; i < 8; i++)
{
g_tAdcFifo.sBuf[g_tAdcFifo.usWrite] = g_tAD7606.sNowAdc;
if (++g_tAdcFifo.usWrite >= ADC_FIFO_SIZE)
{
g_tAdcFifo.usWrite = 0;
}
if (g_tAdcFifo.usCount < ADC_FIFO_SIZE)
{
g_tAdcFifo.usCount++;
}
else
{
g_tAdcFifo.ucFull = 1; /* FIFO 满,主程序来不及处理数据 */
}
}
}
/*线15的中断服务函数*/
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line15) != RESET)
{
AD7606_ISR();
/* Clear the EXTI line 6 pending bit */
EXTI_ClearITPendingBit(EXTI_Line15);
}
}
/*判断FIFO中是否有新数据*/
uint8_t AD7606_HasNewData(void)
{
if (g_tAdcFifo.usCount > 0)
{
return 1;
}
return 0;
}
/*判断FIFO是否满*/
uint8_t AD7606_FifoFull(void)
{
return g_tAdcFifo.ucFull;
}
/*从FIFO中读取一个ADC值*/
uint8_t AD7606_ReadFifo(uint16_t *_usReadAdc)
{
if (AD7606_HasNewData())
{
*_usReadAdc = g_tAdcFifo.sBuf[g_tAdcFifo.usRead];
if (++g_tAdcFifo.usRead >= ADC_FIFO_SIZE)
{
g_tAdcFifo.usRead = 0;
}
//DISABLE_INT();
if (g_tAdcFifo.usCount > 0)
{
g_tAdcFifo.usCount--;
}
ENABLE_INT();
return 1;
}
return 0;
}
/*停止采集定时器*/
void AD7606_StopRecord(void)
{
TIM_Cmd(TIM3, DISABLE);
/* 将PC7 重新配置为普通输出口 */
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能 GPIO时钟 */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOH, &GPIO_InitStructure);
}
CONVST_1(); /* 启动转换的GPIO平时设置为高 */ \\
}
/*开始采集*/
void AD7606_StartRecord(uint32_t _ulFreq)
{
AD7606_StopRecord();
AD7606_Reset(); /* 复位硬件 */
AD7606_StartConvst(); /* 启动采样,避免第1组数据全0的问题 */
g_tAdcFifo.usRead = 0; /* 必须在开启TIM2之前清0 */
g_tAdcFifo.usWrite = 0;
g_tAdcFifo.usCount = 0;
g_tAdcFifo.ucFull = 0;
AD7606_EnterAutoMode(_ulFreq);
}
void bsp_InitAD7606(void)
{
AD7606_CtrlLinesConfig();
AD7606_FSMCConfig();
AD7606_SetOS(AD_OS_NO); /* 无过采样 */
AD7606_Reset();
CONVST_1(); /* 启动转换的GPIO平时设置为高 */
}
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "ad7606.h"
int main(void)
{
uint8_t ucFifoMode = 0;
uint8_t ucRefresh = 0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
// TIM2_Int_Init(1999,8399); /* 启动1个200ms的自动重装的定时器 */
uart_init(115200);//初始化串口
bsp_InitAD7606();
AD7606_StartConvst(); /* 启动1次转换 */
while(1)
{
if (ucRefresh == 1)
{
ucRefresh = 0;
/* 打印ADC采样结果 */
//printf("OS = %d\\r", g_tAD7606.ucOS);
printf("CH0 = %6d\\r\\n",g_tAD7606.sNowAdc[0]);
printf("CH7 = %6d\\r\\n",g_tAD7606.sNowAdc[7]);
// USART_SendData(USART1,(u16)g_tAD7606.sNowAdc[0]);
delay_ms(500);
// printf("CH1 = %6d\\r, CH2 = %6d\\r, CH3 = %6d\\r, CH4 = %6d\\r\\n",
// g_tAD7606.sNowAdc[0], g_tAD7606.sNowAdc[1], g_tAD7606.sNowAdc[2], g_tAD7606.sNowAdc[3]);
// printf("CH5 = %6d\\r, CH6 = %6d\\r, CH7 = %6d\\r, CH8 = %6d\\r",
// g_tAD7606.sNowAdc[4], g_tAD7606.sNowAdc[5], g_tAD7606.sNowAdc[6], g_tAD7606.sNowAdc[7]);
}
if (ucFifoMode == 0) /* AD7606 普通工作模式 */
{
// if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
// {
//
AD7606_ReadNowAdc(); /* 读取采样结果 */
AD7606_StartConvst(); /* 启动下次转换 */
ucRefresh = 1; /* 刷新显示 */
// }
}
};
} |
|