C6455EDMA3mcbsp.docx

上传人:b****6 文档编号:8015803 上传时间:2023-01-28 格式:DOCX 页数:32 大小:22.78KB
下载 相关 举报
C6455EDMA3mcbsp.docx_第1页
第1页 / 共32页
C6455EDMA3mcbsp.docx_第2页
第2页 / 共32页
C6455EDMA3mcbsp.docx_第3页
第3页 / 共32页
C6455EDMA3mcbsp.docx_第4页
第4页 / 共32页
C6455EDMA3mcbsp.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

C6455EDMA3mcbsp.docx

《C6455EDMA3mcbsp.docx》由会员分享,可在线阅读,更多相关《C6455EDMA3mcbsp.docx(32页珍藏版)》请在冰豆网上搜索。

C6455EDMA3mcbsp.docx

C6455EDMA3mcbsp

6455的EDMA3+MCBSP

根据6455开发板自带的程序修改而来,调试通过,这个工程包括两个文件Edma_interrupt_example.c和edmaIntDispatcher.c,第一个是初始化的程序,第二个为中断服务子程序。

最后再附带一个FPGA的Verilog程序,用与产生mcbsp的接收数据。

如果想接收更多的数据,修改BUFFSIZE的大小就好了。

希望对你有帮助!

下面是第一个文件内容

/*根据dsk_app.c这个文件修改的mcbsp+edma,调试通过

*/

#include

#include

#include

#include

#include

#include

#include

#defineBUFFSIZE10

#definePING0

#definePONG1

Int16gBufferXmtPing[BUFFSIZE];//TransmitPINGbuffer

Int16gBufferXmtPong[BUFFSIZE];//TransmitPONGbuffer

Int16gBufferRcvPing[BUFFSIZE];//ReceivePINGbuffer

Int16gBufferRcvPong[BUFFSIZE];//ReceivePONGbuffer

volatileUint32intFlag=0;

Uint32passStatus=1;

/*Forwarddeclaration*/

voidtcc1Fxn(void);

voidedmaInit(void);

/*Macrothatgives2CLKdelaycycles*/

\

do{#defineWAIT_FOR_2_CLK

volatileintdelayCnt=2;\

while(delayCnt>0)--delayCnt;\

}while(0)

/*Globalconstants-Numberofwordstotransfer*/

//#defineNumOfWords100

/*Functiondeclarations*/

voidinit_McBSP0(void);

CSL_StatushwSetupVerify(CSL_McbspHwSetup*,

CSL_McbspHwSetup*

);

/*HandlefortheMCBSPinstance*/

CSL_McbspHandlehMcbsp;

/*Createdatabuffersfortransfer*/

//Uint16xmt[NumOfWords];

//Uint16rcv[NumOfWords];

/*Globaldatadefinition*/

CSL_McbspGlobalSetupmcbspGbl={

CSL_MCBSP_IOMODE_TXDIS_RXDIS,

CSL_MCBSP_DLBMODE_OFF,//关闭自环模式

CSL_MCBSP_CLKSTP_DISABLE

};

/*Receivedatasetup*/

CSL_McbspDataSetupmcbspRxData={

CSL_MCBSP_PHASE_SINGLE,

CSL_MCBSP_WORDLEN_8,

1,//framelength

(CSL_McbspWordLen)0,

0,

//CSL_MCBSP_FRMSYNC_IGNORE,//framesincignore

CSL_MCBSP_FRMSYNC_DETECT,

CSL_MCBSP_COMPAND_OFF_MSB_FIRST,

CSL_MCBSP_DATADELAY_1_BIT,

CSL_MCBSP_RJUSTDXENA_RJUST_RZF,

CSL_MCBSP_INTMODE_ON_READY,

//CSL_MCBSP_INTMODE_ON_FSYNC,

CSL_MCBSP_32BIT_REVERS_DISABLE

};

/*Transmitdatasetup*/

CSL_McbspDataSetupmcbspTxData={

CSL_MCBSP_PHASE_SINGLE,

CSL_MCBSP_WORDLEN_8,

1,//每次发送一个元素

(CSL_McbspWordLen)0,

0,

CSL_MCBSP_FRMSYNC_DETECT,

CSL_MCBSP_COMPAND_OFF_MSB_FIRST,

CSL_MCBSP_DATADELAY_1_BIT,//发送时,相对于同步信号延时一个clk

CSL_MCBSP_RJUSTDXENA_DXENA_OFF,

CSL_MCBSP_INTMODE_ON_READY,

//CSL_MCBSP_INTMODE_ON_FSYNC,

CSL_MCBSP_32BIT_REVERS_ENABLE

};

/*Clocksetupdefaults*/

CSL_McbspClkSetupmcbspClock={

CSL_MCBSP_FSCLKMODE_INTERNAL,/*XMTFrame-sync*/

//CSL_MCBSP_FSCLKMODE_INTERNAL,/*RCVFrame-sync*/

CSL_MCBSP_FSCLKMODE_EXTERNAL,

CSL_MCBSP_TXRXCLKMODE_INTERNAL,/*XMTclock*/

//CSL_MCBSP_TXRXCLKMODE_INTERNAL,/*RCVclock*/

CSL_MCBSP_TXRXCLKMODE_EXTERNAL,

CSL_MCBSP_FSPOL_ACTIVE_HIGH,/*XMTFrame-syncactivehigh*/

CSL_MCBSP_FSPOL_ACTIVE_HIGH,/*RCVFrame-syncactivehigh*/

CSL_MCBSP_CLKPOL_TX_RISING_EDGE,/*XMTclockrisingedge*/

//CSL_MCBSP_CLKPOL_RX_FALLING_EDGE,/*RCVclockfallingedge*/

CSL_MCBSP_CLKPOL_RX_RISING_EDGE,/*RCVclockfallingedge*/

0,/*Frame-syncpulsewidth=1bit*/

0x8,/*Frame-syncpulseperiod17clk*/

0x5,/*clkdivideby6*/

CSL_MCBSP_SRGCLK_CLKCPU,

CSL_MCBSP_CLKPOL_TX_RISING_EDGE,/*CLKSpinsignalrisingedge*/

CSL_MCBSP_TXFSMODE_DXRCOPY,

//CSL_MCBSP_TXFSMODE_SRG,

CSL_MCBSP_CLKGSYNCMODE_OFF/*GSYNC=0meansnoclocksynchronisation*/

};

/*Multichannelsetup*/

CSL_McbspMulChSetupmcbspMul={

CSL_MCBSP_PARTMODE_2PARTITION,/*RX*/

CSL_MCBSP_PARTMODE_2PARTITION,/*TX*/

(Uint16)0,/*rxMulChSel*/

(Uint16)0,/*txMulChSel*/

CSL_MCBSP_PABLK_0,/*rxPartABlk*/

CSL_MCBSP_PBBLK_1,/*rxPartBBlk*/

CSL_MCBSP_PABLK_0,/*txPartABlk*/

CSL_MCBSP_PBBLK_1/*txPartABlk*/

};

/*Mcbsphwsetup*/

CSL_McbspHwSetupmyHwSetup={

&mcbspGbl,

&mcbspRxData,

&mcbspTxData,

&mcbspClock,

&mcbspMul,

CSL_MCBSP_EMU_FREERUN,

NULL

};

/*Intcdeclaration*/

CSL_IntcContextintcContext;

CSL_IntcEventHandlerRecordEventHandler[100];

CSL_IntcObjintcObjEdma;

CSL_IntcHandlehIntcEdma;

CSL_IntcGlobalEnableStatestate;

CSL_IntcEventHandlerRecordEventRecord;

CSL_IntcParamvectId;

CSL_Edma3HwDmaChannelSetupdmahwSetup[CSL_EDMA3_NUM_DMACH]=

CSL_EDMA3_DMACHANNELSETUP_DEFAULT;

CSL_Edma3HwSetuphwSetup={&dmahwSetup[0],NULL};

/*Globals*/

/*Edmahandle*/

CSL_Edma3HandlehModule;

/*PaRAMsettingsforsets13(receive)and65(receivepingreload)*/

CSL_Edma3ParamSetupgParamSetupRcvPing={//PaRAMSetStructureforreceivepingbuffer

CSL_EDMA3_OPT_MAKE//option-OPT

(CSL_EDMA3_ITCCH_DIS,\

CSL_EDMA3_TCCH_DIS,\

\

CSL_EDMA3_ITCINT_DIS,

CSL_EDMA3_TCINT_EN,\

15,CSL_EDMA3_TCC_NORMAL,\

CSL_EDMA3_FIFOWIDTH_NONE,\

CSL_EDMA3_STATIC_DIS,\

CSL_EDMA3_SYNC_A,\

CSL_EDMA3_ADDRMODE_INCR,\

CSL_EDMA3_ADDRMODE_INCR),

(Uint32)0x028c0000,//srcAddr-SRC

CSL_EDMA3_CNT_MAKE(2,BUFFSIZE),//aCntbCnt-(ACNT,BCNT)

(Uint32)&gBufferRcvPing,//dstAddr-DST

CSL_EDMA3_BIDX_MAKE(0,2),//srcDstBidx-(SRCBIDX,DSTBIDX)

CSL_EDMA3_LINKBCNTRLD_MAKE(0x4800,1),//linkBcntrld-(LINK,BCNTRLD)

CSL_EDMA3_CIDX_MAKE(0,0),//srcDstCidx-(SRCCIDX,DSTCIDX)

1//cCnt-CCNT

};

/*PaRAMsettingsforset64(transmitpongreload)*/

CSL_Edma3ParamSetupgParamSetupRcvPong={//PaRAMSetStructureforreceivepong

buffer

CSL_EDMA3_OPT_MAKE//option-OPT

(CSL_EDMA3_ITCCH_DIS,\

CSL_EDMA3_TCCH_DIS,\

CSL_EDMA3_ITCINT_DIS,\

CSL_EDMA3_TCINT_EN,\

15,CSL_EDMA3_TCC_NORMAL,\

CSL_EDMA3_FIFOWIDTH_NONE,\

CSL_EDMA3_STATIC_DIS,\

CSL_EDMA3_SYNC_A,\

CSL_EDMA3_ADDRMODE_INCR,\

CSL_EDMA3_ADDRMODE_INCR),

(Uint32)0x028c0000,//srcAddr-SRC

CSL_EDMA3_CNT_MAKE(2,BUFFSIZE),//aCntbCnt-(ACNT,BCNT)

(Uint32)&gBufferRcvPong,//dstAddr-DST

CSL_EDMA3_BIDX_MAKE(0,2),//srcDstBidx-(SRCBIDX,DSTBIDX)

CSL_EDMA3_LINKBCNTRLD_MAKE(0x4820,1),//linkBcntrld-(LINK,BCNTRLD)

CSL_EDMA3_CIDX_MAKE(0,0),//srcDstCidx-(SRCCIDX,DSTCIDX)

1//cCnt-CCNT

};

voidedmaInit()

{

edmaObj;

CSL_Edma3Obj

CSL_Edma3ParamHandlehParamBasic1;

CSL_Edma3ChannelObjchObjXmt,chObjRcv;

CSL_Edma3CmdIntrregionIntr;

CSL_Edma3CmdDraeregionAccess;

CSL_Edma3ChannelHandlehChannelXmt,hChannelRcv;

CSL_Edma3Contextcontext;

CSL_Edma3ChannelAttrchAttrXmt,chAttrRcv;

CSL_Statusstatus;

Uint32i;

/*Intcmoduleinitialization*/

intcContext.eventhandlerRecord=EventHandler;

intcContext.numEvtEntries=10;

CSL_intcInit(&intcContext);

/*EnableNMIs*/

CSL_intcGlobalNmiEnable();

/*Enableglobalinterrupts*/

CSL_intcGlobalEnable(&state);

/*Openingaintchandleforedmaevent*/

vectId=CSL_INTC_VECTID_4;

hIntcEdma=CSL_intcOpen(&intcObjEdma,CSL_INTC_EVENTID_EDMA3CC_INT1,\

&vectId,NULL);

/*Moduleinitialization*/

status=CSL_edma3Init(&context);

if(status!

=CSL_SOK){

printf(Edmamoduleinitializationfailed\n);

return;

}

/*Edmamoduleopen*/

hModule=CSL_edma3Open(&edmaObj,CSL_EDMA3,NULL,&status);

/*SetuptheDRAEmasks

*DRAEenable(Bits0-15)fortheshadowregion1.

*/

regionAccess.region=CSL_EDMA3_REGION_1;

regionAccess.drae=0xFFFFFFFF;

regionAccess.draeh=0xFFFFFFFF;

CSL_edma3HwControl(hModule,CSL_EDMA3_CMD_DMAREGION_ENABLE,®ionAccess);

/*DMAchanel-->PaRAMmapping,queueassignment*/

dmahwSetup[12].paramNum=12;

dmahwSetup[12].que=CSL_EDMA3_QUE_1;

dmahwSetup[13].paramNum=13;

dmahwSetup[13].que=CSL_EDMA3_QUE_1;

CSL_edma3HwSetup(hModule,&hwSetup);

/*---SetupReceiveChanvnel(McBSP1receive,param13)---*/

/*Channelopen*/

chAttrRcv.regionNum=CSL_EDMA3_REGION_1;

chAttrRcv.chaNum=CSL_EDMA3_CHA_REVT0;

hChannelRcv=CSL_edma3ChannelOpen(&chObjRcv,CSL_EDMA3,&chAttrRcv,&status);

/*Setupparameterblock65asEDMAtransmitpingreload*/

hParamBasic1=CSL_edma3GetParamHandle(hChannelRcv,65,NULL);

status=CSL_edma3ParamSetup(hParamBasic1,&gParamSetupRcvPing);

/*Setupparameterblock64asEDMAtransmitpongreload*/

hParamBasic1=CSL_edma3GetParamHandle(hChannelRcv,64,NULL);

CSL_edma3ParamSetup(hParamBasic1,&gParamSetupRcvPong);

/*Setupparameterblock13asEDMAtransmit(startwithcopyofping)*/

hParamBasic1=CSL_edma3GetParamHandle(hChannelRcv,13,NULL);

CSL_edma3ParamSetup(hParamBasic1,&gParamSetupRcvPing);

/*Setupchannelandqueuerelationships*/

CSL_edma3HwChannelSetupParam(hChannelRcv,13);

CSL_edma3HwChannelSetupQue(hChannelRcv,CSL_EDMA3_QUE_1);

/*AssociationofanEDMAeventhandlerwiththeINTCroutine*/

EventRecord.handler=&eventEdmaHandler;

EventRecord.arg=(void*)(hModule);

CSL_intcPlugEventHandler(hIntcEdma,&EventRecord);

/*Enablingeventedma*/

CSL_intcHwControl(hIntcEdma,CSL_INTC_CMD_EVTENABLE,NULL);

/*HookuptheEDMAeventwithancompletioncodefunctionhandler*/

EdmaEventHook(15,tcc1Fxn);

//EdmaEventHook(1,tcc1Fxn);

/*EnableEDMAregioninterrupts*/

regionIntr.region=CSL_EDMA3_REGION_1;

regionIntr.intr=0x0000C000;

regionIntr.intrh=0x00000000;

CSL_edma3HwControl(hModule,CSL_EDMA3_CMD_INTR_ENABLE,®ionIntr);

/*Receiveeventclearandenable,备注用于外部触发使用*/

CSL_edma3HwChannelControl(hChannelRcv,CSL_EDMA3_CMD_CHANNEL_CLEAR,NULL);

CSL_edma3HwChannelControl(hChannelRcv,CSL_EDMA3_CMD_CHANNEL_ENABLE,NULL);

/*ClearCPUinterruptevent72(EVTCLR2)*/

//*((Uint32*)0x1800048)=0x00000100;

/*EnableCPUinterruptevent72(EVTMASK2)*/

//*((Uint32*)0x1800088)=0x00000100;

/*Manuallytriggerth

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1