⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getinput.c

📁 dsp AD公司ADSP21的代码,里面有FFT FIR IIR EQULIZER G722_21F 等可以在项目中直接应用的代码.此代码的来源是ADI公司自己出版的书籍,此书在美国购得
💻 C
字号:
/* DSP32c c-code to support circular input FIFO 8-10-94 LMS
10-31-94 CAC adapted to CAC boards
 */

/* length of integer input sample buffer */
#define FIFO_LENGTH 0x800
#define FIFO_LENGTH_BYTES 0x1000
#define FILL_FIFO 100

void in_int_enable();

extern short in_fifo_buffer[];
extern short *in_pout;

/* global interrupt on flag */
int in_int_flag = 0;

asm float pop_fifo()
{
        r4e = in_pout
        r2e = *r4
        r4e = *r4
        a0 = float(*r2)
        r4e = r4 + 2
        r3e = in_fifo_buffer + FIFO_LENGTH_BYTES
        r4e - r3
        r3e = in_fifo_buffer
        if (ge) r4e = r3
        r2e = in_pout
        *r2 = r4e
}

asm int get_pin()
{
    r1e = r20
}

asm int get_pout()
{
    r1e = in_pout
    r1e = *r1
    nop
}


float getinput()
{
    register float x;
    register short *pin, *pout;
    register int samples_in_buff;

/* if this routine has never been called then start up interrupts */
    if (!in_int_flag)
        in_int_enable();

/* keep checking the in and out pointer until there are some samples in FIFO */
/* find number of samples in FIFO, take care of circular buffer problems */

    pout = (short *) get_pout();
    do {
        pin = (short *) get_pin();

        if (pin >= pout)
            samples_in_buff = pin - pout;
        else
            samples_in_buff = pin + FIFO_LENGTH - pout;
               
    } while(samples_in_buff < FILL_FIFO);

/* read and convert to float */
    x = pop_fifo();

    return(x);
}

/* interrupt enable function  */

void in_int_enable()
{
/* enable real-time serial input interrupts and serial input */
    asm("r1 = ibuf");
    initialize_ioc();
    asm("r1 = pcw; nop; r1 = r1 | 0x1000; pcw = r1 ");

    in_int_flag = 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -