【发布时间】:2013-09-25 21:39:11
【问题描述】:
我在实验室分配了一个项目,在 ARM 7 上实现 CAN 协议。
我查找了一些教程和示例代码,但看起来都非常复杂,我想我应该在编码部分获得一些帮助。谁能解释一下任何 ARM 板上的基本发射器和接收器编码?
发件人代码如下。我在不理解表达式的全部含义时使用了问号。
#include <lpc23xx.h>
#include "type.h
#include "can.h"
#include <LPC23xx.H>
CAN_MSG MsgBuf_RX1,MsgBuf_RX2; // TX and RX Buffers for CAN message
volatile DWORD CAN1RxDone, CAN2RxDone;
int main(void)
{
DWORD tempbuf1,tempbuf2;
int current;
FIO2DIR=0x000000FF;
CAN_Init(BITRATE100K28_8MHZ);
MsgBuf_RX2.Frame = 0x0;
MsgBuf_RX2.MsgID = 0x0;
MsgBuf_RX2.DataA = 0x0;
MsgBuf_RX2.DataB = 0x0;
CAN_SetACCF(ACCF_BYPASS);
while (1)
{
while (!(CAN2GSR & (1 << 0)) )
;
if (CAN2RxDone == TRUE)
{
tempbuf1 = MsgBuf_RX2.DataA; // Data A has 32 bits, of which only the
// first 16 bits are actual data
tempbuf2 = (tempbuf1 & 0x0000ffff); //??
current = tempbuf2;
if ((current/3) >= 25)
FIO2SET |= 0x00000001; ///??
}
CAN2RxDone = FALSE;
if (MsgBuf_RX2.Frame & (1 << 10)) //?
{
MsgBuf_RX2.Frame &= ~(1 << 10); //?
}
}
}
【问题讨论】:
-
它的 lpc2368 板由 arm7tdmi-s 组成。我使用的是 keil uvision4 和 flashmagic,我也有一个示例程序。但是当我阅读 lpc2368 的数据表时,我无法完全理解它,我觉得很难理解。所以我决定只做一个程序,使用 can 协议将 8 位从一个板发送到另一个。
-
电路板规格很容易获得......只需谷歌 lpc2368 用户手册和数据表。
-
我有一个主从程序,如果你想看我可以贴出来。
-
阅读 CAN 规范。
-
你需要付出更多的努力来理解复杂的事情。如果您仍有问题,请咨询您的导师。由于您对自己在做什么知之甚少,因此您的问题过于开放,无法在这里提出。特别是,在这里寻求教程等外部资源是题外话。