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

📄 dsk_app.c

📁 TI DSP tms320c6713软件无线电设计方案
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************************************************/
/*                                                        */
/*     中频软件无线电接收机子系统数字信号处理部分主程序   */
/*                                                        */
/*                   dsk_app.c                            */
/*                                                        */
/**********************************************************/

#include "dsk_appcfg.h"

/*  
 * 这些包含文件支持程序中使用的BIOS和CSL模块接口 
*/
#include <std.h>
#include <swi.h>
#include <log.h>
#include <c6x.h>
#include <csl.h>
#include <csl_edma.h> 
#include <csl_irq.h>
#include <csl_mcbsp.h>


/*  
 * 该包含文件引入数学函数fastrts67x.lib,其中包括乘方,开方,
 * 正、余弦,反正切,对数运算,指数运算等汇编函数
*/

#include <fastrts67x.h>

/*
 * TMS320C6713 开发板支持库分为几个模块,每个模块都有各自的包含文件
 * 每一个应用程序要使用开发板支持库就必须包含头文件dsk6713.h 
 *  本应用程序中还使用了DIP, LED模块
 */
#include "dsk6713.h"
#include "dsk6713_led.h"
#include "dsk6713_dip.h"

/* 函数原型 */
void initIrq(void);//初始化中断
void initMcbsp(void);//初始化Mcbsp
void initEdma(void);//初始化Edma
void demodulateAM(INT16 *inBuf,Uint32 *outBuf,INT16 Length)//AM信号解调程序
void processBuffer(void);//处理缓冲区数据
void edmaHwi(void);//Edma中断线程


/* 为ping-pong缓冲传输定义常量 */
#define BUFFSIZE 1024
#define PING 0
#define PONG 1

/*
 * 数据缓冲区声名 
 * 程序中使用四个BUFFSIZE大小的逻辑缓冲区
 * 一个PING接收缓冲区,一个PONG接收缓冲区
 * 一个存储PING缓冲区解调后数据,一个存储PONG缓冲区解调后数据
 
 */
Int16 gBufferRcvPing[BUFFSIZE];  // PING接收缓冲区
Int16 gBufferRcvPong[BUFFSIZE];  // PONG接收缓冲区

Uint32 gBufferXmtPing[BUFFSIZE/2];  // 存储PING缓冲区解调后数据
Uint32 gBufferXmtPong[BUFFSIZE/2];  // 存储PONG缓冲区解调后数据


EDMA_Handle hEdmaRcv;//EDMA句柄
EDMA_Handle hEdmaReloadRcvPing;//EDMA接收PING缓冲区数据自加载句柄
EDMA_Handle hEdmaReloadRcvPong;//EDMA接收PONG缓冲区数据自加载句柄

MCBSP_Handle hMcbsp1;                 // McBSP1 句柄
                    
Int16 gRcvChan;                       // EDMA传输结束代码


/*
 *  EDMA 配置数据结构 
 */
 /*接收部分EDMA 配置 */
EDMA_Config gEdmaConfigRcv = {  
    EDMA_FMKS(OPT, PRI, HIGH)          |  // 优先级高
    EDMA_FMKS(OPT, ESIZE, 16BIT)       |  // 数据单元大小16bit
    EDMA_FMKS(OPT, 2DS, NO)            |  // 源地址非两纬传输
    EDMA_FMKS(OPT, SUM, NONE)          |  // 源地址不变
    EDMA_FMKS(OPT, 2DD, NO)            |  // 目的地址非两纬传输
    EDMA_FMKS(OPT, DUM, INC)           |  // 目的地址自动增加
    EDMA_FMKS(OPT, TCINT, YES)         |  // 使能EDMA中断
    EDMA_FMKS(OPT, TCC, OF(0))         |  // 传输结束代码
    EDMA_FMKS(OPT, LINK, YES)          |  // 使能链接地址
    EDMA_FMKS(OPT, FS, NO),               // 不使用帧同步
    
    EDMA_FMKS(SRC, SRC, OF(0)),           // 源地址
 
    EDMA_FMK (CNT, FRMCNT, NULL)       |  // 帧计数 
    EDMA_FMK (CNT, ELECNT, BUFFSIZE),     // 数据单元计数
    
    (Uint32)&gBufferRcvPing,              // 目的地址
          
    EDMA_FMKS(IDX, FRMIDX, DEFAULT)    |  // 帧索引值
    EDMA_FMKS(IDX, ELEIDX, DEFAULT),      // 数据单元索引值

    EDMA_FMK (RLD, ELERLD, NULL)       |  // 重新加载数据单元
    EDMA_FMK (RLD, LINK, NULL)            // 重新加载链接地址
};

