📄 main.c
字号:
/*******************************************************************************************************
* 文件名:main.c
* 功 能:开发板main()函数例子
* 作 者:POWER
* 日 期:2006年5月25号
* 斯凯科技主页:www.armsky.net
* 斯凯科技论坛:www.armsky.net/bbs
********************************************************************************************************/
#include "config.h"
#define REALCAN 2
UINT8 STBuf[100],Txbuf[8];
//uint8 SRBuf[14] = {01,88, 12, 34, 56, 78, 11, 22, 33, 44 ,55,66, 77, 88 };
stcTxBUF CTbuf; //
stcRxBUF CRBuf;
//UINT32 CanSendFlag=0; //
//UINT32 UartStatus=0,RcvCounter=0,TransCounter=0;
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<5000; i++);
}
//
/*
************************************************************************************************************************
**函数原型 : void CanHexToRs232ASCII(UINT8 *Buf,UINT8 iBYTE)
**参数说明 :
**返回 值 :
**说 明 :将HEX格式的CAN数据转换为RS232ASCII码格式
************************************************************************************************************************
*/
void CanHexToRs232ASCII(UINT8 *Buf,UINT8 iBYTE)
{
UINT8 i= iBYTE >> 4;
if(i<0x0A)
{
*Buf = 0x30 +i; //数字0--9
}
else
{
*Buf = 0x37 +i; //字母A--Z(大写)
}
//UINT8 i;
i = iBYTE &0x0F;
if(i<0x0A)
{
*(Buf+1) = 0x30 +i;
}
else
{
*(Buf+1) = 0x37 +i;
}
}
void EableIntAll(void)
{
__asm
{
MRS R0, CPSR
BIC R0, R0,#0x80
MSR CPSR_cxsf, R0
}
}
int main (void)
{
UINT8 TempBuf[26];
uint8 TransCounter = 0;
// 用户在下面添加自己的程序代码
UINT32 i;
//Debug Uart0
InitUart0(57600);
//初始化CAN
for(i=0;i<REALCAN;i++)
{
InitCAN(i);
}
EableIntAll();
Txbuf[0] = 0x01 ;
Txbuf[1] = 0x02 ;
Txbuf[2] = 0x03 ;
Txbuf[3] = 0x04 ;
while(1)
{
DelayNS(10);
/* CTbuf.TxFrameInfo.Bits.PRIO_BIT = SRBuf[0]; //CAN通道号
CTbuf.TxFrameInfo.Bits.FF_BIT =(SRBuf[1]&0x80) >> 7; //帧格式
CTbuf.TxFrameInfo.Bits.RTR_BIT = (SRBuf[1]&0x40)>> 6; //帧类型
CTbuf.TxFrameInfo.Bits.DLC_BIT = SRBuf[1]&0x0f; //数据长度
for(i=0;i<4;i++)
{
*((UINT8 *)&CTbuf.TxCANID.Word +i)=SRBuf[5-i];
}
memcpy((UINT8 *)&CTbuf.CANTDA,&SRBuf[6],4);
memcpy((UINT8 *)&CTbuf.CANTDB,&SRBuf[10],4);
CANSendData(CAN1,0x02,&CTbuf);*/
if(ReadCANRcvCyBuf(CAN1,&CRBuf) == 0)
{
Uart0Send(1,Txbuf);
TempBuf[0]=(UINT8)CRBuf.CANRcvFS.Bits.DLC_BIT | ((UINT8)CRBuf.CANRcvFS.Bits.FF_BIT << 7)|
((UINT8)CRBuf.CANRcvFS.Bits.RTR_BIT << 6);
for(i=0;i<4;i++)
{
TempBuf[1+i]=*((UINT8 *)&CRBuf.RxCANID + 3-i);
}
for(i=0;i<4;i++)
{
TempBuf[5+i]=*((UINT8 *)&CRBuf.CANRDA+i);
}
for(i=0;i<4;i++)
{
TempBuf[9+i]=*((UINT8 *)&CRBuf.CANRDB+i);
}
//Frame Infomation
CanHexToRs232ASCII(&STBuf[TransCounter],TempBuf[0]);
TransCounter += 2;
//Frame ID
for(i=1;i<5;i++)
{
CanHexToRs232ASCII(&STBuf[TransCounter],TempBuf[i]);
TransCounter += 2;
}
//Frame Data
if(CRBuf.CANRcvFS.Bits.DLC_BIT >8)
{
CRBuf.CANRcvFS.Bits.DLC_BIT =8;
}
for(i=5;i<CRBuf.CANRcvFS.Bits.DLC_BIT+5;i++)
{
CanHexToRs232ASCII(&STBuf[TransCounter],TempBuf[i]);
TransCounter += 2;
}
TransCounter = 0; //转换地址复位
//if(TempBuf[25]==8)
// {
// Uart0Send(1, Txbuf);
// }
Uart0Send(26, STBuf);
//STBuf[0] =(UINT8)CRBuf.CANRcvFS.Bits.DLC_BIT ;
//if(STBuf[0]==SRBuf[0])
// {
// Uart0Send(4,Txbuf);
// }
}
//if(ReadCANRcvCyBuf(CAN2,&CRBuf) == 0)
//{
//Uart0Send(3,Txbuf);
//STBuf[0] =(UINT8)CRBuf.CANRcvFS.Bits.DLC_BIT ;
//if(STBuf[0]==SRBuf[0])
// {
// Uart0Send(4,Txbuf);
// }
//}
//CAN挂起
for(i=0;i<REALCAN;i++)
{
if(regCANMOD(i).Bits.RM_BIT != 0)
{
regCANGSR(i).Word=0;
regCANMOD(i).Bits.RM_BIT=0x00;
regCANCMR(i).Word=0x02;
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -