




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、传播优秀word版文档 ,希望对您有帮助,可双击去除! s3c2440的uart用法 spi、iic和uart是最常用的三种串行总线,这三种总线在s3c2440中都被集成了。在这里我们主要介绍uart,另两个总线在后面的文章中给出。 uart(universal asynchronous receiver/transmitter,通用异步接收/发送装置)用于异步通信,可以实现全双工发送和接收。它不仅可以实现不同嵌入式系统之间的通信,还可以实现与pc之间的通信。 s3c2440提供了三个uart端口,它们都可以通过查询、中断和dma方式传输数据,而且每个uart都分别有一个64个字节的接收fif
2、o和一个64个字节的发送fifo。在这里,我们只给出非fifo模式,即传输数据不利用fifo缓存,一个字节一个字节地传输。 下面我们就给出如何用s3c2440来实现非fifo的uart通信。要实现某种通信,就必须遵循该通信协议。uart的协议包括传输数据的位数,停止位的位数,以及是否进行奇偶校验,这些设置是利用ulconn寄存器完成的。另一个很重要的地方就是设置波特率。s3c2440波特率的时钟源有三个:pclk、fclk/n和uextclk。时钟源的选择是由uconn的第10位和第11位来完成的。波特率的具体计算公式为:时钟源频率(波特率16)1这个计算结果很可能是小数,把该小数取最接近的整
3、数,放入寄存器ubrdivn中就完成了波特率的设置。如我们选择波特率的时钟源为pclk,它为50mhz,我们设置的波特率为115.2khz,通过上式计算的结果为26.13,取整后得到26,那么我们把26放入ubrdivn中即可。由于我们没有使用fifo和modem,所以可以不用设置fifo控制寄存器ufconn和modem控制寄存器umconn。通过以上寄存器的设置,uart就可以正常传输数据。接收到的数据是放到接收缓存器urxhn中,要发送数据时,是把数据放入发送缓存器utxhn中。由于uart是通过字节方式传输数据的,因此要区分是大端模式还是小端模式,也就是说这两个寄存器在这两种模式下,所
4、在的地址是不同。为了了解当前数据传输的各种状态,还需要一些状态寄存器。传输状态寄存器utrstatn非常有用,它的第0位可以用来判断接受缓存器内是否有可接收的数据,第1位和第2位可以用来判断发送缓存器中是否为空,为空时可以发送数据。由于在这里我们不进行传输数据时错误的判断,因此错误状态寄存器uerstatn不需要,fifo状态寄存器ufstatn和modem状态寄存器umstatn在这里也不需要。 我们给出uart通信的两种方法:查询和中断。为了验证程序,使用任一款的串行通信软件来实现pc和s3c2440之间的通信即可。 传播优秀word版文档 ,希望对您有帮助,可双击去除! 首先给出的是查询
5、程序。它是在主程序的循环体内不断查询uart端口,当有数据来时,就接收数据,并再通过uart发送该数据。然后根据所接收数据的不同,分别执行不同的内容,如点亮、熄灭led,蜂鸣器响、或不响。在这里,我们每次只完成一个字节的传输。 #define rgpbcon (*(volatile unsigned *)0x56000010) /port b control#define rgpbdat (*(volatile unsigned *)0x56000014) /port b data#define rgpbup (*(volatile unsigned *)0x56000018) /pull-u
6、p control b#define rgphcon (*(volatile unsigned *)0x56000070) /port h control#define rgphup (*(volatile unsigned *)0x56000078) /pull-up control h#define rulcon0 (*(volatile unsigned *)0x50000000) /uart 0 line control#define rucon0 (*(volatile unsigned *)0x50000004) /uart 0 control#define rufcon0 (*(
7、volatile unsigned *)0x50000008) /uart 0 fifo control#define rumcon0 (*(volatile unsigned *)0x5000000c) /uart 0 modem control#define rutrstat0 (*(volatile unsigned *)0x50000010) /uart 0 tx/rx status#define ruerstat0 (*(volatile unsigned *)0x50000014) /uart 0 rx error status#define rufstat0 (*(volatil
8、e unsigned *)0x50000018) /uart 0 fifo status#define rumstat0 (*(volatile unsigned *)0x5000001c) /uart 0 modem status#define rubrdiv0 (*(volatile unsigned *)0x50000028) /uart 0 baud rate divisor/little endian#define rutxh0 (*(volatile unsigned char *)0x50000020) /uart 0 transmission hold#define rurxh
9、0 (*(volatile unsigned char *)0x50000024) /uart 0 receive buffervoid main(void)char ch;rgpbcon = 0x015551;rgpbup = 0x7ff;rgpbdat = 0x1e0;rgphcon = 0x00faaa; /使用uart0功能rgphup = 0x7ff;rulcon0 = 0x3; /设置uart0无奇偶校验,一位停止位,8位数据rucon0 = 0x245; /pclk为时钟源,接收和发送数据为查询或中断方式rufcon0 = 0; /rumcon0 = 0; /rubrdiv0 =
10、 26; /设置波特率,pclk为50mhz,波特率为115.2khzwhile(!(rutrstat0 & 0x2); /等待并判断发送缓存是否为空传播优秀word版文档 ,希望对您有帮助,可双击去除!rutxh0 = 0xaa; /是空,则发送0xaa字节while(1) while(!(rutrstat0 & 0x1); /等待并判断接收缓存是否准备好ch = rurxh0; /接收一个字节数据 while(!(rutrstat0 & 0x2); /等待并判断发送缓存是否为空 rutxh0 = ch; /发送一个字节数据 switch(ch) /根据所接收数据的不同,执行不同的程序 ca
11、se 0x11: /灭led rgpbdat |= 0x1e0; break; case 0x22: /亮led rgpbdat &= 0x1f; break; case 0x33: /蜂鸣器不响 rgpbdat &= 0x1e0; break; case 0x44: /蜂鸣器响 rgpbdat |= 0x1; break; default: /led灭,蜂鸣器不响传播优秀word版文档 ,希望对您有帮助,可双击去除! rgpbdat = 0x1e0; break; 下面是uart中断程序,它要比查询复杂一些,因为涉及到了中断处理,并且uart发送数据和接收数据是一个中断源。主程序循环体内不执
12、行任何程序,都在uart中断程序内执行。当接收到0x55字节数据时,亮两个led,当接收到其他数据时,发送该字节,并在发送部分执行亮4个led程序。 #define _isr_startaddress 0x33ffff00#define pisr_uart0 (*(unsigned *)(_isr_startaddress+0x90)#define u32 unsigned int#define rgpbcon (*(volatile unsigned *)0x56000010) /port b control#define rgpbdat (*(volatile unsigned *)0x5
13、6000014) /port b data#define rgpbup (*(volatile unsigned *)0x56000018) /pull-up control b#define rgphcon (*(volatile unsigned *)0x56000070) /port h control/#define rgphdat (*(volatile unsigned *)0x56000074) /port h data#define rgphup (*(volatile unsigned *)0x56000078) /pull-up control h#define rulco
14、n0 (*(volatile unsigned *)0x50000000) /uart 0 line control#define rucon0 (*(volatile unsigned *)0x50000004) /uart 0 control#define rufcon0 (*(volatile unsigned *)0x50000008) /uart 0 fifo control#define rumcon0 (*(volatile unsigned *)0x5000000c) /uart 0 modem control#define rutrstat0 (*(volatile unsi
15、gned *)0x50000010) /uart 0 tx/rx status#define ruerstat0 (*(volatile unsigned *)0x50000014) /uart 0 rx error status#define rufstat0 (*(volatile unsigned *)0x50000018) /uart 0 fifo status#define rumstat0 (*(volatile unsigned *)0x5000001c) /uart 0 modem status#define rubrdiv0 (*(volatile unsigned *)0x
16、50000028) /uart 0 baud rate divisor传播优秀word版文档 ,希望对您有帮助,可双击去除! /little endian#define rutxh0 (*(volatile unsigned char *)0x50000020) /uart 0 transmission hold#define rurxh0 (*(volatile unsigned char *)0x50000024) /uart 0 receive buffer#define rsrcpnd (*(volatile unsigned *)0x4a000000) /interrupt requ
17、est status#define rintmsk (*(volatile unsigned *)0x4a000008) /interrupt mask control#define rintpnd (*(volatile unsigned *)0x4a000010) /interrupt request status#define rsubsrcpnd (*(volatile unsigned *)0x4a000018) /sub source pending#define rintsubmsk (*(volatile unsigned *)0x4a00001c) /interrupt su
18、b maskvoid _irq uartisp(void) char ch; rsubsrcpnd |= 0x3; rsrcpnd = 0x128; rintpnd = 0x128; if(rutrstat0 & 1) /接收数据处理部分 ch = rurxh0; /接收字节数据 if(ch=0x55) rgpbdat = 0x61; /亮两个led else rutxh0 = ch; /发送字节数据 else /发送数据处理部分 rgpbdat = 0x1e1; /亮4个led void main(void) rgpbcon = 0x015551;rgpbup = 0x7ff; rgpbda
19、t = 0x1e0;rgphcon = 0x00faaa; rgphup = 0x7ff;传播优秀word版文档 ,希望对您有帮助,可双击去除!rulcon0 = 0x3; rucon0 = 0x5;rufcon0 = 0;rumcon0 = 0;rubrdiv0 = 26;rsrcpnd = 0x128; rsubsrcpnd = 0x3;rintpnd = 0x128; rintsubmsk = (0x3); /打开uart0发送和接收中断屏蔽 rintmsk = (0x128); /打开uart0中断屏蔽 pisr_uart0 = (u32)uartisp;while(1) 最后还要强调
20、几点关于非fifo模式下uart中断的一些注意事项:1. 对于s3c2440来说,接收数据是被动的,发送数据是主动的,因此一般来说,接收数据用中断方式,发送数据用查询方式较好;2. 在中断方式下,当接收到数据时,尽管可能该数据无用,但也一定要读取它,否则下次再接收数据时,不会再引起中断,因为接收数据缓存器被上次接收到的数据所霸占,只要没有读取它,它就永远在那里;3. 由于uart中断涉及到subsrcpnd寄存器,因此在中断处理程序中不仅要清srcpnd寄存器,还要清subsrcpnd寄存器,它们的顺序一定是先清subsrcpnd寄存器,再清srcpnd寄存器,否则就会引起一个中断两次响应的问
21、题。因为是否中断由srcpnd寄存器决定,而srcpnd寄存器的相关状态位由subsrcpnd寄存器决定,如果先清srcpnd寄存器,而还没有清subsrcpnd寄存器的话,srcpnd寄存器的相关位还是会被置1,而一旦被置1,则一定还会引起中断。本文来自csdn博客,转载请标明出处:传播优秀word版文档 ,希望对您有帮助,可双击去除!基于arm9 2410的嵌入式串口编程20070417ohy 下面的程式是在2410研发平台上调试通过的,一个串口的发送实验程式serial.c。#include #include #include #include #include #include #in
22、clude #include #include int main()char szsendbuf4;int fd,c,res,nsize = 4;file *pfile;int filel;struct termios oldtio,newtio;struct stat st;fd = open(/dev/ttys0,o_rdwr | o_noctty);tcgetattr(fd, &oldtio);bzero(&newtio, sizeof(newtio);newtio.c_cflag = b115200 | crtscts | cs8 | clocal | cread;newtio.c_i
23、flag = ignpar | icrnl;tcflush(fd, tciflush);tcsetattr(fd, tcsanow, &newtio);stat(a.txt, &st);pfile = fopen(a.txt, r);filel = st.st_size;while(4 = nsize)bzero(szsendbuf, 4);nsize = fread(szsendbuf, 1, 4, pfile);nsize = write(fd, szsendbuf, nsize);fclose(pfile);tcsetattr(fd, tcsanow, &oldtio);close(fd
24、); 代码写完以后,需要用arm的gcc编译器来编译代码,而不能以gcc来编译代码。因为2410是arm体系结构,和普通pc机的体系结构不相同的。 能将armv4l-unknown-linux-gcc这个文件拷贝到刚才编写c的源程式同一目录下,这样就不必使用一串长长的绝对路径了。如果需要将刚才的serial.c编译成一个名字为serial的可执行文件,可使用下面的命令:./ armv4l-unknown-linux-gcc -o serial serial.c 在运行上述生成的文件时,先通过minicom将宿主机挂载到目标板上。例如宿主机的ip地址为:192.168.2.100,目标板的ip地
25、址为:192.168.2.101。能通过下面的命令将其挂载:mount 192.168.2.100:/ /tmp 这样,宿主机的这个根目录就挂载到目标板上了。由于要进行串口的调试实验,minocom需要用来和目标板进行窗口通信。所有对目标板的操作控制,最佳通过telnet来进行,能通过下面命令实现:telnet 192.168.2.101 连接到目标板上成功的时候,需要输入登陆的用户名和密码,一般是输入root按回车就能,也有例外的。 然后在目标板的/tmp目录中就能看到整个宿主机根目录的内容,再找到serial所在的目录,输入下面命令:./serial就可在宿主机的minicom中看到一个文
26、件属性的输出了。传播优秀word版文档 ,希望对您有帮助,可双击去除!s3c2440串口文档s3c2440的uart提供了三个同步串行io口,第一个串口都可以使用中断模式和dma模式,换句话说就是uart可以产生一个中断或者是dma请求使数据在cpu和uart之间进行传递。uart在系统时钟下可以支持最高位传送为115.2k bps.如果一个外部设备能过uextclk为uart提供时钟,uart可以达到更高的速度。每个uart通道包括两个64字节的fifo作为接收数据和发送数据使用。 s3c2440的uart包括可编程的波特率,红外收发,一个或者两个停止位。5位,6们,7位,8位的数据位和校验
27、检测。每一个uart包括一个波特率产生器,发送器,接收器和一个控制单元。如图111所示。波特率产生器可以使用pclk,fclk/n或者uextclk之一控制。发送器和接收器包含64字节的fifo和一个数据移位器。数据先写到fifo中然后再拷贝到发送移位器中,然后再移位发送通过数据针txdn。在些期间远端发送过来的数据通过针rxdn进入到移位器中再拷贝到接收器的fifo中去。传播优秀word版文档 ,希望对您有帮助,可双击去除!属性rxd0,txd0,rxd1,txd1,rxd2,和txd2都可使用基于dma的和中断的操作。uart通道0,1,和2都拥有irda和64字节的fifouart通道0
28、和1:nrts0,ncts0,nrts1,ncts1收发数据时支持握手uart的操作uart的操作,包括数据传输,数据接收,产生中断,波特率的产生回环模式,红外模式和自动流控制。数据传输发送的数据帧是可以改变的,它由起始位58个数据位一个可选的校验位和12个停止位构成。这些都可以通过策略控制器ulconn设置。数据发送器也可以产生一个停止标志,它可以强迫串口输出逻辑0达一帧的时间,它在一个字传输完成以后阻塞了停止信号的传送。然后继续传输数据到tx fifo中。数据接收与数据的发送相似,接收到的数据帧也是可以修改的。它包括一个起始位,五到八个数据位,一个可选的校验位和一到两个停止位。接收器可检测
29、到覆盖错误,校验错误,帧错误和终止的情况。每一种情况都会设置一个错误标志位。覆盖错误产生的情况是这样的,新数据覆盖掉了还没有来的及取出的旧数据,也就是说接收数据速度快于取出的速度导致一部分数据还没有取出就被新的数据盖掉了。校验错误是指接收到的数据经过计算与校验位不符。帧错误是指收到的数据不含有停止位。终止的情况是指rxdn端保持在逻辑零的状态时间长于一帧数据传送的时间。接收超时的情况是指在可以接收3个字的时间里没有收到任何的数据,并且在fifo模式时rx的fifo非空。自动流量控制(afc)s3c2440的uart 0和uart 1通过信号nrts和ncts支持自动流量控制。在这种情况下,它可
30、以连接到外部的uarts中去。如果用户想把串口连接到modem上,需要关闭寄存器umconn的自动流控制位,并通过软件控制nrts信号线。在afc模式下,nrts依赖于接收器,ncts信号控制着发送器的操作。uart的数据发送器只在ncts信号使能的时候才把数据传送到fifo中(在afc模式下ncts的意思是其它uart的fifo已经准备好接收数据了)。在uart开始接收数据之前,需要先根据数据接收器的fifo剩余空间设置nrts的值,如果剩余空间大于32字节则nrts使能,否则如果剩余空间小于32字节则nrts关闭(在afc模式下,nrts的作用就是表示它所控制的接收器的fifo准备好接收数
31、据了)。 uart 2不支持afc功能,因为s3c2440没有nrts2和ncts2非自动流量控制的例子(通过软件控制信号nrts和ncts)接收器对fifo的操作传播优秀word版文档 ,希望对您有帮助,可双击去除!1.选择接收模式(中断模式或者dma模式)2.检查寄存器ufstatn中rx fifo的值,如果这个值小于32,用户必须设置umconn0为“1”(使能nrts),如果值大于32,用户必须设置umconn0的值为“0”(关闭nrts)3.重复第2步。发送器对fifo的操作1.选择一个发送模式(中断或者dma)2.检查umstatn0的值,如果为“1”(使能ncts),用户写数据到
32、tx fifo寄存器s3c2440的每个uart都有七个状态:覆盖错误,校验错误,帧错误,终止,接收缓冲区已准备好,发送缓冲区空,和发送移位器空。所有这些都对应到uart的状态寄存器中(utrstatn/uerstatn).覆盖错误,校验错误,帧错误和终止属于接收错误,它们中的任何一个都可以引起一个叫“receive error status”的中断请求。如果这个中断请求在寄存器uconn中的使能位被置为“1”,并且当这个请求被处理时通过读取uerstsatn的值可知引起这个中断的信号,也就是找到是哪种错误引起的中断。fifo模式与非fifo模式在fifo模式下,接收器从接收移位器中收数据然后
33、写入到fifo中,如果收到数据的个数达到rx fifo的触发点,且在寄存器uconn中的接收模式被设置成“1”(中断或者轮巡模式),将会产生一个rx中断。在非fifo模式下,不论是中断模式还是轮巡模式,只要有数据从接收移位寄存器中传送到数据接收保持寄存器中都会产生一个rx中断。在fifo模式下,如果发送模式在控制寄存器uconn中被设置成中断模式或者轮巡模式,发送数据要从发送fifo中传送到发送移位器中,如果在fifo中剩余的数据个数达到了tx fifo的触发点,就是产生一个tx中断。在非fifo模式下,发送的数据从发送保持寄存器传送到发送移位器中后会产生一个tx中断,这个也是要求数据发送方送
34、方式为中断模式或者是轮巡模式。如果在控制寄存器中数据发送方式和接收方式被设置成dma模式,那么和上面的情况一样,只是产生的rx和tx中断被换成了dma请求。uart的错误fifouart有一个“错误状态”fifo组,它对应着接收器的fifo,它指示在接收器的fifo中哪个数据错误了。只有在接收器中错误数据被读取的时候才会产生错误中断。在从urxhn读取数据的时候同时读取uerstatn寄存器的值就知道这个数据哪里错了,什么错误。例子假设uart顺序接收了a b c d e这五个数据,其中接收b的时候发生了帧错误,接收d的时候发生了校验错误。在接收b的时候不会产生“错误中断”,在接收“d”的时候
35、也不会产生“错误中断”。当读取b数据和d数据的时候“错误中断”才会产生。波特率的产生传播优秀word版文档 ,希望对您有帮助,可双击去除!art的波特率发生器为串行数据的发送与接收提供时钟,波特率发生器的“源时钟”可以是s3c2440的内部系统时钟也可以是外部时钟(uextclk),换句话说就是通过设置uconn的“时钟”选项可以改变除数因子。波特率是由“源时钟”(pclk,fclk/n uextclk)除以16和一个除数因子。公式是这样的:除数因子(整型)(“源时钟”除以波特率乘以16)减1除数因子ubrdivn的取值范围是1216-1,但当使用外部时钟uextclk时它却可以等于0.(这个
36、外部时钟要低于pclk)例如:如果波特率是115200bps,uart的时钟是40mhz,除数因子ubrdivn是ubrdivn = (int)(40000000 / (115200 x 16) ) -1= (int)(21.7) -1 round to the nearest whole number= 22 -1 = 21波特率的错误容忍度uart的帧错误必须低于1.87%ads下的串口配置def.h 中的uart寄存器定义:#define rulcon0 (*(volatile unsigned *)0x50000000) /uart 0 line control#define ruco
37、n0 (*(volatile unsigned *)0x50000004) /uart 0 control#define rufcon0 (*(volatile unsigned *)0x50000008) /uart 0 fifo control#define rumcon0 (*(volatile unsigned *)0x5000000c) /uart 0 modem control#define rutrstat0 (*(volatile unsigned *)0x50000010) /uart 0 tx/rx status#define ruerstat0 (*(volatile u
38、nsigned *)0x50000014) /uart 0 rx error status#define rufstat0 (*(volatile unsigned *)0x50000018) /uart 0 fifo status#define rumstat0 (*(volatile unsigned *)0x5000001c) /uart 0 modem status#define rubrdiv0 (*(volatile unsigned *)0x50000028) /uart 0 baud rate divisor#define rulcon1 (*(volatile unsigne
39、d *)0x50004000) /uart 1 line control#define rucon1 (*(volatile unsigned *)0x50004004) /uart 1 control#define rufcon1 (*(volatile unsigned *)0x50004008) /uart 1 fifo control#define rumcon1 (*(volatile unsigned *)0x5000400c) /uart 1 modem control#define rutrstat1 (*(volatile unsigned *)0x50004010) /ua
40、rt 1 tx/rx status传播优秀word版文档 ,希望对您有帮助,可双击去除!#define ruerstat1 (*(volatile unsigned *)0x50004014) /uart 1 rx error status#define rufstat1 (*(volatile unsigned *)0x50004018) /uart 1 fifo status#define rumstat1 (*(volatile unsigned *)0x5000401c) /uart 1 modem status#define rubrdiv1 (*(volatile unsigned
41、 *)0x50004028) /uart 1 baud rate divisor#define rulcon2 (*(volatile unsigned *)0x50008000) /uart 2 line control#define rucon2 (*(volatile unsigned *)0x50008004) /uart 2 control#define rufcon2 (*(volatile unsigned *)0x50008008) /uart 2 fifo control#define rumcon2 (*(volatile unsigned *)0x5000800c) /u
42、art 2 modem control#define rutrstat2 (*(volatile unsigned *)0x50008010) /uart 2 tx/rx status#define ruerstat2 (*(volatile unsigned *)0x50008014) /uart 2 rx error status#define rufstat2 (*(volatile unsigned *)0x50008018) /uart 2 fifo status#define rumstat2 (*(volatile unsigned *)0x5000801c) /uart 2 m
43、odem status#define rubrdiv2 (*(volatile unsigned *)0x50008028) /uart 2 baud rate divisor#ifdef _big_endian#define rutxh0 (*(volatile unsigned char *)0x50000023) /uart 0 transmission hold#define rurxh0 (*(volatile unsigned char *)0x50000027) /uart 0 receive buffer#define rutxh1 (*(volatile unsigned c
44、har *)0x50004023) /uart 1 transmission hold#define rurxh1 (*(volatile unsigned char *)0x50004027) /uart 1 receive buffer#define rutxh2 (*(volatile unsigned char *)0x50008023) /uart 2 transmission hold#define rurxh2 (*(volatile unsigned char *)0x50008027) /uart 2 receive buffer#define wrutxh0(ch) (*(
45、volatile unsigned char *)0x50000023)=(unsigned char)(ch)#define rdurxh0() (*(volatile unsigned char *)0x50000027)#define wrutxh1(ch) (*(volatile unsigned char *)0x50004023)=(unsigned char)(ch)#define rdurxh1() (*(volatile unsigned char *)0x50004027)#define wrutxh2(ch) (*(volatile unsigned char *)0x5
46、0008023)=(unsigned char)(ch)#define rdurxh2() (*(volatile unsigned char *)0x50008027)#define utxh0 (0x50000020+3) /byte_access address by dma传播优秀word版文档 ,希望对您有帮助,可双击去除!#define urxh0 (0x50000024+3)#define utxh1 (0x50004020+3)#define urxh1 (0x50004024+3)#define utxh2 (0x50008020+3)#define urxh2 (0x500
47、08024+3)#else /little endian#define rutxh0 (*(volatile unsigned char *)0x50000020) /uart 0 transmission hold#define rurxh0 (*(volatile unsigned char *)0x50000024) /uart 0 receive buffer#define rutxh1 (*(volatile unsigned char *)0x50004020) /uart 1 transmission hold#define rurxh1 (*(volatile unsigned
48、 char *)0x50004024) /uart 1 receive buffer#define rutxh2 (*(volatile unsigned char *)0x50008020) /uart 2 transmission hold#define rurxh2 (*(volatile unsigned char *)0x50008024) /uart 2 receive buffer#define wrutxh0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)#define rdurxh0() (*(v
49、olatile unsigned char *)0x50000024)#define wrutxh1(ch) (*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)#define rdurxh1() (*(volatile unsigned char *)0x50004024)#define wrutxh2(ch) (*(volatile unsigned char *)0x50008020)=(unsigned char)(ch)#define rdurxh2() (*(volatile unsigned char *)0x500080
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《高性能变频调速电动机课件介绍》
- 中医药在内分泌失调中的疗效评估及案例分享
- 《溶解度积Ksp》课件介绍
- 土木工程环境安全管理研究
- 医疗AI技术诊断的未来与挑战
- 毕业生就业创业工作总结模版
- 办公自动化新纪元智能合约与去中心化平台的融合
- 医养结合的商业模式探索与创新
- 《肌肉注射法》课件
- 综合交通运输系统的优化研究考核试题及答案
- 机械制造及非标零部件加工项目突发环境事件应急预案
- 2025年装维智企工程师(三级)复习模拟100题及答案
- 国家管网集团西南管道昆明输油气分公司突发环境事件综合应急预案
- 9.1科学立法 课件高中政治统编版必修三政治与法治
- 施工现场临时用电安全
- 停送电培训课件
- 医院培训课件:《核心制度-护理值班和交接班制度》
- 解题秘籍05 圆的综合问题(9种题型汇-总+专题训练)(解析版)-2025年中考数学重难点突破
- 无线网络施工方案
- 电商平台居间合同
- 阮乐器美术课件
评论
0/150
提交评论