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