F1C100S >> Assembly
KEYADC
參考資料:
1. pdf
2. lichee
3. mangopi_r
4. allwinner
按鍵採用電阻分壓方式
電壓分配如下:
VOL+ | 0.2v |
---|---|
VOL- | 0.4v |
SELECT | 0.6v |
START | 0.8v |
P.S. 電阻分壓方式可以解決I/O不足的問題,但是,缺點就是無法偵測多按鍵同時按下
KEYADC具有6bits解析度,量測範圍是0~2v,取樣率可達到250Hz
暫存器
main.s
.global _start .equ GPIO_BASE, 0x01c20800 .equ PE_CFG0, (GPIO_BASE + (4 * 0x24) + 0x00) .equ PE_DATA, (GPIO_BASE + (4 * 0x24) + 0x10) .equ ADC_BASE, 0x01C23400 .equ ADC_CTRL, (ADC_BASE + 0x00) .equ ADC_INTC, (ADC_BASE + 0x04) .equ ADC_INTS, (ADC_BASE + 0x08) .equ ADC_DATA, (ADC_BASE + 0x0c) .arm .text _start: .long 0xea000016 .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0' .long 0, __spl_size .byte 'S', 'P', 'L', 2 .long 0, 0 .long 0, 0, 0, 0, 0, 0, 0, 0 .long 0, 0, 0, 0, 0, 0, 0, 0 _vector: b reset b . b . b . b . b . b . b . reset: ldr r0, =PE_CFG0 ldr r1, =0x01000000 str r1, [r0] ldr r0, =PE_DATA ldr r1, =0x40 str r1, [r0] ldr r0, =ADC_CTRL ldr r1, =0x00000001 str r1, [r0] ldr r0, =ADC_INTC ldr r1, =0x00000001 str r1, [r0] 0: ldr r0, =ADC_INTS ldr r1, [r0] and r1, #1 cmp r1, #0 beq 0b ldr r0, =ADC_INTS ldr r1, =0x00000001 str r1, [r0] ldr r0, =ADC_DATA ldr r1, [r0] cmp r1, #10 bge 1f ldr r0, =PE_DATA ldr r1, =0x00 str r1, [r0] b 0b 1: ldr r0, =PE_DATA ldr r1, =0x40 str r1, [r0] b 0b .end
完成