📄 2700bs.txt
字号:
/*
;***********************************************************************
;* 北京达盛科技有限公司
;* 研 发 部
;*
;* http://www.techshine.com
;*
*文件名称:iirlp.c
*文件标示:
*摘 要:本文件内容为用tms320lf2407 dsp做的低通数字滤波实验
*************************************************************/
/************************文件预处理***************************/
#include "exp4_2407.h"
#include "math.h"
#define pi 3.1415926
/*************************************************************/
/********************全局变量定义与初始化*********************/
unsigned int i=0;
unsigned int j=0;
//unsigned int h=0;
unsigned int point[256]={0};
unsigned int dly[89];
short h[89]={-14,23,-9,-6,0,8,16,-58,50,44,-147,119,67,-245,
200,72,-312,257,53,-299,239,20,-165,88,0,105,
-236,33,490,-740,158,932,1348,-2070,
724,1650,-2690,1104,1776,-3122,1458,1704,29491,
1704,1458,-3122,1776,1104,-2690,1650,724,-2070,
1348,932,158,158,-740,490,33,-236,105,0,88,-165,20,
239,299,53,257,-312,72,200,-245,67,119,-147,44,50,-58,16,8,
0,-6,-9,23,-14};
double nlpass,nlstop,nhpass,nhstop,a[3],b[3],x,yn;
unsigned int x_ad,y_da;
double w2,w1,w0;
/*************************************************************/
/*******************函数、子程序声明与定义********************/
void sys_ini() //系统初始化子程序
{
/*关总中断*/
asm(" setc INTM");
/*抑制符号位扩展*/
asm(" clrc SXM");
/*累加器中结果正常溢出*/
asm(" clrc OVM");
/*禁止看门狗*/
* WDCR=0x00E8;
/*CLKIN=10M,CLKOUT=40M,使能ADC模块,使能spi模块*/
* SCSR1=0x00A1;
/*使能spi引脚*/
* MCRB=0xFE3F;
/*io、ram、program都设为0等待读写*/
WSGR=0x0600;
/*清除所有中断标志,"写1清0"*/
* IFR=0xFFFF;
/*使能cpu中断1*/
* IMR=0x0001;
}
void spi_ini() //spi初始化子程序
{
/*复位spi*/
* SPICCR&=0x007F;
/*CLOCK POLARITY=0,16位数据格式*/
* SPICCR=0x000F;
/*禁止溢出中断,CLOCK PHASE=1,禁用spi中断,主模式,使能数据发送*/
* SPICTL=0x000E;
/*清除接收溢出中断标志*/
* SPISTS=0x0080;
/*波特率为40/4=10M*/
* SPIBRR=0x0000;
/*启动spi工作*/
* SPICCR|=0x0080;
}
void adc_ini() //ADC初始化子程序
{
/*仿真器挂起时,完成最后一次ad,连续运行模式
预定标最长,高优先级中断,双排序模式,禁用其他模式*/
* ADCTRL1=0x2CC0;
/*立即中断模式,清中断标志*/
* ADCTRL2=0x0602;
/*启用排序器1,最大转换数为1*/
* MAXCONV=0x0000;
/*选择模拟输入通道为4通道*/
* CHSELSEQ1=0x0004;
/*开总中断*/
asm(" clrc INTM");
}
void delay()
{
unsigned int k;
for(k=0;k<5;k++);
}
/*************************************************************/
/*****************中断服务子程序声明与定义********************/
interrupt void nothing() //哑中断子程序
{
return;
}
interrupt void ad()
{
dly[0]=* RESULT0>>6;
// point[h]=x;
yn=0;
for(i=0;i<89;i++)
yn +=(h[i]*dly[i]);
for(i=88;i>0;i--)
dly[i]=dly[i-1];
// w2=x-a[1]*w1-a[2]*w0;
// y=b[0]*w2+b[1]*w1+b[2]*w0;
// w0=w1;
// w1=w2;
/*将数据打包成“从移位寄存器到DAC B数据寄存器
且用数据寄存器同时更新A和B两个DA的值*/
y_da=(int) (yn);///////4.0);
* SPITXBUF=y_da&0x00ff;//|0x2500;
delay();
/*清除ad中断标志*/
* ADCTRL2|=0x0200;
// if(h==256) h=0;
// i=0;
// i++;
// i=10;
return;
}
/*************************************************************/
/**************************主程序*****************************/
void main(void)
{
sys_ini();
spi_ini();
adc_ini();
// w2=w1=w0=0.0;
// nlpass = 0.05;
// nlstop = 0.25;
// biir2lpdes(nlpass,nlstop,a,b);
* ADCTRL2|=0x2000; //软件启动eoc1--ad转换器
for(;;)
{
}
}
/***************************结束******************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -