📄 fir_asm.asm
字号:
/*****************************************************************************
** fir_asm.asm $TITLE:NOTES.ASM$
** 用于演示FIR滤波的汇编程序
****************************************************************************/
/*--------------------------------------------------------------------------
INCLUDES
--------------------------------------------------------------------------*/
#include <def21065l.h>
#include <ezkit/mntrmem.h>
#include <ezkit/1819regs.h>
#include <ezkit/uart.h>
#include <signal.h>
/*--------------------------------------------------------------------------
CONSTANT & MACRO DEFINITIONS
--------------------------------------------------------------------------*/
/* Codec tag word to send out left and right samples */
#define DOUT_TAG 0x9800
/* Codec tag word to send out address and data slots */
#define REGOUT_TAG 0xe000
/* This is the codec register setting for line input on both channels */
#define SOURCE_IS_LINE 0x0404
#define SOURCE_IS_MIC 0
/* Codec addreses */
#define SOURCE_ADDR 0x1a00
#define RECGAIN_ADDR 0x1c00
#define FIR_N 256
/*--------------------------------------------------------------------------
GLOBAL DECLARATIONS
--------------------------------------------------------------------------*/
.GLOBAL _main;
/*---------------------------------------------------------------------------*/
.SEGMENT/DM seg_dmda;
.VAR InputBuf[FIR_N];
.ENDSEG;
/////////////////////////////
.SEGMENT/pm seg_pmda;
.var Coefficients[FIR_N]="Coefficient.dat";
.ENDSEG;
/* Now setup a segment that is in exactly the same location as the kernel
segment so that the demo has access to the kernel buffers and flags */
.SEGMENT/DM seg_bnk3;
.VAR user_tx_buf[6]; //
.VAR user_tx_ready; // Codec isr (set up by the kernel) flags and buffers
.VAR user_rx_buf[6]; //
.VAR user_rx_ready; //
.ENDSEG;
//////reset中断向量定义/////////
.SEGMENT/PM seg_rth;
NOP; JUMP _main; RTI; RTI;
.ENDSEG;
/*---------------------------------------------------------------------------*/
.SEGMENT /PM seg_pmco;
/* ---------------------------------------------------------------------------
;
; 主程序: Notes demo main function.
;;
----------------------------------------------------------------------------*/
_main:
///////初始化循环缓冲///////////
BIT CLR MODE1 65536; /*Set to 40-BIT mode */
B2=InputBuf;
I2=InputBuf;
L2=FIR_N;
M2=1;
B8=Coefficients;
I8=Coefficients;
L8=FIR_N;
M8=1;
///////////串口1开屏蔽,初始化AD1819A的信号源和增益/////////
BIT SET MODE1 IRPTEN; /* enable ints & nesting*/
BIT SET IMASK SPT1I;//串口1开屏蔽
BIT CLR MODE1 NESTM;
//////初始化AD1819信号源////////
I0=user_tx_buf;
Modify(I0,TAG);
R0=REGOUT_TAG;
DM(I0,0)=R0;
I0=user_tx_buf;
Modify(I0,ADDR);
R0=SOURCE_ADDR;
DM(I0,0)=R0;
I0=user_tx_buf;
Modify(I0,DATA);
R0=SOURCE_IS_LINE;
DM(I0,0)=R0;
R0=1;
DM(user_tx_ready)=R0;
idle;
idle;
//////初始化AD1819增益////////
I0=user_tx_buf;
Modify(I0,TAG);
R0=REGOUT_TAG;
DM(I0,0)=R0;
I0=user_tx_buf;
Modify(I0,ADDR);
R0=RECGAIN_ADDR;
DM(I0,0)=R0;
I0=user_tx_buf;
Modify(I0,DATA);
R0=0;
DM(I0,0)=R0;
R0=1;
DM(user_tx_ready)=R0;
idle;
idle;
/////////////////////////////////////////////////
wait: /* deluxe thumb-twiddling loop */
///////////////接收数据/////////////
R0=1;
DM(user_rx_ready)=R0;
IDLE;
check_rx:
R0=DM(user_rx_ready);
R1=0;
R0=R0-R1;
if ne jump check_rx;
check_tx:
R0=DM(user_tx_ready);
R1=0;
R0=R0-R1;
if ne jump check_tx;
I0=user_rx_buf;
Modify(I0,LEFT_CHANL);
R0=DM(I0,0);
//////FIR滤波算法//////////
////将结果转换为浮点型数据
// R3=MODE1;//保护MODE1
// BIT CLR MODE1 65536; /*Set to 40-BIT mode */
F12 = float R0;
R2=R2-R2, DM(I2,M2)=R12;//I2指针同时被修改
R8=R8-R8;
R12=R12-R12; //初始化所有的计算用的寄存器
LCNTR=FIR_N, DO pdconv UNTIL LCE;
pdconv:F8=F2*F4,F12=F8+F12,F4=DM(I2,M2),F2=PM(I8,M8);
F8=F2*F4, F12=F8+F12;
///////////////////////
// MODE1=R3;
//////////将结果转化为带符号整型输出//////
R2= trunc F12;
///////发送数据////////////
I0=user_tx_buf;
Modify(I0,TAG);
R0=DOUT_TAG;
DM(I0,0)=R0;
I0=user_tx_buf;
Modify(I0,LEFT_CHANL);
// R0=DM(filter_input);
DM(I0,0)=R2;
I0=user_tx_buf;
Modify(I0,RIGHT_CHNL);
// R0=DM(filter_input);
DM(I0,0)=R2;
R0=1;
DM(user_tx_ready)=R0;
nop;
JUMP wait;
_main.end:
.ENDSEG;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -