資源簡介
主要是使用POLLIN中斷去讀取串口數據,這是我認為和stm32最近似的一種串口中斷

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“serial.hpp“
?/****************************************************************
?*?Constants
?****************************************************************/
?
#define?SYSFS_GPIO_DIR?“/sys/class/gpio“
#define?POLL_TIMEOUT?(3?*?1000)?/*?3?seconds?*/
#define?MAX_BUF?64
/****************************************************************
?*?gpio_export
?****************************************************************/
int?gpio_export(unsigned?int?gpio)
{
int?fd?len;
char?buf[MAX_BUF];
?
fd?=?open(SYSFS_GPIO_DIR?“/export“?O_WRONLY);
if?(fd?0)?{
perror(“gpio/export“);
return?fd;
}
?
len?=?snprintf(buf?sizeof(buf)?“%d“?gpio);
write(fd?buf?len);
close(fd);
?
return?0;
}
/****************************************************************
?*?gpio_unexport
?****************************************************************/
int?gpio_unexport(unsigned?int?gpio)
{
int?fd?len;
char?buf[MAX_BUF];
?
fd?=?open(SYSFS_GPIO_DIR?“/unexport“?O_WRONLY);
if?(fd?0)?{
perror(“gpio/export“);
return?fd;
}
?
len?=?snprintf(buf?sizeof(buf)?“%d“?gpio);
write(fd?buf?len);
close(fd);
return?0;
}
/****************************************************************
?*?gpio_set_dir
?****************************************************************/
int?gpio_set_dir(unsigned?int?gpio?unsigned?int?out_flag)
{
int?fd?len;
char?buf[MAX_BUF];
?
len?=?snprintf(buf?sizeof(buf)?SYSFS_GPIO_DIR??“/gpio%d/direction“?gpio);
?
fd?=?open(buf?O_WRONLY);
if?(fd?0)?{
perror(“gpio/direction“);
return?fd;
}
?
if?(out_flag)
write(fd?“out“?4);
else
write(fd?“in“?3);
?
close(fd);
return?0;
}
/****************************************************************
?*?gpio_set_value
?****************************************************************/
int?gpio_set_value(unsigned?int?gpio?unsigned?int?value)
{
int?fd?len;
char?buf[MAX_BUF];
?
len?=?snprintf(buf?sizeof(buf)?SYSFS_GPIO_DIR?“/gpio%d/value“?gpio);
?
fd?=?open(buf?O_WRONLY);
if?(fd?0)?{
perror(“gpio/set-value“);
return?fd;
}
?
if?(value)
write(fd?“1“?2);
else
write(fd?“0“?2);
?
close(fd);
return?0;
}
/****************************************************************
?*?gpio_get_value
?****************************************************************/
int?gpio_get_value(unsigned?int?gpio?unsigned?int?*value)
{
int?fd?len;
char?buf[MAX_BUF];
char?ch;
len?=?snprintf(buf?sizeof(buf)?SYSFS_GPIO_DIR?“/gpio%d/value“?gpio);
?
fd?=?open(buf?O_RDONLY);
if?(fd?0)?{
perror(“gpio/get-value“);
return?fd;
}
?
read(fd?&ch?1);
if?(ch?!=?‘0‘)?{
*value?=?1;
}?else?{
*value?=?0;
}
?
close(fd);
return?0;
}
/*************************************************************
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????5454??2019-04-28?23:41??try_serial_interrupt\gpio_test.cpp
?????文件???????20936??2019-04-28?23:40??try_serial_interrupt\main
?????文件????????1480??2019-04-28?23:41??try_serial_interrupt\main.cpp
?????文件?????????316??2019-04-28?23:41??try_serial_interrupt\main.hpp
?????文件????????5585??2019-04-28?23:41??try_serial_interrupt\serial.cpp
?????文件????????1599??2019-04-28?23:41??try_serial_interrupt\serial.hpp
?????目錄???????????0??2019-04-28?23:42??try_serial_interrupt\
評論
共有 條評論