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

📄 430io模拟spi读写铁电.txt

📁 s3c2410的IO模拟SPI驱动程序
💻 TXT
字号:
;声明:本原码的版权归 唐山美伦仪表 高晓亮 所有,使用者可以传播但请不要更改版权信息。
          RSEG    CODE
          even
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  铁电操作  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
FE_SET
      BIC.B   #FE_CS,FE_CS_SEL                   ;片选
      BIC.B   #FE_CLK,FE_CLK_SEL                 ;时钟
      BIC.B   #FE_IO,FE_IO_SEL                   ;数据输入输出
      BIS.B   #FE_CS,FE_CS_DIR
      BIS.B   #FE_CLK,FE_CLK_DIR
      BIS.B   #FE_IO,FE_IO_DIR
      RET 

;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;铁电字节写 
;调用    
;第一个进栈参数:指定写入地址,第二个:指定写入的数据
;例子:
;push   #xxx   ;地址
;push.b #xxx   ;数据   
;call   #FE_WRITE_B
;add    #4,SP  ;恢复指针 
;-----------------------      
FE_WRITE_B
       PUSH  R15
       PUSH  R14
       PUSH  R11
       PUSH  R10
       MOV   12(SP),R15
       MOV.B 10(SP),R14
       CALL  #FE_UNPROTECT             ;USED R11 R10
       CALL  #FE_WREN                  ;USED R11 R10    
       CALL  #FE_START
       MOV.B #WRITE,R11
       CALL  #FE_OUT                   ;USED R11 R10
       SWPB  R15
       MOV.B R15,R11
       CALL  #FE_OUT                   ;USED R11 R10        
       SWPB  R15
       MOV.B R15,R11
       CALL  #FE_OUT                   ;USED R11 R10  
       MOV.B R14,R11
       CALL  #FE_OUT                   ;USED R11 R10 
       CALL  #FE_END
       CALL  #FE_PROTECT               ;USED R11 R10
       POP   R10
       POP   R11
       POP   R14
       POP   R15
       RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@       
;铁电字节读
;调用    
;第一个进栈参数:指定读地址
;返回:读出的数据
;例子:
;push  #xxx    ;地址
;call  #FE_READ_B
;push  #RXX    ;返回的数据
;--------------------------
FE_READ_B       
       PUSH  R15
       PUSH  R11
       PUSH  R10  
       MOV   8(SP),R15
       CALL  #FE_WREN                  ;USED R11 R10    
       CALL  #FE_START
       MOV.B #READ,R11
       CALL  #FE_OUT                   ;USED R11 R10
       SWPB  R15
       MOV.B R15,R11
       CALL  #FE_OUT                   ;USED R11 R10        
       SWPB  R15
       MOV.B R15,R11
       CALL  #FE_OUT                   ;USED R11 R10
       CALL  #FE_IN  
       MOV   R11,8(SP) 
       CALL  #FE_END                            
       POP   R10
       POP   R11
       POP   R15       
       RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@       
;铁电区块写
;调用    
;第一个进栈参数:指定源地址,第二个:指定写入目的地址,第三:指定写入个数
;例子:
;push   #xxx   ;源地址
;push   #xxx   ;目的地址
;push   #xxx   ;写入个数   
;call   #FE_WRITE_BLOCK
;add    #6,SP   ;恢复指针 
;------------------------
FE_WRITE_BLOCK
        PUSH    R15
        PUSH    R14
        PUSH    R13
        PUSH    R11
        PUSH    R10
        MOV     16(SP),R15
        MOV     14(SP),R14
        MOV     12(SP),R13        
        CALL  #FE_UNPROTECT             ;USED R11 R10
        CALL  #FE_WREN                  ;USED R11 R10    
        CALL  #FE_START
        MOV.B #WRITE,R11
        CALL  #FE_OUT                   ;USED R11 R10
        SWPB  R14
        MOV.B R14,R11
        CALL  #FE_OUT                   ;USED R11 R10        
        SWPB  R14
        MOV.B R14,R11
        CALL  #FE_OUT                   ;USED R11 R10
FE_WRITE_BLOCK_LOOP        
        CMP   #0,R13
        JZ    FE_WRITE_BLOCK1  
        MOV.B 0(R15),R11
        CALL  #FE_OUT                   ;USED R11 R10 
        INC   R15
        DEC   R13 
        JMP   FE_WRITE_BLOCK_LOOP
FE_WRITE_BLOCK1
        CALL  #FE_END
        CALL  #FE_PROTECT               ;USED R11 R10
        POP     R10
        POP     R11
        POP     R13
        POP     R14
        POP     R15
        RET    
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@       
;铁电区块读
;调用    
;第一个进栈参数:指定源地址,第二个:指定读出目的地址,第三:指定读出个数
;例子:
;push   #xxx   ;源地址
;push   #xxx   ;目的地址
;push   #xxx   ;读出个数   
;call   #FE_READ_BLOCK
;add    #6,SP  ;恢复指针
;------------------------------------------
FE_READ_BLOCK       
        PUSH  R15
        PUSH  R14
        PUSH  R13
        PUSH  R11
        PUSH  R10  
        MOV     16(SP),R15
        MOV     14(SP),R14
        MOV     12(SP),R13     
        CALL  #FE_WREN                  ;USED R11 R10    
        CALL  #FE_START
        MOV.B #READ,R11
        CALL  #FE_OUT                   ;USED R11 R10
        SWPB  R15
        MOV.B R15,R11
        CALL  #FE_OUT                   ;USED R11 R10        
        SWPB  R15
        MOV.B R15,R11
        CALL  #FE_OUT                   ;USED R11 R10
FE_READ_BLOCK_LOOP        
        CMP   #0,R13
        JZ    FE_READ_BLOCK1         
        CALL  #FE_IN  
        MOV.B R11,0(R14)
        INC   R14
        DEC   R13
        JMP   FE_READ_BLOCK_LOOP 
FE_READ_BLOCK1        
        CALL  #FE_END                            
        POP   R10
        POP   R11
        POP   R13
        POP   R14
        POP   R15       
        RET             
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;按内存数据结构指定写铁电,结构为:源地址DW,写入目的地址DW,字节个数DW
;调用
;第一个进栈参数:结构地址
;例子:
;push   #xxx   ;结构地址  
;call   #FE_WRITE_FRAME
;add    #2,SP  ;恢复指针  
FE_WRITE_FRAME
        PUSH    R15
        PUSH    R14
        PUSH    R13
        PUSH    R11
        PUSH    R10
        MOV     12(SP),R11
        MOV     0(R11),R15
        MOV     2(R11),R14
        MOV     4(R11),R13        
        CALL  #FE_UNPROTECT             ;USED R11 R10
        CALL  #FE_WREN                  ;USED R11 R10    
        CALL  #FE_START
        MOV.B #WRITE,R11
        CALL  #FE_OUT                   ;USED R11 R10
        SWPB  R14
        MOV.B R14,R11
        CALL  #FE_OUT                   ;USED R11 R10        
        SWPB  R14
        MOV.B R14,R11
        CALL  #FE_OUT                   ;USED R11 R10
FE_WRITE_FRAME_LOOP        
        CMP   #0,R13
        JZ    FE_WRITE_FRAME1  
        MOV.B 0(R15),R11
        CALL  #FE_OUT                   ;USED R11 R10 
        INC   R15
        DEC   R13 
        JMP   FE_WRITE_FRAME_LOOP
FE_WRITE_FRAME1
        CALL  #FE_END
        CALL  #FE_PROTECT               ;USED R11 R10
        POP     R10
        POP     R11
        POP     R13
        POP     R14
        POP     R15
        RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;按内存数据结构指定读铁电,结构为:源地址DW,指定读出目的地址,字节个数DW
;调用
;第一个进栈参数:结构地址
;例子:
;push   #xxx   ;结构地址  
;call   #FE_READ_FRAME
;add    #2,SP  ;恢复指针
FE_READ_FRAME
        PUSH  R15
        PUSH  R14
        PUSH  R13
        PUSH  R11
        PUSH  R10  
        MOV     12(SP),R11
        MOV     0(R11),R15
        MOV     2(R11),R14
        MOV     4(R11),R13     
        CALL  #FE_WREN                  ;USED R11 R10    
        CALL  #FE_START
        MOV.B #READ,R11
        CALL  #FE_OUT                   ;USED R11 R10
        SWPB  R15
        MOV.B R15,R11
        CALL  #FE_OUT                   ;USED R11 R10        
        SWPB  R15
        MOV.B R15,R11
        CALL  #FE_OUT                   ;USED R11 R10
FE_READ_FRAME_LOOP        
        CMP   #0,R13
        JZ    FE_READ_FRAME1         
        CALL  #FE_IN  
        MOV.B R11,0(R14)
        INC   R14
        DEC   R13
        JMP   FE_READ_FRAME_LOOP 
FE_READ_FRAME1        
        CALL  #FE_END                            
        POP   R10
        POP   R11
        POP   R13
        POP   R14
        POP   R15       
        RET         
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;铁电字节填充
;调用    
;第一个进栈参数:指定填充目的地址,第二个:指定填充字节个数,第三:指定填充字节数据
;例子:
;push   #xxx   ;目的地址
;push   #xxx   ;填充个数
;push.b #xxx   ;字节数据   
;call   #FE_FILL_B
;add    #6,SP   ;恢复指针 
FE_FILL_B
        PUSH    R15
        PUSH    R14
        PUSH    R13
        PUSH    R11
        PUSH    R10
        MOV     16(SP),R15
        MOV     14(SP),R14
        MOV.B   12(SP),R13        
        CALL  #FE_UNPROTECT             ;USED R11 R10
        CALL  #FE_WREN                  ;USED R11 R10    
        CALL  #FE_START
        MOV.B #WRITE,R11
        CALL  #FE_OUT                   ;USED R11 R10
        SWPB  R15
        MOV.B R15,R11
        CALL  #FE_OUT                   ;USED R11 R10        
        SWPB  R15
        MOV.B R15,R11
        CALL  #FE_OUT                   ;USED R11 R10
FE_FILL_B_LOOP        
        CMP   #0,R14
        JZ    FE_FILL_B1  
        MOV.B R13,R11
        CALL  #FE_OUT                   ;USED R11 R10 
        INC   R15
        DEC   R14 
        JMP   FE_FILL_B_LOOP
FE_FILL_B1
        CALL  #FE_END
        CALL  #FE_PROTECT               ;USED R11 R10
        POP     R10
        POP     R11
        POP     R13
        POP     R14
        POP     R15
        RET     
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;铁电字填充
;调用    
;第一个进栈参数:指定填充目的地址,第二个:指定填充字个数,第三:指定填充字数据
;例子:
;push   #xxx   ;目的地址
;push   #xxx   ;填充个数
;push   #xxx   ;字数据   
;call   #FE_FILL_W
;add    #6,SP   ;恢复指针 
FE_FILL_W
        PUSH    R15
        PUSH    R14
        PUSH    R13
        PUSH    R11
        PUSH    R10
        MOV     16(SP),R15
        MOV     14(SP),R14
        MOV     12(SP),R13        
        CALL  #FE_UNPROTECT             ;USED R11 R10
        CALL  #FE_WREN                  ;USED R11 R10    
        CALL  #FE_START
        MOV.B #WRITE,R11
        CALL  #FE_OUT                   ;USED R11 R10
        SWPB  R15
        MOV.B R15,R11
        CALL  #FE_OUT                   ;USED R11 R10        
        SWPB  R15
        MOV.B R15,R11
        CALL  #FE_OUT                   ;USED R11 R10
