• 按键中断部分的理解


    初始准备

    • 初始化串口

    初始化Tx、Rx对应的GPIO引脚

    设置1个停止位,8位数据位

    发送和接收都是polling

    禁止modem、afc

    波特率设置

    • 初始化按键中断(在key.c中:以中断方式处理按键)

    外部中断对应的GPIO设置

    中断触发模式

    中断允许

    清挂起,清除是写1

    • 绑定好异常向量表、初始化中断控制器

    绑定异常向量表

    禁止所有中断

    选择中断类型为IRQ

    清VICxADDR

    • 绑定isr到中断控制器硬件
    • 使能中断

    运行过程:

    程序运行-----> 按键按下-------->硬件自动跳转到异常向量表的IRQ中断部分 -------->由于向量表这里写的是IRQ_handle的函数地址,所以又发生一次跳转 ----------

    ---> 到汇编中执行IRQ_handle,具体作用为:保护现场、跳转到真正的中断处理程序、返回时的现场恢复 ---------> 到.c文件中执行IRQ_handler函数 --------->由于除了按键之外的其他的一些中断也会导致发生IRQ中断,所以不一定是按键中断------->由于S5PV210帮我们硬件实现了发生的中断位置1,所以我们只需要到vicaddr[i]中读取函数执行就可以了。

    第二次理解:

    S5PV210中,有异常向量表,当出现中断时会硬件会自动跳转到异常向量表中,去执行向量表中对应的代码,但是向量表中实际上每个异常只提供了4个字节,所以我们在异常向量表中存的实际上是中断处理函数的地址。

    那么分析一下,按键处理的中断,首先我们做好初始工作

    按键部分key.c:

    • 按键设置为中断处理模式
    • 下降沿触发
    • 中断允许
    • 清挂起
    • 写好真正的中断处理程序以便于将来和VICnADDRESS中的中断源编号绑定。

    中断部分int.c:

    • 写好异常向量表中各个中断对应的异常处理代码,重点写好中断处理的代码。
    • 绑定异常中断处理函数的地址到异常向量表
    • 初始化中断控制器:禁止所有中断 VICnINTENCLEAR = 0xffffffff;选择中断类型为IRQ中断,清除清VICnVECTADDR
    • 写好绑定函数,用于绑定isr到VICnVECTADDR
    • 使能中断函数VICnINTENABLE
    • 禁止中断函数VICnINTENCLEAR
    • 中断处理程序:直接到VICnVECTADDR中取出isr函数去执行

    汇编文件start.S

    • 写好中断保护现场的过程

    main函数

    • 做好中断初始化 
    • 串口初始化
    • 调用绑定异常向量表函数
    • 调用绑定isr函数
    • 使能中断

    按键iRQ中断执行步骤:

    • (1)按键按下
    • (2)硬件跳转到异常向量表执行对应的中断处理,同时将isr硬件自动推送到VICnVECTADDR
    • (3)异常向量表中是IRQ中断地址,指向汇编文件,在汇编文件中做好现场保护工作,比如设置IRQ模式下的栈,保存r0~r12,跳转到中断处理程序
    • (4)从汇编跳转到中断处理程序中执行,使用指针的方式间接访问VICnVECTADDR中由硬件自动推送的函数,执行。
    • (5)程序执行结束,跳转到汇编中恢复现场
  • 相关阅读:
    团队开发5
    团队开发4
    团队开发3
    团队开发2
    团队开发1
    团队计划会议
    寒假学习进度---完结篇
    寒假学习进度十七
    寒假学习进度十六
    python后续学习
  • 原文地址:https://www.cnblogs.com/jxjl/p/7112909.html
Copyright © 2020-2023  润新知