精华内容
下载资源
问答
  • 利用调试寄存器硬件断点实现透视,调试寄存器硬件断点,外挂
  • D8120 寄存器图标 D8120 寄存器图标D8120 寄存器图标D8120 寄存器图标
  • 寄存器就是内存中的一段特殊的地址

            寄存器分为外部寄存器和内部寄存器

            外部寄存器顾名思义就是指在CPU之外的寄存器,如某个外围芯片的控制寄存器、数据寄存器等。
    CPU必须通过输入输出指令才能访问外部寄存器。
    如x86下的in和out指令,一些65系列、ARM系列的CPU无输入输出指令,只能通过把外部寄存器映射到内存地址上,通过访问内存地址来实现访问外部寄存器。

            软件控制寄存器见《嵌入式Linux应用开发完全手册》第三章

    展开全文
  • 硬件寄存器是如何工作的

    千次阅读 2016-06-03 15:14:46
    大多数时候,寄存器都保持在稳定的状态,产生的输出等于它的当前状态。信号沿着寄存器前面的组合逻辑传播,这时,产生了一个新的寄存器输入。但只要时钟是地电位的,寄存器的输出就会保持不变。当时钟变成高电位时,...

        大多数时候,寄存器都保持在稳定的状态,产生的输出等于它的当前状态。信号沿着寄存器前面的组合逻辑传播,这时,产生了一个新的寄存器输入。但只要时钟是地电位的,寄存器的输出就会保持不变。当时钟变成高电位时,输入信号就加载到寄存器中,成为下一个状态,直到下一个时钟的上升沿,这个状态就是寄存器一直的输出。

        寄存器有两个读端口和一个写端口。这样一个多端口随机访问存储允许同时进行多个读和写操作电路可以读两个程序寄存器的值,同时更新第三个寄存器的状态。每个端口都有一个地址输入,表明选择那个程序寄存器。另外还有一个数据输出对应对应该程序存储器的输入值。

    展开全文
  • 硬件中断错误寄存器介绍
  • 为什么软件能操控硬件? 1、 什么是寄存器?寄存器属于CPU外设的硬件组成部分。...使用软件编程控制某一硬件其实就是编程读写该硬件寄存器。程序(自己写的代码)能够操控硬件主要是操作寄存器。 5

    为什么软件能操控硬件?
    1、 什么是寄存器?寄存器属于CPU外设的硬件组成部分。
    2、 CPU可以像访问内存一样访问寄存器(IO与内存统一编址)
    3、 寄存器是CPU硬件设计者制定的,目的是留作外设被编程控制的“活动开关”后台操作。
    一个寄存器的地址是多少,某个地址属于那个外部设备,作用是什么?要查看硬件数据手册。
    4、 正如汇编指令是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件其实就是编程读写该硬件的寄存器。程序(自己写的代码)能够操控硬件主要是操作寄存器。
    5、 寄存器中每个bit位都有特定含义,因此编程操作需要对应数据手册用位操作来实现。
    6、 单个寄存器位宽(一个寄存器能够设置的位数)一般和CPU的位宽一样,以实现最佳访问效率。
    7、 寄存器分类:(两类)
    通用寄存器(类似于C语言中定义的变量):在设计CPU(我的理解是CPU的变量)时功能没有确定,ARM中含有37个,是CPU的组成部分,CPU的很多活动都需通用寄存器的支持和参与,每个bit没有确定的特殊含义,编程人员读写修改来确定。通用寄存器通过用自己的名来访问。
    特殊功能寄存器(special function register)SFR:特殊功能寄存器是外设的组成部分,也就是不在CPU中,在外设中。我们通过访问外设的SFR来编程操控这个外部设备。这就是编程控制的方法(IO与地址通一编址)。
    SFR特殊理解为两方面:
    每个几个bit位设计死了某种确定功能,不能编程改变;
    不是通用的,是专门给某个外部设备定制的,和某个外部设备绑定的,通过设置SFR中某几位可以实现特定功能;

    编程访问寄存器的方法:
    ldr r1, =0xE0200280
    str r0, [ r1 ]
    mov r0, #0

    int * p = ( int * )0x30008000;
    *p = 16;

    展开全文
  • 数据寄存器设计.数据寄存器设计.数据寄存器设计.数据寄存器设计.数据寄存器设计.数据寄存器设计.
  • 嵌入式硬件寄存器操作层次

    千次阅读 2016-11-08 16:14:39
    嵌入式硬件寄存器操作层次 寄存器操作—>基于CMSIS-CORE操作—>基于硬件抽象层hal操作—>基于API操作(针对hal api再次作了面向对象的封装)

    嵌入式硬件寄存器操作层次
    寄存器操作—>基于CMSIS-CORE操作—>基于硬件抽象层hal操作—>基于API操作(针对hal api再次作了面向对象的封装)

    1.寄存器操作

    这里写图片描述

    基于寄存器操作的闪灯程序

    int main()
    { 
    unsigned int mask_pin18 = 1 << 18;
    volatile unsigned int *port1_dir = (unsigned int
    *)0x2009C020;
    volatile unsigned int *port1_set = (unsigned int
    *)0x2009C038;
    volatile unsigned int *port1_clr = (unsigned int
    *)0x2009C03C;
    
      *port1_dir |= mask_pin18;
      while (true) 
      {   
          *port1_set |= mask_pin18;
          wait(0.5);
          *port1_clr|= mask_pin18;     
          wait(0.5);
       }
    }

    将寄存器的地址赋值给指针,通过地址指针操作寄存器的相关功能位

    2.基于CMSIS-CORE操作

    前面的代码已经表明,基于MCU寄存器的应用程序其大量代码是寄存器地址的定义,为了减少用户的代码量,ARM公司已经要求各个厂商把这部分代码写成统一的接口格式给用户使用,这就是CMSIS-CORE的目标.
    如在类似kinetis MK64F12.h 和STM32 stm32f103.h 文件中,你可以找到以下相关代码.

    #define PORTA_BASE (0x40049000u)
    /* Peripheral PORTA base pointer /
    #define PORTA ((PORT_Type *)PORTA_BASE)
    #define PORTA_BASE_PTR (PORTA)

    /** PORT - Register Layout Typedef */
    typedef struct {
      __IO uint32_t PCR[32];                           /**< Pin Control Register n, array offset: 0x0, array step: 0x4 */
      __O  uint32_t GPCLR;                             /**< Global Pin Control Low Register, offset: 0x80 */
      __O  uint32_t GPCHR;                             /**< Global Pin Control High Register, offset: 0x84 */
           uint8_t RESERVED_0[24];
      __IO uint32_t ISFR;                              /**< Interrupt Status Flag Register, offset: 0xA0 */
           uint8_t RESERVED_1[28];
      __IO uint32_t DFER;                              /**< Digital Filter Enable Register, offset: 0xC0 */
      __IO uint32_t DFCR;                              /**< Digital Filter Clock Register, offset: 0xC4 */
      __IO uint32_t DFWR;                              /**< Digital Filter Width Register, offset: 0xC8 */
    } PORT_Type, *PORT_MemMapPtr;
    这样一来,我们就可以基于CMSIS-CORE使用以下代码来完成我们的功能了。
    

    int main()
    {
    unsigned int mask_pin18 = 1 << 18;
    while (true) {
    PORTA->FIOSET |= mask_pin18;
    wait(0.5);
    PORTA->FIOCLR |= mask_pin18;
    wait(0.5);
    }
    }

    3.基于硬件抽象层hal操作

    虽然从代码量上来说,基于CMSIS-CORE的闪灯程序已经比原先的改进了不少,但操作方式上并没有任何变化,用户依然需要理解寄存器的相关概念,而对于应用程序开发人员来说,他们更能理解的是SDK,即各种各样得函数调用,于是,mbed在cmsis-core的基础之上专门设计了一个硬件抽象层,把MCU的所有寄存器操作都整合成hal api函数调用方式,对于应用开发人员来说,他只需要调用hal api即可,而对于底层开发人员来说,他只需要实现hal api即可。

    Hal api的所有函数原型都在hal目录下,与闪灯相关的gpio 函数原型如下:

    uint32_t gpio_set(PinNamepin);

    void gpio_init (gpio_t *obj,PinName pin, PinDirection direction);

    void gpio_mode (gpio_t *obj,
    PinMode mode);

    void gpio_dir (gpio_t *obj, PinDirection direction);

    void gpio_write(gpio_t *obj,int value);

    int gpio_read (gpio_t *obj);

    这样一来,我们就可以基于hal api使用以下代码来完成我们的功能了。

    int
    main() {
    gpio_set(LED1);
    gpio_t gpio;
    gpio_init(&gpio, LED1, PIN_OUTPUT);
    while (true)
    {
    gpio_write(&gpio,1);
    wait(0.5);
    gpio_write(&gpio,0);
    wait(0.5);
    }
    }

    4.基于API操作(针对hal api再次作了面向对象的封装)

    基于hal api操作的应用程序虽然已经可以做到与具体的mcu无关了,但习惯了java,c#程序设计的程序员来说还是不太习惯,于是,mbed又针对hal api再次作了面向对象的封装,使得用户可以更简单地来编写上层应用,它对应的函数定义在api目录下,相应的实现在common目录下,闪灯程序相关的定义在DigitalOut.h中,其中也包括了对应的实现,代码如下:

    class DigitalOut
    {
    public:
    DigitalOut(PinName pin) {
    gpio_init(&gpio, pin, PIN_OUTPUT);
    }
    void write(int value) {
    gpio_write(&gpio, value);
    }
    int read() {
    return gpio_read(&gpio);
    }

    #ifdef
    MBED_OPERATORS
    DigitalOut& operator= (int value) {
    write(value);
    return *this;
    }
    DigitalOut& operator= (DigitalOut& rhs) {
    write(rhs.read());
    return *this;
    }
    operator int() {
    return read();
    }
    #endif
    protected:
    gpio_t gpio;
    };
    这样一来,我们就可以基于mbed api使用以下代码来完成我们的功能了。


    DigitalOut led1(LED1);
    int main()
    {
    while (true)
    {
    led1 = 1;
    wait(0.5);
    led1 = 0;
    wait(0.5);
    }
    }

    展开全文
  • 行业分类-设备装置-对寄存器传输级硬件实现进行验证的系统及方法.zip
  • 寄存器

    千次阅读 2011-09-22 21:43:58
    寄存器定义  寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的...
  • 上拉寄存器 上拉寄存器是控制对应端口上拉使能的。 当对应位为0时,设置对应引脚上拉使能,对应位为1时,禁止对应引脚上拉使能。 如果上拉寄存器使能,无论引脚功能寄存器如何设置(输入、输出、数据、中断等),...
  • 常用ATmega16硬件资源寄存器的样列程序
  • Linux系统下对硬件寄存器调试的应用研究.pdf
  • 实现组播技术的基础是组播硬件过滤技术,精简丽...该文分析了组播硬件过滤时内核哈希表与硬件寄存器数量之间的关系,运用数学方法推导出了组播地址映射到硬件寄存器的概率计算公式,为硬件设计提供了有效的参考选择。
  • 寄存器属于CPU外设,属于硬件 CPU可以访问内存一样访问寄存器 寄存器硬件设计者定制的,留作外设被编程控制的“活动开关”   寄存器是外设硬件的软件编程接口API。  关键词:控制 汇编指令集是CPU的编程接口API...
  • 驱动中读写硬件寄存器的方式

    千次阅读 2014-06-15 00:09:01
    1.驱动中读写硬件寄存器的方式 比如想控制某寄存器。先查找datasheet中该寄存器的物理地址。 然后调用ioremap()函数。该函数返回一个虚拟地址。内核空间 可以直接访问它。 比如我们要访问s3c2410平台上的I2S...
  • * 寄存器属于CPU外设的硬件组成部分。 * CPU可以像访问内存一样访问寄存器。 * 寄存器是CPU的硬件设计者制定的,目的是留作外设被编程控制的“活动开关”。 * 正如汇编指令集是CPU的编程接口API一样,寄存器是...
  • linux系统下操作硬件寄存器

    千次阅读 2014-06-15 00:08:03
    经过一两天的摸索,基本上对在linux控制硬件有了个初步的认识:在linux下控制硬件和在无操作系统下控制硬件的不同主要在于硬件的地址不一样,在linux下要使用va(虚拟地址),而在无操作系统下可以直接使用硬件的pa...
  • 把16位的通用寄存器、标志寄存器以及指令指针寄存器扩充为32位的寄存器寄存器仍为16位增加了4个32位的控制寄存器增加了4个系统地址寄存器增加了8个调试寄存器增加了2个测试寄存器 通用寄存器 对于i386及...
  • 寄存器详解

    千次阅读 2012-12-07 18:09:14
    AX/EAX: 累加器,算术通用寄存器,与端口的通讯也用这个寄存器. BX/EBX: 基址寄存器. CX/ECX: 计数器,结合串处理指令使用. DX/EDX: 算术通用寄存器.和累加器结合表示双字长的数,其中累加器用于存低位数. ...
  • 单片机寄存器

    万次阅读 2019-05-30 14:10:30
    单片机寄存器其实就相当于一个变量,只不过这个变量在固定的地址,有一个特殊的名称(当然也不强制)。 初学者对寄存器的操作比较困难的原因不是汇编语言或C语言使用的不熟,而是对寄存器的陌生。 单片机中存储器的...
  • 本报告为蓝多多所作,指导教师陈珏老师。本报告仅供参考,如有错误,欢迎批评指正。不要忘了点赞哦。
  • 移位寄存器

    2013-06-21 00:34:47
    74194是一种典型的中规模集成移位寄存器,由4个RS触发器和一些门电路构成的4位双向移位寄存器。该移位寄存器具有左移、右移、并行输入数据、保持及异步清零5种功能。其中A、B、C、D为并行数据输入端,QA、QB、QC、QD...
  • 通过3个问题理解寄存器及其操作。 什么是寄存器(就是个数字)? 简单可以理解为能够通过软件改写数值、控制硬件的一个32bit的...寄存器是实现软硬件的接口,几乎所有的硬件功能控制都是通过操作寄存器来实现的,..
  • 1、DSP28335 硬件概述与寄存器描述

    万次阅读 2018-05-02 13:23:01
    本文参考文献 DSP28335数据手册,与《Programming TMS320x28xx and 28xxx Peripherals in C/C++》《F28335的位域和寄存器结构的学习》1、DSP28335芯片是TI公司,偏向于控制方向、浮点型处理器,通过了解可以看出该...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 190,634
精华内容 76,253
关键字:

寄存器是硬件吗