//主程序

#include "LF2407.H"
#include "math.h"
#include "verable.h"     //定义用到的各个全局变量
#include "inicial.c"    //系统初始化,CAP6捕获初始化,AD采样初始化,SCI串口通信初始化
#include "dataprocess.c"     //处理AD采样的到的数据,以便于用串口与上位机进行通信
#include "send_rece.c"     //串口的收发中断服务程序子函数
#include "interrupt.c"     //各种中断服务程序,包括AD,串口,捕获,phantom
#include "fft_table.c"    //定义fft中运用到的sin和cos表     

#define wsgr portffff     //0xFFFF(I/O space) is address of register WSGR
ioport uint portffff;

void delay(long int a)
{
    long int i;
    for(i=0;i<a;i++);
}
void Feed_Dog()
{
  *WDKEY=0x0055;
  *WDKEY=0x00AA;
}
void main(void)
{   
    int i=0; 
    int j;  

    disable();    //禁止所有可屏蔽的中断
    initial();     //系统初始化2 
    Feed_Dog();//edit by liuwei
    wsgr=0x100;    //bus visibility off;IO space 4 wait states;both data and program space 0 wait states
      ADINITIAL();     //AD采样初始化 
      T3initial();     //T3初始化,用来作为发送最后一位的延时,在发送最后一位时,打开T3计时器,周期中断时将485控制线置位接收状态。
    cap1_initial();      //CAP1捕获初始化                    
    cap4_initial();      //CAP4捕获初始化                    
    RS232();    //SCI模块初始化
    while(1)
    {   
        while(adcounter<64) /**//*没有采到64点前,等待*/
        {};
        if(adcounter==64)   /**//*采满64点,开始fft计算*/
        {  
            adcounter=0;
            
            //后两行程序用来调试程序时,利用T4的数据寄存器看fft算法和数据处理所需时间
        //    *T4CNT=0x00; 
        //     *T4CON=*T4CON|0x0040;         
            
            
            if(Vcenterpreselect[0]>2)    //首先判断是否第2级已经饱和,如果第2级饱和,那么选择第1级
            {   
                Vcenter_choice=0;
            }
            else if (Vcenterpreselect[1]>2)    //如果第2级没有饱和而第3级饱和,那么选择第2级
            {
                Vcenter_choice=1;
            }
            else                //如果第2级第3级都没有饱和,那么选择第3级
            {
                Vcenter_choice=2;
            }  
            Vcenterpreselect[0]=0;
            Vcenterpreselect[1]=0;

                 for(i=0;i<64;i++)
            {
                dataR[0][i]=dataC[Vcenter_choice][i];
            }    
        
            for(i=0;i<64;i++)     //最终有6路信号参与FFT变换,这6路信号都放在2维数组dataR[8][64]中的前6行中    
            {   
                for(j=1;j<6;j++)
                {
                    dataR[j][i]=dataC[j+2][i];
                }
            } 
            for(j=0;j<6;j++)
            {
                FR[j]=0;
                FI[j]=0;    
            }
            
            for(j=0;j<6;j++)
            {
                FR[j]=(dataR[j][1]+dataR[j][63]-dataR[j][31]-dataR[j][33])*cos_tab[1];
                FR[j]+=(dataR[j][2]+dataR[j][62]-dataR[j][30]-dataR[j][34])*cos_tab[2];                                                                                                                          
                FR[j]+=(dataR[j][3]+dataR[j][61]-dataR[j][29]-dataR[j][35])*cos_tab[3];
                FR[j]+=(dataR[j][4]+dataR[j][60]-dataR[j][28]-dataR[j][36])*cos_tab[4];
                FR[j]+=(dataR[j][5]+dataR[j][59]-dataR[j][27]-dataR[j][37])*cos_tab[5];
                FR[j]+=(dataR[j][6]+dataR[j][58]-dataR[j][26]-dataR[j][38])*cos_tab[6];
                FR[j]+=(dataR[j][7]+dataR[j][57]-dataR[j][25]-dataR[j][39])*cos_tab[7];
                FR[j]+=(dataR[j][8]+dataR[j][56]-dataR[j][24]-dataR[j][40])*cos_tab[8];
                FR[j]+=(dataR[j][9]+dataR[j][55]-dataR[j][23]-dataR[j][41])*cos_tab[9];
                FR[j]+=(dataR[j][10]+dataR[j][54]-dataR[j][22]-dataR[j][42])*cos_tab[10];
                FR[j]+=(dataR[j][11]+dataR[j][53]-dataR[j][21]-dataR[j][43])*cos_tab[11];
                FR[j]+=(dataR[j][12]+dataR[j][52]-dataR[j][20]-dataR[j][44])*cos_tab[12];
                FR[j]+=(dataR[j][13]+dataR[j][51]-dataR[j][19]-dataR[j][45])*cos_tab[13];
                FR[j]+=(dataR[j][14]+dataR[j][50]-dataR[j][18]-dataR[j][46])*cos_tab[14];
                FR[j]+=(dataR[j][15]+dataR[j][49]-dataR[j][17]-dataR[j][47])*cos_tab[15];
                FR[j]+=(dataR[j][0]-dataR[j][32])*cos_tab[0];
                      
                FI[j]=(dataR[j][1]+dataR[j][31]-dataR[j][33]-dataR[j][63])*sin_tab[1];
                FI[j]+=(dataR[j][2]+dataR[j][30]-dataR[j][34]-dataR[j][62])*sin_tab[2];
                FI[j]+=(dataR[j][3]+dataR[j][29]-dataR[j][35]-dataR[j][61])*sin_tab[3];
                FI[j]+=(dataR[j][4]+dataR[j][28]-dataR[j][36]-dataR[j][60])*sin_tab[4];
                FI[j]+=(dataR[j][5]+dataR[j][27]-dataR[j][37]-dataR[j][59])*sin_tab[5];
                FI[j]+=(dataR[j][6]+dataR[j][26]-dataR[j][38]-dataR[j][58])*sin_tab[6];
                FI[j]+=(dataR[j][7]+dataR[j][25]-dataR[j][39]-dataR[j][57])*sin_tab[7];
                FI[j]+=(dataR[j][8]+dataR[j][24]-dataR[j][40]-dataR[j][56])*sin_tab[8];
                FI[j]+=(dataR[j][9]+dataR[j][23]-dataR[j][41]-dataR[j][55])*sin_tab[9];
                FI[j]+=(dataR[j][10]+dataR[j][22]-dataR[j][42]-dataR[j][54])*sin_tab[10];
                FI[j]+=(dataR[j][11]+dataR[j][21]-dataR[j][43]-dataR[j][53])*sin_tab[11];
                FI[j]+=(dataR[j][12]+dataR[j][20]-dataR[j][44]-dataR[j][52])*sin_tab[12];
                FI[j]+=(dataR[j][13]+dataR[j][19]-dataR[j][45]-dataR[j][51])*sin_tab[13];
                FI[j]+=(dataR[j][14]+dataR[j][18]-dataR[j][46]-dataR[j][50])*sin_tab[14];
                FI[j]+=(dataR[j][15]+dataR[j][17]-dataR[j][47]-dataR[j][49])*sin_tab[15];
                FI[j]+=(dataR[j][16]-dataR[j][48])*sin_tab[16];
                      
                //因为sin,cos中都抬高了2^14倍,这里要再变回来因为FR[j]的数据类型是32bit long型,而后面传输是8*2 int型          
                FR[j]=FR[j]>>14;
                FI[j]=FI[j]>>14;         

                //算取相位,范围是0~360度,下面是把FR作为虚轴,FI作为实轴来计算的!!!!!!!!                        
                tempA=FR[j]*FR[j];
                tempB=FI[j]*FI[j];
                tempC=(long)(sqrt(tempA+tempB)+0.5);
                tempD=((float)FR[j])/((float)tempC);
                amplitude[j]=tempC;
                
                if(tempD>1.0)
                {
                    tempD=1.0;
                }                 
                if(tempD<-1.0)
                {
                    tempD=-1.0;
                }
    
                tempE=asin(tempD);
                tempE=tempE*57.3;
                        
                Phrase[j]=tempE;                    
                Phrase[j]=Phrase[j]*100; 
                if(FI[j]<0)
                {                               
                    Phrase[j]=18000-Phrase[j];
                }
                else
                {
                    Phrase[j]=Phrase[j];
                } 
                if(Phrase[j]<0)
                {
                    Phrase[j]=Phrase[j]+36000;
                }     
            }             
            
            if (time_ad==0)    /**//*ad 采样次数,奇偶次分别用不同的数组 */
            {  
                dataprocess1();
                time_ad=1; //数据处理后放在datagrone[]中,datagrone[]中的数据更新完毕之后time_ad才会=1 
            
            }
            else
            {
                dataprocess2();
                time_ad=0;       //数据处理后放在datagrtwo[]中,datagrtwo[]中的数据更新完毕之后time_ad才会=0
               
            } 
            timer3=timer3+1;//对主函数中FFT计算的次数进行计数
        }
    }        
}

这是我的一个工程里面DSP芯片的主程序,其他都很简单,主要用到了一个蝴蝶算法。

转载于:https://www.cnblogs.com/coffeeliu/archive/2006/04/19/379405.html

工程中DSP代码片断相关推荐

  1. JSP文件中Java代码的几种形式(JSP脚本)

    文章目录 第一种形式(Java 代码片段) 第二种形式(JSP 表达式) 第三种形式(JSP 声明) 第四种形式(JSP 指令) 第一种形式(Java 代码片段) 原样复制到 service() 方法 ...

  2. 使用代码片断添加交互

    "代码片断"面板旨在使非编程人员能快速地轻松开始使用简单的 ActionScript 3.0.借助该面板,您可以将 ActionScript 3.0 代码添加到 FLA 文件以启用 ...

  3. 【TIC6657 DSP学习笔记】01 工程创建与代码编写——以点亮LED为例

    1 新工程的创建 点击File–>New–>CCS Project,进入以下窗口: 2 代码编写 CCS工程中必要的文件有两种: c源文件:程序代码本体: .cmd文件:用于指导内存的分配 ...

  4. ML之FE:特征工程中数据缺失值填充的简介、方法、全部代码实现之详细攻略

    ML之FE:特征工程中数据缺失值填充的简介.方法.全部代码实现之详细攻略 目录 特征工程中数据缺失值填充的简介.方法.经典案例

  5. ML之FE:特征工程中常用的五大数据集划分方法(特殊类型数据分割,如时间序列数据分割法)讲解及其代码

    ML之FE:特征工程中常用的五大数据集划分方法(特殊类型数据分割,如时间序列数据分割法)讲解及其代码 目录 特殊类型数据分割 5.1.时间序列数据分割TimeSeriesSplit 特殊类型数据分割 ...

  6. ML之FE:特征工程中常用的一些处理手段(缺失值填充、异常值检测等)及其对应的底层代码的实现

    ML之FE:特征工程中常用的一些处理手段(缺失值填充.异常值检测等)及其对应的底层代码的实现 目录 特征工程中常用的一些处理手段(缺失值填充.异常值检测等)及其对应的底层代码的实现

  7. iOS小技能:-fobjc-arc和 -fno-objc-arc 的使用(在非ARC工程中集成ARC代码、在ARC工程中集成非ARC的第三方代码)

    文章目录 前言 I ARC 简介 1.1 ARC的规则 1.2 OC中有强参照strong和弱参照weak. 1.3 ARC只能工作于OC. 前言 在非ARC工程中集成ARC代码: 使用-fobjc- ...

  8. .net之工作流工程展示及代码分享(二)工作流引擎

    在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: 1 [Serializable] 2 public class Flow 3 ...

  9. Instagram个性化推荐工程中三个关键技术是什么?

    作者 | Ivan Medvedev,Haotian Wu,Taylor Gordon 译者 | 陆离 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导语]近期,Face ...

最新文章

  1. 【 FPGA 】UltraFast设计方法学笔记(时钟)
  2. Linux的概念与体系
  3. 046_byte的值在计算机中的表示
  4. 第十届蓝桥杯大赛软件赛省赛 C/C++ 大学B组
  5. php读取文件和读取redis,PHP结合redis实现大文件去重
  6. request域对象和请求转发
  7. 配置Mysql实现主从复制与读写分离
  8. 实践提炼:面对大型B端项目,产品设计该如何展开?
  9. 【干货】如何利用NLP与知识图谱处理长句理解.pdf(附下载链接)
  10. Chilkat -- python又一个强大的库
  11. piap.windows io 监测attilax总结
  12. 免费直播系统源码,可控的跑马灯,无需焦点
  13. SteamAchievementManager刷steam游戏成就新手教程
  14. 基于标签传递的重叠社区发现算法(COPRA算法)
  15. BioPython安装与入门
  16. Simulink提速方式
  17. Liunx修改用户密码
  18. iOS:编译问题Presenting view controllers on detached view controllers is discouraged
  19. 解决VMware中虚拟机(centos7)无法上网的一种方法
  20. 【ES】原生es的复杂查询

热门文章

  1. java伪代码生成器_JAVA单例模式的实现伪代码
  2. 打印机怎么扫描到电脑_【柯美C360扫描怎么用教程】打印机怎么扫描
  3. mysql mysql_set_charset_SQL注入攻击之 mysql_set_charset [转]
  4. 虚拟机安装rsync服务器配置,虚拟机安装rsync服务器配置
  5. java tls 证书_在使用Java 8重新协商TLS_1.2期间,服务器证书更改受到限制
  6. miniblink载入html,winform使用miniblink展示html(全屏)
  7. Date和Calendar
  8. 计算机网络原理(第二章)课后题答案
  9. centos中使用rpm包或yum命令在线安装的软件默认是安装在那个目录下
  10. 负债越多的人越容易翻身