7S5PV210串口配置.docx
- 文档编号:23926583
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:11
- 大小:645.44KB
7S5PV210串口配置.docx
《7S5PV210串口配置.docx》由会员分享,可在线阅读,更多相关《7S5PV210串口配置.docx(11页珍藏版)》请在冰豆网上搜索。
7S5PV210串口配置
今天,主要容为7_S5PV210学习_配置串口:
一、配置串口
好期待串口啊...O(∩_∩)O哈!
你是不知道,我的一直都是2.54mm的插针,用的这个板子是2.0的插针,
我的好多设备都不能上,包括我最喜欢用的LCD1602...写个程序看看效果那叫费劲啊!
说明:
串口是什么我不想说了,英文名字简写UART...
关于S5PV210的串口还是要说一说,共有四个串口,波特率最高3Mbps。
每个串口都有属于自己的两个接收、发送缓冲区〔FIFO〕,其中,UART0的256Byte(字节),UART1为64Byte,UART2和UART3为16Byte。
S5PV210的波特率可编程,可以设置具有1个或者2个停止位,可以设置有无校验位,可以设置5bit、6bit、7bit、8bit的数据宽度。
S5PV210的每一个串口包含一个波特率发生器,一个发送和接收的控制单元。
而波特率发生器的时钟源为“PCLK〞或者“SCLK_UART〞。
S5PV210接收和发送都有一个移位存放器,用于临时存储要发送或者承受的数据,在使用FIFO的情况下,数据会自动从FIFO进入这两个区域,如果不使用FIFO,数据可直接写入或者读出移位存放器。
本图在数据手册P854。
第一局部配置串口
1.串口时钟配置
你没有看错,上来第一件事情就是时钟...
呵呵...如果前面的“时钟配置根底〞的容看的好,我保证,这局部就是SoEasy啊...
没得说,第一件事,当然是要找一个工作的串口了!
我的这个板子的串口1使用起来特别方便,所以我就选择用这个了,
其他的串口配置方法也都差不多,强烈建议读者朋友用其他的串口。
首先,我们要找到时钟源,上火,SCLK_UART的设置这么麻烦...我还是用PCLK吧。
用SCLK_UART还是PCLK的设置是在Un[10]设置的。
我们怎么知道的?
看图啊。
PCLK时钟频率是由前面的时钟配置局部设置的,我们在前面已经进展配置了,就是那个PCLK_PSYS,还记得PSYSdomain吧?
这个是外设时钟域哦~
现在回到时钟配置那一个局部,看一看PCLK在哪里,要如何配置。
(1)PCLK时钟配置
上一节时钟配置局部已完成,用的是50MHz...的。
就是那个PCLK_PSYS了。
(2)串口时钟配置
我们选好PCLK作为时钟输入,要通过UCONn[10]的设置。
我们配置串口1,应该设置UCON1[10]
先看看UCON存放器到底是用来做什么的。
从名字我们可以猜出大概,UARTConfigure.
默认值0,而0正好表示时钟源是PCLK,那么没有什么犹豫的,我们就不用管它了,呵呵,暂时这样就行。
2、波特率设置
没得说,我们就要115200了..
关键是如何配置呢?
通过存放器UDIVSLOTn,同样的,我的要设置的是UART1,所以就要配置UDIVSLOT1了,我想到这里后,一般人都应该明白独立串口是什么意思了...
先看一个手册P879的公式。
说实话,我就特别不理解三星的这个设置方法是怎么来的!
DIV_VAL=UBRDIVn+(numof1'sinUDIVSLOTn)/16
DIV_VAL=(PCLK/(bpsX16))-1
or
DIV_VAL=(SCLK_UART/(bpsX16))−1
假设:
这样,我们就得出UBRDIV1=26,而
这样,我们就可可以设置UDIVSLOT1存放器了,给它的值,对它来说没有什么意义,只要有2个1可以了,也就是说,我可以设置为3或者5或者6,只要转化成二进制后带有两个1就可以了!
记得总位数不能超过16bit哦!
!
我这里就设置为3好了。
最终得出,在PLCK=50M的情况下,UBRDIV1=26,UDIVSLOT1=3,就得出波特率115200.
纠错,在我写完这篇文章之后调试程序时候发现,如果只是取两个1,串口将不能工作,最后我改成3个1之后才好用的!
其实,这个不能怪我,我真的没有弄明白S5PV210的串口的这两个值是如何设置的,不过,最后还是让我找到原因了!
3、串口数据格式
我们串口要工作在正常模式,无奇偶校验,一个停止位,8Bit的数据长度。
有了这个想法,就要找到数据格式的配置存放器。
ULCONn,数据手册P867.
按照存放器的配置,0x03即可。
4、串口工作模式
呵呵...这个其实是我取得名字,我的意思是让串口利用FIFO工作!
这个存放器在手册P871,设置为1将开启FIFO...
5、打开串口
这个的设置也是通过存放器UCONn完成的,〔上面选择串口时钟源也是配置这个存放器〕
让串口的接收或者发送工作在中断或者查询模式。
为了简单一些,我们的串口工作在查询模式好了。
设置为:
5
6、设置GPIO...
我要用UART1,就要配置GPA0_4和GPA0_5...
将其设置为0010即可实现串口的发送和承受。
7、发送和接收数据的方法
到这里,串口的初始化配置都完成了,但是,我们要如何接收和发送数据呢?
这个有专门的存放器,当接收到数据,直接去这个存放器读取就可以了。
再看看发送的存放器,
没什么好说的。
接下来问题,就是什么时候接收数据,什么时候发送数据呢?
最简单的,我们可以通过查询UFSTAT存放器。
只要,接收缓冲器为空,我们就等待数据到来,如何检查为空?
while((UFSTAT1&0xfffffff)==0);//这个的0xFFFFFFF是有讲究的!
因为串口缓冲器最大64字节,转换成16进制是多少?
0x40...
发送缓冲器为满,我们就也等待,不等待再接收存不进去了...\(^o^)/~如何检查?
while((UFSTAT1&(1<<24)));
总结一下,UCONn存放器控制时钟源,发送和接收的开启与其工作模式设置。
ULCONn存放器控制控制串口数据格式。
UFCON0存放器控制FIFO...
UBRDIVn和UDIVSLOTn控制波特率。
当然,再加上GPIO的初始化就可以让串口工作了。
现在,开始看程序!
说实话,程序没什么好看的,O(∩_∩)O~....该说的在文章中全部说到了!
而且,我把源程序也给出来了!
经过这一步同时证明了上一篇文章所配置的时钟是正确的!
串口到这里根本就完毕了...呵呵,如果用过其他的三星ARM芯片,就会有一种感慨吧?
哈哈\(^o^)/~...是不是感觉它们的配置很像呢?
我是没有玩过其他的,我是猜的。
下一篇学什么还没有想好。
可能是采用中断接收,不过又不想先学这个中断;
可能是实现printf功能,不过printf之前又想学学DDR;
也有可能玩DMA了,学DMA之前又想把中断接收拿下。
要怎么玩呢?
纠结啊!
我还没有想好,代码我还没有开始弄!
不过,我最喜欢的就是DMA了...那么的勤劳...O(∩_∩)O哈!
小王
发布于:
.armdiy.
联系方式:
QQ:
1320465765
TEL:
voiduart0_int_func()
{
unsignedlongtemp;
if(UTRSTAT0&0x1)//判断是否为接收中断
{
temp=URXH0;//读取接收存放器while(!
(UTRSTAT0&0x2));//等待串口空闲
UTXH0=temp;
14px;">//发送接收到的容UINTSP0|=0xf;//去除中断标志位UINTP0|=0xf;//去除中断标志位clear_vicaddress(); 14px;">//去除全部VICADDR存放器 } enable_global_IRQ();//使能全局IRQ中断 } voiduart0_init() { ULCON0|=0x3;//设置帧格式 UCON0=0x305;//时钟源、读写发送接收存放器模式UBRDIV0=35;//设置波特率 UINTM0=0xf;//屏蔽所有串口中断 GPA0CON=0x22;//设置引脚功能为串口收发 UINTSP0|=0xf;//去除中断标志 UINTP0|=0xf;//去除中断标志set_int_vectaddr(42,uart0_int_func);//设置42号中断服务程序入口地址 interrupt_enable(42);//使能中断系统42号中断 UINTM0=0xe;//使能串口接收中断 }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- S5PV210 串口 配置
![提示](https://static.bdocx.com/images/bang_tan.gif)