全志H3芯片香橙派OrangePi PC开发板40pin的UART测试

全志H3芯片香橙派OrangePi PC开发板40pin的UART测试,第1张

1) linux5.4 系统在 dts 中默认关闭了 40pin 中的 uart 控制器,如果需要使用 uart,首 先需要先打开 uart 的配置,linux3.4 系统默认都是打开的,不需要额外的衫租配置, linux5.4 系统 uart 的打开方法如下

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12521039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存