📄 main.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 + -