概述
UART 串口
面试题:
串口的通信协议
基本概念:
通信方式:
串行:一位一位的发送或者接收数据
发送或接收一位数据只需要一个时钟周期
并行:一次发送多位或接收多位数据
一个时钟周期可以发送多位数据
串行:优点:节约硬件资源 缺点:速度慢
并行:优点:速度快 缺点:浪费硬件资源
传输方向:
半双工:在同一时刻只能有一个传输方向
双工:
全双工:可以同时收发
单工:传输方向只有一个
串口属于全双工
按照时钟源不同分为:
同步:时钟同步
异步:采用各自独立的时钟源
1.UART:通用的全双工异步串行总线
2.UART的硬件连接方式:
pxd和txd交叉连接
gnd共地
总结:串口通信主要使用三根线分别为:rxd txd gnd
rxd 为接收数据引脚
txd 为发送数据引脚
rxd连接txd,txd连接rxd,采用交叉连接的方式
rxd和txd上默认为高电平状态--空闲状态
3.串口的通信协议
校验位中的值为0还是1由,采用的校验方式和数据位中的1的个数来决定。
奇校验:data中1的个数+校验位 = 1的个数为奇数
0x55 ----校验位自动补1
0x51-----校验位自动补0
偶校验:data中1的个数+校验位 = 1的个数为偶数
0x55 ----校验位自动补0
0x51-----校验位自动补1
所以奇偶校验只能检测奇数个位数发生变化
可以使用CRC校验
起始位:发送数据的起始信号
数据位:先发低位再发高位
奇偶校验:
停止位:发送数据结束,校准时钟
串口时序图:
在一帧数据内部每一位数据的时间间隔都是一个周期
每一帧数据之间的时间间隔是任意的
SP3232是RS232和TTL电平转换芯片
TTL 高:3.3v 低:0V
RS232 电平:1:-3~-15v
0:+3~+15v
WDT:
watch dog timer
检测系统是否由于外部干扰或者噪音造成的系统死机
如果系统死机,开门狗可以产生一个复位信号,重启系统
系统每隔一段时间给看门狗定时器一个信号(喂狗信号)如果看门狗收到这个信号就认为系统正常,如果在规定的时间内没有收到信号 认为系统死机 看门狗就会产生一个复位信号,使系统重启
RTC:
Real Timer Clock
实时时钟
ADC:模数转换器,将模拟量转换成数字量---输入
DAC:数模转换器-----输出
模拟量如何使用数字量表示
模拟电压值 = data *1800mv/1024
ADC位数越高,误差越小
#####################
按键中断
#####################
【1】异常的处理过程
异常:不正事件,
打断当前正在处理的程序,进入到异常处理模式,
执行异常处理程序
【2】回顾,ARM的工作模式 异常源(7种)
| | |->fiq->fiq
| | |->irq->irq
工 |-->特权模式->|->异常模式->|->svc->reset/软中断(swi)
作 -->| | |->abort->data/prefetch
模 | | |->undef->undef
式 | |
| |
| |-->非异常模式-->system
|-->非特权模式-->user
reset的优先级最高,fiq比irq的优先级高
【2】异常处理保存现场(4大步3小步,CPU自动完成)
一、保存cpsr到spsr_<mode>
二、修改cpsr
1> 切换到ARM状态
2> 切换到对应的异常模式
3> 禁止相应的中断位(根据需要)
三、保存返回地址到lr_<mode>
四、跳转到对应的异常向量表
什么是异常向量表?
arm处理器给异常向量表分配了32个字节的连续的空间,
将32个字节平均分配成了8份,每份占4个字节的空间,
通过指定异常向量表的入口地址,其他的异常源就可以
根据入口地址找到自己对应的异常处理程序的入口。
异常向量表中存放的是7种异常源,剩余的一份保留。
7种异常源在异常向量表中的存放顺序固定,不可更改。
【3】异常处理恢复现场(需要手动完成)
1> 恢复spsr_<mode>到cpsr
2> 恢复lr_<mode>到PC
ATPCS规范
通过r0-r3传递参数, 返回值通过r0返回
如果参数超过4个使用压栈传递,一般要求形参不要超过四个
【4】汇编调用C
.s文件:
bl c函数名
mov r0, #3
mov r1, #4
bl add
.c文件:
c函数实现
int add(int a, int b)
{
return a + b;
}
【5】c调用汇编
.c文件:
声明调用的汇编函数 extern int add(int a, int b);
调用汇编函数
sum = add(3,4);
.s文件:
.global 汇编函数名
.global add
汇编函数的实现
add:
add r0, r0, r1
mov pc, lr
SGi:16+PPi:16+SPI:128 = 160
每个中断源对应一个中断号
每个寄存器只有32位,需要5个寄存器
GPIOB8属于86号,GICD_ISENABLER2【22】. 86/32 = 2 .....22
一i个寄存器平均分成了4个字段,每个字段有8位,每一位对应一个cpu,每8位管理一个中断号,所以一个寄存器只能管理4个中断号,所以需要40个寄存器
GICD_ITARGETR21 [23:16] 86/4 = 21....2
2*8 = 16
I2C:
mma8451 三轴加速度传感器
串行的半双工总线
两根总线:sda scl
接两个上拉电阻:使总线在空闲状态下为高电平
多主多从系统
通信协议:
从设备内部的地址会自动加一
接受一个字节
发送一个字节
最后
以上就是平常灯泡为你收集整理的华清远见嵌入式学习day26——串口、看门狗、异常处理、中断、混合编程、I2C的全部内容,希望文章能够帮你解决华清远见嵌入式学习day26——串口、看门狗、异常处理、中断、混合编程、I2C所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复