Threadx_03:threadx的设备驱动

文章目录

  • 0
  • 1 ARM异常处理

0

设备驱动包含八个基本的函数模块,

  • Driver Initialization :该功能区负责初始化实际的硬件设备和内部数据驱动程序的结构。 调用驱动程序
    在初始化完成之前是不允许的。Typically, driver initialization is called from tx_application_define 。

  • Driver Control:驱动程序初始化并准备就绪后,该功能区域负责运行时控制。 通常,运行时控制包括对基础硬件设备的更改。示例包括更改串行的波特率设备或在磁盘上寻找新扇区。

  • Driver Access:某些设备驱动程序仅从单个调用应用程序线程。 在这种情况下,此功能区域不需要。 但是,在多个线程需要同时进行驱动程序访问,他们的互动必须通过添加分配/来控制释放设备驱动程序中的功能。 或者,应用程序可以使- 用信号量来控制驱动程序访问并避免额外的开销和复杂性在驱动程序内部。

  • Driver Input:该功能区负责所有设备输入。 与驱动程序相关的主要问题输入通常涉及如何缓冲输入,以及线程如何等待此类输入。Only threads are allowed to call the tx_sdriver_input function.

  • Driver Output:该功能区负责所有设备的输出。 与驱动程序输出相关的主要问题通常涉及如何缓冲输出以及线程如何等待执行输出。Only threads are allowed to call the tx_sdriver_output function.

  • Driver Interrupts:大多数实时系统依靠硬件中断来通知驱动程序设备的输入,输出,控制和错误事件。 中断提供了保证对此类外部事件的响应时间。 代替中断,驱动程序软件可能会定期检查这些事件的外部硬件。-

  • Driver Status:
    Current device status
    Input bytes
    Output bytes
    Device error counts

  • Driver Termination :该功能区域是可选的。 仅在以下情况下才需要驱动程序和/或物理硬件设备需要被关闭。 终止后,驱动程序在重新初始化之前不得再次调用

1 ARM异常处理

异常是异步事件或错误情况,会干扰正常流程线程处理。 通常,必须立即处理异常,然后将控制权返回给线程处理。 ARM中有三种异常类别架构如下:

  • 由执行指令的直接结果导致的异常
  • 由于执行指令的副作用而导致的异常
  • 由外部中断引起的异常,与指令执行无关

发生异常时,ARM尝试完成当前指令,暂时停止指令处理,处理该异常,然后继续处理说明。
处理器通过执行以下操作序列来处理异常。

1.将CPSR的当前值保存到新操作模式的SPSR中,以备后用返回。

2.更改为与异常对应的操作模式。

3.修改新操作模式的CPSR。 清除中的T(Thumb)位(位5)准备在ARM 32位模式下执行。 如果存在IRQ中断,则设置I位(位7)禁用进一步的IRQ中断。 如果存在FIQ中断,则设置F位(第6位)和I位(第7位)以禁止其他FIQ中断。

4.将当前PC(程序计数器-下一条指令的地址)保存在寄存器中新操作模式下的r14。

5.将PC更改为适当的异常向量,如图13.1所示,这是应用软件中断处理开始的地方。

Threadx_03:threadx的设备驱动_第1张图片
ARM具有简单的异常和中断处理体系结构。 有七个中断向量,从地址0x00000000开始。 每个向量是一个32位字,
包含实际的ARM指令。 通常,大多数应用程序会加载到PC七个异常向量位置中的每个位置处的指令。 图13.1显示了七项ARM向量表。

你可能感兴趣的:(ThreadX)