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

📄 isd4002.s

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 S
字号:
;/****************************************************************
;**                                                              *
;**  FILE         :  isd4002.s                                   *
;**  COPYRIGHT    :  (c) 2006 .Xiamen Yaxon NetWork CO.LTD       *
;**                                                              *
;**                                                              *
;**              cyb 2006/11/20                                  *
;****************************************************************/

 INCLUDE		AT91m40800.inc

;------------------------------------------------------------------------------
;- Define  config parameters
;------------------------------------------------------------------------------   

NUM_REPT      EQU         2
AND_VALUE1    EQU         0x7ff
AND_VALUE2    EQU         0x3ff
VALUE_FF      EQU         0xffffffff
VALUE_00      EQU         0x00000000
 
;------------------------------------------------------------------------------
;- Define  i/o 
;------------------------------------------------------------------------------    
PIN_SCLK_     EQU         AT91C_PIO_P19
PIN_MOSI_     EQU         AT91C_PIO_P18
PIN_MISO_     EQU         AT91C_PIO_P17
PIN_NSS_      EQU         AT91C_PIO_P27
;------------------------------------------------------------------------------
;- Define  macro  DELAY
;------------------------------------------------------------------------------
       MACRO   
       DELAY
       LCLA     COUNT
COUNT  SETA    0
       WHILE    COUNT <= NUM_REPT
COUNT  SETA    COUNT+1
       nop
       WEND
       MEND 
;------------------------------------------------------------------------------
;- Define  macro  GETBIT
;------------------------------------------------------------------------------
        MACRO
        GETBIT
        LCLA    COUNT
COUNT   SETA    0
        WHILE   COUNT <= NUM_REPT
COUNT   SETA    COUNT+1
        ldr     r2,=AT91C_PIO_PDSR
        ldr     r3, [r2]   
        ldr     r2,=PIN_MOSI_
        tst     r3,r2      
        moveq   r6,r6,rrx
        movne   r7,r7,rrx
        WEND
        MEND 
;------------------------------------------------------------------------------
;- Define  macro  SENDBIT
;------------------------------------------------------------------------------       
       MACRO
       SENDBIT 
;-  send a bit to so             
        ldr    r2,=PIN_MISO_
        ldrcs  r3,=AT91C_PIO_SODR
        ldrcc  r3,=AT91C_PIO_CODR
        str    r2,[r3]
        DELAY
        
;-  set sclk high
        ldr   r2,=PIN_SCLK_
        ldr   r3,=AT91C_PIO_SODR
        str   r2,[r3]
        DELAY
;-  set sclk low
        ldr  r3,=AT91C_PIO_CODR
        str  r2,[r3]
        GETBIT
        MEND
                     
 
;------------------------------------------------------------------------------
;- Area Definition
;------------------------------------------------------------------------------   

                    AREA   ISD, CODE, READONLY
                    
                    EXPORT  _SendISDOP
                    EXPORT  _InitISD
                   

  
                    
;------------------------------------------------------------------------------
;-  procedure of _InitISD
;_  call format: _InitISD
;------------------------------------------------------------------------------   
                    
_InitISD


;- Enable PIO control sclk,mosi,miso,nss


       ldr   r2, =AT91C_PIO_PER  
       ldr   r3, =PIN_SCLK_
       str   r3, [r2]
       ldr   r3, =PIN_MOSI_
       str   r3, [r2]
       ldr   r3, =PIN_MISO_
       str   r3, [r2]
       ldr   r3, =PIN_NSS_
       str   r3, [r2]
       

;- Enable PIO OUTPUT sclk,miso,nss

       ldr   r2, =AT91C_PIO_OER
       ldr   r3, =PIN_SCLK_
       str   r3, [r2]
       ldr   r3, =PIN_MISO_
       str   r3, [r2]
       ldr   r3, =PIN_NSS_
       str   r3, [r2] 
 

;- Disable PIO OUTPUT mosi

       ldr  r2, =AT91C_PIO_ODR
       ldr   r3, =PIN_MOSI_
       str   r3, [r2]

;- Set Pin NSS and delay 600 ns
                  
       ldr r2, =AT91C_PIO_SODR
       ldr r3, =PIN_NSS_
       str r3, [r2]
       DELAY
;- Set Pin SCLK

       ldr   r3, =PIN_SCLK_
       str   r3, [r2]

;- Set Pin MISO

       ldr   r3, =PIN_MISO_
       str   r3, [r2]

;- Set Pin MOSI

       ldr   r3, =PIN_MOSI_
       str   r3, [r2]

;- RET

       mov   pc, lr


;------------------------------------------------------------------------------
;- procedure of _SendISDOP
;_ call format: _SendISDOP(opcode, address), r7 for opcode, (r4, r5) for address
;------------------------------------------------------------------------------ 
_SendISDOP
 
    
;- initialize SPI
       
        stmfd r13!,{r0,r1,lr}
        bl  _InitISD
        ldmfd r13!,{r0,r1,lr}

;- Clear Pin NSS and delay 600 ns
                  
       ldr r2, =AT91C_PIO_CODR
       ldr r3, =PIN_NSS_
       str r3, [r2]
       DELAY        
        
        
 ;- Assemble oprand and addr to one command        
       and  r0,r0,#0x1f
       ldr  r7,=AND_VALUE1
       and  r1,r1,r7
       orr  r1,r1,r0,lsl#11
        
        ldr  r6,=VALUE_00
        ldr  r7,=VALUE_FF
       
     
SendISDOP_LOOP
       
        movs r1,r1,rrx
        SENDBIT
        movs r0,r0,rrx
        
        subs r5,r5,#1
        bne SendISDOP_LOOP
        mov  r0,r0,lsr#16
        mov  r0,r0,lsr#2
        ldr  r4,=AND_VALUE1
        and  r0,r0,r4
        stmfd r13!,{r0,r1,lr}
        bl  _InitISD
        ldmfd r13!,{r0,r1,lr}
             
        mov  r5, #255
SendISDOP_WAIT
        
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop   
        subs r5,r5,#1
        bne   SendISDOP_WAIT
        
        mov   pc, lr
         
        END
                                                                                          

⌨️ 快捷键说明

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