⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcddriver.s

📁 at91arm7处理器的启动源码
💻 S
字号:
	AREA BOOTROM, CODE, READONLY

PIO_BASE          EQU     0xFFFF0000
PIO_PDSR          EQU     0xFFFF003C


;XXXX 0000
;E(1),R/~W,RS(1 data,0 commmand)

LCD_CW_E   EQU  0x80
;100 X 
LCD_CR_E   EQU  0xC0
;110 X 
LCD_DW_E   EQU  0xA0
;101 X 
LCD_DR_E   EQU  0xE0
;111 X 
;write to cs4

LCD_CW   EQU  0x00
;000 X 
LCD_CR   EQU  0x40
;010 X 
LCD_DW   EQU  0x20
;001 X 
LCD_DR   EQU  0x60
;011 X 
;write to cs4



CS4_addr           EQU    0x40000000


;r6 command ,r7 data
;r5 CS4

P0_P7MASK EQU  0xFFFFFF00


 ENTRY

delay2ms
       STMFD sp!,{r0,lr}
       ldr r0, =0x00013880
dly2ms
       sub r0,r0,#1
       bne dly2ms

       LDMFD sp!,{r0,PC};Return

delay600ns
       STMFD sp!,{lr}

;>=600ns is ok
          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop

          nop
          nop
          nop
          nop
          
          nop
          nop
          nop
          nop

          LDMFD sp!,{PC};Return


R0_readP0_P7
          STMFD sp!,{r2,lr}

              LDR  R2,=PIO_PDSR
              LDR  R0,[R2]
              BIC  R0,R0,#0xFFFFFF00


          LDMFD sp!,{r2,PC};Return


R0_writeP0_P7
          STMFD sp!,{r1-r3,lr}

;R0 LOW 8-BIT => PIO0-PIO7
;SET R0 BEFORE CALL

              LDR  R1,=PIO_BASE
              LDR  R3,=P0_P7MASK

              MOV  R2,R0;backup r0
              BIC  R2,R2,R3
              STR  R2,[R1,#0x30];SET OUTPUT DATA REGISTER

              MVN  R2,R0
              BIC  R2,R2,R3
              STR  R2,[R1,#0x34];CLEAR OUTPUT DATA REGISTER

          LDMFD sp!,{r1-r3,PC};Return


LCD_CommandWrite
          STMFD sp!,{r0-r1,lr}
;写指令,r7

;>=140ns? or delay450ns=>600ns

          ldrb r0,=LCD_CW_E
          ldr r1,=CS4_addr
          strb r0,[R1]

          mov r0,r7
          bl R0_writeP0_P7

          bl delay600ns
;write,close E
          ldrb r0,=LCD_CW
          strb r0,[R1]
          bl delay600ns

          LDMFD sp!,{r0-r1,PC};Return

LCD_CommandRead
          STMFD sp!,{r0-r1,lr}
;读指令

;读BF到C
;读AC到r6 low 8 bit

;>=140ns? or delay450ns=>600ns

          ldrb r0,=LCD_CR_E
          ldr r1,=CS4_addr
          strb r0,[R1]
          bl delay600ns
;read,close E
          bl R0_readP0_P7

          mov r6,r0
          mov r0,r0,lsr #8;BF to C flag           

          ldrb r0,=LCD_CR
          strb r0,[R1]
          bl delay600ns

          LDMFD sp!,{r0-r1,PC};Return

LCD_DataRead
          STMFD sp!,{r0-r1,lr}
;读数据,R7

;>=140ns? or delay450ns=>600ns

          ldrb r0,=LCD_DR_E
          ldr r1,=CS4_addr
          strb r0,[R1]
          bl delay600ns
;read,close E
          bl R0_readP0_P7

          mov r7,r0

          ldrb r0,=LCD_DR
          strb r0,[R1]
          bl delay600ns

          LDMFD sp!,{r0-r1,PC};Return

LCD_DataWrite
          STMFD sp!,{r0-r1,lr}
;写数据,r7

;>=140ns? or delay450ns=>600ns

          ldrb r0,=LCD_DW_E
          ldr r1,=CS4_addr
          strb r0,[R1]

          mov r0,r7
          bl R0_writeP0_P7

          bl delay600ns
;write,close E
          ldrb r0,=LCD_DW
          strb r0,[R1]
          bl delay600ns

          LDMFD sp!,{r0-r1,PC};Return

PR1      STMFD sp!,{lr}   
;写指令
;preset R7
PR11
         bl LCD_CommandRead
         bcs PR11
         bl LCD_CommandWrite

         LDMFD sp!,{PC};Return


PR2        STMFD sp!,{lr}
;写显示数据,
;preset r7
PR21
           bl LCD_CommandRead
           bcs PR21
           bl LCD_DataWrite

           LDMFD sp!,{PC};Return

PR3        STMFD sp!,{lr}
;读显示数据,r7
PR31
           bl LCD_CommandRead
           bcs PR31
           bl LCD_DataRead           
           LDMFD sp!,{PC};Return





INITLCD    STMFD sp!,{R7,lr}
;LCD初始化设置子程序           

           ldr r7,=0x00000030
           bl  PR1
           bl delay2ms

           ldr r7,=0x00000030
           bl  PR1
           bl delay2ms

           ldr r7,=0x00000030
           bl  PR1
           bl delay2ms

    
           ldr r7,=0x00000038
           bl  PR1;设置工作方式

           ldr r7,=0x00000001
           bl  PR1;清屏

           ldr r7,=0x00000006
           bl  PR1;设置输入方式

           ldr r7,=0x00000000F
           bl  PR1;设置显示方式
        
           LDMFD sp!,{R7,PC};Return

 END 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -