📄 isd4002.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 + -