Gor*_*ams 3 timer interrupt irq raspberry-pi
是否可以在Raspberry Pi上设置硬件计时器外设并在特定时间(在Linux下运行)获得中断?有图书馆/例子吗?
我知道当引脚通过connectionPi(当以管理员权限运行时)发生引脚更改时,您会得到一个irq,因此,如果有一个免费的定时器外设,这似乎是可能的。
Pi论坛上的此帖子暗示有一个免费的STC注册,并且该注册提供了一些信息,但被标记为“ BareMetal”,我认为这意味着不涉及Linux?
背景:我知道这根本不是Linux的优势,但是我有兴趣向Espruino JS解释器添加硬件计时器功能。它最初是为微控制器设计的,包含一些希望通过计时器IRQ运行的代码(例如,用于软件PWM,定时脉冲以及其他位和鲍勃)-如果在线程中运行,则该部分实际上是无用的。
如果我理解了您的问题,则可以通过alarm()和signal()间接访问计时器。
这是一个非常简单的Raspberry Pi的Hello World程序,它使用connectioningPi切换了引脚40和引脚38。从警报中断信号在主循环和引脚38中切换了引脚40。
编译为:gcc -Wall -o helloworld helloworld.c -lwiringPi
Ctrl + c退出。
我希望这有帮助,
州立大学
helloworld.c
#include <wiringPi.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void alarmWakeup(int sig_num);
int main(int argc, char *argv[])
{
unsigned int j;
wiringPiSetupPhys();//use the physical pin numbers on the P1 connector
pinMode(40, OUTPUT);
pinMode(38, OUTPUT);
signal(SIGALRM, alarmWakeup);
ualarm(5000, 5000);
while(1)
{
digitalWrite(40, HIGH); //pin 40 high
for(j=0; j<1000000; j++);//do something
digitalWrite(40, LOW); //pin 40 low
for(j=0; j<1000000; j++);//do something
}
return 0;
}//int main(int argc, char *argv[])
void alarmWakeup(int sig_num)
{
unsigned int i;
if(sig_num == SIGALRM)
{
digitalWrite(38, HIGH); //pin 38 high
for(i=0; i<65535; i++); //do something
digitalWrite(38, LOW); //pin 38 low
}
}
Run Code Online (Sandbox Code Playgroud)