Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
luozhenger
rt-thread
提交
d71b86c7
R
rt-thread
项目概览
luozhenger
/
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,发现更多精彩内容 >>
提交
d71b86c7
编写于
1月 11, 2014
作者:
R
RTsien
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
friendly for uart count under 6
上级
9382a710
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
150 addition
and
113 deletion
+150
-113
bsp/beaglebone/drivers/serial.c
bsp/beaglebone/drivers/serial.c
+150
-113
未找到文件。
bsp/beaglebone/drivers/serial.c
浏览文件 @
d71b86c7
...
...
@@ -39,7 +39,7 @@ static void am33xx_uart_isr(int irqno, void* param)
iir
=
UART_IIR_REG
(
uart
->
base
);
if
((
iir
&
(
0x02
<<
1
))
||
(
iir
&
(
0x6
<<
1
)))
if
((
iir
&
(
0x02
<<
1
))
||
(
iir
&
(
0x6
<<
1
)))
{
rt_hw_serial_isr
(
serial
);
}
...
...
@@ -164,17 +164,65 @@ static const struct rt_uart_ops am33xx_uart_ops =
};
/* UART device driver structure */
struct
serial_ringbuffer
uart_int_rx
[
6
];
struct
am33xx_uart
uart
[
6
]
=
#ifdef RT_USING_UART0
struct
serial_ringbuffer
uart0_int_rx
;
struct
am33xx_uart
uart0
=
{
UART0_BASE
,
UART0_INT
,
};
struct
rt_serial_device
serial0
;
#endif
#ifdef RT_USING_UART1
struct
serial_ringbuffer
uart1_int_rx
;
struct
am33xx_uart
uart1
=
{
UART1_BASE
,
UART1_INT
,
};
struct
rt_serial_device
serial1
;
#endif
#ifdef RT_USING_UART2
struct
serial_ringbuffer
uart2_int_rx
;
struct
am33xx_uart
uart2
=
{
{
UART0_BASE
,
UART0_INT
},
{
UART1_BASE
,
UART1_INT
},
{
UART2_BASE
,
UART2_INT
},
{
UART3_BASE
,
UART3_INT
},
{
UART4_BASE
,
UART4_INT
},
{
UART5_BASE
,
UART5_INT
}
UART2_BASE
,
UART2_INT
,
};
struct
rt_serial_device
serial
[
6
];
struct
rt_serial_device
serial2
;
#endif
#ifdef RT_USING_UART3
struct
serial_ringbuffer
uart3_int_rx
;
struct
am33xx_uart
uart3
=
{
UART3_BASE
,
UART3_INT
,
};
struct
rt_serial_device
serial3
;
#endif
#ifdef RT_USING_UART4
struct
serial_ringbuffer
uart4_int_rx
;
struct
am33xx_uart
uart4
=
{
UART4_BASE
,
UART4_INT
,
};
struct
rt_serial_device
serial4
;
#endif
#ifdef RT_USING_UART5
struct
serial_ringbuffer
uart5_int_rx
;
struct
am33xx_uart
uart5
=
{
UART5_BASE
,
UART5_INT
,
};
struct
rt_serial_device
serial5
;
#endif
#define write_reg(base, value) *(int*)(base) = value
#define read_reg(base) *(int*)(base)
...
...
@@ -226,7 +274,6 @@ static void start_uart_clk(void)
/* enable uart1 */
#ifdef RT_USING_UART1
CM_PER_UART1_CLKCTRL_REG
(
prcm_base
)
|=
0x2
;
/* wait for uart1 clk */
while
((
CM_PER_UART1_CLKCTRL_REG
(
prcm_base
)
&
(
0x3
<<
16
))
!=
0
)
;
...
...
@@ -234,7 +281,6 @@ static void start_uart_clk(void)
#ifdef RT_USING_UART2
CM_PER_UART2_CLKCTRL_REG
(
prcm_base
)
|=
0x2
;
/* wait for uart2 clk */
while
((
CM_PER_UART2_CLKCTRL_REG
(
prcm_base
)
&
(
0x3
<<
16
))
!=
0
)
;
...
...
@@ -242,7 +288,6 @@ static void start_uart_clk(void)
#ifdef RT_USING_UART3
CM_PER_UART3_CLKCTRL_REG
(
prcm_base
)
|=
0x2
;
/* wait for uart3 clk */
while
((
CM_PER_UART3_CLKCTRL_REG
(
prcm_base
)
&
(
0x3
<<
16
))
!=
0
)
;
...
...
@@ -250,7 +295,6 @@ static void start_uart_clk(void)
#ifdef RT_USING_UART4
CM_PER_UART4_CLKCTRL_REG
(
prcm_base
)
|=
0x2
;
/* wait for uart4 clk */
while
((
CM_PER_UART4_CLKCTRL_REG
(
prcm_base
)
&
(
0x3
<<
16
))
!=
0
)
;
...
...
@@ -258,7 +302,6 @@ static void start_uart_clk(void)
#ifdef RT_USING_UART5
CM_PER_UART5_CLKCTRL_REG
(
prcm_base
)
|=
0x2
;
/* wait for uart5 clk */
while
((
CM_PER_UART5_CLKCTRL_REG
(
prcm_base
)
&
(
0x3
<<
16
))
!=
0
)
;
...
...
@@ -299,156 +342,150 @@ static void config_pinmux(void)
REG32
(
ctlm_base
+
0x800
+
0x0C4
)
=
0x24
;
REG32
(
ctlm_base
+
0x800
+
0x0C0
)
=
0x04
;
#endif
}
int
rt_hw_serial_init
(
void
)
{
struct
serial_configure
config
[
6
]
;
struct
serial_configure
config
;
poweron_per_domain
();
start_uart_clk
();
config_pinmux
();
#ifdef RT_USING_UART0
config
[
0
].
baud_rate
=
BAUD_RATE_115200
;
config
[
0
].
bit_order
=
BIT_ORDER_LSB
;
config
[
0
].
data_bits
=
DATA_BITS_8
;
config
[
0
].
parity
=
PARITY_NONE
;
config
[
0
].
stop_bits
=
STOP_BITS_1
;
config
[
0
].
invert
=
NRZ_NORMAL
;
serial
[
0
].
ops
=
&
am33xx_uart_ops
;
serial
[
0
].
int_rx
=
&
uart_int_rx
[
0
];
serial
[
0
].
config
=
config
[
0
];
config
.
baud_rate
=
BAUD_RATE_115200
;
config
.
bit_order
=
BIT_ORDER_LSB
;
config
.
data_bits
=
DATA_BITS_8
;
config
.
parity
=
PARITY_NONE
;
config
.
stop_bits
=
STOP_BITS_1
;
config
.
invert
=
NRZ_NORMAL
;
serial0
.
ops
=
&
am33xx_uart_ops
;
serial0
.
int_rx
=
&
uart0_int_rx
;
serial0
.
config
=
config
;
/* enable RX interrupt */
UART_IER_REG
(
uart
[
0
]
.
base
)
=
0x01
;
UART_IER_REG
(
uart
0
.
base
)
=
0x01
;
/* install ISR */
rt_hw_interrupt_install
(
uart
[
0
].
irq
,
am33xx_uart_isr
,
&
serial
[
0
]
,
"uart0"
);
rt_hw_interrupt_control
(
uart
[
0
]
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
[
0
]
.
irq
);
rt_hw_interrupt_install
(
uart
0
.
irq
,
am33xx_uart_isr
,
&
serial0
,
"uart0"
);
rt_hw_interrupt_control
(
uart
0
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
0
.
irq
);
/* register UART0 device */
rt_hw_serial_register
(
&
serial
[
0
]
,
"uart0"
,
rt_hw_serial_register
(
&
serial
0
,
"uart0"
,
RT_DEVICE_FLAG_RDWR
|
RT_DEVICE_FLAG_INT_RX
|
RT_DEVICE_FLAG_STREAM
,
&
uart
[
0
]
);
&
uart
0
);
#endif
#ifdef RT_USING_UART1
config
[
1
].
baud_rate
=
BAUD_RATE_115200
;
config
[
1
].
bit_order
=
BIT_ORDER_LSB
;
config
[
1
].
data_bits
=
DATA_BITS_8
;
config
[
1
].
parity
=
PARITY_NONE
;
config
[
1
].
stop_bits
=
STOP_BITS_1
;
config
[
1
].
invert
=
NRZ_NORMAL
;
serial
[
1
].
ops
=
&
am33xx_uart_ops
;
serial
[
1
].
int_rx
=
&
uart_int_rx
[
1
];
serial
[
1
].
config
=
config
[
1
];
config
.
baud_rate
=
BAUD_RATE_115200
;
config
.
bit_order
=
BIT_ORDER_LSB
;
config
.
data_bits
=
DATA_BITS_8
;
config
.
parity
=
PARITY_NONE
;
config
.
stop_bits
=
STOP_BITS_1
;
config
.
invert
=
NRZ_NORMAL
;
serial1
.
ops
=
&
am33xx_uart_ops
;
serial1
.
int_rx
=
&
uart1_int_rx
;
serial1
.
config
=
config
;
/* enable RX interrupt */
UART_IER_REG
(
uart
[
1
]
.
base
)
=
0x01
;
UART_IER_REG
(
uart
1
.
base
)
=
0x01
;
/* install ISR */
rt_hw_interrupt_install
(
uart
[
1
].
irq
,
am33xx_uart_isr
,
&
serial
[
1
]
,
"uart1"
);
rt_hw_interrupt_control
(
uart
[
1
]
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
[
1
]
.
irq
);
rt_hw_interrupt_install
(
uart
1
.
irq
,
am33xx_uart_isr
,
&
serial1
,
"uart1"
);
rt_hw_interrupt_control
(
uart
1
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
1
.
irq
);
/* register UART0 device */
rt_hw_serial_register
(
&
serial
[
1
]
,
"uart1"
,
rt_hw_serial_register
(
&
serial
1
,
"uart1"
,
RT_DEVICE_FLAG_RDWR
|
RT_DEVICE_FLAG_INT_RX
|
RT_DEVICE_FLAG_STREAM
,
&
uart
[
1
]
);
&
uart
1
);
#endif
#ifdef RT_USING_UART2
config
[
2
].
baud_rate
=
BAUD_RATE_115200
;
config
[
2
].
bit_order
=
BIT_ORDER_LSB
;
config
[
2
].
data_bits
=
DATA_BITS_8
;
config
[
2
].
parity
=
PARITY_NONE
;
config
[
2
].
stop_bits
=
STOP_BITS_1
;
config
[
2
].
invert
=
NRZ_NORMAL
;
serial
[
2
].
ops
=
&
am33xx_uart_ops
;
serial
[
2
].
int_rx
=
&
uart_int_rx
[
2
];
serial
[
2
].
config
=
config
[
2
];
config
.
baud_rate
=
BAUD_RATE_115200
;
config
.
bit_order
=
BIT_ORDER_LSB
;
config
.
data_bits
=
DATA_BITS_8
;
config
.
parity
=
PARITY_NONE
;
config
.
stop_bits
=
STOP_BITS_1
;
config
.
invert
=
NRZ_NORMAL
;
serial2
.
ops
=
&
am33xx_uart_ops
;
serial2
.
int_rx
=
&
uart2_int_rx
;
serial2
.
config
=
config
;
/* enable RX interrupt */
UART_IER_REG
(
uart
[
2
]
.
base
)
=
0x01
;
UART_IER_REG
(
uart
2
.
base
)
=
0x01
;
/* install ISR */
rt_hw_interrupt_install
(
uart
[
2
].
irq
,
am33xx_uart_isr
,
&
serial
[
2
]
,
"uart2"
);
rt_hw_interrupt_control
(
uart
[
2
]
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
[
2
]
.
irq
);
rt_hw_interrupt_install
(
uart
2
.
irq
,
am33xx_uart_isr
,
&
serial2
,
"uart2"
);
rt_hw_interrupt_control
(
uart
2
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
2
.
irq
);
/* register UART2 device */
rt_hw_serial_register
(
&
serial
[
2
]
,
"uart2"
,
rt_hw_serial_register
(
&
serial
2
,
"uart2"
,
RT_DEVICE_FLAG_RDWR
|
RT_DEVICE_FLAG_INT_RX
|
RT_DEVICE_FLAG_STREAM
,
&
uart
[
2
]
);
&
uart
2
);
#endif
#ifdef RT_USING_UART3
config
[
3
]
.
baud_rate
=
BAUD_RATE_115200
;
config
[
3
]
.
bit_order
=
BIT_ORDER_LSB
;
config
[
3
]
.
data_bits
=
DATA_BITS_8
;
config
[
3
]
.
parity
=
PARITY_NONE
;
config
[
3
]
.
stop_bits
=
STOP_BITS_1
;
config
[
3
]
.
invert
=
NRZ_NORMAL
;
serial
[
3
]
.
ops
=
&
am33xx_uart_ops
;
serial
[
3
].
int_rx
=
&
uart_int_rx
[
3
]
;
serial
[
3
].
config
=
config
[
3
]
;
config
.
baud_rate
=
BAUD_RATE_115200
;
config
.
bit_order
=
BIT_ORDER_LSB
;
config
.
data_bits
=
DATA_BITS_8
;
config
.
parity
=
PARITY_NONE
;
config
.
stop_bits
=
STOP_BITS_1
;
config
.
invert
=
NRZ_NORMAL
;
serial
3
.
ops
=
&
am33xx_uart_ops
;
serial
3
.
int_rx
=
&
uart_3_int_rx
;
serial
3
.
config
=
config
;
/* enable RX interrupt */
UART_IER_REG
(
uart
[
3
]
.
base
)
=
0x01
;
UART_IER_REG
(
uart
3
.
base
)
=
0x01
;
/* install ISR */
rt_hw_interrupt_install
(
uart
[
3
].
irq
,
am33xx_uart_isr
,
&
serial
[
3
]
,
"uart3"
);
rt_hw_interrupt_control
(
uart
[
3
]
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
[
3
]
.
irq
);
rt_hw_interrupt_install
(
uart
3
.
irq
,
am33xx_uart_isr
,
&
serial3
,
"uart3"
);
rt_hw_interrupt_control
(
uart
3
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
3
.
irq
);
/* register UART3 device */
rt_hw_serial_register
(
&
serial
[
3
]
,
"uart3"
,
rt_hw_serial_register
(
&
serial
3
,
"uart3"
,
RT_DEVICE_FLAG_RDWR
|
RT_DEVICE_FLAG_INT_RX
|
RT_DEVICE_FLAG_STREAM
,
&
uart
[
3
]
);
&
uart
3
);
#endif
#ifdef RT_USING_UART4
config
[
4
]
.
baud_rate
=
BAUD_RATE_115200
;
config
[
4
]
.
bit_order
=
BIT_ORDER_LSB
;
config
[
4
]
.
data_bits
=
DATA_BITS_8
;
config
[
4
]
.
parity
=
PARITY_NONE
;
config
[
4
]
.
stop_bits
=
STOP_BITS_1
;
config
[
4
]
.
invert
=
NRZ_NORMAL
;
serial
[
4
]
.
ops
=
&
am33xx_uart_ops
;
serial
[
4
].
int_rx
=
&
uart_int_rx
[
4
]
;
serial
[
4
].
config
=
config
[
4
]
;
config
.
baud_rate
=
BAUD_RATE_115200
;
config
.
bit_order
=
BIT_ORDER_LSB
;
config
.
data_bits
=
DATA_BITS_8
;
config
.
parity
=
PARITY_NONE
;
config
.
stop_bits
=
STOP_BITS_1
;
config
.
invert
=
NRZ_NORMAL
;
serial
4
.
ops
=
&
am33xx_uart_ops
;
serial
4
.
int_rx
=
&
uart4_int_rx
;
serial
4
.
config
=
config
;
/* enable RX interrupt */
UART_IER_REG
(
uart
[
4
]
.
base
)
=
0x01
;
UART_IER_REG
(
uart
4
.
base
)
=
0x01
;
/* install ISR */
rt_hw_interrupt_install
(
uart
[
4
].
irq
,
am33xx_uart_isr
,
&
serial
[
4
]
,
"uart4"
);
rt_hw_interrupt_control
(
uart
[
4
]
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
[
4
]
.
irq
);
rt_hw_interrupt_install
(
uart
4
.
irq
,
am33xx_uart_isr
,
&
serial4
,
"uart4"
);
rt_hw_interrupt_control
(
uart
4
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
4
.
irq
);
/* register UART4 device */
rt_hw_serial_register
(
&
serial
[
4
]
,
"uart4"
,
rt_hw_serial_register
(
&
serial
4
,
"uart4"
,
RT_DEVICE_FLAG_RDWR
|
RT_DEVICE_FLAG_INT_RX
|
RT_DEVICE_FLAG_STREAM
,
&
uart
[
4
]
);
&
uart
4
);
#endif
#ifdef RT_USING_UART5
config
[
5
]
.
baud_rate
=
BAUD_RATE_115200
;
config
[
5
]
.
bit_order
=
BIT_ORDER_LSB
;
config
[
5
]
.
data_bits
=
DATA_BITS_8
;
config
[
5
]
.
parity
=
PARITY_NONE
;
config
[
5
]
.
stop_bits
=
STOP_BITS_1
;
config
[
5
]
.
invert
=
NRZ_NORMAL
;
config
.
baud_rate
=
BAUD_RATE_115200
;
config
.
bit_order
=
BIT_ORDER_LSB
;
config
.
data_bits
=
DATA_BITS_8
;
config
.
parity
=
PARITY_NONE
;
config
.
stop_bits
=
STOP_BITS_1
;
config
.
invert
=
NRZ_NORMAL
;
serial
[
5
]
.
ops
=
&
am33xx_uart_ops
;
serial
[
5
].
int_rx
=
&
uart_int_rx
[
5
]
;
serial
[
5
].
config
=
config
[
5
]
;
serial
5
.
ops
=
&
am33xx_uart_ops
;
serial
5
.
int_rx
=
&
uart5_int_rx
;
serial
5
.
config
=
config
;
/* enable RX interrupt */
UART_IER_REG
(
uart
[
5
]
.
base
)
=
0x01
;
UART_IER_REG
(
uart
5
.
base
)
=
0x01
;
/* install ISR */
rt_hw_interrupt_install
(
uart
[
5
].
irq
,
am33xx_uart_isr
,
&
serial
[
5
]
,
"uart5"
);
rt_hw_interrupt_control
(
uart
[
5
]
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
[
5
]
.
irq
);
rt_hw_interrupt_install
(
uart
5
.
irq
,
am33xx_uart_isr
,
&
serial5
,
"uart5"
);
rt_hw_interrupt_control
(
uart
5
.
irq
,
0
,
0
);
rt_hw_interrupt_mask
(
uart
5
.
irq
);
/* register UART4 device */
rt_hw_serial_register
(
&
serial
[
5
]
,
"uart5"
,
rt_hw_serial_register
(
&
serial
5
,
"uart5"
,
RT_DEVICE_FLAG_RDWR
|
RT_DEVICE_FLAG_INT_RX
|
RT_DEVICE_FLAG_STREAM
,
&
uart
[
5
]
);
&
uart
5
);
#endif
return
0
;
}
INIT_BOARD_EXPORT
(
rt_hw_serial_init
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录