打印
[资料分享]

Stellaris CAN 模块 控制器局域网(CAN)

[复制链接]
楼主: 米多0036
手机看帖
扫描二维码
随时随地手机跟帖
21
米多0036|  楼主 | 2020-4-28 13:02 | 只看该作者 回帖奖励 |倒序浏览
tCANStatusCtrl
描述:
当调用 CANStatusGet()函数时,下列枚举包含所有能被返回的错误或状态指示。

使用特权

评论回复
22
米多0036|  楼主 | 2020-4-28 13:03 | 只看该作者
枚举器:
CAN_STATUS_BUS_OFF CAN 控制器已进入一个总线关闭状态。
CAN_STATUS_EWARN CAN 控制器错误级别已到达警告级别。
CAN_STATUS_EPASS CAN 控制器错误级别已到达错误被动级别。
CAN_STATUS_RXOK 在最后读取这个状态后成功接收一个报文。
CAN_STATUS_TXOK 在最后读取这个状态后成地发送一个报文。
CAN_STATUS_LEC_MSK 这是最后错误代码段的屏蔽。
CAN_STATUS_LEC_NONE 无错误。
CAN_STATUS_LEC_STUFF 一个位填充错误已发生。
CAN_STATUS_LEC_FORM 一个格式化错误已发生。
CAN_STATUS_LEC_ACK 一个应答错误已发生。
CAN_STATUS_LEC_BIT1 位电平为 1 的总线时间比所允许的更长。
CAN_STATUS_LEC_BIT0 位电平为 0 的总线时间比所允许的更长。
CAN_STATUS_LEC_CRC 一个 CRC 错误已发生。
CAN_STATUS_LEC_MASK 这是 CAN 最后错误代码(LEC)的屏蔽。

使用特权

评论回复
23
米多0036|  楼主 | 2020-4-28 13:03 | 只看该作者
tCANStsReg
描述:
当调用 CANStatusGet()函数时,此数据类型是用来识别要读取哪一个状态寄存器。

使用特权

评论回复
24
米多0036|  楼主 | 2020-4-28 13:04 | 只看该作者
枚举器:
CAN_STS_CONTROL 读取完整 CAN 控制器状态。
CAN_STS_TXREQUEST 读取带有一个发送请求设置的报文对象的完整 32 位屏蔽。
CAN_STS_NEWDAT 读取新数据可用的报文对象的完整 32 位屏蔽。
CAN_STS_MSGVAL 读取被使能的报文对象的完整 32 位屏蔽。

使用特权

评论回复
25
米多0036|  楼主 | 2020-4-28 13:05 | 只看该作者
tMsgObjType
描述:
此定义用来确定通过调用 CANMessageSet() API 来设置报文对象的类型。

使用特权

评论回复
26
米多0036|  楼主 | 2020-4-28 13:05 | 只看该作者
枚举器:
MSG_OBJ_TYPE_TX 发送报文对象。
MSG_OBJ_TYPE_TX_REMOTE 发送远程请求报文对象。
MSG_OBJ_TYPE_RX 接收报文对象。
MSG_OBJ_TYPE_RX_REMOTE 接收远程请求报文对象。
MSG_OBJ_TYPE_RXTX_REMOTE 远程帧接收具有自动发送的远程报文对象。

使用特权

评论回复
27
米多0036|  楼主 | 2020-4-28 13:06 | 只看该作者
函数文件
CANBitTimingGet
读取 CAN 控制器位时序的当前设置。
函数原型:
void
CANBitTimingGet(unsigned long ulBase,
tCANBitClkParms *pClkParms)
参数:
ulBase 是 CAN 控制器的基址。
pClkParms 是指针,指向保存时序参数的结构。

使用特权

评论回复
28
米多0036|  楼主 | 2020-4-28 13:06 | 只看该作者
描述:此函数 CAN 控制器位时钟时序的当前配置,并把结果信息存放在调用者所提供的结构
中。在 ClkParms 所指向的结构中返回的值的含义,请参考 CANBitTimingSet()。
此函数取代了最初的 CANGetBitTiming() API 并执行相同的操作。can.h 中提供了一个
宏把最初的 API 映射到这个 API 中。 返回:无。

使用特权

评论回复
29
米多0036|  楼主 | 2020-4-28 13:07 | 只看该作者
CANBitTimingSet
对 CAN 控制器位时序进行配置。

使用特权

评论回复
30
米多0036|  楼主 | 2020-4-28 13:07 | 只看该作者
函数原型:
void
CANBitTimingSet(unsigned long ulBase,
tCANBitClkParms *pClkParms)

使用特权

评论回复
31
米多0036|  楼主 | 2020-4-28 13:08 | 只看该作者
参数:
ulBase 是 CAN 控制器的基址。
pClkParms 指向具有时钟参数的结构。

使用特权

评论回复
32
米多0036|  楼主 | 2020-4-28 13:08 | 只看该作者
描述:
对 CAN 总线位时序的不同时序参数进行配置:传播区、相缓冲区 1 区、相缓冲区 2 区
和同步跳跃宽度。传播区和相缓冲区 1 区的值来自组合 pClkParms->uSyncPropPhase1Seg 参
数。相缓冲区 2 由 pClkParms->uPhase2Seg 参数确定。这二个参数,连同 pClkParms->uSJW
都是基于 位时间量 的单位。 实际量时 间是由指 定 CAN 模 块时钟的 分频因子的
pClkParms->uQuantumPrescaler 值确定。
以量为单位的总位时间将会是两个 Seg 参数的和,如下:
bit_time_q = uSyncPropPhase1Seg + uPhase2Seg + 1
注意,Sync_Seg 的一个周期是一个量,并且它被加到 Prop_Seg 和 Phase1_Seg 的正确周
期上。
这个等式确定实际位速率,如下:
CAN Clock / ((uSyncPropPhase1Seg + uPhase2Seg + 1) * (uQuantumPrescaler))
这意味着 uSyncPropPhase1Seg = 4、uPhase2Seg = 1、uQuantumPrescaler = 2 和一个 8MHz
的 CAN 时钟,那么位速率将会是(8 MHz) / ((5 + 2 + 1) * 2)或 500 Kbit/sec。
此函数取代了最初的 CANSetBitTiming() API 并执行相同的操作。can.h 中提供了一个宏
把最初的 API 映射到这个 API 中。
返回:
无。

使用特权

评论回复
33
米多0036|  楼主 | 2020-4-28 13:09 | 只看该作者
CANDisable
关闭 CAN 控制器。

函数原型:
void
CANDisable(unsigned long ulBase)
参数:
ulBase 是要关闭的 CAN 控制器的基址。
描述:
关闭报文处理的 CAN 控制器。当关闭时,控制器将不再自动处理 CAN 总线上的数据。
调用 CANEnable(),就能重新启动控制器。CAN 控制器的状态和控制器的报文对象仍与调
用此函数前的一样。
返回:
无。

使用特权

评论回复
34
米多0036|  楼主 | 2020-4-28 13:10 | 只看该作者
CANEnable
使能 CAN 控制器。
函数原型:
void
CANEnable(unsigned long ulBase)
参数:
ulBase 是要使能的 CAN 控制器的基址。


描述:使能报文处理的 CAN 控制器。一旦使能,控制器将自动发送任何挂起的帧,并对任何接收到的帧作出处理。调用 CANDisable(),就可停止控制器。在调用 CANEnable()前,应先调用 CANInit()来初始化控制器,并应通过调用 CANBitTimingSet()来对 CAN 总线进行配置。返回:无。

使用特权

评论回复
35
米多0036|  楼主 | 2020-4-28 13:11 | 只看该作者
CANErrCntrGet
读取 CAN 控制器错误计数器寄存器。
函数原型:
tBoolean
CANErrCntrGet(unsigned long ulBase,
unsigned long *pulRxCount,
unsigned long *pulTxCount)
参数:
ulBase 是 CAN 控制器的基址。
pulRxCount 是指向存放接收错误计数器的位置的指针。
pulTxCount 是指向存放发送错误计数器的位置的指针。
描述:
读取错误计数器寄存器并把发送和接收错误计数值返回给调用者,以及返回一个表示控
制器接收计数器是否已到达到错误被动限制的标志。接收和发送错误计数器的值通过参数所
提供的指针返回。
调用此函数后,*pulRxCount 将会保存当前接收错误计数并且*pulTxCount 将会保存当
前发送错误计数。
返回:
如果发送错误计数已达到了错误被动限制则返回 True;如果错误计数低于错误被动限
制则返回 False。

使用特权

评论回复
36
米多0036|  楼主 | 2020-4-28 13:11 | 只看该作者
CANInit
在复位后初始化 CAN 控制器。
函数原型:
void
CANInit(unsigned long ulBase)
参数:
ulBase 是 CAN 控制器的基址。
描述:
复位后,CAN 控制器处于关闭状态。
但是,用于报文对象的内存包含着未定义的值并且在首次使能 CAN 控制器之前必须要将内存清除。
这样就能防止在配置报文对象之前进行不必要的数据传送或接收。
必须要先调用此函数,然后才能首次使能控制器。
返回:
无。

使用特权

评论回复
37
米多0036|  楼主 | 2020-4-28 13:12 | 只看该作者
CANIntClear
清除一个 CAN 中断源。
函数原型:
void
CANIntClear(unsigned long ulBase,
unsigned long ulIntClr)
参数:
ulBase 是 CAN 控制器的基址。
ulIntClr 是表示要清除哪一个中断源的值。
描述:
此函数用来清除一个特定的中断源。ulIntClr 参数应该是下列值中的其中之一:
z CAN_INT_INTID_STATUS – 清除一个状态中断;
z 1-32 – 清除特定的报文对象中断。
不需要使用此函数来清除一个中断。只有在应用想要清除一个中断源而无需执行正常中
断操作时才应使用此函数。
通常地,状态中断是通过使用 CANStatusGet()来读取控制器状态而被清除的。而一个特
定的报文对象通常是通过使用 CANMessageGet()来读取报文对象而被清除的。
注:由于在 Cortex-M3 处理器包含有一个写入缓冲区,处理器可能要过几个时钟周期才能真正把中断
源清除。因此,建议在中断处理程序中要早些把中断源清除掉(反对在最后的操作才清除中断源)以避免
在真正清除中断源之前从中断处理程序中返回。如果操作失败可会能导致立即再次进入中断处理程序。(因
为 NVIC 仍会把中断源看作是有效的)。
返回:
无。

使用特权

评论回复
38
米多0036|  楼主 | 2020-4-28 13:12 | 只看该作者
CANIntDisable
关闭单独的 CAN 控制器中断源。
函数原型:
void
CANIntDisable(unsigned long ulBase,
unsigned long ulIntFlags)
参数:
ulBase 是 CAN 控制器的基址。
ulIntFlags 是要被关闭的中断源的位屏蔽。
描述:
关闭特定的 CAN 控制器中断源。只有使能的中断源才能引起一个处理器中断。
此 ulIntFlags 参数具有与 CANIntEnable()函数中的 ulIntFlags 参数相同的定义。
返回:
无。

使用特权

评论回复
39
米多0036|  楼主 | 2020-4-28 13:13 | 只看该作者
CANIntEnable
使能单独的 CAN 控制器中断源。
函数原型:
void
CANIntEnable(unsigned long ulBase,
unsigned long ulIntFlags)
参数:
ulBase 是 CAN 控制器的基址。
ulIntFlags 是要被使能的中断源的位屏蔽。
描述:
使能特定的 CAN 控制器中断源。只有使能的中断源才能引起一个处理器中断。
ulIntFlags 参数是下列任何值的逻辑或:
z CAN_INT_ERROR – 一个控制器错误条件已发生;
z CAN_INT_STATUS – 一个报文传送已完成,或检测到一个总线错误;
z CAN_INT_MASTER – 允许 CAN 控制器产生中断。
为了产生任何中断,必须使能 CAN_INT_MASTER。另外,为了使一个报文对象的任
何特殊传输能产生一个中断,此报文对象必须要使能中断(请参考 CANMessageSet())。如
果控制器进入“总线关闭”条件,或如果错误计数器达到了限值,那么 CAN_INT_ERROR
将产生一个中断。CAN_INT_STATUS 将会在多个状态条件下产生一个中断并且能提供的中
断比应用需要处理的还要多。当一个中断发生时,使用 CANIntStatus()则可确定中断发生的
原因。
返回:
无。

使用特权

评论回复
40
米多0036|  楼主 | 2020-4-28 13:13 | 只看该作者
CANIntRegister
注册一个 CAN 控制器的中断处理程序。
函数原型:
void
CANIntRegister(unsigned long ulBase,
void (*pfnHandler)(void))
参数:
ulBase 是 CAN 控制器的基址。
pfnHandler 是指针,指向在使能的 CAN 中断发生时要被调用的函数。
描述:
此函数把中断处理程序注册到中断向量表中,并使能中断控制器的 CAN 中断;必须通
过使用 CANIntEnable()来使能特定的 CAN 中断源。即将被注册的中断处理程序必须要清除
中断源,这时则可以使用 CANIntClear()。
如果应用程序正在使用存放在 Flash 的一个静态向量表,则无需要以这样的方式注册中
断处理程序。反之,应该使用 IntEnable()来使能中断控制器的 CAN 中断。
也可参考:
有关注册中断处理程序的重要信息,请参考 IntRegister()。
返回:
无。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则