华清远见嵌入式学习day26——串口、看门狗、异常处理、中断、混合编程、I2C

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
接两个上拉电阻:使总线在空闲状态下为高电平
多主多从系统

通信协议:
从设备内部的地址会自动加一
接受一个字节

发送一个字节

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值