FE_FILL_W_LOOP        
        CMP   #0,R14
        JZ    FE_FILL_W1  
        MOV.B R13,R11
        CALL  #FE_OUT                   ;USED R11 R10 
        SWPB  R13
        MOV.B R13,R11
        CALL  #FE_OUT
        SWPB  R13
        INC   R15
        DEC   R14 
        JMP   FE_FILL_W_LOOP
FE_FILL_W1
        CALL  #FE_END
        CALL  #FE_PROTECT               ;USED R11 R10
        POP     R10
        POP     R11
        POP     R13
        POP     R14
        POP     R15
        RET             
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;--------------------------------------------------
FE_START
       BIS.B   #FE_CS,FE_CS_OUT       
       BIC.B   #FE_CLK,FE_CLK_OUT
       BIC.B   #FE_CS,FE_CS_OUT
       RET
;---------------------------------------------------       
FE_END
       BIC.B   #FE_CLK,FE_CLK_OUT         
       BIS.B   #FE_CS,FE_CS_OUT  
       RET
;---------------------------------------------------   
;子程序本身不保护寄存器。用到R11,R10
;输入的数据放置在r11的低字节     
FE_IN
       BIC.B #FE_IO,FE_IO_DIR
       MOV   #8,R10
FE_IN_LOOP
       BIS.B #FE_CLK,FE_CLK_OUT
       BIT.B #FE_IO,FE_IO_IN
       JZ    FE_IN1
       BIS.B #BIT0,R11 
       JMP   FE_IN2
FE_IN1       
       BIC.B #BIT0,R11
FE_IN2
       BIC.B #FE_CLK,FE_CLK_OUT
       DEC   R10
       JZ    FE_IN3       
       RLA.B R11
       JMP   FE_IN_LOOP
FE_IN3
       RET
;---------------------------------------------------  
;子程序本身不保护寄存器。用到R11,R10 
;r11的低字节放置要输出的数据。    
FE_OUT
       BIS.B #FE_IO,FE_IO_DIR
       MOV   #8,R10
FE_OUT_LOOP       
       RLC.B R11
       JC    FE_OUT1
       BIC.B #FE_IO,FE_IO_OUT
       JMP   FE_OUT2
FE_OUT1
       BIS.B #FE_IO,FE_IO_OUT
FE_OUT2
       BIS.B #FE_CLK,FE_CLK_OUT
       BIC.B #FE_CLK,FE_CLK_OUT
       DEC   R10 
       JNZ   FE_OUT_LOOP
       RET
;---------------------------------------------------
;铁电命令:打开写使能
FE_WREN
       CALL  #FE_START
       MOV.B #WREN,R11
       CALL  #FE_OUT
       CALL  #FE_END
       RET
;---------------------------------------------------
;铁电命令:关闭写使能
FE_WRDI
       CALL  #FE_START
       MOV.B #WRDI,R11
       CALL  #FE_OUT
       CALL  #FE_END
       RET
;---------------------------------------------------
;铁电加写保护
;子程序本身不保护寄存器。用到(FE_OUT)
FE_PROTECT
       CALL  #FE_WREN
       CALL  #FE_START
       MOV.B #WRSR,R11
       CALL  #FE_OUT
       MOV.B #PROTECT_3,R11
       CALL  #FE_OUT
       CALL  #FE_END
       RET
;---------------------------------------------------
;铁电去掉写保护
;子程序本身不保护寄存器。用到(FE_OUT)
FE_UNPROTECT
       CALL  #FE_WREN
       CALL  #FE_START
       MOV.B #WRSR,R11
       CALL  #FE_OUT       
       MOV.B #UNPROTECT,R11
       CALL  #FE_OUT
       CALL  #FE_END
       RET
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;声明:本原码的版权归 唐山美伦仪表 高晓亮 所有,使用者可以传播但请不要更改版权信息。

⌨️ 快捷键说明

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