⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.h

📁 使用TI DSP 2407A 进行开发的源代码
💻 H
字号:

#include "DSP240x_Device.h"





/*
   This module defines the bit positions in various AD registers. For other
   registers more definitions are needed.
*/


//  ADCTRL1


#define   ADC_RESET       0x4000

#define   ADC_SOFT        0x2000
#define   ADC_FREE        0x1000

//采样时间选择位
#define  ACQ_PS_0          0x0000
#define  ACQ_PS_1          0x0100
#define  ACQ_PS_2          0x0200
#define  ACQ_PS_3          0x0300
#define  ACQ_PS_4          0x0400
#define  ACQ_PS_5          0x0500
#define  ACQ_PS_6          0x0600
#define  ACQ_PS_7          0x0700
#define  ACQ_PS_8          0x0800
#define  ACQ_PS_9          0x0900
#define  ACQ_PS_10         0x0A00
#define  ACQ_PS_11         0x0B00
#define  ACQ_PS_12         0x0C00
#define  ACQ_PS_13         0x0D00
#define  ACQ_PS_14         0x0E00
#define  ACQ_PS_15         0x0F00

//转换时钟预定标位
#define   CPS             0x0080

//连续转换位
#define   CONT_RUN        0x0040

//ADC中断优先级
#define   ADC_INT_PRI     0x0020

//排序器工作模式位
#define   ADC_SEQ_ACSC        0x0010
//偏差校准使能位
#define   CAL_ENA         0x0008

//桥使能位
#define   BRG_ENA         0x0004
//VREFHI,VREFLO选择位
#define   HI_LO           0x0002

//自测试使能位
#define   STEST_ENA       0x0001




//  ADCTRL2


//EVB 的SOC信号为级连排序器使能位
#define   EVB_SOC_SEQ      0x8000


//复位排序器1/启动校准转换方式位
#define   RST_SEQ1         0x4000
#define   STRT_CAL         0x4000

//启动SERQ1转换位
#define   SOC_SEQ1         0x2000

//
#define   SEQ1_BSY         0x1000


#define   INT_ENA_SEQ1_0    0x0000
#define   INT_ENA_SEQ1_1    0x0400
#define   INT_ENA_SEQ1_2    0x0800


#define   INT_FLAG_SEQ1    0x0200


//事件管理器A对SEQ1产生SOC信号的屏蔽位
#define   EVA_SOC_SEQ1     0x0100

//外部信号对SEQ1的启动转换位
#define   EXT_SOC_SEQ1     0x0080

//复位排序器1/启动校准转换方式位
#define   RST_SEQ2         0x0040
//启动SERQ2转换位
#define   SOC_SEQ2         0x0020


#define   SEQ2_BSY         0x0010

#define   INT_ENA_SEQ2_0    0x0000
#define   INT_ENA_SEQ2_1    0x0004
#define   INT_ENA_SEQ2_2    0x0008


#define   INT_FLAG_SEQ2    0x0002

//事件管理器B对SEQ2产生SOC信号的屏蔽位
#define   EVB_SOC_SEQ2     0x0001


/*
  MAXCONV
*/

#define   MAXCONV_16        0xF
#define   MAXCONV_15        0xE
#define   MAXCONV_14        0xD
#define   MAXCONV_13        0xC
#define   MAXCONV_12        0xB
#define   MAXCONV_11        0xA
#define   MAXCONV_10        0x9
#define   MAXCONV_9         0x8
#define   MAXCONV_8         0x7

#define   MAXCONV_7          0x6
#define   MAXCONV_6          0x5
#define   MAXCONV_5          0x4
#define   MAXCONV_4          0x3
#define   MAXCONV_3          0x2
#define   MAXCONV_2          0x1
#define   MAXCONV_1          0x0


/*
  AUTO_SEQ_SR
*/


#define  SEQ_CNTR_15        0x0F00
#define  SEQ_CNTR_14        0x0E00
#define  SEQ_CNTR_13        0x0D00
#define  SEQ_CNTR_12        0x0C00
#define  SEQ_CNTR_11        0x0B00
#define  SEQ_CNTR_10        0x0A00
#define  SEQ_CNTR_9         0x0900
#define  SEQ_CNTR_8         0x0800

#define  SEQ_CNTR_7        0x0700
#define  SEQ_CNTR_6        0x0600
#define  SEQ_CNTR_5        0x0500
#define  SEQ_CNTR_4        0x0400
#define  SEQ_CNTR_3        0x0300
#define  SEQ_CNTR_2        0x0200
#define  SEQ_CNTR_1        0x0100
#define  SEQ_CNTR_0        0x0000


#define  AUTO_SEQ_SR2_7        0x0070
#define  AUTO_SEQ_SR2_6        0x0060
#define  AUTO_SEQ_SR2_5        0x0050
#define  AUTO_SEQ_SR2_4        0x0040
#define  AUTO_SEQ_SR2_3        0x0030
#define  AUTO_SEQ_SR2_2        0x0020
#define  AUTO_SEQ_SR2_1        0x0010
#define  AUTO_SEQ_SR2_0        0x0000

#define  AUTO_SEQ_SR2_7        0x0070
#define  AUTO_SEQ_SR2_6        0x0060
#define  AUTO_SEQ_SR2_5        0x0050
#define  AUTO_SEQ_SR2_4        0x0040
#define  AUTO_SEQ_SR2_3        0x0030
#define  AUTO_SEQ_SR2_2        0x0020
#define  AUTO_SEQ_SR2_1        0x0010
#define  AUTO_SEQ_SR2_0        0x0000

#define  AUTO_SEQ_SR_15        0x000F
#define  AUTO_SEQ_SR_14        0x000E
#define  AUTO_SEQ_SR_13        0x000D
#define  AUTO_SEQ_SR_12        0x000C
#define  AUTO_SEQ_SR_11        0x000B
#define  AUTO_SEQ_SR_10        0x000A
#define  AUTO_SEQ_SR_9         0x0009
#define  AUTO_SEQ_SR_8         0x0008

#define  AUTO_SEQ_SR_7        0x0007
#define  AUTO_SEQ_SR_6        0x0006
#define  AUTO_SEQ_SR_5        0x0005
#define  AUTO_SEQ_SR_4        0x0004
#define  AUTO_SEQ_SR_3        0x0003
#define  AUTO_SEQ_SR_2        0x0002
#define  AUTO_SEQ_SR_1        0x0001
#define  AUTO_SEQ_SR_0        0x0000


#define  AUTO_SEQ_SR1_7        0x0007
#define  AUTO_SEQ_SR1_6        0x0006
#define  AUTO_SEQ_SR1_5        0x0005
#define  AUTO_SEQ_SR1_4        0x0004
#define  AUTO_SEQ_SR1_3        0x0003
#define  AUTO_SEQ_SR1_2        0x0002
#define  AUTO_SEQ_SR1_1        0x0001
#define  AUTO_SEQ_SR1_0        0x0000



#define  CONV_NUM   15




void AD_Init(void);

//ADCTRL1参数设定,具体见上表
//使用方法:ADCTRL1_PARA_SET(ACQ_PS_x),ADC时钟的预定标系数
//ADCTRL1_PARA_SET(CPS),ADC转换逻辑时钟的预定标系数
//ADCTRL1_PARA_SET(CONT_RUN),设定排序器工作模式
//ADCTRL1_PARA_SET(SEQ_ACSC),设定级连排序器工作方式
//ADCTRL1_PARA_SET(ADC_RESET),ADC模块软件复位
//ADCTRL1_PARA_SET(CAL_ENA),ADC偏差校准使能位
//ADCTRL1_PARA_SET(BRG_ENA),ADC桥使能位
//ADCTRL1_PARA_SET(HI_LO),VREFHI作为ADC输入的值
//ADCTRL1_PARA_SET(STEST_ENA),使能自测试模式

void ADCTRL1_PARA_SET(unsigned int PARA);


//ADCTRL1参数设定,具体见上表
//使用方法:ADCTRL1_PARA_SET(ACQ_PS_x),ADC时钟的预定标系数
//ADCTRL1_PARA_UNSET(CPS),ADC转换逻辑时钟的预定标系数为CLK/2;
//ADCTRL1_PARA_UNSET(CONT_RUN),设定排序器工作模式
//ADCTRL1_PARA_UNSET(SEQ_ACSC),设定级连排序器工作方式
//ADCTRL1_PARA_UNSET(ADC_RESET),ADC模块软件复位
//ADCTRL1_PARA_UNSET(CAL_ENA),ADC偏差校准使能位
//ADCTRL1_PARA_UNSET(BRG_ENA),ADC桥使能位
//ADCTRL1_PARA_UNSET(HI_LO),VREFHI作为ADC输入的值
//ADCTRL1_PARA_UNSET(STEST_ENA),使能自测试模式

void ADCTRL1_PARA_UNSET(unsigned int PARA);
//ADCTRL2参数设定,
//使用方法:ADCTRL2_PARA_SET(EVB_SOC_SEQ),允许级连的排序器SEQ被EVB启动
//ADCTRL2_PARA_SET(RST_SEQ1),立即复位排序器
//ADCTRL2_PARA_SET(SOC_SEQ1),通过向这位写1来软件启动SEQ1转换
//ADCTRL2_PARA_SET(INT_ENA_SEQ1_X),SEQ1的中断方式使能控制位
//ADCTRL2_PARA_SET(EVA_SOC_SEQ1),允许SEQ1\SEQ被EVA的触发源启动
//ADCTRL2_PARA_SET(EXT_SOC_SEQ1),允许外部的ADCSOC引脚上的信号启动ADC自动转换
//ADCTRL2_PARA_SET(RST_SEQ2),复位排序器2
//ADCTRL2_PARA_SET(SOC_SEQ2),软件触发启动排序器2
//ADCTRL2_PARA_SET(INT_ENA_SEQ2_X),SEQ2的中断方式使能控制位
//ADCTRL2_PARA_SET(EVB_SOC_SEQ2),允许SEQ2被EVB的触发源启动

unsigned int ADCTRL1_PARA_GET(unsigned int PARA);

void ADCTRL2_PARA_SET(unsigned int PARA);


//ADCTRL2参数设定,
//使用方法:ADCTRL2_PARA_SET(EVB_SOC_SEQ),允许级连的排序器SEQ被EVB启动
//ADCTRL2_PARA_SET(RST_SEQ1),立即复位排序器
//ADCTRL2_PARA_SET(SOC_SEQ1),通过向这位写1来软件启动SEQ1转换
//ADCTRL2_PARA_SET(INT_ENA_SEQ1_X),SEQ1的中断方式使能控制位
//ADCTRL2_PARA_SET(EVA_SOC_SEQ1),允许SEQ1\SEQ被EVA的触发源启动
//ADCTRL2_PARA_SET(EXT_SOC_SEQ1),允许外部的ADCSOC引脚上的信号启动ADC自动转换
//ADCTRL2_PARA_SET(RST_SEQ2),复位排序器2
//ADCTRL2_PARA_SET(SOC_SEQ2),软件触发启动排序器2
//ADCTRL2_PARA_SET(INT_ENA_SEQ2_X),SEQ2的中断方式使能控制位
//ADCTRL2_PARA_SET(EVB_SOC_SEQ2),允许SEQ2被EVB的触发源启动

void ADCTRL2_PARA_UNSET(unsigned int PARA);



//ADCTRL2参数获取,
//使用方法:
//ADCTRL2_PARA_SET(SEQ1_BSY),测试SEQ1是否处于忙状态
//ADCTRL2_PARA_GET(INT_FLAG_SEQ1),测试SEQ!是否发生过中断事件
//ADCTRL2_PARA_SET(SEQ2_BSY),测试SEQ2是否处于忙状态
//ADCTRL2_PARA_GET(INT_FLAG_SEQ2),测试SEQ2是否发生过中断事件

//是,返回1,否则返回0


unsigned int ADCTRL2_PARA_GET(unsigned int PARA);


void ADC_CONV_NUM_SET(unsigned int CONV_NUM_VAL);
void ADC_CONV_RESULT_GET(unsigned int *p);
void READ_AD(unsigned int *p);
void AD_Test(void);

void light_value(unsigned int *p,unsigned int maxconv_num);


extern unsigned int nNewConvert;


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -