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

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 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 + -