📄 intout.c
字号:
#include <signal.h>
#include <math.h>
#include "rtdspc.h"
#define SIZE 10
int output_store[SIZE];
int in_inx = 0;
volatile int out_inx = 0;
void sendout(float x);
void output_isr(int ino);
int in_fifo[10000];
int index = 0;
void main()
{
static float f,a;
int i,j;
for(i = 0 ; i < SIZE-1 ; i++) sendout(i);
interrupt(SIG_IRQ3, output_isr);
i = 0;
j = 1;
for(;;) {
for(f=0.0 ; f < 1000.0 ; f += 0.005) {
sendout(a*sinf(f*PI));
i += j;
if(i%25 == 0) {
a = 100.0*exp(i*5e-5);
if(a > 30000.0 || i < 0) j = -j;
}
}
}
}
void sendout(float x)
{
in_inx++;
if(in_inx == SIZE) in_inx = 0;
while(in_inx == out_inx);
output_store[in_inx] = (int)x;
}
void output_isr(int ino)
{
volatile int *out = (int *)0x40000002;
if(index < 10000)
in_fifo[index++]=16*in_inx+out_inx;
*out = output_store[out_inx++] << 16;
if(out_inx == SIZE) out_inx = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -