NIOS II组件,如何使用一个寄存器位置设置2个不同的变量



我试图完成的是将小数值设置为变量A和B。小数值是基于外部DIP开关给出的输入确定的。DIP具有8个开关,第一个开关1-4应该控制变量,而开关5-8控制B变量。因此,我了解如何使用我的DE0 Nano板上的JP1端口设置寄存器值,但不知道如何将Hexi decimal寄存器值分为两个单独的值。例如,如果我打开开关1和8,我将获得存储在寄存器中的0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81的值。如果我希望a成为小数3和b也是3,我会做的" a [3:0]< -dip [1:4]和c [3:0]< -dip [5:lt; -dip [5:8]"。

因此,要总结我在上面说的话如何将存储在寄存器中的hexi值分为两个变量,其中第一个4个开关控制A和第二个4个控制b?

以下是我到目前为止控制端口和LED的代码(使用板上的LED来确认旋转术正在起作用(。预先感谢。

.equ ANSWER, 0x00001000
.equ LEDS, 0x10000010
.equ JP1_PORTS, 0x10000060
.text
.global _start
_start: movia r2, ANSWER
        movia r3, LEDS
        movia r4, JP1_PORTS
loop: ldwio r5, 0(r4)
      stwio r5, 0(r3)
      br loop

DIP开关

我不知道NIOS II的指令集,但几乎可以肯定具有位和移动指令。例如,在C中,您会做:

int sw = read_switch(); //lower byte = bbbbaaaa
int a = sw & 0xF; //so now a= 0x0000aaaa
int b = sw >> 4;  //b = xxxxbbbb, where x is whatever is in the upper bits. 
                  //If you know the upper bits are always 0, you can stop here
b = b & 0xF       //b = 0000bbbb

在诸如ARM组件之类的东西(再次,不知道Nios,但它不应该太不同(,看起来像这样

ldr r0, [r5]      ; r5=pointer to switch register, so r0 = b'bbbbaaaa'
and r1, r0, #0xF  ; r1 is your A switches
shr r2, r0, #4   
and r2, r2, #0xF  ; r2 is your B switches

最新更新