?? dsk_app.c
字號:
/**********************************************************/
/* */
/* 中頻軟件無線電接收機子系統數字信號處理部分主程序 */
/* */
/* 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 + -