鸿蒙开发板Hi3861_通过GPIO2中断控制LED D10——基于code-2.0-CANARY
//通过GPIO2中断控制LED D10, D10 接一个LED的长脚,LEd的短脚接GND //D2接一个常开开关的一端,开关的另外一端接到板子的GND,by txwtech
//通过GPIO2中断控制LED D10, D10 接一个LED的长脚,LEd的短脚接GND
//D2接一个常开开关的一端,开关的另外一端接到板子的GND,by txwtech
#include <stdio.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "hi_io.h"
static volatile IotGpioValue g_ledPinValue=IOT_GPIO_VALUE0;
IotGpioValue temp_value=IOT_GPIO_VALUE0;
static void onButtonPressed(char *arg)
{
(void) arg;
g_ledPinValue = !g_ledPinValue;
printf("button is pressed.\n");
}
static void GpioTask(void *arg)
{
(void) arg;
IoTGpioInit(HI_IO_NAME_GPIO_9);
IoTGpioInit(HI_IO_NAME_GPIO_5);
IoTGpioInit(HI_IO_NAME_GPIO_2);
IoTGpioSetDir(HI_IO_NAME_GPIO_9,IOT_GPIO_DIR_OUT);
IoTGpioSetDir(HI_IO_NAME_GPIO_10,IOT_GPIO_DIR_OUT);
IoTGpioSetDir(HI_IO_NAME_GPIO_2,IOT_GPIO_DIR_IN); //D2上拉电阻
hi_io_set_pull(HI_IO_NAME_GPIO_2,HI_IO_PULL_UP);
// while (1)
{
/* code */
IotGpioValue value=IOT_GPIO_VALUE1;
IoTGpioGetInputVal(HI_IO_NAME_GPIO_2,&value);
printf("exec gpio2 value ...%d\n",value);
// osDelay(200);
// IoTGpioSetOutputVal(9,1);
IoTGpioSetOutputVal(HI_IO_NAME_GPIO_9,IOT_GPIO_VALUE1);
// IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,IOT_GPIO_VALUE1);
IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
printf("exec gpio10 value ...%d\n",value);
printf("exec ON ...\n");
// osDelay(200);
IoTGpioSetOutputVal(HI_IO_NAME_GPIO_9,IOT_GPIO_VALUE0);
printf("exec OFF\n");
// osDelay(200);
// IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,IOT_GPIO_VALUE0);
IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
printf("exec gpio10 value ...%d\n",value);
// osDelay(200);
IoTGpioRegisterIsrFunc(HI_IO_NAME_GPIO_2,IOT_INT_TYPE_EDGE,
IOT_GPIO_EDGE_FALL_LEVEL_LOW,onButtonPressed,NULL);//通过GPIO2中断控制LED D10,by txwtech
}
while (1)
{
/* code */
if(temp_value!=g_ledPinValue)
{
IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,g_ledPinValue);
}
temp_value=g_ledPinValue;
// IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
printf("exec gpio10 value ...%d\n",g_ledPinValue);
osDelay(50);
}
}
static void GpioEntry(void)
{
osThreadAttr_t attr={0};
attr.name="GpioTask";
attr.stack_size=4096;
attr.priority=osPriorityNormal;
if(osThreadNew(GpioTask,NULL,&attr)==NULL)
{
printf("[GpioEntry] create GpioTask failed!\n");
}
}
SYS_RUN(GpioTask);
//SYS_RUN(GpioEntry);
?
|