📄 tmcbsp55.c.bak
字号:
//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
break;
case MCBSP_CPU_SGR_CLK:
MCBSP_FSET_H(hmc,PCR,CLKXM,1);
MCBSP_FSET_H(hmc,SRGR2,CLKSM,1);
MCBSP_FSET_H(hmc,PCR,SCLKME,0); //永远是上升沿
break;
case MCBSP_CLKR_SGR_CLK:
MCBSP_FSET_H(hmc,PCR,CLKXM,1);
MCBSP_FSET_H(hmc,PCR,CLKRM,1);
MCBSP_FSET_H(hmc,SRGR2,CLKSM,0);
MCBSP_FSET_H(hmc,PCR,SCLKME,1);
MCBSP_FSET_H(hmc,PCR,CLKRP,pola);
break;
case MCBSP_CLKX_CLK:
MCBSP_FSET_H(hmc,PCR,CLKXM,0);
/*
MCBSP_FSET_H(hmc,SRGR2,CLKSM,1);
MCBSP_FSET_H(hmc,PCR,SCLKME,1);
*/
//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
MCBSP_FSET_H(hmc,PCR,CLKXP,(1^pola));
break;
case MCBSP_CLKX_SGR_CLK:
MCBSP_FSET_H(hmc,PCR,CLKXM,1);
MCBSP_FSET_H(hmc,SRGR2,CLKSM,1);
MCBSP_FSET_H(hmc,PCR,SCLKME,1);
//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
MCBSP_FSET_H(hmc,PCR,CLKXP,(1^pola));
break;
default:
puts("invallid mcbsp clk source\n");
break;
}
MCBSP_FSET_H(hmc,SRGR1,CLKGDV,(div-1));
}
void McBspSetRxClk(MCBSP_Handle hmc,Uint16 div /*分频比*/,Uint16 clk_src /*是否是外部fs*/,
Uint16 pola /*帧同步的极性*/
)
/*
#define MCBSP_EXTERNAL_SGR_CLK 0
#define MCBSP_CPU_SGR_CLK 1
#define MCBSP_CLKR_CLK 2
#define MCBSP_CLKX_CLK 3
#define MCBSP_CLKR_SGR_CLK 4
#define MCBSP_CLKX_SGR_CLK 5
#define MCBSP_CLK_POLAR_UP 1 //上升沿采样
#define MCBSP_CLK_POLAR_DOWN 0 //下降沿采样
#define MCBSP_CLK_SRC_YES 0
#define MCBSP_CLK_SRC_NO 1
*/
{
switch(clk_src){
case MCBSP_EXTERNAL_SGR_CLK:
MCBSP_FSET_H(hmc,PCR,CLKRM,1);
MCBSP_FSET_H(hmc,SRGR2,CLKSM,0);
MCBSP_FSET_H(hmc,PCR,SCLKME,0);
MCBSP_FSET_H(hmc,SRGR2,CLKSP,(1^pola));
//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
break;
case MCBSP_CPU_SGR_CLK:
MCBSP_FSET_H(hmc,PCR,CLKRM,1);
MCBSP_FSET_H(hmc,SRGR2,CLKSM,1);
MCBSP_FSET_H(hmc,PCR,SCLKME,0); //永远是上升沿
break;
case MCBSP_CLKR_CLK:
MCBSP_FSET_H(hmc,PCR,CLKRM,0);
MCBSP_FSET_H(hmc,PCR,CLKRP,pola);
break;
case MCBSP_CLKR_SGR_CLK:
MCBSP_FSET_H(hmc,PCR,CLKRM,1);
MCBSP_FSET_H(hmc,SRGR2,CLKSM,0);
MCBSP_FSET_H(hmc,PCR,SCLKME,1);
MCBSP_FSET_H(hmc,PCR,CLKRP,pola);
break;
case MCBSP_CLKX_SGR_CLK:
MCBSP_FSET_H(hmc,PCR,CLKRM,1);
MCBSP_FSET_H(hmc,PCR,CLKXM,0);
MCBSP_FSET_H(hmc,SRGR2,CLKSM,1);
MCBSP_FSET_H(hmc,PCR,SCLKME,1);
MCBSP_FSET_H(hmc,PCR,CLKXP,(1^pola));
//CLKSP/CLKXP对沿的定义与MCBSP_CLK_POLAR_UP相反
break;
default:
puts("invallid mcbsp clk source\n");
break;
}
MCBSP_FSET_H(hmc,SRGR1,CLKGDV,(div-1));
}
void McBspSetRxInt(MCBSP_Handle hmc,Uint16 sync_err,Uint16 int_mode,void (*func)(),Uint16 prio)
/*
sync_err:1,frame_sync有错误时会产生中断;0忽略错误????
int_mode:
#define MCBSP_INTM_WORD 0
#define MCBSP_INTM_BLOCK 1
#define MCBSP_INTM_FS 2
#define MCBSP_INTM_ERR 3 //如果设置呢ie_msl!=0,则无论int_mode设置成什么值,接收错误都会引发中断
#define MCBSP_INTM_NULL 255
*/
{
Uint16 flag=0,int_no=0;
MCBSP_FSET_H(hmc,SPCR1,RSYNCERR,sync_err);
if(sync_err)
flag=1;
if(int_mode!=MCBSP_INTM_NULL){
MCBSP_FSET_H(hmc,SPCR1,RINTM,int_mode);
flag=1;
}
if(!flag)
return;
int_no=MCBSP_getRcvEventId(hmc);
//MCBSP_RGET_H(hdma,DMACSR);
//读相应的域,清除以往的状态???是否应该改成写操作
MCBSP_FGET_H(hmc,SPCR1,RSYNCERR);
MCBSP_FGET_H(hmc,SPCR1,RFULL);
MCBSP_FGET_H(hmc,SPCR1,RRDY);
MCBSP_FSET_H(hmc,SPCR1,RSYNCERR,0);
MCBSP_FSET_H(hmc,SPCR1,RFULL,0);
MCBSP_FSET_H(hmc,SPCR1,RRDY,0);
IRQ_clear(int_no);
IRQ_plug(int_no,func,prio);
IRQ_enable(int_no);
}
void McBspSetTxInt(MCBSP_Handle hmc,Uint16 sync_err,Uint16 int_mode,void (*func)(),Uint16 prio)
/*
sync_err:1,frame_sync有错误时会产生中断;0忽略错误????
int_mode:
#define MCBSP_INTM_WORD 0
#define MCBSP_INTM_BLOCK 1
#define MCBSP_INTM_FS 2
#define MCBSP_INTM_ERR 3 //如果设置呢ie_msl!=0,则无论int_mode设置成什么值,接收错误都会引发中断
#define MCBSP_INTM_NULL 255
*/
{
Uint16 flag=0,int_no=0;
MCBSP_FSET_H(hmc,SPCR2,XSYNCERR,sync_err);
if(sync_err)
flag=1;
if(int_mode!=MCBSP_INTM_NULL){
MCBSP_FSET_H(hmc,SPCR2,XINTM,int_mode);
flag=1;
}
if(!flag)
return;
int_no=MCBSP_getXmtEventId(hmc);
//MCBSP_RGET_H(hdma,DMACSR);
//读相应的域,清除以往的状态???是否应该改成写操作
MCBSP_FGET_H(hmc,SPCR2,XSYNCERR);
MCBSP_FGET_H(hmc,SPCR2,XEMPTY);
MCBSP_FGET_H(hmc,SPCR2,XRDY);
MCBSP_FSET_H(hmc,SPCR2,XSYNCERR,0);
MCBSP_FSET_H(hmc,SPCR2,XEMPTY,0);
MCBSP_FSET_H(hmc,SPCR2,XRDY,0);
IRQ_clear(int_no);
IRQ_plug(int_no,func,prio);
IRQ_enable(int_no);
}
void McBspStartTx(MCBSP_Handle hmc)
{
McBspSetMskBit(MCBSP_getPort(hmc),MCBSP_RX_USED_BIT,1); //
McBspTxReset(hmc,1);
}
void McBspStartRx(MCBSP_Handle hmc)
{
McBspSetMskBit(MCBSP_getPort(hmc),MCBSP_RX_USED_BIT,1); //
McBspRxReset(hmc,1);
}
void McBspStopTx(MCBSP_Handle hmc)
{
McBspTxReset( hmc, 0);
}
void McBspStopRx(MCBSP_Handle hmc)
{
McBspRxReset( hmc, 0);
}
void McBspClose(MCBSP_Handle hmc)
{
McBspSetMskBit( MCBSP_getPort(hmc), MCBSP_TX_USED_BIT, 0); //
McBspSetMskBit( MCBSP_getPort(hmc), MCBSP_TX_MSK_BIT, MCBSP_AS_GPIO); //
McBspSetMskBit( MCBSP_getPort(hmc), MCBSP_RX_USED_BIT, 0); //
McBspSetMskBit( MCBSP_getPort(hmc), MCBSP_RX_MSK_BIT, MCBSP_AS_GPIO); //
MCBSP_close(hmc);
}
void McBspRxReset(MCBSP_Handle hmc,Uint16 val)
//val=0 reset and disable
// 1 enable
{
MCBSP_FSET_H(hmc,SPCR1,RRST,val);
}
void McBspTxReset(MCBSP_Handle hmc,Uint16 val)
{
MCBSP_FSET_H(hmc,SPCR2,XRST,val);
}
void McBspSampleRateGeneratorReset(MCBSP_Handle hmc,Uint16 val)
//Sample rate generator reset
{
MCBSP_FSET_H(hmc,SPCR2,GRST,val);
}
void McBspFrameSyncLogicReset(MCBSP_Handle hmc,Uint16 val)
//Frame-synchronization logic reset
{
MCBSP_FSET_H(hmc,SPCR2,FRST,val);
}
Int16 MCBSP_RdIO(MCBSP_Handle hmc,Uint16 gpio_no)
/*gpio_no:
#define MCBSP_CLKX_IO 0
#define MCBSP_CLKR_IO 1
#define MCBSP_FSX_IO 2
#define MCBSP_FSR_IO 3
#define MCBSP_DX_IO 4
#define MCBSP_DR_IO 5
#define MCBSP_CLKS_IO 6
*/
/*
如果端口类型不对,返回-1;否则返回恰当的值
*/
{
return(-1);
}
Int16 MCBSP_WrIO(MCBSP_Handle hmc,Uint16 gpio_no,Uint16 val)
/*gpio_no:
#define MCBSP_CLKX_IO 0
#define MCBSP_CLKR_IO 1
#define MCBSP_FSX_IO 2
#define MCBSP_FSR_IO 3
#define MCBSP_DX_IO 4
#define MCBSP_DR_IO 5
#define MCBSP_CLKS_IO 6
*/
/*
如果端口类型不对,返回-1;否则返回val
*/
{
return(-1);
}
void McBspIdle(MCBSP_Handle hdmc,Uint16 isidle)
{
//使mcbsp进入低功耗状态
}
extern MCBSP_Handle hbsp;
Uint32 tx_test=0x55aa55aa;
void BspRxIsr(void)
//给dma中断写的一个中断服务程序 查询frame/last frame/block中断
//blk中断后关闭dma并清空fifo。
{
Uint32 i;
//MCBSP_RGET_H
i=i^0xffffffff;
MCBSP_write32(hbsp,i);
puts("mcbsp rx interrupt\n");
}
void BspTxIsr(void)
//给dma中断写的一个中断服务程序 查询frame/last frame/block中断
//blk中断后关闭dma并清空fifo。
{ Uint32 i=0;
//MCBSP_RGET_H
i=MCBSP_read32(hbsp);
i=i+1;
puts("mcbsp tx interrupt\n");
}
#endif //_MCBSP55_C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -