收藏 分销(赏)

ARM的串行口驱动程序设计PPT学习课件.ppt

上传人:天**** 文档编号:10241263 上传时间:2025-04-29 格式:PPT 页数:49 大小:1.15MB
下载 相关 举报
ARM的串行口驱动程序设计PPT学习课件.ppt_第1页
第1页 / 共49页
ARM的串行口驱动程序设计PPT学习课件.ppt_第2页
第2页 / 共49页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,嵌入式组件设计,驱动程序部分,北京信息科技大学 电子信息与科学专业,王小妮,目录,一、,ARM,的串行口驱动程序设计,二、键盘驱动程序设计,三、,I/O,驱动程序设计,四、,ARM,的,A/D,接口驱动程序设计,五、,LCD,的驱动程序设计,六、触摸屏驱动程序设计,嵌入式组件设计,驱动程序部分,一、,ARM,的串行口驱动程序设计,1.,了解,ARM,的串行口通讯工作原理,2.,掌握,ARM,串行口的寄存器操作,3.,编程实现,ARM UART,(Universal Asynchronous Receiver and Transmitter),通讯,串行通信概述,串行数据传送模式:,单工,半双工,全双工,串行通信方式:,异步通信,同步通信,异步通信必须遵循的,3,项规定为:,1.,字符的格式,2.,波特率,3.,校验位,初始化:设置波特率、停止位、奇偶校验、数据位等参数,设置是否启用中断方式,包括接收数据中断和发送数据中断,ARM,如何实现串口功能,熟悉串口通讯原理,查阅,ARM,串口寄存器文档(包括控制、状态和数据寄存器),3.,查阅电平转换芯片资料(,max3232,),4.,设计硬件电路图,5.,设计串口驱动(包括串口寄存器初始化,发送接收函数等),串行工作原理,1.,串行的方式,异步串行,I/O,异步串行方式是,将传输数据的每个字符一位接一位,(,例如先低位、后高位,),地传送,。,数据的各不同位可以分时使用同一传输通道,因此串行,I,O,可以减少信号连线,图,1,串行通信字符格式,波特率表示每秒传送的二进制位数。如数据传送速率为,120,字符,/,秒,一个字符为,10,位,则波特率为,120,10,1200,波特。,接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:,1,)奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。,2,)帧格式错:一个字符从起始位到停止位的总位数不对。,3,)溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。每一种错误都会给出相应的出错信息,提示用户处理。,2,、物理层标准,EIA,标准:,RS-232C,ARM,电平标准:,TTL,电平转换芯片:,MAX3232,EIA RS,-,232C:,美国电子工业协会推荐的一种标准,(Electronic industries Association Recommended Standard),。,它在一种,25,针接插件,(DB,-,25),上定义了串行通信的有关信号。,信号连线,图,2,实用,RS-232C,连线,信号电平规定,RS,-,232C,规定了双极性的信号逻辑电平:,-3V,到,-25V,之间的电平表示逻辑,“,1,”,。,+3V,到,+25V,之间的电平表示逻辑,“,0,”,。,因此这是一套负逻辑定义。,MAX3232,完成,EIA,电平与,TTL,电平双向转换,基于,ARM,的嵌入式硬件平台体系结构,基于,ARM,架构的,32,位,微处理器,Samsung,S3C2410,2MB,NOR,Flash(BIOS),8MB SDRM,(,系统内存,),16MB,NAND,Flash(,硬盘),USB,接口,USBN9603,两个,RS-232,串行通信接口,JTAG,调试端口,LCD,显示,键盘输入,TCP/IP,协议,CAN BUS,ARM2410,开发平台串口硬件原理图,RS-232,只能代表通信的物理介质层和链路层,如果要实现数据的双向访问,就必须自己编写通信应用程序。,UART,收发数据是通过从存储器或,I/O,端口位置进行读写操作来实现的。通过监控,UART,状态寄存器中的比特位可以判断字节何时被接收。另一个比特位可用于判断字节何时通过接口传输。这种监控,UART,状态的方式称为,查询方法,。,S3C2410,的每个,UART,都有,7,个状态信号:接收,FIFO/,缓冲区数据准备好、发送,FIFO,缓冲区空、发送移位寄存器空、溢出错误、奇偶校验错误、帧错误和中止,所有这些状态都由对应的,UART,状态寄存器,(UTRSTATn/UERSTATn),中的相应位来表现。,当接收器要将接收移位寄存器的数据送到接收,FIFO,它会激活接收,FIFO,满状态信号,如果控制寄存器中的接收模式选为中断模式,就会引发接收中断。,当发送器从发送,FIFO,中取出数据送到发送移位寄存器,那么,FIFO,空状态信号将会被激活。如果控制寄存器中的发送模式选为中断模式,就会引发发送中断。,与,FIFO,有关的中断,类型,FIFO,类型,非,FIFO,模式,Rx,中断,每当接收数据达到接收,FIFO,触发的水平,就产生接收中断;如果,FIFO,非空且连续,3,个字时间没有接收到任何数据,就产生超时中断,每当接收数据满,接收移位寄存器将产生一个中断,Tx,中断,每当发送数据达到发送,FIFO,触发的水平,就产生发送中断,每当发送数据空,发送保持寄存器将产生一个中断,错误中断,帧错误、奇偶校验错误和被检测到并按字节接收的中止信号,都将产生错误中断;当达到接收,FIFO,的顶部,就会产生溢出错误中断,所有错误都会立即产生一个错误中断。但两个错误同时发生,只有一个中断会产生,波特率发生器,波特率发生器以,MCLK,作为时钟源,每个,UART,的波特率发生器为传输提供了串行移位时钟。波特率时钟由通过时钟源的,16,分频及一个由,UART,波特率除数寄存器,(UBRDIVn),指定的,16,位除数决定。,UBRDIVn,(取整)(,MCLK,(波特率,16,),1,回送模式与,红外通信模式,回送模式,:S3C2410,的,UART,提供的一个测试模式。在这种模式下,发送出的数据会立即被接收。这一特性用于校验运行处理器内部发送和接收通道的功能,这种模式可以通过设置,UART,控制寄存器,(UCONn),中的回送位来实现。,红外通信模式,:,S3C2410,的,UART,模块支持红外线(,IR),发送和接收。可以通过设置,UART,控制寄存器,(UCONn),中的红外模式位来选择这一模式。,ARM,串行口寄存器:,(1)ULCONn,:,UART,线性控制寄存器,(2)UCONn,:,UART,控制寄存器,(3)UFCONn,:,FIFO,控制寄存器,(4)UMCON:MODEM,控制寄存器,(5)UTRSTATn,:发送,/,接收状态寄存器,(6)UERSTATn,:,错误状态寄存器,(7)UFSTAT:FIFO,状态寄存器,(8)UMSTAT:MODEM,状态寄存器,(9)UTXH,:,数据发送寄存器,(10)URXH,:,数据接收寄存器,(11)UBRDIVn,:,波特率除数因子寄存器,3,、,ARM,自带的,串行口寄存器,ARM,自带两个串行口,各带,16,字节的,FIFO(,先入先出寄存器,),,最大波特率,115.2kbps,。,ARM,内部,UART,控制器的结构图,UART,的操作分为,:,数据发送、数据接收、产生中断、产生波特率、红外模式,.,数据发送,:,发送数据帧格式可以编程设置。包含起始位、,5,8,个数据位,可选的奇偶校验位以及,1,2,位停止位。这些通过,UART,的控制寄存器,ULCONn,来设置,.,数据接收,:,同发送一样,.,UART7,种状态中检测溢出出错、奇偶校验出错、帧出错等出错检测,并可设置相应的错误标志,通过错误状态寄存器,UERSTATn,来设置,.,接收缓冲区准备好、发送缓冲区空、发送移位缓冲器空通过读写状态寄存器,UTRSTATn,来设置,.,寄存器,地址,读,/,写,描述,复位值,ULCON0,0 x01D00000,读,/,写,串口,0,线性控制寄存器,0 x00,ULCON1,0 x01D04000,读,/,写,串口,1,线性控制寄存器,0 x00,与,UART,有关的寄存器主要有以下几个:,(1)UART,线性控制寄存器,ULCONn,表,2-1 ULCONn,功能定义,ULCONn,位,描述,初始化状态,保留,7,0,红外模式,6,红外模式位决定是否使用红外模式:,0,正常模式;,1,红外模式,0,奇偶校验模式,5:3,奇偶校验模式指定当,UART,执行发送和接收操作时如何进行奇偶校验的产生和检查:,0 xx,无奇偶校验;,100,奇校验;,110=,奇偶校验强制为,1,;,111=,奇偶校验强制为,0,000,停止位个数,2,每帧停止位的个数:,0,1,位;,1,两位。,0,数据位长度,1:0,字长位决定每帧发送或接收的数据位数:,00,5,位;,01,6,位;,10,7,位;,11,8,位;,00,参考设置:普通模式,无奇偶校验,,1,位停止位,,8,为数据长度。,参考设置:,Tx,电平触发,,Rx,边沿触发,禁止接收超时中断,允许接收错误中断,发送和接受模式均为,01,(2),UART,控制寄存器,UCONn,Register,Address,R/W,Description,Reset Value,UCON0,0 x01D00004,R/W,UART channel,0 control register,0 x00,UCON1,0 x01D04004,R/W,UART channel,1 control register,0 x00,在发送缓冲区为空时由电平引发中断,在发送缓冲区为空时由脉冲边沿引发中断,接收缓冲区接收数据时由电平引发中断,接收缓冲区接收到数据时由脉冲边沿引发中断,决定,UART FIFO,模式。其中,UFCONn,的第,0,位决定是否启用,FIFO,。,(3)UART FIFO,控制寄存器,UFCONn,(4),UART MODEM,控制寄存器,UMCONn,决定,MODEM,的模式,,UMCONn,的第,0,位是请求发送位,显示芯片目前的读写,(,接收,/,发送,),状态,(5),读写状态寄存器,UTRSTATn,显示芯片目前的错误状态,(,6,)错误状态寄存器,UERSTATn,(7),UART FIFO,状态寄存器,UFSTATn,FIFO,状态寄存器,UFSTAT,可以读出目前,FIFO,是否满以及其中的字节数;,MODEM,状态寄存器,UMSTAT,可以读出目前,MODEM,的,CTS,状态。,(8),UART MODEM,状态寄存器,UMSTAT,n,(9),数据发送寄存器,UTXHn,数据发送寄存器存放着发送的数据。一次发送,位数据。,数据接收寄存器存放着接收的数据。,一次接收,位数据。,(10),数据接收寄存器,URXHn,需要注意的是在发生溢出错误的时候,接收的数据必须要被读出来,否则会引发下次溢出错误。,(11),串口波特率设置寄存器,UBRDIVn,波特率因子计算公式如下:,UBRDIVn=(round_off)(MCLK/(bps 16)1,其中,MCLK,是系统频率,例如在,40MHz,的情况下,当波特率取,115200,时,,UBRDIVn,=(int)(40000000/(115200,16)+0.5 1,=(int)(21.7+0.5)1,=22 1=21,编写串口驱动函数,主函数,串口初始化,发送数据,接收数据,从串口读取数据,向串口发送数据,串口初始化,编写串口驱动函数,串口初始化,UFCONn,、,UMCONn,编写串口驱动函数,发送数据,接收数据,/*,44b.h,UART,的全部功能寄存器*,/,#define rULCON0(*(volatile unsigned*)0 x1d00000),#define rULCON1(*(volatile unsigned*)0 x1d04000),#define rUCON0(*(volatile unsigned*)0 x1d00004),#define rUCON1(*(volatile unsigned*)0 x1d04004),#define rUFCON0(*(volatile unsigned*)0 x1d00008),#define rUFCON1(*(volatile unsigned*)0 x1d04008),#define rUMCON0(*(volatile unsigned*)0 x1d0000c),#define rUMCON1(*(volatile unsigned*)0 x1d0400c),#define rUTRSTAT0 (*(volatile unsigned*)0 x1d00010),#define rUTRSTAT1 (*(volatile unsigned*)0 x1d04010),#define rUERSTAT0 (*(volatile unsigned*)0 x1d00014),#define rUERSTAT1 (*(volatile unsigned*)0 x1d04014),#define rUFSTAT0 (*(volatile unsigned*)0 x1d00018),#define rUFSTAT1 (*(volatile unsigned*)0 x1d04018),#define rUMSTAT0 (*(volatile unsigned*)0 x1d0001c),#define rUMSTAT1 (*(volatile unsigned*)0 x1d0401c),#define rUBRDIV0 (*(volatile unsigned*)0 x1d00028),#define rUBRDIV1 (*(volatile unsigned*)0 x1d04028),不带操作系统的,ARM,实现串行功能,#ifdef _BIG_ENDIAN/,大端模式,#define rUTXH0(*(volatile unsigned char*)0 x1d00023),#define rUTXH1(*(volatile unsigned char*)0 x1d04023),#define rURXH0(*(volatile unsigned char*)0 x1d00027),#define rURXH1(*(volatile unsigned char*)0 x1d04027),#define WrUTXH0(ch)(*(volatile unsigned char*)(0 x1d00023),=(unsigned char)(ch),#define WrUTXH1(ch)(*(volatile unsigned char*)(0 x1d04023),=(unsigned char)(ch),#define RdURXH0()(*(volatile unsigned char*)(0 x1d00027),#define RdURXH1()(*(volatile unsigned char*)(0 x1d04027),#define UTXH0 (0 x1d00020+3)/byte_access address by BDMA,#define UTXH1 (0 x1d04020+3),#define URXH0 (0 x1d00024+3),#define URXH1 (0 x1d04024+3),#else /,小端模式,#define rUTXH0(*(volatile unsigned char*)0 x1d00020),#define rUTXH1(*(volatile unsigned char*)0 x1d04020),#define rURXH0(*(volatile unsigned char*)0 x1d00024),#define rURXH1(*(volatile unsigned char*)0 x1d04024),#define WrUTXH0(ch)(*(volatile unsigned char*)0 x1d00020),=(unsigned char)(ch),#define WrUTXH1(ch)(*(volatile unsigned char*)0 x1d04020),=(unsigned char)(ch),#define RdURXH0()(*(volatile unsigned char*)0 x1d00024),#define RdURXH1()(*(volatile unsigned char*)0 x1d04024),#define UTXH0 (0 x1d00020)/byte_access address by BDMA,#define UTXH1 (0 x1d04020),#define URXH0 (0 x1d00024),#define URXH1 (0 x1d04024),#endif,void Uart_Init(int Uartnum,int mclk,int baud)/,初始化函数,端口号,时钟,波特率,int i;,if(mclk=0),mclk=MCLK;,if(Uartnum=0)/UART0,r,UFCON,0=0 x0;/FIFO disable,r,UMCON,0=0 x0;/UART0,r,ULCON,0=0 x3;/Normal,No parity,1 stop,8 bit,r,UCON,0=0 x245;/rx=edge,tx=level,disable timeout int.,enable rx,/error int.,normal,interrupt or polling,r,UBRDIV,0=(int)(mclk/16./baud+0.5)-1);,else,rUFCON1=0 x0;rUMCON1=0 x0;/UART1,rULCON1=0 x3;,rUCON1=0 x245;,rUBRDIV1=(int)(mclk/16./baud+0.5)-1);,for(i=0;i0;time-);,在主函数中首先初始化串行口,0,,然后通过串行口,0,向外发送字符,U,。,/*,串行口发送主程序,*,/,#include.startup44b.h,#include.inc44blib.h,#include.incdef.h,int Main(int argc,char*argv),char c1;,Uart_Init(0,115200);,while(1),Uart_SendByte(0 xa);,Uart_SendByte(0 xd);,c1=Uart_Getch();,Uart_SendByte(c1);,return 0;,2,带操作系统的,ARM,实现串行口功能,当操作系统启动时,将自动初始化各串行口,所以应用程序调用串行口资源将变得非常容易。应用程序往往是多任务系统,为了实时监测串行口信息,在本操作环境中必须单开一个串行口扫描任务,保证信息不丢失。,串行口扫描任务的代码如下:,void Uart_Scan_Task1(void*Id),char c1;,POSMSG pmsg1;,for(;),if(Uart_Getch(&c1,0,1),pmsg1=OSCreateMessage(NULL,OSM_SERIAL,0,c1);,if(pmsg1),SendMessage(pmsg1);,/Uart_Scan_Task,POSMSG OSCreateMessage(POS_Ctrl pOSCtrl,U32 Message,U32 wparam,U32 lparam),向指定的控件创建消息,返回指向消息的指针,(,2,)当系统收到串行口信息时,将会自动向主任务发送一个串行口消息。主任务接收到该消息,将会调用响应函数,响应该消息。,添加消息响应函数的代码如下:,void onSerial(int portn,char c),LCD_ChangeMode(DspTxtMode);,LCD_printf(%cn,c);,Uart_SendByte(0,c);,添加主任务,void Main_Task(void*Id)/Main_Test_Task,POSMSG pMsg=0;,ClearScreen();,for(;)/,消息循环,pMsg=WaitMessage(0);/,等待消息,switch(pMsg-Message),case OSM_SERIAL:onSerial(pMsg-WParam,pMsg-LParam);break;,DeleteMessage(pMsg);/,删除消息,释放资源,小组讨论,1:,MCS-51,单片机的串行通信口驱动程序设计,串口控制寄存器,SCON(98H),SM0,SM1,SM2,REN,TB8,RB8,TI,RI,电源控制寄存器,PCON(87H),SMOD,GF1,GF0,PD,IDL,RI,接收中断标志,TI,发送中断标志,RB8,接收数据第,9,位,TB8,发送数据第,9,位,REN,接收控制,SM2,多机通信,SM0,SM1,工作方式控制,1,允许,0,不允许,IDL,空闲控制位,0,正常,1,空闲,PD,掉电控制位,0,正常,1,掉电,SMOD,波特率选择位,1:,方式,1,2,3,波特率加倍,0:,复位,SM0 SM1,工作方式,说明 波特率,0 0,方式,0,同步移位寄存器,f/12,0 1,方式,1 10,位异步收发 由定时器控制,1 0,方式,2 11,位异步收发,f/32,或,f/64,1 1,方式,3 11,位异步收发 由定时器控制,定时,/,计数工作方式寄存器,TMOD,GATE,C/T,M1,M0,GATE,C/T,M1,M0,定时,/,计数器,1,定时,/,计数器,0,GATE,控制定时,/,计数器是否计数,C/T 1,计数器,0,定时器,M1MO:00:0,方式,13,位,;01:1,方式,16,位,;10:2,方式,8,位,;11:3,方式两个,8,位,定时,/,计数控制寄存器,TCON,TF1,TF0,定时,/,计数器溢出标志,置位或清零,TR1,TR0,定时,/,计数器控制位,置位或清零,IE1,IE0,IT1,IT0:,外部中断控制位,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,内,部,总,线,SBUF(TX),SBUF(RX),TXD,RXD,#include,#include,#define TxDATA(unsigned xdata char*)1000H,void initial(void);,unsigned xdata char*p;,int i=0;,main(),initial();,p=TxDATA;,ACC=p0;,SBUF=ACC;,while(1),if(TI=1&i0 x4F),i+;,ACC=pi;,SBUF=ACC;,void initial(void),IE=0X00;/,中断禁止,TCON=0 x05;,TMOD=0 x20;/,定时器,1,为自动装入方式,PCON=0;/SMOD=1,波特率加倍,SCON=0 xD0;,TH1=0 xf3;,TL1=0 xf3;,PCON=0 x80|PCON;/,数据传输率设置,:9600baud,TR1=1;/,启动定时器,1,程序不断查询,TI,状态,如果,TI,被置位并发送的字节数没有超过,0 x4F,,那么就将新的内容写入缓存,否则就什么也不做。,/*-REG51.H Header file for generic 80C51 and 80C31 microcontroller.-*/,#ifndef _REG51_H_,#define _REG51_H_,/*BYTE Register */,sfr P0 =0 x80;,sfr P1 =0 x90;,sfr P2 =0 xA0;,sfr P3 =0 xB0;,sfr PSW =0 xD0;,sfr ACC =0 xE0;,sfr B =0 xF0;,sfr SP =0 x81;,sfr DPL =0 x82;,sfr DPH =0 x83;,sfr PCON=0 x87;,sfr TCON=0 x88;,sfr TMOD=0 x89;,sfr TL0 =0 x8A;,sfr TL1 =0 x8B;,sfr TH0 =0 x8C;,sfr TH1 =0 x8D;,sfr IE =0 xA8;,sfr IP =0 xB8;,sfr SCON=0 x98;,sfr SBUF=0 x99;,/*PSW */,sbit CY =0 xD7;,sbit AC =0 xD6;,sbit F0 =0 xD5;,sbit RS1 =0 xD4;,sbit RS0 =0 xD3;,sbit OV =0 xD2;,sbit P =0 xD0;,/*TCON */,sbit TF1 =0 x8F;,sbit TR1 =0 x8E;,sbit TF0 =0 x8D;,sbit TR0 =0 x8C;,sbit IE1 =0 x8B;,sbit IT1 =0 x8A;,sbit IE0 =0 x89;,sbit IT0 =0 x88;,/*IE */,sbit EA =0 xAF;,sbit ES =0 xAC;,sbit ET1 =0 xAB;,sbit EX1 =0 xAA;,sbit ET0 =0 xA9;,sbit EX0 =0 xA8;,/*IP */,sbit PS =0 xBC;,sbit PT1 =0 xBB;,sbit PX1 =0 xBA;,sbit PT0 =0 xB9;,sbit PX0 =0 xB8;,/*P3 */,sbit RD =0 xB7;,sbit WR =0 xB6;,sbit T1 =0 xB5;,sbit T0 =0 xB4;,sbit INT1=0 xB3;,sbit INT0=0 xB2;,sbit TXD =0 xB1;,sbit RXD =0 xB0;,/*SCON */,sbit SM0 =0 x9F;,sbit SM1 =0 x9E;,sbit SM2 =0 x9D;,sbit REN =0 x9C;,sbit TB8 =0 x9B;,sbit RB8 =0 x9A;,sbit TI =0 x99;,sbit RI =0 x98;,#endif,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服