📄 main.c
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.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:
** Modified date:
** Version:
** Descriptions:
**
*********************************************************************************************************/
#include "main.h"
#define TaskAdcSend_ID 17 /* 任务的ID */
#define TaskAdcSend_PRIO TaskAdcSend_ID /* 任务的优先级 */
#define TaskAdcSend_STACK_SIZE 512 /* 定义用户堆栈长度 */
#define TaskBeep_ID 18 /* 任务的ID */
#define TaskBeep_PRIO TaskBeep_ID /* 任务的优先级 */
#define TaskBeep_STACK_SIZE 512 /* 定义用户堆栈长度 */
OS_STK TaskAdcSend_STACK[TaskAdcSend_STACK_SIZE];
OS_STK TaskBeep_STACK[TaskBeep_STACK_SIZE];
OS_EVENT *Sem1;
void TaskAdcSend(void *pdata);
void TaskBeep(void *pdata);
#define KEY1 1 << 12 /* P0.12为中断输入脚 */
#define test
/*********************************************************************************************************
** Function name: TimeDly
** Descriptions: 软件延时
** Input: dly
** Output: 无
*********************************************************************************************************/
void TimeDly(uint32 dly)
{
uint32 i,j;
for(i = 0; i < dly; i++)
for(j = 0; j < 10000; j++);
}
/********************************************************************************************************
** Function name: ExtInt_Exception
** Descriptions: GPIO管脚P0.12出发的外部中断的中断服务程序
** Input: 无
** Output: 无
*********************************************************************************************************/
void ExtInt_Exception(void)
{
TimeDly(30); /* 软件延时,消除抖动 */
OSSemPost(Sem1);
IO0IntClr |= KEY1; /* 清零P0.12中断 */
VICVectAddr = 0; /* 向量中断结束 */
}
/*********************************************************************************************************
** Function name : main
** Descriptions : 主函数
** Input : 无
** Output : 无
** Created Date : 2006-04-11
********************************************************************************************************/
int main (void)
{
OSInit();
OSTaskCreateExt(TaskAdcSend,
(void *)0,
&TaskAdcSend_STACK[TaskAdcSend_STACK_SIZE-1],
TaskAdcSend_PRIO,
TaskAdcSend_ID,
&TaskAdcSend_STACK[0],
TaskAdcSend_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(TaskBeep,
(void *)0,
&TaskBeep_STACK[TaskBeep_STACK_SIZE-1],
TaskBeep_PRIO,
TaskBeep_ID,
&TaskBeep_STACK[0],
TaskBeep_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSStart();
}
/*******************************************************************************************************
** Function name: Task_AdcSend
** Descriptions: 无
** Input: 无
** Output: 无
********************************************************************************************************/
void TaskAdcSend (void *pdata)
{
uint8 err;
uint32 ADC_Data;
char str[20];
pdata = pdata;
TargetInit();
PINSEL0 &= ~(0X03<<24);
IO0IntEnF |= KEY1; /* 设置P0.12为下降沿中断 */
IO0IntClr = 0xffffffff; /* 首先清零中断标志位 */
SetVICIRQ(17,1,(uint32)ExtInt_Exception); /* 分配外部中断3的优先级为1, */
/* GPIO触发的外部中断和外部中 */
/* 断3同用一个中断号 */
Sem1 = OSSemCreate(0);
PCONP |=1 <<12; /* 打开ADC的功率控制位 */
PINSEL1 = (PINSEL1&0xffff3fff)|(0x01<<14); /* 设置P0.23为AIN0[0]功能 */
/*
* 进行ADC模块设置
*/
AD0CR = (1<<0) | /* SEL = 0X01,选择通道0 */
((Fpclk / 1000000 - 1) << 8)| /* CLKDIV=Fpclk/1000000-1, */
/* 转换时钟为1MHz */
(0 << 16)| /* BURST=0,软件控制转换操作 */
(0 << 17)| /* CLKS=0, 使用11clock转换 */
(1 << 21)| /* PDN=1,正常工作模式 */
(1 << 24); /* START=1,直接启动ADC转换 */
OSTimeDly(OS_TICKS_PER_SEC/100);
ADC_Data = ADDR0; /* 读取ADC结果,并清除DONE标志位*/
BUZZER_Set();
OSTimeDly(OS_TICKS_PER_SEC/10);
BUZZER_Clr();
OSTimeDly(OS_TICKS_PER_SEC/10);
while(1)
{
OSSemPend(Sem1,0,&err);
AD0CR |= 1 << 24; /* 进行第一次转换 */
while ((AD0STAT & (1<<0)) == 0); /* 等待AIN0转换结束 */
ADC_Data = ADDR0; /* 读取ADC结果 */
AD0CR |= 1 << 24; /* 再次启动转换 */
while ((AD0STAT & (1<<0)) == 0); /* 等待AIN0转换结束 */
ADC_Data = ADDR0; /* 读取ADC结果 */
ADC_Data = (ADC_Data >> 6) & 0x3ff;
ADC_Data = ADC_Data * 2500; /* 参考电压由精密恒压源提供的2.5V*/
ADC_Data = ADC_Data / 1024;
sprintf(str, "AD转换的电压为:");
UART0_SendStr(str);
sprintf(str, "%4d mV \r\n", ADC_Data);
UART0_SendStr(str);
}
}
/**********************************************************************************************************
** Function name: TaskBeep
** Descriptions: 无
** Input: 无
** Output: 无
**********************************************************************************************************/
void TaskBeep (void *pdata)
{
pdata = pdata;
while(1)
{
BUZZER_Set();
OSTimeDly(OS_TICKS_PER_SEC/2);
BUZZER_Clr();
OSTimeDly(OS_TICKS_PER_SEC/2);
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -