Hi,
i have a problem with my McASP.
I don't want use the DSP/BIOS so i configured the McASP with the CSL.
On transmit/receive i hope to get an interrupt, but i don't get one.
The entries in the config structures are from an other project without
the use of CSL.
So i think they are correct.
But i think my initialisation is bugy !?
I hope you can help me.
code:
#include "mcasp.h"
#pragma DATA_SECTION(hMcasp, ".akonv");
volatile MCASP_Handle hMcasp;
//*----------------------------------------------------------------------------*/
//* McASP initialization function
//*
//* port: McASP port
//*----------------------------------------------------------------------------*/
void mcasp_init( Uint8 port )
{
/* global registers */
MCASP_ConfigGbl cfgMCASPGBL = {
/* pin function register */
MCASP_PFUNC_RMK( MCASP_PFUNC_AFSR_MCASP, /* McASP function */
MCASP_PFUNC_AHCLKR_MCASP, /* McASP function */
MCASP_PFUNC_ACLKR_MCASP, /* McASP function */
MCASP_PFUNC_AFSX_MCASP, /* McASP function */
MCASP_PFUNC_AHCLKX_MCASP, /* McASP function */
MCASP_PFUNC_ACLKX_MCASP, /* McASP function */
MCASP_PFUNC_AMUTE_MCASP, /* McASP function */
// MCASP_PFUNC_AXR15_MCASP, /* McASP function */
// MCASP_PFUNC_AXR14_MCASP, /* McASP function */
// MCASP_PFUNC_AXR13_MCASP, /* McASP function */
// MCASP_PFUNC_AXR12_MCASP, /* McASP function */
// MCASP_PFUNC_AXR11_MCASP, /* McASP function */
// MCASP_PFUNC_AXR10_MCASP, /* McASP function */
// MCASP_PFUNC_AXR9_MCASP, /* McASP function */
// MCASP_PFUNC_AXR8_MCASP, /* McASP function */
MCASP_PFUNC_AXR7_MCASP, /* McASP function */
MCASP_PFUNC_AXR6_MCASP, /* McASP function */
MCASP_PFUNC_AXR5_MCASP, /* McASP function */
MCASP_PFUNC_AXR4_GPIO, /* GPIO function: Timer1: TOUT1 */
MCASP_PFUNC_AXR3_MCASP, /* McASP function */
MCASP_PFUNC_AXR2_MCASP, /* McASP function */
MCASP_PFUNC_AXR1_MCASP, /* McASP function */
MCASP_PFUNC_AXR0_MCASP /* McASP function */
),
/* pin direction register */
MCASP_PDIR_RMK( MCASP_PDIR_AFSR_DEFAULT, /* Input: None */
MCASP_PDIR_AHCLKR_IN, /* Input: MCLK */
MCASP_PDIR_ACLKR_DEFAULT, /* Input: None */
MCASP_PDIR_AFSX_OUT, /* Output: LRCLK */
MCASP_PDIR_AHCLKX_IN, /* Input: MCLK */
MCASP_PDIR_ACLKX_OUT, /* Output: BCLK */
MCASP_PDIR_AMUTE_DEFAULT, /* Input: None */
// MCASP_PDIR_AXR15_DEFAULT, /* Input: None */
// MCASP_PDIR_AXR14_DEFAULT, /* Input: None */
// MCASP_PDIR_AXR13_DEFAULT, /* Input: None */
// MCASP_PDIR_AXR12_DEFAULT, /* Input: None */
// MCASP_PDIR_AXR11_DEFAULT, /* Input: None */
// MCASP_PDIR_AXR10_DEFAULT, /* Input: None */
// MCASP_PDIR_AXR9_DEFAULT, /* Input: None */
// MCASP_PDIR_AXR8_DEFAULT, /* Input: None */
MCASP_PDIR_AXR7_OUT, /* Output: D_DATA_OUT */
MCASP_PDIR_AXR6_OUT, /* Output: A_DATA_OUT */
MCASP_PDIR_AXR5_DEFAULT, /* Input: None */
MCASP_PDIR_AXR4_OUT, /* Output: Timer1 */
MCASP_PDIR_AXR3_IN, /* Input: D_DATA_IN2 */
MCASP_PDIR_AXR2_IN, /* Input: D_DATA_IN */
MCASP_PDIR_AXR1_IN, /* Input: A_DATA_IN2 */
MCASP_PDIR_AXR0_IN /* Input: A_DATA_IN */
),
/* DIT mode control register */
MCASP_DITCTL_RMK( MCASP_DITCTL_VB_ZERO, /* valid bit for odd time
slots (right subframe) */
MCASP_DITCTL_VA_ZERO, /* valid bit for even time slots (left
subframe) */
MCASP_DITCTL_DITEN_TDM /* TDM or Burst mode */
),
/* digital loopback control register */
MCASP_DLBCTL_RMK( MCASP_DLBCTL_MODE_DEFAULT, /* loopback generator
mode */
MCASP_DLBCTL_ORD_DEFAULT, /* loopback order */
MCASP_DLBCTL_DLBEN_DISABLE /* loopback disabled */
),
/* audio mute control register */
MCASP_AMUTE_RMK( MCASP_AMUTE_XDMAERR_DISABLE, /* transmit DMA
error */
MCASP_AMUTE_RDMAERR_DISABLE, /* receive DMA error */
MCASP_AMUTE_XCKFAIL_DISABLE, /* transmit clock failure */
MCASP_AMUTE_RCKFAIL_DISABLE, /* receive clock failure */
MCASP_AMUTE_XSYNCERR_DISABLE, /* unexpected transmit frame
synx error */
MCASP_AMUTE_RSYNCERR_DISABLE, /* unexpected receive frame synx
error */
MCASP_AMUTE_XUNDRN_DISABLE, /* transmiter underrun
error */
MCASP_AMUTE_ROVRN_DISABLE, /* receiver overrun error */
// MCASP_AMUTE_INSTAT_DEFAULT, /* AMUTEIN pin inactive */
MCASP_AMUTE_INEN_DISABLE, /* AMUTEIN is ignored by
AMUTE */
// MCASP_AMUTE_INPOL_ACTHIGH, /* polarity is active
high */
MCASP_AMUTE_MUTEN_DISABLE /* AMUTE pin disabled */
)
};
/* receive registers */
MCASP_ConfigRcv cfgMCASPRCV = {
/* receive format unit bit mask register */
0x00FFFFFF, /* masked with value of rpad,rpbit in rfmt */
/* receive bit stream format register */
MCASP_RFMT_RMK( MCASP_RFMT_RDATDLY_0BIT, /* receive bit
delay */
MCASP_RFMT_RRVRS_MSBFIRST, /* bitsream is MSB first */
MCASP_RFMT_RPAD_RPBIT, /* pad extra bits with one specified
by RPBIT */
MCASP_RFMT_RPBIT_OF(0x23), /* use bit 23 to pad extra
bits */
MCASP_RFMT_RSSZ_32BITS, /* slot size ist 32 bits */
MCASP_RFMT_RBUSEL_CFG, /* reads from XRBUF[n] originate on
configuration bus */
MCASP_RFMT_RROT_8BITS /* rotate rigth by 8 bit
positions */
),
/* receive frame sync control register */
MCASP_AFSRCTL_RMK( MCASP_AFSRCTL_RMOD_OF(0x02), /* 2-slot
TDM */
MCASP_AFSRCTL_FRWID_WORD, /* single word */
MCASP_AFSRCTL_FSRM_INTERNAL, /* internally generated receive
frame sync */
MCASP_AFSRCTL_FSRP_ACTIVEHIGH /* rising edge indicates the
beginning of frame */
),
/* receive clock control register */
MCASP_ACLKRCTL_RMK( MCASP_ACLKRCTL_CLKRP_RISING, /* sample at
rising edge of the serial clock */
MCASP_ACLKRCTL_CLKRM_INTERNAL, /* internal receive clock
source: sysclock2 */
MCASP_ACLKRCTL_CLKRDIV_OF(0x01) /* divide receive clock by 2
(BCLK: 12,288) */
),
/* receive high-frequency clock control register */
MCASP_AHCLKRCTL_RMK(MCASP_AHCLKRCTL_HCLKRM_EXTERNAL, /* external
clock from AHCLKR */
MCASP_AHCLKRCTL_HCLKRP_RISING, /* rising edge */
MCASP_AHCLKRCTL_HCLKRDIV_OF(0x01) /* divide receive clock by 2
(BCLK: 12,288) */
),
/* receive TDM slot register */
0x00000002, /* TDM time slot 0,1 active */
/* receiver interrupt control register */
MCASP_RINTCTL_RMK( MCASP_RINTCTL_RSTAFRM_ENABLE, /* receive start
of frame... */
MCASP_RINTCTL_RDATA_ENABLE, /* receive data
ready... */
MCASP_RINTCTL_RLAST_ENABLE, /* receive last slot... */
MCASP_RINTCTL_RDMAERR_ENABLE, /* receive DMA
error... */
MCASP_RINTCTL_RCKFAIL_ENABLE, /* receive clock
failure... */
MCASP_RINTCTL_RSYNCERR_ENABLE, /* unexpected receive frame
sync... */
MCASP_RINTCTL_ROVRN_ENABLE /* receiver overrun... */
/* interrupt does generate a McASP receive
interrupt */
),
/* receive clock check control register */
MCASP_RCLKCHK_RMK( MCASP_RCLKCHK_RCNT_DEFAULT, /* */
MCASP_RCLKCHK_RMAX_DEFAULT, /* */
MCASP_RCLKCHK_RMIN_DEFAULT, /* */
MCASP_RCLKCHK_RPS_DIVBY1 /* check prescaler */
)
};
/* transmit registers */
MCASP_ConfigXmt cfgMCASPXMT = {
/* transmit format unit bit mask register */
0x00FFFFFF, /* masked with value of xpad,xpbit in xfmt */
/* transmit bit stream format register */
MCASP_XFMT_RMK( MCASP_XFMT_XDATDLY_0BIT, /* receive bit
delay */
MCASP_XFMT_XRVRS_MSBFIRST, /* bitsream is MSB first */
MCASP_XFMT_XPAD_ZERO, /* pad extra bits with zero */
MCASP_XFMT_XPBIT_OF(0x00), /* pad extra bits with
zero */
MCASP_XFMT_XSSZ_32BITS, /* slot size ist 32 bits */
MCASP_XFMT_XBUSEL_CFG, /* writes to XRBUF[n] originate from
configuration bus */
MCASP_XFMT_XROT_24BITS /* rotate rigth by 24 bit
positions */
),
/* transmit frame sync control register */
MCASP_AFSXCTL_RMK( MCASP_AFSXCTL_XMOD_OF(0x02), /* 2-slot
TDM */
MCASP_AFSXCTL_FXWID_WORD, /* single word */
MCASP_AFSXCTL_FSXM_INTERNAL, /* internally generated transmit
frame sync */
MCASP_AFSXCTL_FSXP_ACTIVELOW /* falling edge indicates the
beginning of frame */
),
/* transmit clock control register */
MCASP_ACLKXCTL_RMK( MCASP_ACLKXCTL_CLKXP_FALLING, /* sample at
falling edge of the serial clock */
MCASP_ACLKXCTL_ASYNC_SYNC, /* synchronous clock for transmit
and receive */
MCASP_ACLKXCTL_CLKXM_INTERNAL, /* internal transmit clock
source: sysclock2 */
MCASP_ACLKXCTL_CLKXDIV_OF(0x01) /* divide transmit clock by 2
(BCLK: 12,288) */
),
/* transmit high-frequency clock control register */
MCASP_AHCLKXCTL_RMK(MCASP_AHCLKXCTL_HCLKXM_EXTERNAL, /* external
clock from AHCLKX */
MCASP_AHCLKXCTL_HCLKXP_RISING, /* rising edge */
MCASP_AHCLKXCTL_HCLKXDIV_OF(0x01) /* divide transmit clock by
2 (BCLK: 12,288) */
),
/* transmit TDM slot register */
0x00000002, /* TDM time slot 0,1 active */
/* transmit interrupt control register */
MCASP_XINTCTL_RMK( MCASP_XINTCTL_XSTAFRM_ENABLE, /* transmit start
of frame... */
MCASP_XINTCTL_XDATA_ENABLE, /* transmit data
ready... */
MCASP_XINTCTL_XLAST_ENABLE, /* transmit last
slot... */
MCASP_XINTCTL_XDMAERR_ENABLE, /* transmit DMA
error... */
MCASP_XINTCTL_XCKFAIL_ENABLE, /* transmit clock
failure... */
MCASP_XINTCTL_XSYNCERR_ENABLE, /* unexpected transmit frame
sync... */
MCASP_XINTCTL_XUNDRN_ENABLE /* transmit overrun... */
/* interrupt does generate a McASP transmit
interrupt */
),
/* transmit clock check control register */
MCASP_XCLKCHK_RMK( MCASP_XCLKCHK_XCNT_DEFAULT, /* */
MCASP_XCLKCHK_XMAX_DEFAULT, /* */
MCASP_XCLKCHK_XMIN_DEFAULT, /* */
MCASP_XCLKCHK_XCKFAILSW_DISABLE,/* transmit clock failure
detect */
MCASP_XCLKCHK_XPS_DIVBY1 /* check prescaler */
)
};
/* serial control registers */
MCASP_ConfigSrctl cfgMCASPSRCTL = {
/* serializer control register 0 */
MCASP_SRCTL_RMK( MCASP_SRCTL_DISMOD_LOW, /* drive on pin
logic */
MCASP_SRCTL_SRMOD_RCV /* serializer is receiver */
),
/* serializer control register 1 */
MCASP_SRCTL_RMK( MCASP_SRCTL_DISMOD_LOW, /* drive on pin
logic */
MCASP_SRCTL_SRMOD_RCV /* serializer is receiver */
),
/* serializer control register 2 */
MCASP_SRCTL_RMK( MCASP_SRCTL_DISMOD_LOW, /* drive on pin
logic */
MCASP_SRCTL_SRMOD_RCV /* serializer is receiver */
),
/* serializer control register 3 */
MCASP_SRCTL_RMK( MCASP_SRCTL_DISMOD_LOW, /* drive on pin
logic */
MCASP_SRCTL_SRMOD_XMT /* serializer is transmitter */
),
/* serializer control register 4 */
MCASP_SRCTL_RMK( MCASP_SRCTL_DISMOD_LOW, /* drive on pin
logic */
MCASP_SRCTL_SRMOD_XMT /* serializer is transmitter */
),
/* serializer control register 5 */
MCASP_SRCTL_RMK( MCASP_SRCTL_DISMOD_LOW, /* drive on pin
logic */
MCASP_SRCTL_SRMOD_XMT /* serializer is transmitter */
),
/* serializer control register 6 */
MCASP_SRCTL_RMK( MCASP_SRCTL_DISMOD_LOW, /* drive on pin
logic */
MCASP_SRCTL_SRMOD_XMT /* serializer is transmitter */
),
/* serializer control register 7 */
MCASP_SRCTL_RMK( MCASP_SRCTL_DISMOD_LOW, /* drive on pin
logic */
MCASP_SRCTL_SRMOD_XMT /* serializer is transmitter */
)
};
if ( port == 0 )
hMcasp = MCASP_open( MCASP_DEV0, MCASP_OPEN_RESET );
else
hMcasp = MCASP_open( MCASP_DEV1, MCASP_OPEN_RESET );
if ( hMcasp != INV )
{
MCASP_configRcv( hMcasp, &cfgMCASPRCV );
MCASP_configXmt( hMcasp, &cfgMCASPXMT );
MCASP_configSrctl( hMcasp, &cfgMCASPSRCTL );
MCASP_configGbl( hMcasp, &cfgMCASPGBL );
/* enable clocks */
MCASP_enableHclk( hMcasp, MCASP_XMTRCV );
while(!( MCASP_FGETH( hMcasp, GBLCTL, XHCLKRST )));
MCASP_enableClk( hMcasp, MCASP_XMTRCV );
while(!( MCASP_FGETH( hMcasp, GBLCTL, XCLKRST )));
// edma_init(0); /* sets EDMA */
WakeRcvXmt(); /* wake up the serializer (receivers) and state
machine */
/* enable frame sync */
MCASP_enableFsync( hMcasp, MCASP_RCVXMT );
while(!(MCASP_FGETH( hMcasp,GBLCTL,RFRST ) & MCASP_FGETH(
hMcasp,GBLCTL,XFRST )));
}
}
//*----------------------------------------------------------------------------*/
//* McASP Wakeup function
//*
//* wake up the receiver by taking the serializer and state machine out
of reset
//*----------------------------------------------------------------------------*/
void WakeRcvXmt()
{
/* enable serializer */
MCASP_enableSers( hMcasp, MCASP_RCVXMT );
while(!(MCASP_FGETH( hMcasp,GBLCTL,RSRCLR ) & MCASP_FGETH(
hMcasp,GBLCTL,XSRCLR )));
MCASP_FGETH( hMcasp, GBLCTL, XSRCLR );
// while(MCASP_FGETH( hMcasp, XSTAT, XDATA ));
MCASP_enableSm( hMcasp, MCASP_RCVXMT );
while(!(MCASP_FGETH( hMcasp,GBLCTL,RSMRST ) & MCASP_FGETH(
hMcasp,GBLCTL,XSMRST )));
MCASP_FGETH( hMcasp, GBLCTL, XSMRST );
}