/**********************************************************************************
* 文件名 :ad7656.c
* 描述 :spi传输ad7656采集的数据
* 硬件连接 ----------------------------
* | 见PCB677 |
* |----------------------------|
* 库版本 :ST3.5.0
* 作者 :XQM
**********************************************************************************/
#include "ad7656.h"
#include "hardware.h"
// #include "common.h"
#include "main.h"
void PIN_GPIOA_Config(void)
{
GPIO_InitTypeDef GPIOA_InitStructure;
/*开启GPIOA的外设时钟,72M*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
GPIOA_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
GPIOA_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOA_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIOA_InitStructure);
}
/*
* 函数名:GPIOB_Config
* 描述 :配置控制用到的I/O口
* 输入 :无
* 输出 :无
*/
void PIN_GPIOB_Config(void)
{
GPIO_InitTypeDef GPIOB_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
GPIOB_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1 |GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11;
GPIOB_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOB_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIOB_InitStructure);
}
/*
* 函数名:GPIOC_Config
* 描述 :配置控制用到的I/O口
* 输入 :无
* 输出 :无
*/
void PIN_GPIOC_Config(void)
{
GPIO_InitTypeDef GPIOC_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
GPIOC_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_7;
GPIOC_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOC_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIOC_InitStructure);
}
/*
* 函数名:GPIOD_Config
* 描述 :配置控制用到的I/O口
* 输入 :无
* 输出 :无
*/
void PIN_GPIOD_Config(void)
{
GPIO_InitTypeDef GPIOD_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIOD_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIOD_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIOD_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIOD_InitStructure);
}
/*
* 函数名:GPIOE_Config
* 描述 :配置控制用到的I/O口
* 输入 :无
* 输出 :无
*/
void PIN_GPIOE_Config(void)
{
GPIO_InitTypeDef GPIOE_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);
GPIOE_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6|GPIO_Pin_7;
GPIOE_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出模式
GPIOE_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIOE_InitStructure);
// GPIOE_InitStructure.GPIO_Pin = GPIO_Pin_5;
// GPIOE_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //推挽输出模式
// GPIOE_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_Init(GPIOE, &GPIOE_InitStructure);
}
void myDelay_us(unsigned int nus)
{
unsigned char i, j;
for(i = nus; i > 0; i--)
for(j = 72; j > 0; j--)
__nop();
}
void myDelay_ms(unsigned int nms)
{
unsigned int i;
for(i = nms; i > 0; i--)
myDelay_us(400);
}
/*******************************************************************************
* Function Name : PIN_Init
* Description : Initializes the peripherals
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void AD7656_Init(void)
{
PIN_GPIOD_Config();
PIN_GPIOE_Config();
RESET_PIN(PORT_AD_E,PIN_RANGE);
GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)|0X0E)); //同时上拉ABC
SET_PIN(PORT_AD_E,PIN_RESET);
myDelay_us(5);
RESET_PIN(PORT_AD_E,PIN_RESET);
GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)&0XF1));//同时下拉ABC
RESET_PIN(PORT_AD_E,PIN_RANGE);
}
/*******************************************************************************
* Function Name : PIN_Sample
* Description : Initializes the peripherals
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void AD7656_Sample( unsigned num)
{
int i;
//启动AD转换
// RESET_PIN(PORT_AD_E,PIN_CONVERTA);
// RESET_PIN(PORT_AD_E,PIN_CONVERTB);
// RESET_PIN(PORT_AD_E,PIN_CONVERTC);
GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)&0XF1));//同时下拉ABC
SET_PIN(PORT_AD_E,PIN_CS);
SET_PIN(PORT_AD_E,PIN_READ);
myDelay_us(2);
// SET_PIN(PORT_AD_E,PIN_CONVERTA);
// SET_PIN(PORT_AD_E,PIN_CONVERTB);
// SET_PIN(PORT_AD_E,PIN_CONVERTC);
GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)|0X0E)); //同时上拉ABC
do
{
__nop();
}while(GET_PIN(PORT_AD_E,PIN_BUSY));
//-----------读取转换结果-----------
RESET_PIN(PORT_AD_E,PIN_CS);
for(i=0;i<num;i++)
{
RESET_PIN(PORT_AD_E,PIN_READ);
// __nop();
// __nop();
// __nop();
// AdConvertDataBuffer[i].dbyte=i;
AdConvertDataBuffer[i].dsByte=GPIO_ReadInputData(PORT_AD_DATA);
RESET_PIN(PORT_AD_E,PIN_READ);
SET_PIN(PORT_AD_E,PIN_READ);
}
myDelay_us(1);
SET_PIN(PORT_AD_E,PIN_CS);
}
void AD7656_RESET(void)
{
unsigned char j;
GPIOE->BRR = PIN_RANGE;
GPIOE->BSRR = PIN_RESET;
for(j=0;j<5;j++);
GPIOE->BRR =PIN_RESET;
}
void AD76756_ADC(void)
{
unsigned char j;
// GPIOE->BRR = PIN_CONVST;//A
// for(j=0;j<2;j++);
// GPIOE->BSRR = PIN_CONVST;//A
// for(j=0;j<1;j++);
GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)&0XF1));//同时下拉ABC
// __nop();
for(j=0;j<60;j++);
// SET_PIN(PORT_AD_E,PIN_CONVERTA);
// SET_PIN(PORT_AD_E,PIN_CONVERTB);
// SET_PIN(PORT_AD_E,PIN_CONVERTC);
GPIO_Write(PORT_AD_E, (GPIO_ReadOutputData(PORT_AD_E)|0X0E)); //同时上拉ABC
while((GPIOE->IDR & PIN_BUSY))
;
GPIOE->BRR = PIN_CS;//CS
GPIOE->BRR = PIN_READ;//RD
GPIOD->ODR=0xffff;
AdConvertDataBuffer[0].dsByte=GPIOD->IDR;
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BRR = PIN_READ;//RD
GPIOD->ODR=0xffff;
AdConvertDataBuffer[1].dsByte=GPIOD->IDR;
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BRR = PIN_READ;//RD
GPIOD->ODR=0xffff;
AdConvertDataBuffer[2].dsByte=GPIOD->IDR;
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BRR = PIN_READ;//RD
GPIOD->ODR=0xffff;
AdConvertDataBuffer[3].dsByte=GPIOD->IDR;
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_READ;//RD
GPIOE->BSRR = PIN_CS;
}
- 1
- 2
- 3
前往页