Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
逝缘~
rt-thread
提交
7254c412
R
rt-thread
项目概览
逝缘~
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7254c412
编写于
7月 08, 2015
作者:
wuyangyong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[LPC4088] update CAN driver baudrate config.
上级
b5736b4b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
18 addition
and
30 deletion
+18
-30
bsp/lpc408x/drivers/drv_lpccan.c
bsp/lpc408x/drivers/drv_lpccan.c
+18
-30
未找到文件。
bsp/lpc408x/drivers/drv_lpccan.c
浏览文件 @
7254c412
...
...
@@ -32,19 +32,6 @@ struct lpccandata
en_CAN_unitId
id
;
};
static
const
rt_uint32_t
LPCBAUDTAB
[]
=
{
1000000
,
800000
,
500000
,
250000
,
125000
,
100000
,
50000
,
20000
,
10000
,
};
static
LPC_CAN_TypeDef
*
lcpcan_get_reg_base
(
rt_uint32_t
id
)
{
LPC_CAN_TypeDef
*
pCan
;
...
...
@@ -84,7 +71,7 @@ static void lpccan_irqstate_init(rt_uint32_t id)
pCan
->
MOD
=
0
;
// Return Normal operating
}
static
void
lpccan_baud_set
(
rt_uint32_t
id
,
rt_uint32_t
baud
)
static
rt_err_t
lpccan_baud_set
(
rt_uint32_t
id
,
rt_uint32_t
baud
)
{
uint32_t
result
=
0
;
uint8_t
NT
,
TSEG1
,
TSEG2
;
...
...
@@ -93,7 +80,8 @@ static void lpccan_baud_set(rt_uint32_t id, rt_uint32_t baud)
LPC_CAN_TypeDef
*
pCan
=
lcpcan_get_reg_base
(
id
);
CANPclk
=
CLKPWR_GetCLK
(
CLKPWR_CLKTYPE_PER
);
result
=
CANPclk
/
LPCBAUDTAB
[
baud
];
result
=
CANPclk
/
baud
;
/* Calculate suitable nominal time value
* NT (nominal time) = (TSEG1 + TSEG2 + 3)
* NT <= 24
...
...
@@ -101,7 +89,7 @@ static void lpccan_baud_set(rt_uint32_t id, rt_uint32_t baud)
*/
for
(
NT
=
24
;
NT
>
0
;
NT
=
NT
-
2
)
{
if
((
result
%
NT
)
==
0
)
if
((
result
%
NT
)
==
0
)
{
BRP
=
result
/
NT
-
1
;
NT
--
;
...
...
@@ -110,6 +98,7 @@ static void lpccan_baud_set(rt_uint32_t id, rt_uint32_t baud)
break
;
}
}
/* Enter reset mode */
pCan
->
MOD
=
0x01
;
/* Set bit timing
...
...
@@ -119,6 +108,8 @@ static void lpccan_baud_set(rt_uint32_t id, rt_uint32_t baud)
pCan
->
BTR
=
(
TSEG2
<<
20
)
|
(
TSEG1
<<
16
)
|
(
3
<<
14
)
|
BRP
;
/* Return to normal operating */
pCan
->
MOD
=
0
;
return
RT_EOK
;
}
static
void
lpccan_init_alut_ram
(
void
)
...
...
@@ -183,7 +174,7 @@ static void lpccan2_filter_init(struct rt_can_device *can)
{
}
static
void
lpccan2_hw_init
(
enum
CANBAUD
baud
,
CAN_MODE_Type
mode
)
static
void
lpccan2_hw_init
(
uint32_t
baud
,
CAN_MODE_Type
mode
)
{
if
(
mode
!=
CAN_SELFTEST_MODE
)
{
...
...
@@ -539,8 +530,10 @@ static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
struct
lpccandata
*
plpccan
;
rt_uint32_t
argval
;
CAN_MODE_Type
mode
;
plpccan
=
(
struct
lpccandata
*
)
can
->
parent
.
user_data
;
RT_ASSERT
(
plpccan
!=
RT_NULL
);
switch
(
cmd
)
{
case
RT_DEVICE_CTRL_CLR_INT
:
...
...
@@ -561,6 +554,7 @@ static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
CAN_IRQCmd
(
plpccan
->
id
,
CANINT_EIE
,
DISABLE
);
}
break
;
case
RT_DEVICE_CTRL_SET_INT
:
argval
=
(
rt_uint32_t
)
arg
;
if
(
argval
==
RT_DEVICE_FLAG_INT_RX
)
...
...
@@ -579,8 +573,10 @@ static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
CAN_IRQCmd
(
plpccan
->
id
,
CANINT_EIE
,
ENABLE
);
}
break
;
case
RT_CAN_CMD_SET_FILTER
:
return
setfilter
(
plpccan
,
(
struct
rt_can_filter_config
*
)
arg
);
case
RT_CAN_CMD_SET_MODE
:
argval
=
(
rt_uint32_t
)
arg
;
if
(
argval
!=
RT_CAN_MODE_NORMAL
||
...
...
@@ -613,26 +609,16 @@ static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
}
}
break
;
case
RT_CAN_CMD_SET_BAUD
:
argval
=
(
rt_uint32_t
)
arg
;
if
(
argval
!=
CAN1MBaud
&&
argval
!=
CAN800kBaud
&&
argval
!=
CAN500kBaud
&&
argval
!=
CAN250kBaud
&&
argval
!=
CAN125kBaud
&&
argval
!=
CAN100kBaud
&&
argval
!=
CAN50kBaud
&&
argval
!=
CAN20kBaud
&&
argval
!=
CAN10kBaud
)
{
return
RT_ERROR
;
}
if
(
argval
!=
can
->
config
.
baud_rate
)
{
can
->
config
.
baud_rate
=
argval
;
lpccan_baud_set
(
plpccan
->
id
,
(
rt_uint32_t
)
arg
);
return
lpccan_baud_set
(
plpccan
->
id
,
(
rt_uint32_t
)
arg
);
}
break
;
case
RT_CAN_CMD_SET_PRIV
:
argval
=
(
rt_uint32_t
)
arg
;
if
(
argval
!=
RT_CAN_MODE_PRIV
||
...
...
@@ -646,6 +632,7 @@ static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
CAN_ModeConfig
(
plpccan
->
id
,
CAN_TXPRIORITY_MODE
,
ENABLE
);
}
break
;
case
RT_CAN_CMD_GET_STATUS
:
{
can
->
status
.
rcverrcnt
=
0
;
...
...
@@ -657,6 +644,7 @@ static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
}
}
break
;
}
return
RT_EOK
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录