Other Parts Discussed in Thread: OMAP-L137, DA8XX
Hi, I study OMAP-L137.
Current audio dac drivers are study. Pereripheral TX& RX OK.( Reference wasevmomapl137_v1 )
I set mcasp register for dma & afifo. But, Not work.
I don't konw mcasp dma & afifo. Examples do exist??
plz, help.
//=======================
#define mcasp_set_bits(v,a) davinci_cfg_writel((davinci_cfg_readl(a))|(v),a)
#define mcasp_clr_bits(v,a) davinci_cfg_writel((davinci_cfg_readl(a))&~(v),a)
#define mcasp_get_reg(a) davinci_cfg_readl(a)
#define mcasp_set_reg(v,a) davinci_cfg_writel(v,a)
#define mcasp_mod_bits(v,m,a) davinci_cfg_writel((davinci_cfg_readl(a)&~m)|(v&m),a)
static inline void mcasp_set_ctl_reg(u32 v, u32 a){
mcasp_set_bits(v, a);
while ((mcasp_get_reg(a) & v) != v);
}
my set register
// H/W_SET ==========================================================================================
mcasp_set_reg(0, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_GBLCTL_REG); // 1. GBLCTL = 0
mcasp_mod_bits(WNUMDMA(2), WNUMDMA(0xFF), DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_WFIFOCTL_REG); //2.Write FIFO
mcasp_mod_bits(WNUMEVT(2), WNUMEVT(0xFF), DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_WFIFOCTL_REG);
mcasp_set_bits(WENA, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_WFIFOCTL_REG);
mcasp_set_reg(0x0000FFFF, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XMASK_REG); // 3. XMASK(FORMAT_MASK) =>Check;
mcasp_mod_bits(XROT(4), XROT(0x7),DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XFMT_REG); //XFMT
mcasp_set_bits(XBUSEL, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XFMT_REG);
mcasp_mod_bits(XSSZ(7), XSSZ(0xF),DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XFMT_REG);
mcasp_set_bits(XRVRS , DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XFMT_REG);
mcasp_mod_bits(XDATDLY(0), XDATDLY(0x3),DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XFMT_REG);
mcasp_set_bits(FSXM |FXWID, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_AFSXCTL_REG); // AFSXCTL(Frame Sync): Internally, Single word
mcasp_mod_bits(XMOD(2), XMOD(0x1FF), DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_AFSXCTL_REG); // I2S(2Slot), 48KHz
mcasp_set_bits(CLKXM, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_ACLKXCTL_REG); //ACLKXCTL: Internally
mcasp_set_bits(ASYNC,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_ACLKXCTL_REG); //ACLKXCTL: ASYNC
mcasp_mod_bits(CLKXDIV(7), CLKXDIV(0x1F),DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_ACLKXCTL_REG); //Divide : 1.5MHz
mcasp_set_bits(HCLKXM, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_AHCLKXCTL_REG); //AHCLKXCTL: Internally
mcasp_mod_bits(HCLKXDIV(1), HCLKXDIV(0xFFF), DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_AHCLKXCTL_REG); //Divide : 12MHz
mcasp_set_reg(0x03,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XTDM_REG); //XTDM : Slot active.
//mcasp_set_reg(0x00,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XINTCTL_REG); //INT: XDATA =====> Check.
//mcasp_set_reg(0x00,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XCLKCHK_REG); //XCLKCHK : Clk_Check
mcasp_mod_bits(SRMOD(1), SRMOD(0x3), DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_SRCTL11_REG); //SRCTL11 : Serializer Tx
mcasp_set_reg(BIT(0),DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XEVTCTL_REG); //DMA request enable bit
mcasp_set_reg(0,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_PFUNC_REG); //PIN_FUNCTION: MCASP_MODE
mcasp_set_bits( ACLKX | AHCLKX | AFSX|BIT(11) ,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_PDIR_REG); //PIN_DIR:Mute,Clk Out,AXR11
mcasp_set_reg(0,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_AMUTE_REG);
// CLK ==========================================================================================
mcasp_set_ctl_reg(XHCLKRST,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_GBLCTL_REG); //3. Start_AHCLKX
mcasp_set_ctl_reg(XCLKRST, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_GBLCTL_REG); //4. Start_ACLKX
mcasp_set_reg( 0xFFFF, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XSTAT_REG); //5. Activate serializers->XSTAT
mcasp_set_ctl_reg(XSRCLR, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_GBLCTL_REG); //6. Active_Serializers
mcasp_set_reg(0,DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_XBUF_REG);
mcasp_set_ctl_reg(XSMRST, DA8XX_MCASP1_CNTRL_BASE + DAVINCI_MCASP_GBLCTL_REG); //7. Release_State_Machines
mcasp_set_ctl_reg(XFRST, MCASP_BASE + DAVINCI_MCASP_GBLCTL_REG); //8. Release_Frame_Sync