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

📄 main.c

📁 这是基于arm的嵌入式操作系统基础性实验ADC实验
💻 C
字号:

#include "config.h"
#include "stdlib.h"
#include <stdarg.h>
#include "uart0.h"
uint8 INT0_1_2;
uint32 Uart0Rev;
uint8 INFO[] = {"Hello ARM2131!very good"};
uint8 INFO_INT0[] = {"Hello ARM2131!INT0"};
uint8 INFO_INT1[] = {"Hello ARM2131!INT1"};
uint8 INFO_INT2[] = {"Hello ARM2131!INT2"}; 
#define	TaskStkLengh	128		                 //Define the Task stack length 定义用户任务的堆栈长度 
#define TASK_4_PRIO     1

OS_STK  Task4Stk[TaskStkLengh];
OS_STK  TaskADCStk[TaskStkLengh];
OS_EVENT *Uart0ADCMbox;
OS_EVENT *Uart0INTMbox;

void 	Task4(void *pdata);
void    TaskADC(void *pdata);	


int main (void)
{
	UART0_Init();	                          // 串口初始化
	OSInit ();																						
	OSTaskCreate (Task4,(void *)0, &Task4Stk[TaskStkLengh - 1], TASK_4_PRIO);
	OSStart ();
	return 0;															
}
/*********************************************************************************************************
**                            Task     任务
********************************************************************************************************/

void Task4	(void *pdata)
{
    uint8 *str;
    uint8 *temp;
    uint8 err;
    char  str2[20];
    str = INFO;
    pdata = pdata;
    TargetInit ();
    OSStatInit();
    Uart0ADCMbox = OSMboxCreate(NULL);
    Uart0INTMbox = OSMboxCreate(NULL);    
    if (Uart0ADCMbox == NULL)
    {
        while (1);
    }
    if (Uart0INTMbox == NULL)
    {
        while (1);
    }    
        
    OSTaskCreate(TaskADC,(void *)0,&TaskADCStk[TaskStkLengh-1],2);
   	UART0_SendStr(str);				
    while (1)
    { 	
        temp = (uint8 *)OSMboxPend(Uart0INTMbox,0,&err);  	
        switch(*temp)
        {
        case 0:
        str = INFO_INT0;
        UART0_SendStr(str);
        temp = (uint8 *)OSMboxAccept(Uart0ADCMbox);
        sprintf(str2, "VIN1=%dmV \r", (*temp));
        UART0SendStr(str2);
        break;
        case 1:
        str = INFO_INT1;
        UART0_SendStr(str);
        break;
        case 2:
        str = INFO_INT2;
        UART0_SendStr(str);
        break;
        }
    }
}
  
void TaskADC(void *pdata)
{
    uint32 ADC_Data;
 	/* 进行ADC模块设置 */
	ADCR = (1 << 0)						|	// SEL=8,选择通道0
			((Fpclk / 1000000 - 1) << 8)	|	// CLKDIV=Fpclk/1000000-1,转换时钟为1MHz
			(0 << 16)						|	// BURST=0,软件控制转换操作
			(0 << 17)						|	// CLKS=0, 使用11clock转换
			(1 << 21)						|  	// PDN=1,正常工作模式
			(0 << 22)						|  	// TEST1:0=00,正常工作模式
			(1 << 24)						|	// START=1,直接启动ADC转换
			(0 << 27);						 	// 直接启动ADC转换时,此位无效   
    OSTimeDlyHMSM( 0, 0, 0, 1);
    ADC_Data = ADDR;		// 读取ADC结果,并清除DONE标志位
    while(1)
    {
        ADCR |= 1 << 24;					// 进行第一次转换
		while ((ADDR & 0x80000000) == 0);	// 等待转换结束
		ADCR |= 1 << 24;					// 再次启动转换
		while ((ADDR & 0x80000000) == 0);	// 等待转换结束
		ADC_Data = ADDR;					// 读取ADC结果
		ADC_Data = (ADC_Data >> 6) & 0x3ff;
		ADC_Data = ADC_Data * 3300 *3 / 4 ;			// 参考电压经过3/4分压
		ADC_Data = ADC_Data / 1024;

        Uart0Rev = ADC_Data;
        OSMboxPost(Uart0ADCMbox,(void *)&Uart0Rev);
        OSTimeDlyHMSM( 0, 0, 0, 1);   
    }    

}    
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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