C6455-EDMA3-mcbsp.doc

上传人:韩长文 文档编号:8635915 上传时间:2020-12-09 格式:DOC 页数:23 大小:103KB
返回 下载 相关 举报
C6455-EDMA3-mcbsp.doc_第1页
第1页 / 共23页
C6455-EDMA3-mcbsp.doc_第2页
第2页 / 共23页
C6455-EDMA3-mcbsp.doc_第3页
第3页 / 共23页
C6455-EDMA3-mcbsp.doc_第4页
第4页 / 共23页
C6455-EDMA3-mcbsp.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《C6455-EDMA3-mcbsp.doc》由会员分享,可在线阅读,更多相关《C6455-EDMA3-mcbsp.doc(23页珍藏版)》请在三一文库上搜索。

1、.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 #inc

2、lude #define BUFFSIZE 10 #define PING 0#define PONG 1Int16 gBufferXmtPingBUFFSIZE; / Transmit PING bufferInt16 gBufferXmtPongBUFFSIZE; / Transmit PONG bufferInt16 gBufferRcvPingBUFFSIZE; / Receive PING bufferInt16 gBufferRcvPongBUFFSIZE; / Receive PONG buffervolatile Uint32 intFlag = 0; Uint32 passS

3、tatus = 1; /* Forward declaration */void tcc1Fxn(void);void edmaInit(void); /* Macro that gives 2 CLK delay cycles */#define WAIT_FOR_2_CLK do 精品. volatile int delayCnt = 2; while(delayCnt 0) -delayCnt; while (0) /* Global constants- Number of words to transfer */#define NumOfWords 100/* Function de

4、clarations */void init_McBSP0(void);CSL_Status hwSetupVerify (CSL_McbspHwSetup *, CSL_McbspHwSetup * );/* Handle for the MCBSP instance */CSL_McbspHandle hMcbsp;/* Create data buffers for transfer */Uint16 xmtNumOfWords;/Uint16 rcvNumOfWords;/* Global data definition */CSL_McbspGlobalSetup mcbspGbl

5、= CSL_MCBSP_IOMODE_TXDIS_RXDIS , CSL_MCBSP_DLBMODE_OFF, /关闭自环模式 CSL_MCBSP_CLKSTP_DISABLE;/* Receive data setup */CSL_McbspDataSetup mcbspRxData = CSL_MCBSP_PHASE_SINGLE, CSL_MCBSP_WORDLEN_8, 1, /frame length (CSL_McbspWordLen)0, 0, /CSL_MCBSP_FRMSYNC_IGNORE, /frame sinc ignoreCSL_MCBSP_FRMSYNC_DETEC

6、T, 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;精品./* Transmit data setup */CSL_McbspDataSetup mcbspTxData = CSL_MCBSP_PHASE_SINGLE, CSL_MCBSP_WORDLEN_8, 1,/每次发送一个

7、元素 (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;/* Clock setup defaults */CSL_McbspClkSetup mcb

8、spClock = CSL_MCBSP_FSCLKMODE_INTERNAL, /* XMT Frame-sync */ /CSL_MCBSP_FSCLKMODE_INTERNAL, /* RCV Frame-sync */CSL_MCBSP_FSCLKMODE_EXTERNAL, CSL_MCBSP_TXRXCLKMODE_INTERNAL, /* XMT clock */ / CSL_MCBSP_TXRXCLKMODE_INTERNAL, /* RCV clock */ CSL_MCBSP_TXRXCLKMODE_EXTERNAL, CSL_MCBSP_FSPOL_ACTIVE_HIGH,

9、 /* XMT Frame-sync active high */ CSL_MCBSP_FSPOL_ACTIVE_HIGH, /* RCV Frame-sync active high */ CSL_MCBSP_CLKPOL_TX_RISING_EDGE, /* XMT clock rising edge */ /CSL_MCBSP_CLKPOL_RX_FALLING_EDGE,/* RCV clock falling edge */CSL_MCBSP_CLKPOL_RX_RISING_EDGE,/* RCV clock falling edge */ 0, /* Frame-sync pul

10、se width = 1 bit */ 0x8, /* Frame-sync pulse period 17clk*/ 0x5, /*clk divide by 6 */ CSL_MCBSP_SRGCLK_CLKCPU, CSL_MCBSP_CLKPOL_TX_RISING_EDGE ,/* CLKS pin signal rising edge */ CSL_MCBSP_TXFSMODE_DXRCOPY,/CSL_MCBSP_TXFSMODE_SRG, CSL_MCBSP_CLKGSYNCMODE_OFF /* GSYNC = 0 means no clock synchronisation

11、 */;/* Multichannel setup */CSL_McbspMulChSetup mcbspMul = 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

12、*/ CSL_MCBSP_PBBLK_1 /* txPartABlk */;/* Mcbsp hwsetup */CSL_McbspHwSetup myHwSetup = &mcbspGbl, &mcbspRxData, &mcbspTxData, &mcbspClock, &mcbspMul, CSL_MCBSP_EMU_FREERUN, NULL;/* Intc declaration */CSL_IntcContext intcContext; CSL_IntcEventHandlerRecord EventHandler100;CSL_IntcObj intcObjEdma;CSL_I

13、ntcHandle hIntcEdma; CSL_IntcGlobalEnableState state;CSL_IntcEventHandlerRecord EventRecord;CSL_IntcParam vectId; CSL_Edma3HwDmaChannelSetup dmahwSetupCSL_EDMA3_NUM_DMACH = CSL_EDMA3_DMACHANNELSETUP_DEFAULT;CSL_Edma3HwSetup hwSetup = &dmahwSetup0,NULL;/* Globals */* Edma handle */CSL_Edma3Handle hMo

14、dule; /* PaRAM settings for sets 13 (receive) and 65 (receive ping reload) */CSL_Edma3ParamSetup gParamSetupRcvPing = / PaRAM Set Structure for receive ping 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_

15、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), / srcDstBi

16、dx - (SRCBIDX, DSTBIDX) CSL_EDMA3_LINKBCNTRLD_MAKE(0x4800, 1), / linkBcntrld - (LINK, BCNTRLD) CSL_EDMA3_CIDX_MAKE(0,0), / srcDstCidx - (SRCCIDX, DSTCIDX) 1 / cCnt - CCNT;/* PaRAM settings for set 64 (transmit pong reload) */CSL_Edma3ParamSetup gParamSetupRcvPong = / PaRAM Set Structure for receive

17、pong 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, / srcAd

18、dr - 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

19、 / cCnt - CCNT;void edmaInit()精品. CSL_Edma3Obj edmaObj; CSL_Edma3ParamHandle hParamBasic1; CSL_Edma3ChannelObj chObjXmt, chObjRcv; CSL_Edma3CmdIntr regionIntr; CSL_Edma3CmdDrae regionAccess; CSL_Edma3ChannelHandle hChannelXmt, hChannelRcv; CSL_Edma3Context context; CSL_Edma3ChannelAttr chAttrXmt, ch

20、AttrRcv; CSL_Status status; Uint32i; /* Intc module initialization */ intcContext.eventhandlerRecord = EventHandler; intcContext.numEvtEntries = 10; CSL_intcInit(&intcContext); /* Enable NMIs */ CSL_intcGlobalNmiEnable(); /* Enable global interrupts */ CSL_intcGlobalEnable(&state); /* Opening a intc

21、 handle for edma event */ vectId = CSL_INTC_VECTID_4; hIntcEdma = CSL_intcOpen (&intcObjEdma, CSL_INTC_EVENTID_EDMA3CC_INT1, &vectId , NULL); /* Module initialization */ status = CSL_edma3Init(&context); if (status != CSL_SOK) printf (Edma module initialization failedn); return; /* Edma module open

22、*/ hModule = CSL_edma3Open(&edmaObj,CSL_EDMA3,NULL,&status); /* Setup the DRAE masks * DRAE enable(Bits 0-15) for the shadow region 1. */ regionAccess.region = CSL_EDMA3_REGION_1 ; regionAccess.drae = 0xFFFFFFFF ; regionAccess.draeh = 0xFFFFFFFF ; CSL_edma3HwControl(hModule,CSL_EDMA3_CMD_DMAREGION_E

23、NABLE, ®ionAccess); 精品. /* DMA chanel - PaRAM mapping, queue assignment */ dmahwSetup12.paramNum = 12;dmahwSetup12.que = CSL_EDMA3_QUE_1;dmahwSetup13.paramNum = 13;dmahwSetup13.que = CSL_EDMA3_QUE_1; CSL_edma3HwSetup(hModule,&hwSetup); /* - Setup Receive Chan vnel (McBSP1 receive, param 13) - */

24、/* Channel open */ chAttrRcv.regionNum = CSL_EDMA3_REGION_1; chAttrRcv.chaNum = CSL_EDMA3_CHA_REVT0; hChannelRcv = CSL_edma3ChannelOpen(&chObjRcv, CSL_EDMA3, &chAttrRcv, &status); /* Set up parameter block 65 as EDMA transmit ping reload */ hParamBasic1 = CSL_edma3GetParamHandle(hChannelRcv,65,NULL)

25、; status = CSL_edma3ParamSetup(hParamBasic1,&gParamSetupRcvPing);/* Set up parameter block 64 as EDMA transmit pong reload */ hParamBasic1 = CSL_edma3GetParamHandle(hChannelRcv,64,NULL); CSL_edma3ParamSetup(hParamBasic1,&gParamSetupRcvPong);/* Set up parameter block 13 as EDMA transmit (start with c

26、opy of ping) */ hParamBasic1 = CSL_edma3GetParamHandle(hChannelRcv,13,NULL); CSL_edma3ParamSetup(hParamBasic1,&gParamSetupRcvPing);/* Set up channel and queue relationships */ CSL_edma3HwChannelSetupParam(hChannelRcv, 13);CSL_edma3HwChannelSetupQue(hChannelRcv, CSL_EDMA3_QUE_1);/* Association of an

27、EDMA event handler with the INTC routine */ EventRecord.handler = &eventEdmaHandler; EventRecord.arg = (void*)(hModule); CSL_intcPlugEventHandler(hIntcEdma,&EventRecord); /* Enabling event edma */ CSL_intcHwControl(hIntcEdma,CSL_INTC_CMD_EVTENABLE,NULL);精品./* Hook up the EDMA event with an completio

28、n code function handler */EdmaEventHook(15, tcc1Fxn); / EdmaEventHook(1, tcc1Fxn); /* Enable EDMA region interrupts */ regionIntr.region = CSL_EDMA3_REGION_1 ; regionIntr.intr = 0x0000C000; regionIntr.intrh = 0x00000000; CSL_edma3HwControl(hModule,CSL_EDMA3_CMD_INTR_ENABLE,®ionIntr); /* Receive e

29、vent clear and enable ,备注用于外部触发使用*/CSL_edma3HwChannelControl(hChannelRcv,CSL_EDMA3_CMD_CHANNEL_CLEAR,NULL); CSL_edma3HwChannelControl(hChannelRcv,CSL_EDMA3_CMD_CHANNEL_ENABLE,NULL); /* Clear CPU interrupt event 72 (EVTCLR2) */*(Uint32*)0x1800048) = 0x00000100; /* Enable CPU interrupt event 72 (EVTMA

30、SK2) */*(Uint32*)0x1800088) = 0x00000100; /* Manually trigger the receive channel 备注,如果手动触发的话,就不要使能通道,即 CSL_edma3HwChannelControl(hChannelRcv,CSL_EDMA3_CMD_CHANNEL_ENABLE,NULL)这句话要注释掉;*/ /*for (i = 1; i PERLOCK, DEV_PERLOCK_LOCKVAL, UNLOCK); /* Enable the powersaver for the MCBSP 0 */ CSL_FINST (CSL

31、_DevRegs*)CSL_DEV_REGS)-PERCFG0, DEV_PERCFG0_MCBSP0CTL, ENABLE);do mcbsp1En = (Bool) CSL_FEXT(CSL_DevRegs*)CSL_DEV_REGS)-PERSTAT0, DEV_PERSTAT0_MCBSP0STAT); while (mcbsp1En != TRUE); printf(Powersaver for MCBSP 1 is enabledn);init_McBSP0();/* Start the EDMA controller */edmaInit();void tcc1Fxn(void)

32、 intFlag = 1;精品.void init_McBSP0(void) CSL_Status status = CSL_SOK; CSL_McbspContext pContext; CSL_McbspObj mcbspObj; /Uint16 loopIndex; CSL_BitMask16 ctrlMask; /CSL_BitMask16 response; CSL_McbspHwSetup readHwSetup; /Uint16 maxTimeout = 1000; /Uint16 timeout = 0; /Uint16 errCount = 0; CSL_McbspGloba

33、lSetup globalSetup; CSL_McbspDataSetup rxDataSetup; CSL_McbspDataSetup txDataSetup; CSL_McbspClkSetup clkSetup; /* Clear local data structures */ memset (&readHwSetup, 0, sizeof(CSL_McbspHwSetup); memset (&mcbspObj, 0, sizeof(CSL_McbspObj); /* Allocated memory for variable */ readHwSetup.global = &g

34、lobalSetup; readHwSetup.rxdataset = &rxDataSetup; readHwSetup.txdataset = &txDataSetup; readHwSetup.clkset = &clkSetup; /* Data Arrays */ /*for (loopIndex = 0; loopIndex NumOfWords; loopIndex+) xmtloopIndex = loopIndex; rcvloopIndex = 0; */ printf(n*singleChannelTransmission*n); /* Initialize the MC

35、BSP CSL module */ status = CSL_mcbspInit(&pContext); if (status != CSL_SOK) printf(Mcbsp initialization failedn); return; /* Open the CSL module */ hMcbsp = CSL_mcbspOpen (&mcbspObj, CSL_MCBSP_0, NULL, &status);精品. if (hMcbsp = NULL) | (status != CSL_SOK) printf (MCBSP: Opening instance. Failed.n);

36、printf (tReason: Error opening the instance. status = 0x%x, hMcbsp = 0x%xn, status, hMcbsp); exit(1); /* Disable MCBSP transmit and receive */ ctrlMask = CSL_MCBSP_CTRL_RX_DISABLE | CSL_MCBSP_CTRL_TX_DISABLE | CSL_MCBSP_CTRL_FSYNC_DISABLE | CSL_MCBSP_CTRL_SRG_DISABLE; CSL_mcbspHwControl (hMcbsp, CSL_MCBSP_CMD_RESET_CONTROL, &ctrlMask); /* Setup hardware parameters */ status= CSL_mcbspHwSetup (hMcbsp , &myHwSetup);

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1