?? mcp2515.c
字號(hào):
// SIO_Send (0x0a16); //DAC POWERUP
while (rIISCON & 0x80); //當(dāng)發(fā)送FIFO非空時(shí),等待
for(j=0; j<8; j++)
{
*IISFIF = Play_data[j];
}
n_databuff = 0;
}
// SIO_Send (0x0a1e);
break;
default :
break; //不可能出現(xiàn)
}
}
/*********************************************************************************/
/*函數(shù)名稱:CAN_RD_PLAY_SingleC */
/*函數(shù)功能: 讀取從CAN總線上收到的數(shù)據(jù),并直接給CODEC芯片(一次傳輸8*16bits) */
/*入口參數(shù):n_rxbuff : 接收緩沖器數(shù) */
/* NOTE : 1.如果收到的數(shù)據(jù)不足8個(gè)字節(jié)(只發(fā)生在通話結(jié)束),用0填充。 */
/* 2.如果兩個(gè)緩沖器都接收到數(shù)據(jù),則一次性全部接收 */
/* 3.只接收一個(gè)聲道的數(shù)據(jù),另一個(gè)聲道的數(shù)據(jù)完全復(fù)制這個(gè)聲道. */
/*返回值 : 無(wú) */
/*********************************************************************************/
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); //當(dāng)發(fā)送FIFO非空時(shí),等待
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); //當(dāng)發(fā)送FIFO非空時(shí),等待
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); //當(dāng)發(fā)送FIFO非空時(shí),等待
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); //當(dāng)發(fā)送FIFO非空時(shí),等待
for(i=0; i<8; i++)
{
*IISFIF = Play_data[i];
}
break;
default :
break; //不可能出現(xiàn)
}
}
/*******************************************************************/
/*函數(shù)名稱 : Write_Dial_To_Can_ID */
/*函數(shù)功能 : 寫號(hào)碼到 CAN ID */
/*入口參數(shù) : 無(wú) */
/*返回值 : 無(wú) */
/*******************************************************************/
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);
}
/*******************************************************************/
/*函數(shù)名稱 : CAN_Init */
/*函數(shù)功能 : 初始化 CAN 總線 */
/*入口參數(shù) : 無(wú) */
/*返回值 : 無(wú) */
/*******************************************************************/
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}; //////測(cè)試
// 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) //測(cè)試!!!!!!!!!!!!!!!!
// {
// 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); //設(shè)置驗(yàn)收濾波寄存器
MCP2515_Write(0x35, 8); //數(shù)據(jù)長(zhǎng)度
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);
}
// }
}
*/
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -