一些概念 串口 定时器(计数器)

同步和异步:通信双方的频率不固定时
串行和并行:通信线的根数 串行接口一次发送1位二进制,并行接口一次发送多位二进制。
但实际串行用的更多,可以通过通信速度来提高通信性能。
电平信号下,1根参考电+1根信号线传递1位二进制 3根线((2根信+1根参考线)同时发送2位二进制 同时发送8位需要9根线
差分信号,2根线可以发送1位,发送8位需要16根线
rs232 -3~-15V表示1(适合干扰大,距离远吗,适合2个器件之间,比如soc外接串口,比如电脑后的串口)     +3~+15表示0(适合soc内部)
TTL 5V代表1 0V代表0
                                                                        串口
串口通信:异步(一帧和一帧之间是异步的,波特率是固定周期的),电平,串行(一次一个二进制位) DB9接口(但只用Rx,Tx,GND,剩余6根和流控有关)
串口通信,是一个周期一个周期(一帧),每个周期传输n个二进制为。一个通信周期,由一个起始位+数据位(一般为8位,8位代表一个ascii码,即一个字符)+奇偶校验位(防止位翻转)+停止位。
波特率:每隔1/波特率的时间发送通信信息
串口控制器:
peripheral bus (APB,提供时钟)
工作原理:
transmitter:发送缓冲区(buffer)和发送移位器(shift)构成
receiver:有人发信息,通过Rx接收到到shift,shift自动将二进制位保存缓冲区,接收完一帧后就产生一个中断给cpu,cpu就会来读取一帧数据。

发送信息,一般将信息编码(ascii码转换成二进制流),然后将一帧数据(8位)写入发送缓冲区,剩下的由硬件自动处理。

流控:解决发送速率高于接收速率,发送,流控拉高,接收,流控拉低。(很多年前需要,现在电脑,单片机比发送的串口速率块,流控已经失去意义)

模式:

扩展buffer,避免频繁中断,调用引起上下文切换开销

FIFO(用寄存器来实现):替代CPU来提供64字节,transmitter还是1字节的发送

DMA(大量数据传送,像dsp)

IrDA

1.初始化控制器,就是读写寄存器。

2.初始化波特率(对APB bus来的时钟进行分频)

3.发送,接收函数

中断,transmitter发送完会产生TXD中断,会去执行中断处理程序(CPU会切换回来继续给transmitter放一帧数据,然后CPU切换离开)(CPU轮询,禁止中断TXD,有个状态寄存器(发送缓冲区空标志位)(发送完给标志位置位,就代码发送完成,发送缓冲区为空))

发送方不一定要用中断,接收方一定要用中断。

寄存器:Tx Rx的GPIO设置为uart模式

rGPA0CON &=~(0xff<<0); bit0~bit7清0

rGPA0CON |= 0x00000022; 

初始化:几个关键寄存器,UCON0,ULCON0,UMCON0,UFCON0,UBRDIV0,UDIVSLOT0

UCON0 =0x3                 //0校验位 8数据位 1停止位

ULCON0 =0x5                 //发送和接收都是polling mode

UMCON0 =0x0                //禁止modem interrupt,自动流控

UFCON0=0x0                //禁止fifo模式

UBRDIV0,UDIVSLOT0 和波特率有关

发送函数

void uart_putc(char c)

{

        //串口发送一个字符,把一个字节放入发送缓冲区

        //rUTXH0 =c; CPU给串口控制器发送速度太快了

        while(!(rUTRSTAT0 & (1<<2))) ;       //判断rUTRSTAT0 bit2是否为0

        rUTXH0 =c;

}

定时器和计数器(定时器内部有个计数器,APB总线来提供时钟(65M)分频得到)

计数器,每隔一个固定时间计一个数,计数值*计时时间周期=定时器

定时器:到了一定时间,会产生中断提醒CPU,CPU去执行isr

定时器和看门狗,RTC,蜂鸣器的关系

看门狗,就是一个定期器,时间到了不止中断,还有复位cpu

RTC 实时时钟,和定时器就好像闹钟和钟表

4类定时器

PWM定时器 最常用的定时器,给外设用的

系统定时器 TCNT*时钟周期=systick 给操作系统提供周期性的tick信号(时间片)

看门狗定时器

RTC:区分时间段和时间点 RTC用时间点 

PWM timer0~timer4对应一个外部GPIO来产生pwm波形(PCLK_PSYS),timer4没有外部gpio,为了产生内部中断而生

定时器框图简介 时钟源 预分频器 分频器 TCMPB&TCNTB dead zone 

IIC 

串行,同步,电平,低速

寄存器:I2CCON I2CSTAT :通信时序和I2C接口配置

I2CADD 写控制器作为从设备的slave address(一般用不到) 

I2CDS 接收和发送的数据,addr

shift,

中断:

一个字节的数据传输完了发中断给cpu,cpu可以干其他事情了()

主设备发过来的地址和从设备地址对上了

总线仲裁错误,比如:同时有2个从设备在和主设备通信,或者主设备和从设备同时在操作总线(主设备在拉高,从设备在拉低)

中断挂起位:发完一个字节数据,收到一个中断,怎么发下一个字节数据,需要清中断挂起位

写0(清掉中断标志位,可以继续操作) 读0(中断挂起) 读1(中断没有挂起)

gsensor:重力加速度传感器,只要不匀速或者静止就有加速度,用来感受人的手的移动,一运动压扁电容,根据距离远近改变电容量。比如手机,平板赛车游戏,智能手表计步器(gsensor,地磁传感器,陀螺仪,3者提供9轴传感器,目的更加准确)。

从原理图看,供电由PWMTOUT3控制,PWMTOUT3输出高时,gsensor工作。

传感器接口2种:模拟和数字,模拟(0-3.3V,每个电压对应一个压力,AD采样转换),数字接口在模拟接口的基础上,内部集成了一个AD,直接输出一个数字参数。soc直接读取传感器数字接口的参数即可,例如gsensor,电容触摸屏IC。

master发单字节和多字节(会自动增加RA地址)到slave (比控制器读写时序多了一些单字节,多字节和RA的控制)

主机控制器测代码:调通soc侧代码 (s3c24xx_i2c_init s3c24xx_i2c_message_start s3c24xx_i2c_stop)

从设备侧代码:协议层代码取决于gsensor(gsensor_i2c_write_reg - i2c_master_send - s3c24xx_i2c_doxfer      gsensor_i2c_read_reg),物理层代码取决于主机soc

要操作gsensor的寄存器

AD 

精度(分辨率):10位   量程:0-3.3V 3.3/1024 转换速度:时钟频率高,转换时间短,转换速率:MSPS 时钟频率和MSPS成正比 例如MSPS=时钟频率/5

控制器:

AIN[0]~AIN[9] 10路AD转换(表示同时有多少路模拟信号可以转换为数字信号)

soc有2中引脚:analog(模拟) 数字(digital)例如gpio

TSADCCON0:bit[16]精度(要精度,牺牲转换速度)

TSCON0

TSDATX0 TSDATY0 (触摸屏X和Y轴的值)

CLRINTADC0

ADCMUX

等待触摸屏转换完成有2种方式:第一种检查标志位         第二种:中断

start by read :ad转换需要反复进行,具体工作方法:读取本次AD转换的AD值后,硬件自动开启下一次转换。

void adc_test(void)

{

//第一步 开启ADC转换 第二步 等待ADC转换完成 第三步 读取ADC的转换值 第四步 处理/显示数字

}

液晶LCD

在电信号下液晶分子会旋转,旋转影响透光性,在整个液晶板后面用白光照(背光,被动发光),通过不同电信号让液晶分子选择性透光,就可以看到不同的颜色。这就是LCD显示。

TTL电平->VGA电平(HDMI,抗干扰)->TTL电平(如果LCD屏幕和主板控制器太远) 或者LVDS RGB接口(控制器时序图)

VD[23:0] 24根数据线,用来传输图像信息,并行接口
HSYNC 水平同步信号 VSYNC 垂直同步信号 时序信号线
VCLK 像素时钟 控制器给LCD模组一个时钟信号
VDEN 数据有效标志 时序信号 (VDEN高电平,VD才有效)
LEND 行结束标志 时序信号

LCD显示原理 

像素 扫描的方式 扫描频率(刷新率)

驱动器和控制器 驱动器和面板集成在一起做成LCD屏幕

第一阶段:SOC会从内存(显存)中拿数据给LCD控制器,LCD控制器按照一定的时序和LCD驱动器通信,给驱动器提供控制像素的数字信号,驱动器将图像刷到面板上。

第二阶段:将显示的图像丢到显存中,显存和面板建立了映射。

LCD
帧 把帧分为行,再把行分为像素,逐个像素去填充。LCD控制器和驱动器一次只能传一个像素点的显示数据。

6个时序参数

HSPW 行
HBPD 前肩 t1
HFPD 后肩 t2
VSPW
VBPD 垂直信号同步前肩
VFPD 垂直信号同步后肩

像素深度 一个像素由多少个字节组成。1,8(256种颜色,灰度显示,黑到白),16(RGB565 65536),24(RGB888),32

虚拟屏幕:在内存中建立显示缓存的时候建立一个很大的区域,让LCD去对应一部分区域。

电阻式触摸屏和电容式触摸屏

电阻式:涂抹了ITO后,电压和某一个点位置成正比。按下后,这一点的电压可以通过AD转换得到,就能得到这一点的位置信息。 X/Y轴分时AD转换 需要校准 不支持多点触摸

电容式:利用人体电流感应现象,在手指和屏幕间形成一个电容,手指触摸会导致4个电极电流流动,计算就能得到触点位置。电容式,内部自带IC计算坐标(电容式计算方式复杂),然后通过数字接口(i2c)和soc连接。

中断:实现宏观上的并行

soc对中断的实现机制:异常向量表

比如发生复位异常,CPU自动跳转到0x0000000去执行指令,比如发生外部中断,cpu硬件自动跳转导0x30000008去执行指令。软件需要做的是:把异常代码的首地址填入这个异常向量地址。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值