S3c2410裸板程序入门---串口

发布者:等风来88888最新更新时间:2019-12-24 来源: elecfans关键字:S3c2410  程序入门  串口 手机看文章 扫描二维码
随时随地手机看文章

流水灯跑起来了,是不是有点小兴奋,一鼓作气再来玩玩其他的,用PC机写程序,出了问题可以用perror等打印出信息,给调试带来了很大方便,可是板子上没有显示屏,没法打印怎么办?这次就写一个通过串口向PC机串口调试终端打印信息的小程序,方便以后的调试。串口通信的基本知识就不说了哈,网上很多的,直接上代码:


uart.c


 1 #include "s3c2410.h"

 2 

 3 void uart_sendchar(char a)

 4 {

 5     if(a == 'n'){

 6         while( !(UTRSTAT0 & (0x1<<2)) );

 7         UTXH0 = 'r';

 8     }

 9     while( !(UTRSTAT0 & (0x1<<2)) );

10     UTXH0 = a;

11 }

12 

13 void sendstring(const char *str)

14 {

15     while(*str){

16         uart_sendchar(*str);

17         str++;

18     }

19 }

20 

21 void uart_init()

22 {

23     GPHCON = (GPHCON & ~(0xf<<4)) | (0xa<<4);

24 

25     ULCON0 = 0x3;

26     UCON0 = 0x5;

27 

28     UBRDIV0 = (int)(PCLK/(115200*16)) - 1;

29 

30 }

GPHCON配置使用串口0, ULCON0 = 0X3配置串口使用8位数据位,一位停止位,无校验,UCON0 = 0X5设置传输模式,默认时钟使用PCLK。UTXH0为发送buffer, 往其中写数据后发送,UTRSTAT0检测数据线上有无数据,从而控制在一个字符发送完成后再发下一个。


还有注意n的处理,因为windows的回车是rn,所以有单独的判断。


哦,你可能会问这个s3c2410.h在哪里,哦,这个其实是板子带的,就是定义了一堆寄存器地址,完全也可以自己定义。向这种格式:


s3c2410.h


 1 /* WOTCH DOG register */

 


 2 #define     WTCON       (*(volatile unsigned long *)0x53000000)

 


 3 #define     WTDAT       (*(volatile unsigned long *)0x53000004)

 


 4 #define     WTCNT       (*(volatile unsigned long *)0x53000008)

 


 5 


39 /*UART registers*/

 


40 #define ULCON0      (*(volatile unsigned long *)0x50000000)

 


41 #define UCON0       (*(volatile unsigned long *)0x50000004)

 


42 #define UFCON0      (*(volatile unsigned long *)0x50000008)

 


43 #define UMCON0      (*(volatile unsigned long *)0x5000000c)

 


44 #define UTRSTAT0    (*(volatile unsigned long *)0x50000010)

 


45 #define UTXH0       (*(volatile unsigned char *)0x50000020)

 


46 #define URXH0       (*(volatile unsigned char *)0x50000024)

 


47 #define UBRDIV0     (*(volatile unsigned long *)0x50000028)

 


48 

 


49 

 


50 /*interrupt registes*/

 


51 #define SRCPND      (*(volatile unsigned long *)0x4A000000)

 


52 #define INTMOD      (*(volatile unsigned long *)0x4A000004)

 


53 #define INTMSK      (*(volatile unsigned long *)0x4A000008)

 


54 #define PRIORITY        (*(volatile unsigned long *)0x4A00000c)

 


55 #define INTPND      (*(volatile unsigned long *)0x4A000010)

 


56 #define INTOFFSET       (*(volatile unsigned long *)0x4A000014)

 


57 #define SUBSRCPND       (*(volatile unsigned long *)0x4A000018)

 


58 #define INTSUBMSK       (*(volatile unsigned long *)0x4A00001c)

 


59 

 


60 /*external interrupt registers*/

 


61 #define EINTMASK        (*(volatile unsigned long *)0x560000a4)

 


62 #define EINTPEND        (*(volatile unsigned long *)0x560000a8)

 


63 

 


64 #define EXTINT2     (*(volatile unsigned long *)0x56000090)

 


65 

 


66 /*clock registers*/

 


67 #define LOCKTIME        (*(volatile unsigned long *)0x4c000000)

 


68 #define MPLLCON     (*(volatile unsigned long *)0x4c000004)

 


69 #define UPLLCON     (*(volatile unsigned long *)0x4c000008)

 


70 #define CLKCON      (*(volatile unsigned long *)0x4c00000c)

 


71 #define CLKSLOW     (*(volatile unsigned long *)0x4c000010)

 


72 #define CLKDIVN     (*(volatile unsigned long *)0x4c000014)

 


73 

 


74 

 


75 /*PWM & Timer registers*/

 


76 #define TCFG0       (*(volatile unsigned long *)0x51000000)

 


77 #define TCFG1       (*(volatile unsigned long *)0x51000004)

 


78 #define TCON        (*(volatile unsigned long *)0x51000008)

 


79 #define TCNTB0      (*(volatile unsigned long *)0x5100000c)

 


80 #define TCMPB0      (*(volatile unsigned long *)0x51000010)

 


81 #define TCNTO0      (*(volatile unsigned long *)0x51000014)

 


82 /* frequecy */

^M


83 #define FCLK        (202800000)

 


84 #define HCLK        (FCLK/2)

 


85 #define PCLK        (FCLK/4)

注意要用volatile 和 unsigned 来保证优化和移位不会处差错。

关键字:S3c2410  程序入门  串口 引用地址:S3c2410裸板程序入门---串口

上一篇:s3c2410--watchdog
下一篇:S3c2410裸板程序入门---单按键(一)

推荐阅读最新更新时间:2024-11-19 15:48

用VB实现单片机和计算机的串口通信
//ex99 单片机数据发送程序 #include reg51.h //包含单片机寄存器的头文件 /***************************************************** 函数功能:向PC发送一个字节数据 ***************************************************/ void Send(unsigned char dat) { SBUF=dat; while(TI==0) ; TI=0; } /***************************************************** 函数功能:延时1ms (3j+
[单片机]
S3C2410中断处理
在介绍2410的中断处理之前,我们不得不先看看先把ARM的异常向量表(Exception Vectors),下面对异常向量表(Exception Vectors),做一个简单的介绍: ARM的异常向量表一般存放在0x00000000处,ARM920T能处理有7个异常,他们分别是:Reset,Undefined instruction,Software Interrupt,Abort (prefetch),Abort (data),IRQ,FIQ 下面是系统源码片段: _start: b Handle_Reset b HandleUndef b HandleSWI b HandlePrefetchAbort b Ha
[单片机]
OK6410A 开发板 (八) 84 linux-5.11 OK6410A arm-gdb+kgdb+串口 调试 linux
理论知识 调试过程 调试过程都是 这样子的 : 让核心停下来,查询信息,让核心继续运行 我们看一下 kgdb 是怎么做的 kgdb: 让核心停下来: 1. linux启动前期会自动进入kgdb 或 2. linux启动完成,挂载了procfs,用echo g /proc/sysrq-trigger 来进入 kgdb 查询信息 1. bash#gdb vmlinx 2. gdb target remote /dev/ttyS0 3. gdb set remotebaud 115200 // set serial baud 115200 4. gdb bt // 查询信息 6. gdb
[单片机]
基于CC2541蓝牙模块与单片机的串口通信
一、CC2541器件概述 CC2541是一款针对低能耗以及私有2.4GHz应用的功率优化的真正片载系统(SoC)解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可能。CC2541将领先RF收发器的出色性能和一个业界标准的增强型8051MCU、系统内可编程闪存存储器、8kBRAM和很多其它功能强大的特性和外设组合在一起。CC2541非常适合应用于需要超低能耗的系统。这由多种不同的运行模式指定。运行模式间较短的转换时间进一步使低能耗变为可能 二、CC2541芯片的特性参数 CC2541是一款针对蓝牙低能耗以及私有2.4GHz应用的功率优化的真正片载系统(SoC)解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可
[单片机]
基于CC2541蓝牙模块与单片机的<font color='red'>串口</font>通信
学习笔记--stm8之二 uart 串口
ST 3合一开发板stm8学习之 uart 作者:萧星 程序功能: 接受超级终端输入的值 并显示出来 还得说点上次的 时钟的问题,因为后面可能很少看到配置时钟的部分 所以有必要澄清一下初始化时的状态------1.内部高速rc振荡器提供时钟源 16m 2.时钟分频为8 3.供cpu的时钟是his/8 Ok,现在大家对芯片默认状态有了一点了解,下面开始串口的研究。 Stm8的串口:主要功能: 1:支持异步传输所以成为UART 2 2:lin模式 主从 3 红外编码模式 4 智能卡模拟功能 以上功能并不是所有串口都支持,stm8最多的是3个串口 也不多说 串口应该是大家很熟悉的一种接口,怎么配
[单片机]
stm32串口发送数据,丢失字节问题分析
STM32 串口 发送 必须 先检测 状态,否则 第一个 字节 无法 发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功, 使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。 故障排除过程: 1、刚开始怀疑是接收端的错误,我是使用电脑串口,运行串口辅助调试工具接收,换成其他软件后,发现故障依旧,而且电脑软件一直是开启状态,不像和电脑软件有关。 2、使用单步调试,单步运行各个发送指令,都正常
[单片机]
单片机模拟串口实验
传统的8051系列单片机一般都配备一个串口,而STC89C52RC增强型单片机也不例外,只有一个串口可供使用,这样就出问题了,假如当前单片机系统要求二个串口或多个串口进行同时通信,8051系列单片机只有一个串口可供通信就显得十分尴尬,但是在实际的应用中,有两种方法可以选择。 方法1:使用能够支持多串口通信的单片机,不过通过更换其他单片机来代替8051系列单片机,这样就会直接导致成本的增加,优点就是编程简单,而且通信稳定可靠。 方法2:在IO资源比较充足的情况下,可以通过IO来模拟串口的通信,虽然这样会增加编程的难度,模拟串口的波特率会比真正的串口通信低一个层次,但是唯一优点就是成本上得到控制,而且通过不同的IO组合可以实现更加之多
[单片机]
MSP430F5529-PWM波在串口中的输出及调整
本篇的代码能在试用的端口输出PWM波(附上修改的基本方法) 先放代码: PWM.c Created on: 2021年9月12日 Author: feidao #include MSP430F5529.h #include PWM.h void PWM1(volatile int direction,volatile int speed) { P1DIR |=BIT4; //TA0.3 P1SEL |=BIT4; P1DIR |=BIT5; //TA0.4 P1SEL |=BIT5; TA0CCR0=650;//修改它跟频率有关 if(direction==1) { TA0CCTL3=OUTMOD
[单片机]
MSP430F5529-PWM波在<font color='red'>串口</font>中的输出及调整
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved