a. 由 40pin 的原理图可知,Orange Pi PC 可用的 uart 为 uart1、uart2 和 uart3
b. 然后在 /boot/orangepiEnv.txt 中设置 overlays=uart1 uart2 uart3 就可以同时打 开 uart1、uart2 和 uart3 的配置
c. 然后重启系统,启动时,在 u-boot 的启动 log 中可以看到 UART DT overlays 的配置输出
d. 系统启动后,在/sys/class/tty 下可以看到 ttyS1、ttyS2 和 ttyS3 的亮核信息,其中
a) 40pin 中或键兆的 uart1 对应/dev/ttyS1
b) 40pin 中的 uart2 对应/dev/ttyS2
c) 40pin 中的 uart3 对应/dev/ttyS3
2) 然后开始测试 uart 接口,先使用杜邦线短接要测试的 uart 接口的 rx 和 tx
3) 然后修改 wiringOP 中的串口测试程序 serialTest
4) 再编译 wiringOP 中的串口测试程序 serialTest
5) 最后运行 serialTest,如果能看到下面的打印,说明串口通信正常
//摘要: 掌握 UART0配置及使用,程序中将UART0 配置到P0.0、 P0.1。利中岁用串口调试助手,波特率设置为4800,并选择十六进制发送和显示,十六进制发送为偶数个,不然会少返回一个数,详见程序注释。#include "c8051f020.h"
unsigned char data1
void SYSCLK_Init()
void PORT_Init()
void UART0_Init()
void SYSCLK_Init()
{
unsigned int i
OSCXCN=0X67//0X67=0110,0111
for(i=0i<256i++)//等待>1ms
while(!(OSCXCN&0X80)) //等待XTLVLD变为1
OSCICN=0X88//时钟失效监测器,选择外部时钟源作为系统时钟
}
void PORT_Init()
{
XBR0 = 0x27/*交叉开关配置,URAT总线TX0置到P0.0口,RX0置到P0.1口, SPI总线SCK配置到P0.2口,
MOSI为P0.4口卖袜睁, NSS为P0.5,MISO配置到P0.3口,IIC总线SDA置到P0.6口�SCK置到P0.7 TX1,RX1配置到P1.0,P1.1,CEX0,CEX1,配置到P1.2,P1.3,外部中断int0配置到P1.4 */
XBR1 = 0x04
XBR2 = 0x44 /*允许功能选择开关有效*/
P0MDOUT = 0x1A/*SCK、MOSI和NSS为推拉式输出,MISO为开漏式.*/
P74OUT =0xff
}
void UART0_Init()
{
SCON0=0x50 //串口方式1
TMOD=0X20//选用定时器1作为波特率发好桥生器
TH1=0xF4 //波特率为4800
TL1=0xF4
ES0=1 //开启串口中断0
TF1=0
TR1=1 //定时器启动
PCON=0X80//波特率加倍 波特率为9600
TI0=1
}
void UART0_ISR() interrupt 4 using 1
{
if(RI0)
{
RI0=0//中断接收标志清零
data1=SBUF0//接收数据
SBUF0=data1//发送数据
while(TI0==0)
TI0=0//发送标志清零
}
}
main()
{
WDTCN=0XDE
WDTCN=0XAD
SYSCLK_Init()
PORT_Init()
UART0_Init()
EA=1
while(1)
}
给你一个按115200bps的测试激励,这是连发12个字节的,楼主可以参考修改下。initial
begin
reset = 1 //复位信号高有效
clk = 0// 20MHz
uart_data_in = 1// 串口数据线
#100000 reset = 0 //销谨颤1000us复位结束
shift_reg[95:0] = 96'dxx //待移位的字节寄存器(12个字节共96bit)
//以下是 按115200bps速率发送12字节
repeat(12)
begin
txd_reg = shift_reg[95:88]
p_check = ~(txd_reg[7]^txd_reg[6]^txd_reg[5]^txd_reg[4]^txd_reg[3]^txd_reg[2]^txd_reg[1]^txd_reg[0])// 奇校验,要是不用可以直接填0
#8681 f_in_data_a1 = 0//起始位
#8681 f_in_data_a1 = txd_reg[0] // 数据位[0]
#8681 f_in_data_a1 = txd_reg[1] // 数据位[1]
#8681 f_in_data_a1 = txd_reg[2] // 数据位[2]
#8681 f_in_data_a1 = txd_reg[3] //亏败 数据位[3]
#8681 f_in_data_a1 = txd_reg[4] // 数据位[4]
#8681 f_in_data_a1 = txd_reg[5] // 数据位[5]
#8681 f_in_data_a1 = txd_reg[6] // 数据位[6]
#8681 f_in_data_a1 = txd_reg[7] // 数晌誉据位[7]
#8681 f_in_data_a1 = p_check// 奇偶校验位
#8681 f_in_data_a1 = 1// 停止位
shift_reg = shift_reg<<8 // 准备下一个字节
end
ps: #8681,由于串口波特率是115200bps,因此1bit的发送时间是1/115200 ≈ 8681ns
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)