Assembly 带键盘模块的ARM组件GPIO接口
您好,我有TM4C123GXL开发板和MCU TM4C123GH6PM,我有一个4x4键盘模块+4个开关按钮+模块上的8个LED。我将交换机连接到GPIO的输入端口(B端口B0-B3),4个LED连接到我的输出端口(B4-B7)。我想我已经完成了下面列出的必要配置Assembly 带键盘模块的ARM组件GPIO接口,assembly,arm,cortex-m,Assembly,Arm,Cortex M,您好,我有TM4C123GXL开发板和MCU TM4C123GH6PM,我有一个4x4键盘模块+4个开关按钮+模块上的8个LED。我将交换机连接到GPIO的输入端口(B端口B0-B3),4个LED连接到我的输出端口(B4-B7)。我想我已经完成了下面列出的必要配置 GPIO_PORTB_DIR EQU 0x40005400 GPIO_PORTB_PDR EQU 0X40005514 GPIO_PORTB_AFSEL EQU 0x40005420 GPIO_PORTB_
GPIO_PORTB_DIR EQU 0x40005400
GPIO_PORTB_PDR EQU 0X40005514
GPIO_PORTB_AFSEL EQU 0x40005420
GPIO_PORTB_DEN EQU 0x4000551C
IOB EQU 0xF0
GPIO_PORTB_LOCK EQU 0x40005520
GPIO_PORTB_CR EQU 0x40005524
SYSCTL_RCGCGPIO EQU 0x400FE608
AREA |.text|, READONLY, CODE, ALIGN=2
THUMB
EXPORT start
start PROC
PUSH {R0-R1}
LDR R1 , =SYSCTL_RCGCGPIO
MOV R0 , #0
ORR R0 , R0 , #0x02 ;0000_0010 Only activates B ports' clock.
STRB R0 , [R1] ;..FE DCBA
NOP
NOP
NOP ;LET CLOCK STABILIZE.
LDR R1 , = GPIO_PORTB_LOCK ;Unlock B
LDR R0 , =0x4C4F434B ;Value is not important. (Just ASCII of "LOCK")
STR R0 , [R1] ;0x40005520 is 00 means it is unlocked. 01 means it is locked. 0x40005524 should be FF for GPIOCR
LDR R1 , = GPIO_PORTB_AFSEL
MOV R0 , #0
STRB R0 , [R1] ;Regular I/O will be used.
LDR R1 , =GPIO_PORTB_DIR ;Configuration of Port B starts.
MOV R0 , #0
ORR R0 , #IOB ;[B7-B4] = Output , [B3-B0] = Input
STRB R0 , [R1] ;Modify only B7-B0
LDR R1 , =GPIO_PORTB_DEN
MOV R0 , #0xFF ;Digital I/O is enabled for all pins of port B (B0-B7)
STRB R0 , [R1] ;Configuration of Port B ends.
POP {R0-R1}
BX LR
ENDP
ALIGN
END
在我的主函数中,我设置了B7,B6,B5,而B4为零,如下所示
LDR R1 , =GPIO_PORTB_DATA ;0x400053FC DATA ADDRESS TO ALL PINS
MOV R0 , #0xE0
STRB R0 , [R1]
当我运行该程序时,我希望数据寄存器地址中出现“E0”,因为我没有按下任何开关,所以B0-B3都是0,我将输出初始化为1110(E),如上所述。然而,我注意到这是EF。下面是我的两个问题。(抱歉花了这么长时间)
1-)我只观察到LED0打开,而我只期望看到另一种情况(LED3,2,1:打开,而LED0:关闭)
2-)因为我读到了F(1111输入来自开关),这是否意味着我的开关已经导通了,当我按下它们时,它变成了断路
对于这两个问题,我只想到了其他情况,结果是这样的。我想我遗漏了一些要点。我很乐意提供帮助。开关是常开还是常闭?如果打开,那么您的一侧是挂接在地上还是挂接在vcc上?如果接地,gpio引脚是否已拔出?在基本知识之后,你打算如何处理反弹?这是一个asm问题还是其他问题?你是不是先用C做原型的?或者编程语言与问题无关?开关看起来像是常闭的,因为我在数据寄存器中观察到F。当我按下S3(对应于B3)时,F值降低到7,这意味着如果按下开关,B3不再导通。我连接了接地和vcc引脚。我没有拉上或拉下gpıo销。为了处理去抖动,我有一个插入延迟的函数。我认为问题与编程语言无关。开关一端连接到gpio引脚,另一端连接到。。。?