📄 mcp2515.c
字号:
// SIO_Send (0x0a16); //DAC POWERUP
while (rIISCON & 0x80); //当发送FIFO非空时,等待
for(j=0; j<8; j++)
{
*IISFIF = Play_data[j];
}
n_databuff = 0;
}
// SIO_Send (0x0a1e);
break;
default :
break; //不可能出现
}
}
/*********************************************************************************/
/*函数名称:CAN_RD_PLAY_SingleC */
/*函数功能: 读取从CAN总线上收到的数据,并直接给CODEC芯片(一次传输8*16bits) */
/*入口参数:n_rxbuff : 接收缓冲器数 */
/* NOTE : 1.如果收到的数据不足8个字节(只发生在通话结束),用0填充。 */
/* 2.如果两个缓冲器都接收到数据,则一次性全部接收 */
/* 3.只接收一个声道的数据,另一个声道的数据完全复制这个声道. */
/*返回值 : 无 */
/*********************************************************************************/
void CAN_RD_PLAY_SingleC (unsigned char n_rxbuff)
{
unsigned char *Play_databyte;
static unsigned short Play_data[8]={0};
int i;
Play_databyte = (unsigned char *)Play_data;
switch (n_rxbuff)
{
case 0x0:
break;
case 0x1:
MCP2515_Enable();
MCP2515_READ_RXBUFF(0);
for (i=4; i>0; i--)
{
SendSIOData(0);
*(Play_databyte++) = ReadSIOData();
SendSIOData(0);
*(Play_databyte++) = ReadSIOData();
Play_databyte = Play_databyte + 2;
}
MCP2515_Disable();
for(i=0; i<4; i++)
{
Play_data[2*i+1] = Play_data[2*i];
}
// while (rIISCON&0x80); //当发送FIFO非空时,等待
for(i=0; i<8; i++)
{
*IISFIF = Play_data[i];
}
break;
case 0x2:
MCP2515_Enable();
MCP2515_READ_RXBUFF(1);
for (i=4; i>0; i--)
{
SendSIOData(0);
*(Play_databyte++) = ReadSIOData();
SendSIOData(0);
*(Play_databyte++) = ReadSIOData();
Play_databyte = Play_databyte+2;
}
MCP2515_Disable();
for(i=0; i<4; i++)
{
Play_data[2*i+1] = Play_data[2*i];
}
// while (rIISCON&0x80); //当发送FIFO非空时,等待
for(i=0; i<8; i++)
{
*IISFIF = Play_data[i];
}
break;
case 0x3:
MCP2515_Enable();
MCP2515_READ_RXBUFF(0);
for (i=4; i>0; i--)
{
SendSIOData(0);
*(Play_databyte++) = ReadSIOData();
SendSIOData(0);
*(Play_databyte++) = ReadSIOData();
Play_databyte = Play_databyte+2;
}
MCP2515_Disable();
for(i=0; i<4; i++)
{
Play_data[2*i+1] = Play_data[2*i];
}
// while (rIISCON&0x80); //当发送FIFO非空时,等待
for(i=0; i<8; i++)
{
*IISFIF = Play_data[i];
}
Play_databyte = (unsigned char *)Play_data;
MCP2515_Enable();
MCP2515_READ_RXBUFF(1);
for (i=4; i>0; i--)
{
SendSIOData(0);
*(Play_databyte++) = ReadSIOData();
SendSIOData(0);
*(Play_databyte++) = ReadSIOData();
Play_databyte = Play_databyte+2;
}
MCP2515_Disable();
for(i=0; i<4; i++)
{
Play_data[2*i+1] = Play_data[2*i];
}
// while (rIISCON&0x80); //当发送FIFO非空时,等待
for(i=0; i<8; i++)
{
*IISFIF = Play_data[i];
}
break;
default :
break; //不可能出现
}
}
/*******************************************************************/
/*函数名称 : Write_Dial_To_Can_ID */
/*函数功能 : 写号码到 CAN ID */
/*入口参数 : 无 */
/*返回值 : 无 */
/*******************************************************************/
void Write_Dial_To_Can_ID(U32 can_id)
{
MCP2515_Write_Can_ID(TXB0SIDH, can_id,0);
MCP2515_Write_Can_ID(TXB1SIDH, can_id,0);
MCP2515_Write_Can_ID(TXB2SIDH, can_id,0);
}
/*******************************************************************/
/*函数名称 : CAN_Init */
/*函数功能 : 初始化 CAN 总线 */
/*入口参数 : 无 */
/*返回值 : 无 */
/*******************************************************************/
void CAN_Init(void)
{
/*
static int i=0;
U32 id;
int k;
int j;
int n;
static int m=0;
int count=0;
unsigned char data_comp;
unsigned char dlc;
unsigned char rxRTR, isExt;
unsigned short SOUND_DAT[256];
*/
// U8 data[8]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88}; //////测试
// U8 data_b[8]={0};
//unsigned char *data_b;
Init_SIO();
init_MCP2515(BandRate_62kbps);
canSetup();
/*
for(n=0;n<256;n++)
{
SOUND_DAT[n]=n;
}
*/
/*
for(n=0;n<100;n++)
{
RX_B[n]=0;
}
*/
// while (1) //测试!!!!!!!!!!!!!!!!
// {
// canWrite(0x123, data, 8, 0, 0);
// k=0;
// n=0;
MCP2515_Write_Can_ID(TXB0SIDH, 0x123,0);
MCP2515_Write_Can_ID(TXB1SIDH, 0x123,0);
MCP2515_Write_Can_ID(TXB2SIDH, 0x123,0);
// MCP2515_Write_Can_ID(RXF0SIDH, 0x123,0); //设置验收滤波寄存器
MCP2515_Write(0x35, 8); //数据长度
MCP2515_Write(0x45, 8);
MCP2515_Write(0x55, 8);
// Delay(1); //延迟100US
/*
while(1)
{
k=0;
n=0;
while(k < 512)
// for (j=0;j<25;j++)
{
// rPDATE=(rPDATE|0x0008);
data_b=(unsigned char *)SOUND_DAT+k;
// canWrite(0x123,data_b, 8, 0, 0);
// rPDATE=(rPDATE|0x0008);
MCP2515_CAN_WRITE(data_b);
// rPDATE=(rPDATE&0xfff7);
Delay(30);
MCP2515_CAN_WRITE(data_b+8);
// k +=8;
Delay(280);
// rPDATE=(rPDATE&0xfff7);
while ((data_len[n] =MPC2515_CanPoll() )==0);
// if(data_len[n] =MPC2515_CanPoll())
// {
// rPDATE=(rPDATE|0x0008);
// MCP2515_Read_Can_ID(0x61, &id);
CAN_RD((unsigned char *)RX_B+k, &dlc, data_len[n]);
if (data_len[n] != 3)
{
while ((data_len[n] =MPC2515_CanPoll() )==0);
CAN_RD((unsigned char *)RX_B+k+8, &dlc, data_len[n]);
}
// rPDATE=(rPDATE&0xfff7);
if (k != 0)
{
data_comp = (*((unsigned char *)RX_B+k))-(*((unsigned char *)RX_B+k-2));
if((data_comp != 1)&(data_comp !=0xff))
{
m++;
if ( m ==9)
m=8;
}
}
// k = dlc+k;
// k = (data_len[n] !=0)*8+k;
k += 8;
k += 8;
// Delay(2); //延迟100US
// while(data_len[n]==2);
n++;
if ((err_f[count]=MCP2515_Read(EFLG)))
{
// while(err_f[count]==0x40);
count++;
if (count==50)
count=0;
}
// err_count[n++] = MCP2515_Read(0x1c);
if (n == 64)
n=0;
i++;
// rPDATE=(rPDATE&0xfff7);
// while(i==2);
}
// }
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -