Easy KIt 板例程里面有1路AD测量的程序,我就不介绍了。在用AD前我们有必要知道一下MB9BF506的AD资源。16路AD通道(AN00------AN15),3路AD转化器(ADC unit0、ADC unit1、ADC unit2)。16个AD通道都可以配置到任意一个AD转化器.
而我们的DIY板有两路AD通道(AN14和AN15),怎么才能测量两路AD呢?方法有两种:
1、用1个AD转化器测量2个AD通道。先测AD14通道,测完AD14通道后,在启动AD15通道测量,依次循环。这个方法改起来比较容易,就不说了。
2、用2个AD转化器测量2个AD通道。AD14通道用ADC unit0测,AD15通道用ADC unit1测。下面已第二种方法为例讲解一下。
2.1 Easy KIt 板例程里面1路AD通道用了ADC unit0转化器。所以要用ADC unit1转化器需要在“adc.h”中添加ADC unit1转化器寄存器(原“adc.h”头文件只有ADC unit0转化器寄存器)。
下面为ADC unit0寄存器
#define BASEADD_ADC_U0 0x40027000
/* A/DC unit0 */
#define IOREG_ADSR_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x000)
#define IOREG_ADCR_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x001)
#define IOREG_SFNS_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x008)
#define IOREG_SCCR_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x009)
#define IOREG_SCFD_U0 *(volatile unsigned long*)(BASEADD_ADC_U0 + 0x00C)
#define IOREG_SCIS2_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x010)
#define IOREG_SCIS3_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x011)
#define IOREG_SCIS0_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x014)
#define IOREG_SCIS1_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x015)
#define IOREG_PFNS_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x018)
#define IOREG_PCCR_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x019)
#define IOREG_PCFD_U0 *(volatile unsigned short*)(BASEADD_ADC_U0 + 0x01C)
#define IOREG_PCIS_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x020)
#define IOREG_CMPCR_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x024)
#define IOREG_CMPD_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x025)
#define IOREG_ADSS2_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x028)
#define IOREG_ADSS3_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x029)
#define IOREG_ADSS0_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x02C)
#define IOREG_ADSS1_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x02D)
#define IOREG_ADST1_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x030)
#define IOREG_ADST0_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x031)
#define IOREG_ADCT_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x034)
#define IOREG_PRTSL_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x038)
#define IOREG_SCTSL_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x039)
#define IOREG_ADCEN_U0 *(volatile unsigned char*)(BASEADD_ADC_U0 + 0x03C)
添加ADC unit1寄存器:
#define BASEADD_ADC_U1 0x40027100
/* A/DC unit1 */
#define IOREG_ADSR_U1 *(volatile unsigned char*)(BASEADD_ADC_U1 + 0x000)
...........后面A/DC unit1的其余寄存器的照着A/DC unit0寄存器添加进去。
2.2 修改"ADC.C"里面的AD初始化程序,使用查询的方法,先将Easy KIt 板例程中的AN08改为AD14通道。初始化程序中将AN14通道分配到A/DC unit0。按照AN14的方法添加AN15通道到A/DC unit1。
2.3 在“main.c”添加AD15转换结果的查询程序,即可完成2路AD通道同时采样。
[ 本帖最后由 ltbytyn 于 2012-7-23 13:09 编辑 ]
|