接口技术_10UART
UART串口通信实验报告
实验四UART串口通信学院:研究生院学号:1400030034姓名:张秋明一、实验目的及要求设计一个UART串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用异步收发器”。
二、实验原理UART是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输和接收。
在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。
UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。
其中各位的意义如下:起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
资料位:紧接着起始位之后。
资料位的个数可以是4、5、6、7、8等,构成一个字符。
通常采用ASCII码。
从最低位开始传送,靠时钟定位。
奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
停止位:它是一个字符数据的结束标志。
可以是1位、1.5位、2位的高电平。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:是衡量资料传送速率的指标。
表示每秒钟传送的符号数(symbol)。
一个符号代表的信息量(比特数)与符号的阶数有关。
例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。
这两者的概念很容易搞错。
三、实现程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity uart isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号;rs232_tx: out std_logic --RS232发送数据信号;); end uart;architecture behav of uart iscomponent uart_rx port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps的高电平为接收数据的采样点bps_start:out std_logic;--接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送);end component;component speed_select port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号clk_bps: out std_logic; --此时clk_bps 的高电平为接收或者发送数据位的中间采样点bps_start:in std_logic --接收数据后,波特率时钟启动信号置位);end component;component uart_tx port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_tx: out std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps 的高电平为接收数据的采样点bps_start:out std_logic;--接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去);end component;signal bps_start_1:std_logic;signal bps_start_2:std_logic;signal clk_bps_1:std_logic;signal clk_bps_2:std_logic;signal rx_data:std_logic_vector(7 downto 0);signal rx_int:std_logic;beginRX_TOP: uart_rx port map(clk=>clk,rst_n=>rst_n,rs232_rx=>rs232_rx,clk_bps=>clk_bps_1,bps_start=>bps_start_1,rx_data=>rx_data,rx_int=>rx_int);SPEED_TOP_RX: speed_select port map(clk=>clk,rst_n=>rst_n,clk_bps=>clk_bps_1,bps_start=>bps_start_1);TX_TOP:uart_tx port map(clk=>clk, --系统时钟rst_n=>rst_n, --复位信号rs232_tx=>rs232_tx, --RS232发送数据信号clk_bps=>clk_bps_2, --此时clk_bps 的高电平为发送数据的采样点bps_start=>bps_start_2,--接收到数据后,波特率时钟启动置位rx_data=>rx_data, --接收数据寄存器,保存直至下一个数据来到rx_int=>rx_int --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去);SPEED_TOP_TX: speed_select port map(clk=>clk,rst_n=>rst_n,clk_bps=>clk_bps_2,bps_start=>bps_start_2);end behav;-----------------------------------------------------------------------------------------------------------------------3个子模块------------------------------------------------------------------------------异步接收模块-------------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity uart_rx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps的高电平为接收数据的采样点bps_start:out std_logic;--接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去); end uart_rx;architecture behav of uart_rx issignal rs232_rx0: std_logic;signal rs232_rx1: std_logic;signal rs232_rx2: std_logic;signal rs232_rx3: std_logic;signal neg_rs232_rx:std_logic;signal bps_start_r:std_logic;signal num:integer;signal rx_data_r:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来beginprocess(clk,rst_n)beginif (rst_n='0')thenrs232_rx0<='0';rs232_rx1<='0';rs232_rx2<='0';rs232_rx3<='0';elseif (rising_edge(clk)) thenrs232_rx0<=rs232_rx;rs232_rx1<=rs232_rx0;rs232_rx2<=rs232_rx1;rs232_rx3<=rs232_rx2;end if;end if;neg_rs232_rx <=rs232_rx3 and rs232_rx2 and not(rs232_rx1)and not(rs232_rx0);end process;process(clk,rst_n)beginif (rst_n='0')thenbps_start_r<='0';rx_int<='0';elseif (rising_edge(clk)) thenif(neg_rs232_rx='1') then--接收到串口数据线rs232_rx 的下降沿标志信号bps_start_r<='1'; --启动串口准备数据接收rx_int<='1';--接收数据中断信号使能else if((num= 15) and (clk_bps='1')) then --接收完有用数据信息bps_start_r<='0'; --数据接收完毕,释放波特率启动信号rx_int<='0';--接收数据中断信号关闭end if;end if;end if;end if;bps_start<=bps_start_r;end process;process(clk,rst_n)beginif (rst_n='0')thenrx_data_r<="00000000";rx_data<="00000000";num<=0;elseif (rising_edge(clk)) thenif(clk_bps='1')thennum<=num+1;case num iswhen 1=>rx_data_r(0)<=rs232_rx;--锁存第0bitwhen 2=>rx_data_r(1)<=rs232_rx;--锁存第0bitwhen 3=>rx_data_r(2)<=rs232_rx;--锁存第0bitwhen 4=>rx_data_r(3)<=rs232_rx;--锁存第0bitwhen 5=>rx_data_r(4)<=rs232_rx;--锁存第0bitwhen 6=>rx_data_r(5)<=rs232_rx;--锁存第0bitwhen 7=>rx_data_r(6)<=rs232_rx;--锁存第0bitwhen 8=>rx_data_r(7)<=rs232_rx;--锁存第0bitwhen 10=>rx_data<=rx_data_r;when 11=>num<=15;when others=>null;end case;if(num=15) thennum<=0;end if;end if;end if;end if;end process;end behav;---------------------------------波特率控制模块-----------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity speed_select isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号clk_bps: out std_logic; --此时clk_bps的高电平为接收或者发送数据位的中间采样点bps_start:in std_logic--接收数据后,波特率时钟启动信号置位或者开始发送数据时,波特率时钟启动信号置位);end speed_select;architecture behav of speed_select issignal cnt:std_logic_vector(12 downto 0);signal clk_bps_r:std_logic;constant BPS_PARA:integer:=5207;constant BPS_PARA_2:integer:=2603;beginprocess(clk,rst_n)beginif (rst_n='0')thencnt<="0000000000000";elseif (rising_edge(clk)) thenif((cnt=BPS_PARA)or(bps_start='0')) thencnt<="0000000000000"; --波特率计数器清零elsecnt<=cnt+'1';--波特率时钟计数启动end if;end if;end if;end process;process(clk,rst_n)beginif (rst_n='0')thenclk_bps_r<='0';elseif (rising_edge(clk)) thenif(cnt=BPS_PARA_2) thenclk_bps_r<='1'; --clk_bps_r高电平为接收数据位的中间采样点,同时也作为发送数据的数据改变点elseclk_bps_r<='0'; --波特率计数器清零end if;end if;end if;clk_bps<=clk_bps_r;end process;end behav;---------------------------------异步发送模块-------------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity uart_tx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_tx: out std_logic; --RS232接收数据信号clk_bps: in std_logic; --此时clk_bps的高电平为接收数据的采样点bps_start:out std_logic;--接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去); end uart_tx;architecture behav of uart_tx issignal rx_int0: std_logic;signal rx_int1: std_logic;signal rx_int2: std_logic;signal neg_rx_int:std_logic;signal bps_start_r:std_logic;signal num:integer;signal tx_data:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来beginprocess(clk,rst_n)beginif (rst_n='0')thenrx_int0<='0';rx_int1<='0';rx_int2<='0';elseif (rising_edge(clk)) thenrx_int0<=rx_int;rx_int1<=rx_int0;rx_int2<=rx_int1;end if;end if;neg_rx_int <=not(rx_int1)and (rx_int2);end process;process(clk,rst_n)beginif (rst_n='0')thenbps_start_r<='0';tx_data<="00000000";elseif (rising_edge(clk)) thenif(neg_rx_int='1') then--接收到串口数据线rs232_rx的下降沿标志信号bps_start_r<='1'; --启动串口准备数据接收tx_data<=rx_data;--接收数据中断信号使能else if((num= 15) and (clk_bps='1')) then --接收完有用数据信息bps_start_r<='0'; --数据接收完毕,释放波特率启动信号end if;end if;end if;end if;bps_start<=bps_start_r;end process;process(clk,rst_n)beginif (rst_n='0')thenrs232_tx<='1';num<=0;elseif (rising_edge(clk)) thenif(clk_bps='1')thennum<=num+1;case num iswhen 1=>rs232_tx<='0';when 2=>rs232_tx<=tx_data(0);--发送第1bitwhen 3=>rs232_tx<=tx_data(1);--发送第2bitwhen 4=>rs232_tx<=tx_data(2);--发送第3bitwhen 5=>rs232_tx<=tx_data(3);--发送第4bitwhen 6=>rs232_tx<=tx_data(4);--发送第5bitwhen 7=>rs232_tx<=tx_data(5);--发送第6bitwhen 8=>rs232_tx<=tx_data(6);--发送第7bitwhen 9=>rs232_tx<=tx_data(7);--发送第8bitwhen 10=>rs232_tx<='1';when 11=>num<=15;when others=>null;end case;if(num=15) thennum<=0;end if;end if;end if;end if;end process;end behav;四、实验步骤1、建立新工程UART,选择芯片,型号为cyclone ii EP2C35F484C8。
UART发展
UART因为计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。
它是用于控制计算机与串行设备的芯片。
有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。
作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。
将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。
在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。
在输出数据流中加入启停标记,并从接收数据流中删除启停标记。
处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。
可以处理计算机与外部串行设备的同步管理问题。
有一些比较高档的UART 还提供输入输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。
现在如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。
编辑本段什么是 UARTUART是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输和接收。
在嵌入式设计中,UART用来与PC进行通信,包括与监控调试器和其它器件,如EEPROM通信。
编辑本段UART通信UART首先将接收到的并行数据转换成串行数据来传输。
消息帧从一个低位起始位开始,后面是7个或8个数据位,一个可用的奇偶位和一个或几个高位停止位。
接收器发现开始位时它就知道数据准备发送,并尝试与发送器时钟频率同步。
如果选择了奇偶,UART就在数据位后面加上奇偶位。
UART(中文版的数据手册)
UART(中⽂版的数据⼿册)第⼗⼀章异步串⼝通信概述S3C2410的UART提供3个独⽴的异步串⾏通信端⼝,每个端⼝可以基于中断或者DMA进⾏操作。
换句话说,UART控制器可以在CPU和UART之间产⽣⼀个中断或者DMA请求来传输数据。
UART在系统时钟下运⾏可⽀持⾼达230.4K 的波特率,如果使⽤外部设备提供的UEXTCLK,UART的速度还可以更⾼。
每个UART通道各含有两个16位的接收和发送FIFO。
S3C2410的UART包括可编程的波特率,红外接收/发送,⼀个或两个停⽌位插⼊,5-8位数据宽度和奇偶校验。
每个UART包括⼀个波特率发⽣器、⼀个发送器、⼀个接收器和⼀个控制单元,如图11-1所⽰。
波特率发⽣器的输⼊可以是PCLK或者UEXTCLK。
发送器和接收器包含16位的FIFO和移位寄存器,数据被送⼊FIFO,然后被复制到发送移位寄存器准备发送,然后数据按位从发送数据引脚TxDn输出。
同时,接收数据从接收数据引脚RxDn按位移⼊接收移位寄存器,并复制到FIFO。
特性—RxD0, TxD0, RxD1, TxD1, RxD2, 和TxD2基于中断或者DMA操作—UART Ch 0, 1, 和 2 具有 IrDA 1.0 & 16 字节 FIFO—UART Ch 0 和 1 具有 nRTS0, nCTS0, nRTS1, 和 nCTS1—⽀持发⽣/接收握⼿图11-1 UART⽅框图串⼝操作下述部分描述了UART的⼀些操作,包括数据发送、数据接收、中断产⽣、波特率发⽣、loop-back模式、红外模式和⾃动流控制。
数据发送发送数据的帧结构是可编程的,它由1个起始位、5-8个数据位、1个可选的奇偶位和1-2个停⽌位组成,这些可以在线控制寄存器ULCONn中设定。
接收器可以产⽣⼀个断点条件——使串⾏输出保持1帧发送时间的逻辑0状态。
当前发送字被完全发送出去后,这个断点信号随后发送。
断点信号发送之后,继续发送数据到Tx FIFO(如果没有FIFO则发送到Tx保持寄存器)。
(完整版)SPI,UART,I2C的区别以及RS232与RS485的区别
SPI,UART,I2C的区别以及RS232与RS485的区别详细的区别:第一个区别当然是名字:SPI(Serial Peripheral Interface:串行外设接口);I2C(INTER IC BUS:意为IC之间总线)UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上:SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。
SPI总线可以实现多个SPI设备互相连接。
提供SPI串行时钟的SPI设备为SPI 主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。
主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。
I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信.在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。
(注:I2C资料了解得比较少,这里的描述可能很不完备) UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。
第三,从第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;第四,I2C线更少,比UART、SPI更为强大,但是技术上也更加麻烦些,因为I2C需要有双向IO 的支持,而且使用上拉电阻,我觉得抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。
UART是什么-串口工作过程分析
UART是什么?串口工作过程分析一、UART是什么UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。
UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx 和Tx)就可以完成通信过程,因此也称为异步串行通信。
若加入一个合适的电平转换器,如SP3232E、SP3485,UART 还能用于RS-232、RS-485 通信,或与计算机的端口连接。
UART 应用非常广泛,手机、工业控制、PC 等应用中都要用到UART。
UART使用的是异步,串行通信。
串行通信是指利用一条传输线将资料一位位地顺序传送。
特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。
异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。
数据传送速率用波特率来表示,即每秒钟传送的二进制位数。
例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。
数据通信格式如下图:其中各位的意义如下:起始位:先发出一个逻辑”0”信号,表示传输字符的开始。
数据位:可以是5~8位逻辑”0”或”1”。
如ASCII码(7位),扩展BCD码(8位)。
小端传输校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验) 停止位:它是一个字符数据的结束标志。
可以是1位、1.5位、2位的高电平。
空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
注:异步通信是按字符传。
UART总线协议介绍(易懂)
UART总线协议介绍(易懂)目录CONTENTS1•UART总线协议产生背景2•UART总线协议内容介绍3•UART总线协议发展一、UART总线协议背景1 UART总线产生背景19世纪60年代,为了解决计算机和电传打字机之间的通信,Bell发明了UART总线协议,将并行输入信号转换成串行输出信号。
因UART简单实用的特性,其已经成为一种使用非常广泛的通讯协议。
我们日常接触到的串口,RS232,RS485等总线,内部使用的基本都是UART总线协议。
嵌入式里面说的串口也是指的UART,在嵌入式领域可以说是应用非常广泛,在主机与辅助设备直接进行通信,比如使用PC通过UART给主机设备发消息,或者接收主机log等2 UART总线定义UART(Universal Asynchronous Receiver/Transmitter),意为通用异步收发传输器,该总线双向通信,可以实现全双工传输和接收。
UART包含TTL电平的串口和RS-232电平的串口,使用UART通信的双方设备都需要遵从UART总线协议3 通信方式介绍通信方式描述备注串行数据的每一位按照顺序逐个传输,通过传输线进行数据传输,传输速度较慢,但实现简单并行数据被分成多个并行传输,同时通过多个传输线进行数据传输,传输速度快,但实现复杂同步发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式异步发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式单工指消息只能单方向传输的工作方式半双工可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行全双工指在通信的任意时刻,线路上存在A到B和B到A的双向信号传输表(1)通信方式SOC外部设备Bit0 串行通信 并行通信Bit1 Bit2Bit3Bit4Bit5 Bit6Bit7SOC外部设备Bit0Bit1 Bit2 Bit4 Bit5 Bit6Bit7 Bit3串行通信就是通过一根数据线发送数据。
UART串口通信的基本应用 - 单片机
UART串口通信的基本应用 - 单片机1、通信的三种基本类型我们常用的通信通常可以分为单工、半双工、全双工通信。
单工就是指只允许一方向另外一方传送信息,而另一方不能回传信息。
比如我们的电视遥控器,我们的收音机广播等,都是单工通信技术。
半双工是指数据可以在双方之间相互传播,但是同一时刻只能其中一方发给另外一方,比如我们的对讲机就是典型的半双工。
全双工通信就发送数据的同时也能够接受数据,两者同步进行,就如同我们的电话一样,我们说话的同时也可以听到对方的声音。
2、UART模块介绍IO口模拟串口通信,大家了解了串口通信的实质,但是我们的单片机程序却需要不停的检测扫描单片机IO 口收到的数据,大量占用了CPU资源。
这时候就会有聪明人想了,其实我们不是很关心通信的过程,我们只需要一个通信的结果,最终得到接收到的数据就行了。
这样我们可以在单片机内部做一个硬件模块,让他自动接收数据,接收完了,通知我们一下就可以了,我们的51单片机内部就存在这样一个UART模块,要正确使用它,当然还得先把对应的特殊功能寄存器配置好。
51单片机的UART串行口的结构由串行口控制寄存器SCON、发送和接收电路三部分构成,先来了解一下串口控制寄存器SCON。
表1SCON--串行控制寄存器的位分配(地址:98H)可位寻址;复位值:0x00;复位源:任何复位7654321符号SM0SM1SM2RENTB8RB8TIRI表2SCON--串行控制寄存器的位描述位符号7SM0这两位共同决定了串口通信的模式0到模式3共4种模式。
我们最常用的就是模式1,也就是SM0=0,SM1=1,下边我们重点就讲模式1,其他模式从略。
6SM15SM2多机通信控制位(很少用),模式1直接清零。
4REN使能串行接收。
由软件置位使能接收,软件清零则禁止接收3TB8模式2和3中将要发送的第9位数据(很少用)2RB8模式2和3中接收第9位数据(很少用),模式1用来接收停止位 1TI发送中断标志位,模式1下,在数据位最后一位发送结束,开始发送停止位时由硬件自动置1,必须通过软件清零。
UART原理
西南科技大学城市学院嵌入式系统开发技术课程设计专业:自动化0901班级:0901学号:200940141姓名:郑雅江设计题目:UART工作原理接收部分2012年1月1.UART 原理1.1 UART 的通信原理UART 即通用异步收发器,是一种串行通信方式。
数据在传输过程中是通过一位一位地进行传输来实现通信的,串行通信方式具有传输线少,成本底等优点,缺点是速度慢。
串行通信分为两种类型:同步通信方式和异步通信方式。
但一般多用异步通信方式,主要因为接受和发送的时钟是可以独立的这样有利于增加发送与接收的灵活性。
异步通信是一个字符接着一个字符传输,一个字符的信息由起始位、数据位、奇偶校验位和停止位组成。
每一个字符的传输靠起始位来同步,字符的前面一位是起始位,用下降沿通知收方开始传输,紧接着起始位之后的是数据位,传输时低位在前高位在后,字符本身由5~8位数据位组成。
数据位后面是奇偶校验位,最后是停止位,停止位是用高电平来标记一个字符的结束,并为下一个字符的传输做准备。
停止位后面是不同长度的空闲位。
停止位和空闲位都规定为高电平,这样可以保证起始位有一个下降沿。
UART 的帧格式如图2.1所示。
图2.1 UART 的帧格式 UART 的帧格式包括线路空闲状态(idle ,高电平)、起始位(start bit ,低电平)、5~8位数据位(data bits)、校验位(parity bit ,可选)和停止位(stop bit ,位数可为1、1.5、2位)。
在串口的异步通信中,数据以字节为单位的字节帧进行传送。
发送端和接收端必须按照相同的字节帧格式和波特率进行通信。
其中字节帧格式规定了起始位、数据位、寄偶效验位、停止位。
起始位是字节帧的开始。
使数据线处于逻辑0状态 ,用于向接收端表明开始发送数据帧,起到使发送和接收设备实现同步。
停止位是字节帧的终止,使数据线处于逻辑1状态。
用于向接收端表明数据帧发送完毕。
波特率采用标准速度9600bit/s 。
S3C2410-UART简介及编程
UART接口 | s3c2410系列ARM
UART初始化
通信模式设置
串行通信协议
先发送起始位,然后是最低有效数据位,最后是停止位
起始位 为低电平
。
起始位
奇偶校验位 可有可无
数据位(5~8位)
停止 位
可设置为 1、1.5、 2位停止位
Start bit LSB
Data bit Data bit Data bit Data bit Data bit Data bit
UART RxD UART RxD
1 start D0 D1 D2 D3 D4 D5 D6 D7 P 1
检测到起始位的下降沿,
速率测量计数器对PCLK 进行计数。
1
start bit
1(LSB of ‘A’ or
’a’) 检测到起始位的上升沿,
速率测量计数器停止。
速率测量计数器
当计数完毕之后,速率测量计数器的值装入除 数锁存寄存器,波特率自动切换为正常模式 。
[5 : 4]
3
2
奇偶选择 奇偶设置 停止位
[1 :0] 字长
UART接口 |s3c2410系列ARM 1 初始化
2 收发数据 3 状态信息
UART状态信息
引脚设置 波特率设置 通信模式设置 工作模式设置 发送单元
接收单元 查询方式
中断方式
UART接口 | s3c2410系列ARM 工作模式设置
UART接口 |s3c2410系列ARM 1 初始化
2 收发数据 3 状态信息
UART状态信息
引脚设置 波特率设置 通信模式设置 工作模式设置 发送单元
接收单元 查询方式
中断方式
UART接口 | s3c2410系列ARM 通信模式设置
UART串行口简介
UART异步串行口UART异步串行口简介数据通信的基本方式可分为并行通信与串行通信两种:并行通信:是指利用多条数据传输线将一个资料的各位同时传送。
它的特点是传输速度快,适用于短距离通信,但要求通讯速率较高的应用场合。
串行通信:是指利用一条传输线将资料一位位地顺序传送。
特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。
UART 异步串行口的传输格式异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而在同一个字符中的两个相邻位代码间的时间间隔是固定的。
通信协议(通信规程):是指通信双方约定的一些规则。
在使用异步串口传送一个字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。
通讯时序图如下:开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。
至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才又发出起始位。
每一个数据位的宽度等于传送波特率的倒数。
微机异步串行通信中,常用的波特率为110,150,300,600,1200,2400,4800,9600 ,19200,38400,115200等。
S3C2410的异步串行口1S3C2410 的UART(通用异步串行口)单元提供三个独立的异步串行I/O 端口,每个都可以在中断和DMA 两种模式下进行。
UART支持的最高波特率达230.4kbps。
UART串口通信详解
UART串⼝通信详解UART串⼝通信详解重要⼏个函数讲解:*HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);发送,发送指定长度的数据。
如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)。
*HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);串⼝接收,接收指定长度的数据。
如果超时没接收完成,则不再接收数据到指定缓冲区,返回超时标志(HAL_TIMEOUT)。
*HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef huart, uint8_t *pData, uint16_t Size);串⼝中断发送,以中断⽅式发送指定长度的数据。
⼤致过程是,把发送缓冲区指针指向要发送的数据,设置发送长度,发送计数器初值,然后使能串⼝发送中断,触发串⼝中断。
再然后,串⼝中断函数处理,直到数据发送完成,⽽后关闭中断,不再发送数据,串⼝发送完成回调函数。
*HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef huart, uint8_t *pData, uint16_t Size);串⼝中断接收,以中断⽅式接收指定长度数据。
⼤致过程是,把接收缓冲区指针指向要存放接收数据的数组,设置接收长度,接收计数器初值,然后使能串⼝接收中断。
接收到数据时,会触发串⼝中断。
再然后,串⼝中断函数处理,直到接收到指定长度数据,⽽后关闭中断,不再触发接收中断,调⽤串⼝接收完成回调函数。
的UART串口通信详细ppt课件
6.1.2 串行通信接口标准
一、RS-232C接口
RS-232C是EIA(美国电子工业协会)1969年修订 RS-232C标准。RS-232C定义了数据终端设备(DTE)与 数据通信设备(DCE)之间的物理接口标准。
1、机械特性
RS-232C接口规定使用25针连接器,连接器的尺寸及每个 插针的排列位置都有明确的定义。(阳头)
2、有电平偏移 RS-232C总线标准要求收发双方共地。通信距离较大时,
收发双方的地电位差别较大,在信号地上将有比较大的地电流 并产生压降。
3、抗干扰能力差 RS-232C在电平转换时采用单端输入输出,在传输过程
中当干扰和噪声混在正常的信号中。为了提高信噪比,RS232C总线标准不得不采用比较大的电压摆幅。
发送
接收
单工
工
发送 时间1 接收 接收 时间2 发送
半双工
发送
接收
接收
发送
全双
三、信号的调制与解调
利用调制器(Modulator)把数字信号转换成 模拟信号,然后送到通信线路上去,再由解调器 (Demodulator)把从通信线路上收到的模拟信 号转换成数字信号。由于通信是双向的,调制器 和解调器合并在一个装置中,这就是调制解调器 MODEM。
1
13
1
5
14
25
6
9
2、功能特性
4、过程特性
过程特性规定了信号之间的时序关系,以便正 确地接收和发送数据 。
TXD
M
计 RXD
O
算 RTS 机
D E
DSR
M
电话线
TXD
M
O
RXD 计
D E
RTS 算 机
【整理】常用通信接口二(CAN、I2C、SPI、UART、GPIO原理与区别)
【整理】常用通信接口二(CAN/I2C/SPI/UART/GPIO原理与区别)上一篇整理了常用通信接口一(RS232/RS485/USB/TYPE-C原理与区别),这篇我们接着整理CAN、I2C、SPI、UART、GPIO原理与区别;1.CAN总线接口1)定义CAN是控制器局域网络(Controller Area Network,CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11898),是ISO国际标准化的串行通信协议,是国际上应用最广泛的现场总线之一。
CAN属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。
较之许多RS-485基于R线构建的分布式控制系统而言,基于CAN总线的分布式控制系统在以下方面具有明显的优越性:A.网络各节点之间的数据通信实时性强B.开发周期短C.已形成国际标准的现场总线D.最有前途的现场总线之一与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。
2)运用A.CAN总线是为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,它是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。
通信速率最高可达1Mbps。
B.CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。
使网络内的节点个数在理论上不受限制。
C.CAN总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。
CAN总线上任意节点可在任意时刻主动地向网络上其它节点发送信息而不分主次,因此可在各节点之间实现自由通信。
D.结构简单,只有2根线与外部相连,并且内部集成了错误探测和管理模块。
E.CAN总线特点:(1)数据通信没有主从之分,任意一个节点可以向任何其他(一个或多个)节点发起数据通信,靠各个节点信息优先级先后顺序来决定通信次序,高优先级节点信息在134μs通信;(2)多个节点同时发起通信时,优先级低的避让优先级高的,不会对通信线路造成拥塞;(3)通信距离最远可达10KM(速率低于5Kbps)速率可达到1Mbps(通信距离小于40M);(4)CAN总线传输介质可以是双绞线,同轴电缆。
几种常用的总线标准
什么是CAN总线?
CAN意为Controller Area Network的缩写,意为控制区域网络。是国际上流行的现场总线中的一种。是一种特别适合于组建互连的设备网络系统或子系统。
2. CAN总线特点?
l CAN是到目前为止为数不多的有国际标准的现场总线
l CAN通讯距离最大是10公里(设速率为5Kbps),或最大通信速率为1Mbps(设通信距离为40米)。
A、较低的成本与极高的总线利用率;
B、 数据传输距离可长达10Km,传输速率可高达1Mbit/s;
C、可靠的错误处理和检错机制,发送的信息遭到破坏后可自动重发;
D、节点在错误严重的情况下具有自动退出总线的功能;
E、报文不包含源地址或目标地址仅用标志符来指示功能信息和优先级信息;
由于人为、自然、其它外界环境的影响和人们对公交系统的安全可靠性、真实、实时性的追求,使得我们对通信方式,通信设备有了更高的要求,基于CAN总线的网络则成为我们最佳的选择
CAN采用报文识别符识别网络上的节点,从而把节点分成不同的优先级,高优先级的节点享有传送报文的优先权。
报文是短帧结构,短的传送时间使其受干扰概率低,CAN有很好的效验机制,这些都保证了CAN通信的可靠性。
3. CAN总线应用领域
CAN总线最初是德国BOSCH为汽车行业的监测,控制而设计的。现已应用到铁路、交通、国防、工程、工业机械、纺织、农用机械、数控、医疗器械机器人、楼宇、安防等方面。
UART使用发送数据线TXD和接收数据线RXD来传送数据,接收和发送可以单独进行也可以同时进行。它传送数据的格式有严格的规定,每个数据以相同的位串形式传送,每个串行数据由起始位,数据位,奇偶校验位和停止位组成。从起始位到停止位结束的时间称为一帧(frame),即一个字符的完整通信格式。
单片机—UART接口知识简介(上)
单片机—UART接口知识简介(上)1 UART接口简述UART即通用异步收发器,可设置成全双工异步通讯方式,与PC 等通讯;或设置成半双工同步模式与其他周边外设通信,如A/D或D /A。
SPMC65系列单片机内置了UART模块,它的作用是将外部设备串行数据转换为并行数据接收;将内部并行数据转换为串行数据发送。
UART模块特点如下:·两个接口引脚。
RXD为数据接收引脚(与PC5复用,使用RX功能时设置为输入口);TXD为数据发送引脚(与PC4复用,使用TX功能时设置为输出口)。
·提供标准的异步全双工通信。
·可编程的波特率。
·可进行偶校验、奇校验或禁止校验。
·停止位可设置为1位或2位。
·支持发送中断。
·支持接收中断。
·高抗噪声能力的数据接收(接收中间连续进行3次采样,并对结果进行多数决策)。
·在接收中进行帧校验和奇偶校验。
·溢出检测。
·CPU工作频率为8 MHz时,波特率可在2 400~38 400 bps之间编程设置。
UART的数据帧如图6.5所示。
UART接口通常用于与PC通信,或者用于单片机间的通信。
2 控制寄存器1.UART控制寄存器P_UART_Ctrl($46,R/W)可以通过写UART控制寄存器P_UART_Ctrl($46)对UART的中断使能、UART功能、帧格式等进行设置。
P_UART_Ctrl默认初始值为#00h,具体位的功能如表6.8所列。
bit7 RXIE:接收中断使能位。
1=使能;0=禁止。
bit6 TXIE:发送中断使能位。
1=使能;0禁止。
bit5 RXEN:UART接收功能使能位。
1=使能;0=禁止。
bit4 TXEN:UART发送功能使能位。
1=使能;0=禁止。
bit3 SOFTRST:软件复位。
写:1=复位所有UART模块;0=无效。
bit2 STOPSEL:停止位长度选择位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
22
PLL控制寄存器(MPLLCON):设为(0xa1 << 12)|(0x03 << 4)|(0x01),即0xa1031 对于MPLLCON寄存器,[19:12]为MDIV,[9:4] 为PDIV,[1:0]为SDIV。有如下计算公式:
MPLL(FCLK) = (m * Fin)/(p * 2s)
基于ARM的嵌入式系统接口技术
33
10.5.2
同步通信方式和异步通信方式
异步通信方式
异步通信时不要求接收端时钟和发送端时钟同步。 发送端发送完一个字节后,可经过任意长的时间 间隔再发送下一个字节。 异步通信时发送方可以随时传输数据,而接收方 随时都处于准备接收数据的状态。 串行异步通信方式以一个字符为传输单位,通信 中两个字符间的时间间隔是不固定的,然而在同 一个字符中的两个相邻位代码间的时间间隔是固 定的,并按照一固定且预定的时序传送,这个时 序是由通信协议决定的。
(4)串口如何发送数据和接收数据?
基于ARM的嵌入式系统接口技术
7
10.2 时钟系统相关的基础知识
10.2.1 时钟控制
时钟和功率管理模块由三部分组成:时钟控制, USB控制和功率控制。 S3C2410A的时钟控制逻辑能够产生系统所需 要的时钟,包括CPU的FCLK,AHB总线接口 的HCLK,和APB总线接口的PCLK。 S3C2410A有两个PLL,一个用于 FCLK,HCLK,PCLK,另一个用于USB模块 (48MHZ)。时钟控制逻辑能够由软件控制不 将PLL连接到各接口模块以降低处理器时钟频 率,从而降低功耗。
同步通信方式
同步方式是将许多的字符聚集成一字符块后,在每 块信息(常常称之为信息帧)之前要加上1至2个同 步字符,字符块之后再加入适当的错误检测数据才 传送出去。 采用同步通信时,在传输线上没有字符传输时,要 发送专用的“空闲”字符或同步字符。 同步方式不仅在字符的本身之间是同步的,而且在 字符与字符之间的时序仍然是同步的,•
基于ARM的嵌入式系统接口技术
34
10.5.3 串行通信相关的基本概念
数据速率(波特率)
串行通信中,通信速率即数据线上每秒钟传送的码 元数,计量单位为波特,1波特=1位/秒(1bps) 串行数据线上每位信息宽度(即持续时间)由波特 率确定。例:通信速率是1200bps,每位数据的持 续时间: 持续时间=1/1200=0.833ms
基于ARM的嵌入式系统接口技术
16
10.3.2 配置APB和AHB总线时钟
S3C2410支持FCLK,HCLK和 PCLK三者之间的比率可选,这个比 率是由时钟除数控制寄存器 (CLKDIVN)寄存器的HDIVN和 PDIVN决定的。CLKDIVN用来设置 FCLK:HCLK:PCLK的比例关系,默 认为1:1:1。
工作过程一
例如:若配置FCLK:HCLK:PCLK=1:2:4,即 hdivn=1,pdivn=1,则调用语句如下。
SetClockDivider(1,1);
基于ARM的嵌入式系统接口技术
29
工作过程二
配置FCLK主时钟
设置MPLL即主时钟FCLK,即设置MPLLCON寄存 器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV, 函数名SetMPllValue。
基于ARM的嵌入式系统接口技术
13
10.3 时钟配置
10.3.1 锁定时间计数器寄存器(LOCKTIME)
系统上电几毫秒后,晶振输出稳定,FCLK等于晶振 频率,nRESET(复位)信号恢复高电平后,CPU 开始执行指令。我们可以在程序开头启动MPLL, 在设置MPLL的几个寄存器后,需要等待一段时间 (Lock Time),使得其输出稳定。在这段时间 (Lock Time)内,FCLK停振,CPU停止工作。 锁定时间计数器寄存器(LOCKTIME) 如表
基于ARM的嵌入式系统接口技术
19
注意:1、HCLK和PCLK不应该超过某一限制 2、如果HDIVN=1,CPU总线模式将通过以下指 令从快速模式切换到异步模式: MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA mcr p15,0,r0,c1,c0,0 如果HDIVN=1并且CPU总线模式是快速模式, CPU将以HCLK进行运行,这一特性可以用于 将CPU频率减半而不影响HCLK和PCLK。
奇偶校验
发送时数据后附加一个奇偶校验位,用于校错。 接收时按协议确定的与发送方相同的校验方法校验。
基于ARM的嵌入式系统接口技术
9
10.2.2 时钟源选择
下表描述了模式控制引脚(OM3和OM2)和选择 时钟源之间的对应关系。OM[3:2]的状态由 OM3和OM2引脚的状态在nRESET的上升沿锁 存得到。
基于ARM的嵌入式系统接口技术
10
10.2.3 FCLK,HCLK和PCLK
S3C2410 CPU默认的工作主频为12MHz,使 用PLL电路可以产生更高的主频供CPU及外围 器件使用。S3C2410有两个PLL:MPLL和 UPLL,UPLL专用与USB设备。MPLL用于 CPU及其他外围器件。 通过MPLL会产生三个部分的时钟频率:FCLK、 HCLK、PLCK。FCLK用于CPU核,HCLK用 于AHB总线的设备(比如SDRAM),PCLK用于 APB总线的设备(比如UART)。从时钟结构图 中可以查看到使用不同时钟频率的硬件。
基于ARM的嵌入式系统接口技术
20
10.3.3 配置系统主时钟
系统主时钟的配置可以通过PLL控制寄存器 (MPLLCON/UPLLCON)实现。PLL控制寄存器包 括MPLLCON和UPLLCON两个寄存器,两个寄存 器的定义是一样的,[19:12]为MDIV,[9:4]为 PDIV,[1:0]为SDIV,PLL控制寄存器的定义如后 表
基于ARM的嵌入式系统接口技术
30
10.5 异步串行通信接口的基础知识
10.5.1
异步串行通信接口概述
所谓串行通信就是使数据一位一位地进行传输 而实现的通信。 数据通信的基本方式工
并行通信
串行通信
串行数据传送模式:
单工 半双工 全双工
基于ARM的嵌入式系统接口技术
32
10.5.2
同步通信方式和异步通信方式
基于ARM的嵌入式系统接口技术
21
PLL控制寄存器(MPLLCON/UPLLCON)
对于MPLLCON寄存器,有如下的公式计算主 时钟频率。 Mpll = (m * Fin) / (p * 2s) 其中:
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
基于ARM的嵌入式系统接口技术
系统主时钟FCLK=202.80MHz , FCLK:HCLK:PCLK=1:2:4。
4
基于ARM的嵌入式系统接口技术
引导问题
(1)什么是系统时钟?如何选择时钟源? (2)通常系统中有几种时钟? (3)如何配置系统所使用的各种时钟?
基于ARM的嵌入式系统接口技术
5
10.1.2 工作场景二
键盘上输入的内容显示在超级终端上
第10章 异步串行通信接口
本章学习目标与要求
1. 掌握时钟系统的基本概念。 2.掌握系统时钟设置的方法。 3.掌握串口通信中的基本概念。 4.掌握串口通信处理的流程。 5.掌握串口通信的设计方法。
基于ARM的嵌入式系统接口技术
2
10.1 工作场景导入
10.1.1 工作场景一
系统时钟配置
在操作各种处理器自带的片上外设或者外接的外部设 备时,可能需要使用系统内部时钟作为输入源工作, 如看门狗定时器就是使用APB总线时钟PCLK工作的。 因此,在进行操作之前必须对系统时钟进行必要的初 始化设置,正确配置系统时钟及AHB、APB等总线时 钟。 请编写程序进行时钟系统配置,得到如下结果:
其中: m = MDIV + 8, p = PDIV + 2, s = SDIV Fin 即默认输入的时钟频率12MHz。 MPLLCON设为0xa1031,可以计算出 FCLK=202.8MHz,再由CLKDIVN的设置可知: HCLK=101.4MHz,PCLK=50.7MHz。
基于ARM的嵌入式系统接口技术
void SetMPllValue(int mdiv,int pdiv,int sdiv) { rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv; }
若配置FCLK=202.80MHz,即mdiv=0xa1, pdiv=0x3,sdiv=0x1,则调用语句如下。
SetMPllValue(0xa1,0x3,0x1);
基于ARM的嵌入式系统接口技术
15
10.3.1 锁定时间计数器寄存器(LOCKTIME)
锁定计数器寄存器(LOCKTIME):设为0x00ffffff MPLL启动后需要等待一段时间(Lock Time),使 得其输出稳定。位[23:12]用于UPLL,位[11:0]用 于MPLL。使用确省值0x00ffffff即可。
rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
}
基于ARM的嵌入式系统接口技术
26
10.4 回到工作场景一
工作过程一
配置HCLK和PCLK
编写配置HCLK和PCLK的函数,名SetClockDivider。
// hdivn,pdivn FCLK:HCLK:PCLK(关系) // 0, 0 1:1:1// 0, 1 1:1:2// 1, 0 1:2:2// 1, 1 1:2:4 void SetClockDivider(int hdivn,int pdivn) { // LOCKTIME = 0x00ffffff; // 使用默认值即可,所以也可以不设置 rCLKDIVN = (hdivn<<1) | pdivn; // 如 果 HDIVN 非 0 , CPU 的 总 线 模 式 应 该 从 “ fast bus mode” 变 为 “asynchronous bus mode” if(hdivn) __asm__( “mrc p15,0,r0,c1,c0,0\n” “orr r0,r0,#0xc0000000\n” “mcr p15,0,r0,c1,c0,0\n” ); } 28 基于ARM的嵌入式系统接口技术