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

📄 main.c

📁 ARM7 lpc2132 利用快速傅里叶算法实现电容测量功能源代码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Chenxibing
** Modified date:		2005-02-19
** Version:
** Descriptions:		EasyARM2131开发板出厂演示程序
**
********************************************************************************************************/
#include "config.h"
#include "pin.h"
#include "data.h"
#include "function.h"
#include <stdio.h>
#include <math.h>


test_flags tst_run;
/*
*********************************************************************************************************
** 函数名称 :DelayNS()
** 函数功能 :长软件延时
*********************************************************************************************************
*/
void DelayNS (unsigned int dly)
{
	uint32 i;
	
	for ( ; dly>0; dly--)
		for (i=0; i<50000; i++);
}

void tst_avoid(void){
	//关闭所有继电器
	N200V_OFF; 
	DelayNS(5);
	MAIN_POWER_OFF; 
	VOL_TEST;
	tst_run.s_res_run=STOP;
	tst_run.l_res_run=STOP;
	tst_run.vol_run=STOP;
}



#define	UART_BPS	115200				// 串口通讯波特率
/*
*********************************************************************************************************
** 函数名称 :UART0_Init()
** 函数功能 :串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率115200。
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_Init (void)
{
	uint16 Fdiv;
	
	PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05;	// 设置I/O连接到UART0
	
	U0LCR = 0x83;							// DLAB=1,允许设置波特率
	Fdiv  = (Fpclk / 16) / UART_BPS;		// 设置波特率
	U0DLM = Fdiv / 256;
	U0DLL = Fdiv % 256;
	U0LCR = 0x03;
}

extern  void __irq IRQ_Timer0 (void);

void Timer0_Init (void)
{
	/* 定时器0初始化 */
	T0TC   = 0;			/* 定时器设置为0										*/
	T0PR   = 0;			/* 时钟不分频											*/
	T0MCR  = 0x03;		/* 设置T0MR0匹配后复位T0TC,并产生中断标志				*/
	T0MR0  = Fpclk / 102400;/* 10uS 定时*/
	T0TCR  = 0x01;		/* 启动定时器 */
	
	/* 设置定时器0中断IRQ */
	VICIntSelect = 0x00;				/* 所有中断通道设置为IRQ中断	*/
	VICVectCntl0 = 0x20 | 0x04;			/* 设置定时器0中断通道分配最高优先级	*/
	VICVectAddr0 = (uint32)IRQ_Timer0;		/* 设置中断服务程序地址	*/
	VICIntEnable = 1 << 0x04;			/* 使能定时器0中断*/				
}

void Adc0_Init (void)
{
	/* 进行ADC模块设置 */
	ADGSM = (1 << 16); 				// burst
	AD0CR = (1 << 0)			|	// SEL=1,选择通道0
		((Fpclk / 3000000 - 1) << 8)	|	// CLKDIV=Fpclk/1000000-1,转换时钟为3MHz
		(1 << 16)			|	// BURST=1,软件控制转换操作
		(0 << 17)			|	// CLKS=0, 使用11clock转换
		(1 << 21)			|  	// PDN=1,正常工作模式
		(0 << 22)			|  	// TEST1:0=00,正常工作模式
		(1 << 24)			|	// START=1,直接启动ADC转换
		(0 << 27);			 	// 直接启动ADC转换时,此位无效
	DelayNS(10);
}
/*
*********************************************************************************************************
** 函数名称 :PWM_Init()
** 函数功能 :PWM初始化 
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void PWM_Init()
{
	
	PINSEL0 |= ((2 << 14) |	// P0.7连接PWM2
		   (2 << 16));	// P0.8连接PWM4
	

	
	PWMPR  = 0x00;			// 对pclk进行分频,PWM计数频率为Fpclk的1/10
	PWMMCR = 0x02;			// PWMMR0与PWMTC匹配时复位PWMTC
	PWMPCR = (1 << 2)  |	// PWM2双边沿控制
		 		(1 << 4)  |	// PWM4双边沿控制
		 		(1 << 10) |	// 使能PWM2输出
		 		(1 << 12);	// 使能PWM4输出

	PWMMR0 = 100;			// PWM速率控制/计数初值
	/* 设置双边沿脉冲的脉宽和位置 */
	PWMMR1 = 5;						// PWM2的位置
	PWMMR2 = 45;
	PWMMR3 = 55;				// PWM4的位置
	PWMMR4 = 95;
	 
	PWMLER = 0x7F;			// 锁存所有PWM匹配值
	PWMTCR = 0x02;			// 复位PWMTC
	PWMTCR = 0x09;			// 使能PWM
}

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :EasyARM2131开发板出厂演示程序。
** 测试说明 :
*********************************************************************************************************
*/
int main (void)
{
	short cmd,tmp;
	
/*GPIO init*/
	PINSEL1 = 0x00000000;			/* 设置管脚连接GPIO	*/
	PINSEL0 = 0x00000000;			/* 设置管脚连接GPIO	*/
	PINSEL2 = 0x00000000;
	IO0DIR |= ((1 << 7) | (1 << 8));/*P0.7 P0.8 */
	IO0CLR = (0x3<<7); /*P0.7=0 P0.8=0 PWM4 && PWM2*/
/*cap*/	
	PINSEL1 |= (1 << 19);			/* DAC en */
	PINSEL1 |= (1 << 22);			// ADC P0.27连接到AD0.0
	IO0DIR &=(~DMM_DATA_READY);
	IO0DIR  &= ~(DMM_D0|DMM_D1|DMM_D2|DMM_D3);
	IO0DIR |= DMM_READ;
	IO1DIR |= DMM_WRITE;
	
	IO0SET = DMM_READ;
	IO1SET = DMM_WRITE;
	
	IO1DIR |= DMM_A0;
	IO0DIR |= DMM_A1;
	IO0DIR |= DMM_A2;
	
	/*cap range select*/	
	IO0DIR |= CAP_S0;
	IO0DIR |= CAP_S1;
	IO1DIR |= CAP_S2;
	IO1DIR |= CAP_S3;
	
	SEL_CAP_100R;//电容测试档选1K档
	SEL_CAP_AMPLIFY1;//电容测试选择1倍放大
/*large resistor*/
	IO0DIR|=M_RES00;
	IO0DIR|=M_RES01;// ok!
	/*select Rx/2K range*/
	IO0SET = M_RES00;
	IO0SET = M_RES01;// ok!
/**/
	IO1DIR |= VOL_M;
	IO1DIR |= MRES_TST;
/*voltage resistor switch*/
	IO0DIR |= NO_VOLT;
	IO0DIR |= L_RESISTOR_S;

/*other*/
	
	IRQEnable(); 
	Adc0_Init();								// 打开中断	
	UART0_Init();	
	Timer0_Init();	 
	PWM_Init();
	
/*init finish*/						
	UART0_SendStr("DMM\r\n");							// 向串口发送字符串
	IO0DIR |= DMM_POWER_SW;	
	//--------------------------------------------------------------------------------------------------
	// 测试
	//--------------------------------------------------------------------------------------------------	
	tst_avoid();
	
	while (1){	
		if(get_cmd(&tmp)==0)
			cmd=tmp;
		switch(cmd){
			case CMD_CAP_TEST:
								N200V_OFF;DelayNS(5); MAIN_POWER_ON; VOL_TEST; cap_test(); 					
								break;
			case CMD_L_RES_TEST:
								MAIN_POWER_ON; N200V_ON;  L_RES_TEST; L_res_test(); 	
								break;
			case CMD_S_RES_TEST:
								N200V_OFF;DelayNS(5); MAIN_POWER_ON; S_RES_TEST; S_res_test();		
							 	break;
			case CMD_DC_VOL_TEST:	
								N200V_OFF;DelayNS(5); MAIN_POWER_ON; VOL_TEST; vol_test(DC_TEST);	
								break;
			case CMD_AC_VOL_TEST:
								N200V_OFF;DelayNS(5); MAIN_POWER_ON; VOL_TEST; vol_test(AC_TEST);	
							 	break;
							 	
			case CMD_AVOID:		N200V_OFF;DelayNS(5); MAIN_POWER_OFF; tst_avoid();					
								break;
		}
	}
    return 0;
}
/*******************;**************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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