arm汇编-设置GPIO

2584阅读 0评论2009-03-09 BENNYSNAKE
分类:

disable_lcd_backlight
    ldr        r0, =0x840                                                    /*GPIO的function寄存器,后三位是function*/
    ldr        r1, =MFP_LCD_PWM
    str        r0, [r1]
    ldr        r4, =0x40e00000
    mov        r5, #(1<<(LCD_PWM_GPIO%32))          /* 算出GPIO所在寄存器的位 */
    ldr        r0, [r4, #(0x0c + 4*(LCD_PWM_GPIO/32))]      /* r4 + 0x0c 是GPDR的寄存器base , GPDR是设置GPIO方向的寄存器*/
    orr        r0, r0, r5                                                               /*ORR是逻辑或*/
    str        r0, [r4, #(0x0c + 4*(LCD_PWM_GPIO/32))]      /* 设置GPIO为output*/

    bic        r0, r0, r5                                                               /*BIC是位清零*/
    str        r0, [r4, #(0x0c + 4*(LCD_PWM_GPIO/32))]      /* 设置GPIO为inputput*/



    mov        r5, #(1<<(LCD_PWM_GPIO%32))                  /* corresponding gpio bit */
    str        r5, [r4, #(0x24 + 4*(LCD_PWM_GPIO/32))]     /* GPCR:设置GPIO为低 , GPCR是设置GPIO为低的寄存器, 0x24是GPCR寄存器的base*/

    str        r5, [r4, #(0x18 + 4*(LCD_PWM_GPIO/32))]               /* GPSR: 设置GPIO为高,GPSR是设置GPIO为高的寄存器, 0x18是GPCR寄存器的base*/

 

    ldr        r0, =0x840                          将0x840导入到寄存器r0中

   str        r0, [r1]                                   *r1 = r0  

    orr        r0, r0, r5                               r0 = r0 | r5

    ldr        r0, [r4, #(0x0c + 4*(LCD_PWM_GPIO/32))]      (r4, #(0x0c + 4*(LCD_PWM_GPIO/32)))算出的是寄存器地址,将r0寄存器的值存入到算出地址中。           r0 = *(r4 + #(0x0c + 4*(LCD_PWM_GPIO/32)))

上一篇:没有了
下一篇:ARM-GPIO register 详解