S3C2440学习三(基础模块的使用1)

发布者:fuehrd努力的最新更新时间:2016-08-01 来源: eefocus关键字:S3C2440  基础模块 手机看文章 扫描二维码
随时随地手机看文章
如果一个人学习一样东西或做一件事,达到忘我的境界,那么他将变得成功。

①如何实现UART输出的?UART使用到的寄存器如下,(1)UART线性控制寄存器ULCONn,(2)UART控制寄存器UCONn,(3)UART FIFO控制寄存器UFCONn,(4)UART MODEM控制寄存器UMCONn,(5)UART 接收发送状态寄存器UTRSTATn,(6)UART 错误状态寄存器UERSTATn,(7)UART FIFO状态寄存器UFSTATn,(8)UART MODEM状态寄存器UMSTATn,(9)UART发送缓存寄存器UTXHn,(10)UART接收缓冲寄存器URXHn,(11)UART波特率除数寄存器UBRDIVn。

1. 先必须配置好时钟频率,波特率不对就没法通信。后面给一个时钟配置模板。首先UART通信口有6根线,两根电源线,nCTS/nRTS/TXD/RXD这四根线对应PH0-PH3,先通过GPHCON它们设置成第二功能模式。用”mpll_val = (92<<12)|(1<<4)|(1);“通过对MPLLCON设置系统频率=400MHz,另外通过CLKDIVN时钟分频器控制寄存器,UCLK选择寄存器=0表示UPLL时钟设为48MHz等于UCLK对USB提供的48MHz,HDIVN=10,同时CAMDIVN[9]=0,表示HCLK=FCL/4,PDIVN=1,表示PCLK=HCLK/2。好了现在的系统提供的频率:FCLK=400MHz,HCLK=100MHz,PCLK=50MHz,UCLK=48MHz。

其中CAMDIVN是摄像头时钟分频器寄存器,DIVN_UPLL[12]=0,这里FCLK=MPLLclock,HDIVN=FCLK/4=100MHz。

2.接下来要初始化UART,设置UART FIFO控制寄存器,权限最低并且关闭FIFO,关掉UMCON模式0和模式1,通过设置ULCON线性控制寄存器,选择每帧的数据位数为8位。通过UCON控制寄存器rUCON0  = 0x245; 选择读写UART数据缓冲寄存器中断请求或查询模式,使能UART对异常产生中断。当非FIFO模式下发送缓存变空或在FIFO模式下发送缓存达到发送FIFO触发水平,则中断请求。

3.设置波特率,通过UBRDIV0/1/2来分别设置波特率。

4.选择读取的串口号,实际上程序里是选择读取的。

5.写数据采用WrUTXH0('\r');  WrUTXH0(data);的调用方式进行些数据。

6.程序接收,采用接中断标记等待接收数据。UTRSTAT0/1/2,移位寄存器移空中断,再读取缓冲区的数据,通过获取的数据发送到超级终端,于是就能在终端上看到写上的数据了。

②如何实现PWM调制输出?

蜂鸣器是由GPB0控制,改脚复用功能TOUT0即PWM输出。

1.同上配置好时钟分频,频率太快没法从蜂鸣器听到声音!

2.设置TOUT0输出,即GPBCON的GPB0为设置为10;然后用TCFG0/TCFG1/TCNTB0/TCMPB0配置PWM输出频率,

 

rTCFG0 &= ~0xff; //这两条语句设置设置定时器0、1的标定值,周期计数初值

rTCFG0 |= 15; //prescaler = 15+1

rTCFG1 &= ~0xf; //这个是选择MUX输入到PWM定时器计数时8分频

rTCFG1 |= 2; //mux = 1/8

 

rTCNTB0 = (PCLK>>7)/freq;//定时器0计数缓存寄存器,用来装载到减计数的初值中,反正定时器是减计数的

rTCMPB0 = rTCNTB0>>1; // 50%用来和计数器中的值做比较,也就用于脉宽调制

 

rTCON &= ~0x1f; //定时器控制寄存器,关闭死区,自动重装,关掉逆变器,更新TCNTB0/TCMPB0初值,开启TIMER0

rTCON |= 0xb; //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0

rTCON &= ~2; //clear manual update bit不再对TCNTB0/TCMPB0更新.

其实实际工作最勤快的TCNT0计数器,记录从PCLK的8分频脉冲,当TCNT0≤TCMPn时输出高电平,当TCNT0>TCMPn时输出低电平。

那么现在的周期到底是多少呢?定时器输出时钟频率=PCLK/{prescaler value+1}/{divider value},PCLK=50MHz,那么divider value就是那个8分频,进过预分频器,prescaler=15,所以频率=50MHz/16/8=390.625KHz。还有那个计数值是多大,(PCLK>>7)/freq=390625/freq,这里让freq=10,即T=(1/390625)*39062.5=0.1S,不知道为什么TCNTB这个值设置得达到一定程度就没有用了,这里忘了这个寄存器16位有效65536,再大也没有用,改前面的定时器输出频率更有效。

③如何实现AD采样?

先通过ADCCON寄存器来选择AD通道,AD转换预分频器使能,写入AD转换预标定值(相当于这两项设定AD转换的频率),通过AN0-AN7/YM/YP/XM/XP,怪异的AD转换,在AD转换开始后,AD开始位会由1->0,AD转换结束后,AD结束标记位由0->1,AD转换结果存放在ADCDATA0寄存器中,S3C2440的AD是10的,可直接从ADCDAT0中取出,那么程序就涉及ADCCON、ADCDATA0,这两个主要的寄存器,程序的话直接输入一个通道,返回一个AD值,另外就是AD的时钟,在配置系统时钟时选择分配一个频率基准。IICCON是I2C总线控制寄存器。

④如何实现IIC读写?

I2C无论是硬件还是软件处理,都是构建一个I2C时序,满足硬件通信,最终实现通信。虽然简单还是从寄存器和时序分析一下,使用到了IICDS这个寄存器,它是存放写或读取的IIC器件的首地址,但是必须在开启IIC传输前赋值;开始IIC通信使用到了IICSTAT寄存器,再通过IICCON使能IIC控制总线,使能IIC总线的ACK功能、同时使能Tx/Rx中断、设置IICCLK频率,rIICCON    = 0xaf;。目前这个程序是通过一个寄存器来标记状态,当读取或写入后,程序就会陷入while等待,那么只能通过中断,查看具体的状态,并对那个寄存器的值更新,使得程序跳出while。

⑤ADS如何创建工程,如何新建程序,如何编译如何仿真?

ADS其实是ARM公司推出的软件,ADS由命令行开发工具,ARM时实库,GUI开发环境(Code Warrior和AXD),实用程序获得支持软件组成。命令行开发工具完成源代码编译,连接成可执行代码的功能。ARM运行时库主要是用来支持被编译的C和C++代码。CodeWarrior for ARM是一套完整的集成开发工具,充分发挥了ARM RISC的优势,该工具专为基于ARM RISC的处理器而设计的。AXD是ARM扩展调试器。

⑥ “C语言”可变数目变元??

宏va_arg()、va_start()和va_end()一起使用,便可以完成向函数传入数目可变的变元操作。取可变数目变元的典型例子是函数printf()。类型va_list是在中定义的。创建一个能获取可变数目变元的函数的通用过程:在函数定义中,可变参数表之前必须有一个或多个已知参数,其中最右者为last_parm。在调用va_start()时,last_parm名被用作第二个参数。任何可变长度的变元被访问之前,必须先用va_start()初始化变元指针argptr。初始化argptr后,经过对va_arg()的调用,以作为下一个参数类型的参数类型,返回参数。最后取完所有参数并从函数返回之前。必须调用va_end()。由此确保堆栈的正确恢复。如果未正确使用va_end(),程序可能瘫痪。

关键字:S3C2440  基础模块 引用地址:S3C2440学习三(基础模块的使用1)

上一篇:S3C2440学习笔记五(2440slib.s源程序的分析)
下一篇:S3C2440学习四(如何使用Jlink)

推荐阅读最新更新时间:2024-03-16 15:02

S3C2440上LCD驱动(FrameBuffer)开发(二)
1. 驱动中实现了一个 中断函数,中断是在哪些情况下产生的?主要有两个中断:INT_FRSYN 和 INT_FICNT, 即frame synchronized interrupt和FIFO interrupt。其中 frame synchronized interrupt是什么时候产生的?是不是每显示完一帧,就产生一个中段。 在中断函数中: static irqreturn_t s3c2410fb_irq(int irq, void *dev_id) { struct s3c2410fb_info *fbi = dev_id; void __iomem *irq_base = fbi- irq_base; unsi
[单片机]
S3C2440的GPIO在作为输入用时上拉电阻的设置
GPIO做输出使用时要加上拉电阻,因为默认的是漏极开路,高阻态,无法输出高电平。 而在输入时要根据外围电路选择是否设置上拉电阻: 在外接电路能提供高低电平时可不加上拉电阻,比如作为第二功能的ADC输入,或作为地址总线时;而且作为ADC输入时若加上上拉电阻,还会影响ADC的测量。 当外接电路能不能提供高和低电平时加上拉电阻,比如作为按键输入时,如不加上拉电阻,只能输入低电平,无法输入高电平。
[单片机]
基于S3C2440嵌入式Linux系统下的一个DS18B20驱动
用Linux驱动编程的方法写一个DS18B20的温度传感器驱动,从底层采集温度信息。以下乃本人所写的驱动和测试的源码,嵌入式Linux内核版本为2.6.29,硬件平台是友善之臂的QQ2440,DS18B20引脚连接S3C2440的GPIOB1,程序难免存在一定的漏洞,希望大家指出。 #include linux/config.h #include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/devfs_fs_kernel.h #include linux/miscdevic
[单片机]
基于<font color='red'>S3C2440</font>嵌入式Linux系统下的一个DS18B20驱动
2440串口linux编程,S3C2440串口通讯的相关配置
UART配置的相关寄存器如下(按s3c2440手册中的顺序列出): 1.ULCONn寄存器:线性控制寄存器 功能:设置奇偶校验,停止位, 数据位(5-8位) 注意:一般设置为无校验,一个停止位,数据位为8位,也就是常说的“8N1”,此时寄存器值为0x3。(bit =0为正常模式,否则为红外模式); 2.UCONn寄存器:通道n控制器 功能:选择UART时钟源、设置UART中断方式 注意:可选择PCLK、UEXTCLK或FCLK/n。bit =1为回送模式,用于测试;bit 和bit 分别控制传输和接收模式,初学者常设置为中断请求或查询模式,bit =bit =01。 3.UFCONn寄存器:FIFO控制寄存器 功能:用于设
[单片机]
移植u-boot-2010.09到S3C2440(六)—— SDRAM地址与容量的计算
对于 GEC2410 开发板,SDRAM 的物理起始地址是 0x30000000,结束地址是0x34000000,大小是64Mbytes。 我有个疑问?为什么SDRAM 的物理起始地址是 0x30000000,结束地址是 0x34000000,得出的大小是64Mbytes? 因为容量是用10进制显示的,故我们得把0x34000000-0x30000000=0x4000000转换成10进制。(转换方法见附) 4*16^6+0*16^5+0*16^4+0*16^3+0*16^2+0*16^1+0*16^0=67108864(Byte) 一般不要用十六进制转成二进制,二进制转成10进制方法算那个比较麻烦: 0x4000000=0
[单片机]
基于S3C2440与EP2S15芯片实现靶场破片测速系统的设计
0 引言 破片速度是战斗部爆炸效能评估的一个重要参数。传统的靶场破片测速系统多使用多路数据采集卡设置好的参数现场采集标靶的试验波形,试验完成后再交由计算机进行后期处理和解读以获取破片速度等参数。但随着军事科技的日新月异,靶场破片测速系统需要根据实际情况现场设置的参数越来越多,参数设置的灵活性越来越强,对系统工作的实时性要求越来越高;另一方面,战斗部爆炸试验在野外进行,条件恶劣,大型设备携带不便,并为靶场破片测速系统设计提供了一个新的思路。 1 系统硬件设计 系统使用ARM+FPGA的设计方式:ARM处理器选用Samsung公司推出的基于ARM920T内核的S3C2440。S3C2440主频高达400 MHz,完全能够胜任系统工
[单片机]
基于<font color='red'>S3C2440</font>与EP2S15芯片实现靶场破片测速系统的设计
s3c2440 LCD(sony x35)
一、lcd 屏的分类 STN是早期彩屏的主要器件, 一般的STN仍然是256色的,优点是:价格低,能耗小。 TFT的亮度好,对比度高,层次感强,颜色鲜艳。缺点是比较耗电,成本较高。 UFB是专门为移动电话和PDA设计的显示屏,它的特点是:超薄,高亮度。可以显示65536色, 耗电比TFT少,价格和STN差不多。 OLED (Organic Light Emitting Display)即有机发光显示器,在手机LCD上属于新型产品,被称誉为“梦幻显示器”。OLED显示技术与传统的LCD显示方式不同,无需背光灯。 在mini2440 中 我们使用的是sony 的X35 lcd ,属于TFT屏。 二、LCD
[单片机]
<font color='red'>s3c2440</font> LCD(sony x35)
s3c2440 移值u-boot-2016.03 第2篇 支持Nand flash启动
1, 要求:在4K 的代码以内,完成 NOR NAND 类型判断,初始化 NAND 复制自身到 SDRAM ,重定向。 2, 在 /arch/arm/cpu/arm920t/ 文件夹里 添加一个 inic.c 的文件,要在这个文件里面做上面说的事情。 修改 /arch/arm/cpu/arm920t/Makefile 加入 inic.c 的 编译。 extra-y = start.o obj-y += init.o obj-y += cpu.o init.c 最后有补丁文件 3, 在 start.S 中初始化 SP 后调用 init.c 中的 初始化 NAND FLASH 和 复制 u-boot 到 SDRAM 清BSS 等
[单片机]
<font color='red'>s3c2440</font> 移值u-boot-2016.03 第2篇 支持Nand flash启动
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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