/* McBSP 配置数据结构 */
static MCBSP_Config mcbspCfg1 = {
/* 配置McBSP 串行口控制寄存器 */
        MCBSP_FMKS(SPCR, FREE, NO)              |//禁止串行时钟自由运行模式
        MCBSP_FMKS(SPCR, SOFT, NO)              |//仿真停止,串行口时钟立即停止
        MCBSP_FMKS(SPCR, FRST, YES)             |//帧同步发生器复位
        MCBSP_FMKS(SPCR, GRST, YES)             |//采样率发生器复位
        MCBSP_FMKS(SPCR, XINTM, XRDY)           |//传输中断由事件XRDY驱动
        MCBSP_FMKS(SPCR, XSYNCERR, NO)          |//无帧同步发送错误
        MCBSP_FMKS(SPCR, XRST, YES)             |//使能串行口发送
        MCBSP_FMKS(SPCR, DLB, OFF)              |//禁止数字链路回馈模式
        MCBSP_FMKS(SPCR, RJUST, RZF)            |//接收数据无符号扩展,右对其,高位补0
        MCBSP_FMKS(SPCR, CLKSTP, DISABLE)       |//禁止时钟停止模式
        MCBSP_FMKS(SPCR, DXENA, OFF)            |//禁止DX管脚使能
        MCBSP_FMKS(SPCR, RINTM, RRDY)           |//接收中断右事件RRDY驱动
        MCBSP_FMKS(SPCR, RSYNCERR, NO)          |//无帧同步接收错误
        MCBSP_FMKS(SPCR, RRST, YES),             //使能串行口接收
        
/* 配置McBSP接收控制寄存器 */
        MCBSP_FMKS(RCR, RPHASE, SINGLE)         |//接收一相
        MCBSP_FMKS(RCR, RFRLEN2, DEFAULT)       |//第二相接收帧长度
        MCBSP_FMKS(RCR, RWDLEN2, DEFAULT)       |//第二相接收帧中数据单元长度
        MCBSP_FMKS(RCR, RCOMPAND, MSB)          |//接收时无压缩扩展,由最高位开始传输
        MCBSP_FMKS(RCR, RFIG, YES)              |//忽略突发接收帧同步信号
        MCBSP_FMKS(RCR, RDATDLY, 2BIT)          |//接收时数据延迟2位
        MCBSP_FMKS(RCR, RFRLEN1, OF(1))         |//第一相接收帧长度每相两个字长
        MCBSP_FMKS(RCR, RWDLEN1, 16BIT)         |//第一相接收单元长度16bit
        MCBSP_FMKS(RCR, RWDREVRS, DISABLE),      //禁止32bit接收单元位颠倒
        
/* 配置McBSP 发送控制寄存器 */
        MCBSP_FMKS(XCR, XPHASE, DEFAULT)          |
        MCBSP_FMKS(XCR, XFRLEN2, DEFAULT)         |
        MCBSP_FMKS(XCR, XWDLEN2, DEFAULT)         |
        MCBSP_FMKS(XCR, XCOMPAND,DEFAULT)         |
        MCBSP_FMKS(XCR, XFIG, DEFAULT)            |
        MCBSP_FMKS(XCR, XDATDLY, DEFAULT)         |
        MCBSP_FMKS(XCR, XFRLEN1, DEFAULT)         |
        MCBSP_FMKS(XCR, XWDLEN1, DEFAULT)         |
        MCBSP_FMKS(XCR, XWDREVRS, DEFAULT),      
        
/* 配置McBSP 采样率产生寄存器 */        
        MCBSP_FMKS(SRGR, GSYNC, DEFAULT)        |
        MCBSP_FMKS(SRGR, CLKSP, DEFAULT)        |
        MCBSP_FMKS(SRGR, CLKSM, DEFAULT)        |
        MCBSP_FMKS(SRGR, FSGM, DEFAULT)         |
        MCBSP_FMKS(SRGR, FPER, DEFAULT)         |
        MCBSP_FMKS(SRGR, FWID, DEFAULT)         |
        MCBSP_FMKS(SRGR, CLKGDV, DEFAULT),       
        
/* 配置McBSP 多通道控制寄存器 */
        MCBSP_MCR_DEFAULT, 
          
/* 配置McBSP 接收通道使能寄存器 */                            
        MCBSP_RCER_DEFAULT, 
          
/* 配置McBSP 发送通道使能寄存器 */                           
        MCBSP_XCER_DEFAULT,                      
        
/* 配置McBSP引脚控制寄存器 */
        MCBSP_FMKS(PCR, XIOEN, SP)              |//串行发送模式
        MCBSP_FMKS(PCR, RIOEN, SP)              |//串行接收模式
        MCBSP_FMKS(PCR, FSXM, INTERNAL)         |//内部帧同步发送
        MCBSP_FMKS(PCR, FSRM, EXTERNAL)         |//外部帧同步接收
        MCBSP_FMKS(PCR, CLKXM, OUTPUT)          |//CLKX输出发送时钟
        MCBSP_FMKS(PCR, CLKRM, INPUT)           |//CLKR输入接收时钟
        MCBSP_FMKS(PCR, CLKSSTAT, DEFAULT)      |//CLKS管脚状态
        MCBSP_FMKS(PCR, DXSTAT, DEFAULT)        |//DX管脚状态
        MCBSP_FMKS(PCR, FSXP, ACTIVEHIGH)       |//发送帧同步信号高电平有效
        MCBSP_FMKS(PCR, FSRP, ACTIVEHIGH)       |//接收帧同步信号高电平有效
        MCBSP_FMKS(PCR, CLKXP, RISING)          |//发送时钟上升沿触发数据发送
        MCBSP_FMKS(PCR, CLKRP, FALLING)          //接收时钟下降沿触发数据接收
};


/* --------------------------- main() 函数 ------------------------ */
/*
 *   main()函数 - 应用程序主线程
 *  应用程序初始化,启动McBSP传输  
 */
void main()
{
    /* 初始化开发板支持库 */
    DSK6713_init();

    /* 初始化 LEDs指示灯 和 DIP开关 */
    DSK6713_LED_init();
    DSK6713_DIP_init();
    
    /* 清除缓冲区 */
    memset((void *)gBufferXmtPing, 0, BUFFSIZE * 4 * 2);
    
    initMcbsp();               // 初始化 McBSP1 接收AD6620串行输出的数据

    IRQ_globalDisable();       // 初始化设置时禁止全局中断

    initEdma();                // 初始化 EDMA 控制器
    initIrq();                 // 初始化中断
    
    DSK6713_rset(6,2);         // 设置TMS320C6713 McBSP1连接开发板上外部扩展端口    
    
    IRQ_globalEnable();        // 重新使能全局中断
   
}

⌨️ 快捷键说明

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