📄 mcbsp_inti.c
字号:
MCBSP_SRGR_START| MCBSP_SRGR_FRAMESYNC,
MCBSP_SRGR_DEFAULT_DELAY);
}
/***********************************************************************/
/* 函数声明: 中断初始化 */
/* */
/* 函数功能: */
/***********************************************************************/
void interrupt_init(void) {
/* Disable interrupt. */
IRQ_globalDisable();
IRQ_RSET(EXTPOL,0x0F);
IRQ_setVecs(vectors); /* point to the IRQ vector table */
IRQ_map(IRQ_EVT_RINT0,13);
IRQ_disable(IRQ_EVT_RINT0);
IRQ_clear(IRQ_EVT_RINT0);
/* Enable interrupt */
IRQ_enable(IRQ_EVT_RINT0);
IRQ_globalEnable(); /* Globally enable interrupts */
/* Enable NMI interrupt */
IRQ_nmiEnable();
}
/***********************************************************************/
/* 函数声明: MCBSP数据发送; 发送命令帧时用此函数 */
/* */
/* 函数功能: 每次发送一帧的长度 */
/* */
/* 参数: addr,发送数据的地址 */
/***********************************************************************/
void mcbsp_tx(unsigned short * addr)
{
int tempdata,tempnum;
unsigned short check = 0;
for(tempnum=0;tempnum<(FRAMLONGTH-1);tempnum++)
{
tempdata=*(addr++);
check=check^tempdata;
while (!MCBSP_xrdy(hMcbsp));
MCBSP_write32(hMcbsp,tempdata);
}
if(tempnum==(FRAMLONGTH-1))
{
*addr=check;
while (!MCBSP_xrdy(hMcbsp));
MCBSP_write32(hMcbsp,check);
}
tempnum=0;
}
/*******************************************************/
/* mcbspx的初始化: inti_mcbspx */
/******************************************************
void inti_mcbspx()
{
for(i=0;i<FRAMLONGTH;i++)
mcbspx[i]=0;
}*/
/***********************************************************************/
/* 函数声明: MCBSP数据接收 */
/* */
/* 函数功能: 响应中断,读取MCBSP的接收BUFFER内的数据,将数据 */
/* 放在RevBuffer变量中 */
/* */
/* 参数: */
/* Channel: 有效的串口句柄 */
/* datarevlength: 每次从缓冲区读取的长度 */
/* recvaddr: 缓冲区的首址 */
/* */
/* 返回值 0:接收完成 */
/* 1:数据未准备好 */
/* 0xFFFF:串口接收错误 */
/* 2:中断超时错误 */
/* 3: 较验出错 */
/***********************************************************************/
unsigned short mcbsp_rx(unsigned short * recvaddr)
{
unsigned short check = 0;
int j=0;
//数据未准备好
if(datarevlength<FRAMLONGTH)
{
sys_statbuff[RECEIVE_RDY]=1;
return 1;
}
//中断超时
if(timeout==0)
{
sys_statbuff[INT_ERR]=1;
datarevlength=0;
timeout = 0x8000;
return 2;
}
//串口接收错误
if(datarevlength>FRAMLONGTH)
{
sys_statbuff[RECEIVE_RDY] = 0;
sys_statbuff[MCBSP_ERR]=1;
datarevlength=0;
timeout = 0x8000;
return 0xffff;
}
//接收完成
if(datarevlength==FRAMLONGTH)
{
for(j = 0; j<FRAMLONGTH-1;j++)
{
*(recvaddr++) = RevBuffer[j];
check = check ^RevBuffer[j];
}
//接收校验
*recvaddr = RevBuffer[j];
if((*recvaddr) == check)
{
sys_statbuff[CHECK_ERROR] = 0;
sys_statbuff[RECEIVE_RDY] = 0;
}
//校验出错
else
{
sys_statbuff[CHECK_ERROR] = 1;
sys_statbuff[RECEIVE_RDY] = 0;
datarevlength=0;
timeout = 0x8000;
return 3;
}
sys_statbuff[RECEIVE_NEW]=1;
datarevlength=0;
timeout = 0x8000;
return 0;
}
}
/***********************************************************************/
/* 函数声明: 串口接收状态,并设置相应的寄存器默认值 */
/* */
/* 返回值 0:接收完成 */
/* 1:数据未准备好 */
/* 0xFFFF:串口接收错误 */
/* 2:中断超时错误 */
/* 3: 较验出错 */
/***********************************************************************/
short mcbsp_status()
{
/*中断超时错误*/
if(sys_statbuff[INT_ERR] ==1)
{
sys_statbuff[INT_ERR] = 0;
return 2;
}
/*串口接收错误*/
if(sys_statbuff[MCBSP_ERR] == 1)
{
sys_statbuff[MCBSP_ERR] = 0;
return 0xffff;
}
/*数据较验出错*/
if(sys_statbuff[CHECK_ERROR] == 1)
{
sys_statbuff[CHECK_ERROR] = 0;
return 3;
}
/*数据未准备好*/
if(sys_statbuff[RECEIVE_NEW] != 1)
{
return 1;
}
/*接收完成*/
else
{
sys_statbuff[RECEIVE_NEW] = 0;
}
return 0;
}
/***********************************************************************/
/* 函数声明: 接收中断的中断程序 */
/**********************************************************************/
void interrupt c_int13 (void)
{
if(MCBSP_rrdy(hMcbsp) == 1)
{
RevBuffer[datarevlength] = MCBSP_read32(hMcbsp);
datarevlength++;
}
timeout--;
return;
}
/***********************************************************************/
/***********************************************************************/
// 函数名: Com_Datareq()
// 功能: 要求进行数据发送
/***********************************************************************/
Com_Datareq(unsigned short sample,unsigned short num_datasend)
{
// psend=(PMcbspForDec6713)(&mcbspx[0]);
psend->Length=FRAMLONGTH;
psend->Type=FRAME_CMD;
psend->Mutul=FRAME_SING;
psend->Data[0]=DATA_SEND;
psend->Data[1]=sample;
psend->Data[2]=num_datasend;
mcbsp_tx((unsigned short *) psend);
}
/***********************************************************************/
// 函数名: Com_Checkerr()
// 功能: 通知主机程序通讯出错,准备重发
/***********************************************************************/
Com_Checkerr(Uint16 check_err)
{ //psend=(PMcbspForDec6713)(&mcbspx[0]);
psend->Length = FRAMLONGTH;
psend->Type = FRAME_CMD;
psend->Data[0] = check_err;
psend->Mutul = FRAME_SING;
}
/***********************************************************************/
// 函数名: Com_Datasend()
// 功能: 通过判断number是否为0来决定是否把sample的值赋给s,防止
// 进入sample的值不变。
// 参数:
// psend: 是指向结构体的指针
// FRAME_END: 结束帧
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -