?? 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有錯誤時會產(chǎn)生中斷;0忽略錯誤????
int_mode:
#define MCBSP_INTM_WORD 0
#define MCBSP_INTM_BLOCK 1
#define MCBSP_INTM_FS 2
#define MCBSP_INTM_ERR 3 //如果設(shè)置呢ie_msl!=0,則無論int_mode設(shè)置成什么值,接收錯誤都會引發(fā)中斷
#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);
//讀相應(yīng)的域,清除以往的狀態(tài)???是否應(yīng)該改成寫操作
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有錯誤時會產(chǎn)生中斷;0忽略錯誤????
int_mode:
#define MCBSP_INTM_WORD 0
#define MCBSP_INTM_BLOCK 1
#define MCBSP_INTM_FS 2
#define MCBSP_INTM_ERR 3 //如果設(shè)置呢ie_msl!=0,則無論int_mode設(shè)置成什么值,接收錯誤都會引發(fā)中斷
#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);
//讀相應(yīng)的域,清除以往的狀態(tài)???是否應(yīng)該改成寫操作
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;否則返回恰當?shù)闹?*/
{
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進入低功耗狀態(tài)
}
extern MCBSP_Handle hbsp;
Uint32 tx_test=0x55aa55aa;
void BspRxIsr(void)
//給dma中斷寫的一個中斷服務(wù)程序 查詢frame/last frame/block中斷
//blk中斷后關(guān)閉dma并清空fifo。
{
Uint32 i;
//MCBSP_RGET_H
i=i^0xffffffff;
MCBSP_write32(hbsp,i);
puts("mcbsp rx interrupt\n");
}
void BspTxIsr(void)
//給dma中斷寫的一個中斷服務(wù)程序 查詢frame/last frame/block中斷
//blk中斷后關(guān)閉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 + -