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

📄 spi.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module spi.c
                        .area data(ram, con, rel)
 0000           _Spi_Receive_Buffer::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .blkw 1
                        .area idata
 0003 0A00              .word _Spi_Receive_Data
                        .area data(ram, con, rel)
 0005                   .blkb 1
                        .area idata
 0005 FF                .byte 255
                        .area data(ram, con, rel)
 0006                   .blkb 1
                        .area idata
 0006 00                .byte 0
                        .area data(ram, con, rel)
 0007                   .blkb 1
                        .area idata
 0007 00                .byte 0
                        .area data(ram, con, rel)
 0008                   .blkb 1
                        .area idata
 0008 00                .byte 0
                        .area data(ram, con, rel)
 0009                   .dbfile D:\桌面\mp3\SPI\spi.c
 0009                   .dbstruct 0 9 .1
 0009                   .dbfield 0 front c
 0009                   .dbfield 1 rear c
 0009                   .dbfield 2 count c
 0009                   .dbfield 3 data pc
 0009                   .dbfield 5 queuesize c
 0009                   .dbfield 6 errorcode c
 0009                   .dbfield 7 status c
 0009                   .dbfield 8 memo c
 0009                   .dbend
 0009                   .dbsym e Spi_Receive_Buffer _Spi_Receive_Buffer S[.1]
 0009           _Spi_Send_Buffer::
 0009                   .blkb 1
                        .area idata
 0009 00                .byte 0
                        .area data(ram, con, rel)
 000A                   .dbfile D:\桌面\mp3\SPI\spi.c
 000A                   .blkb 1
                        .area idata
 000A 00                .byte 0
                        .area data(ram, con, rel)
 000B                   .dbfile D:\桌面\mp3\SPI\spi.c
 000B                   .blkb 1
                        .area idata
 000B 00                .byte 0
                        .area data(ram, con, rel)
 000C                   .dbfile D:\桌面\mp3\SPI\spi.c
 000C                   .blkw 1
                        .area idata
 000C 0000              .word _Spi_Send_Data
                        .area data(ram, con, rel)
 000E                   .dbfile D:\桌面\mp3\SPI\spi.c
 000E                   .blkb 1
                        .area idata
 000E 0A                .byte 10
                        .area data(ram, con, rel)
 000F                   .dbfile D:\桌面\mp3\SPI\spi.c
 000F                   .blkb 1
                        .area idata
 000F 00                .byte 0
                        .area data(ram, con, rel)
 0010                   .dbfile D:\桌面\mp3\SPI\spi.c
 0010                   .blkb 1
                        .area idata
 0010 00                .byte 0
                        .area data(ram, con, rel)
 0011                   .dbfile D:\桌面\mp3\SPI\spi.c
 0011                   .blkb 1
                        .area idata
 0011 00                .byte 0
                        .area data(ram, con, rel)
 0012                   .dbfile D:\桌面\mp3\SPI\spi.c
 0012                   .dbsym e Spi_Send_Buffer _Spi_Send_Buffer S[.1]
                        .area vector(rom, abs)
                        .org 48
 0030 0C940000          jmp _spi_stc_isr
                        .area data(ram, con, rel)
 0012                   .dbfile D:\桌面\mp3\SPI\spi.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\桌面\mp3\SPI\spi.c
 0000                   .dbfunc e spi_stc_isr _spi_stc_isr fV
                        .even
 0000           _spi_stc_isr::
 0000 0E940000          xcall push_lset
 0004                   .dbline -1
 0004                   .dbline 63
 0004           ; /*********************************************************************************************************
 0004           ; **                                                                   SPI 驱动程序
 0004           ; **                                  (c) Copyright 2006-2008, limaokui
 0004           ; **                                           All Rights Reserved
 0004           ; **
 0004           ; **                                             V1.0.0
 0004           ; **
 0004           ; **
 0004           ; **--------------文件信息--------------------------------------------------------------------------------
 0004           ; **文   件   名:SPI.c
 0004           ; **创   建   人: 李茂奎
 0004           ; **最后修改日期:  2006年9月2日
 0004           ; **描        述:  SPI驱动程序
 0004           ; **
 0004           ; **--------------历史版本信息----------------------------------------------------------------------------
 0004           ; ** 创建人: 李茂奎
 0004           ; ** 版  本: V1.00
 0004           ; ** 日 期: 2006年9月2日
 0004           ; ** 描 述: 原始版本
 0004           ; **
 0004           ; **------------------------------------------------------------------------------------------------------
 0004           ; ** 修改人: 李茂奎
 0004           ; ** 版  本:
 0004           ; ** 日 期:
 0004           ; ** 描 述: 
 0004           ; **
 0004           ; **--------------当前版本修订------------------------------------------------------------------------------
 0004           ; ** 修改人:    李茂奎                                                                                                                                                                    
 0004           ; ** 日 期:     2006年9月2日
 0004           ; ** 描 述:   
 0004           ; **
 0004           ; **------------------------------------------------------------------------------------------------------
 0004           ; *********************************************************************************************************/
 0004           ; /*
 0004           ; ATmega128的SPI采用硬件方式实现面向字节的全双工3线同步通信,
 0004           ; 支持主机、从机和2种不同极性的SPI时序,通信速率有7种选择,
 0004           ; 主机方式的最高速率为1/2系统时钟,从机方式最高速率为1/4系统时钟。
 0004           ; 
 0004           ; AVR的SPI由一个16位的循环移位寄存器构成,当数据从主机方移出时,从机的数据同时也被移入,
 0004           ; 因此SPI的发送和接收在一个中断服务中完成。
 0004           ; 在SPI中断服务程序中,先从SPDR中读一个接收的字节存入接收数据缓冲器中,再从发送数据缓冲
 0004           ; 器取出一个字节写入SPDR中,由SPI发送到从机。
 0004           ; 数据一旦写入SPDR,ISP硬件开始发送数据。
 0004           ; 下一次ISP中断时,表示发送完成,并同时收到一个数据。
 0004           ; SPI为硬件接口和传输完成中断申请,所以使用SPI传输数据的有效方法是采用中断方式+数据缓存器的设计方法。
 0004           ; 
 0004           ; 在对SPI初始化时,应注意以下几点: 
 0004           ; .正确选择和设置主机或从机,以及工作模式(极性),数据传输率; 
 0004           ; .注意传送字节的顺序,是低位优先(LSB First)还是高位优先(MSB Frist); 
 0004           ; .正确设置MOSI和MISO接口的输入输出方向,输入引脚使用上拉电阻,可以节省总线上的吊高电阻。 
 0004           ; 
 0004           ; 
 0004           ; */
 0004           ; #include "config.h"
 0004           ; 
 0004           ; static uint8 Spi_Receive_Data[SPI_RECEIVE_DATA_BUFFER_SIZE];
 0004           ; static uint8 Spi_Send_Data[SPI_SEND_DATA_BUFFER_SIZE];
 0004           ; CirQueue Spi_Receive_Buffer={0,0,0,Spi_Receive_Data,SPI_RECEIVE_DATA_BUFFER_SIZE,0,0,0};
 0004           ; CirQueue Spi_Send_Buffer={0,0,0,Spi_Send_Data,SPI_SEND_DATA_BUFFER_SIZE,0,0,0};
 0004           ; 
 0004           ; #pragma interrupt_handler spi_stc_isr:iv_SPI_STC 
 0004           ; void spi_stc_isr(void) 
 0004           ; { 
 0004                   .dbline 64
 0004           ;    if(Spi_Receive_Buffer.status==SPI_DATA_RECEIVE)
 0004 80910700          lds R24,_Spi_Receive_Buffer+7
 0008 8130              cpi R24,1
 000A 29F4              brne L8
 000C                   .dbline 65
 000C           ;        EnQueue(&Spi_Receive_Buffer,SPDR); //从SPI口读出收到的字节 
 000C 2FB1              in R18,0xf
 000E 00E0              ldi R16,<_Spi_Receive_Buffer
 0010 10E0              ldi R17,>_Spi_Receive_Buffer
 0012 0E940000          xcall _EnQueue
 0016           L8:
 0016                   .dbline 66
 0016           ;    if (Spi_Send_Buffer.status==SPI_DATA_SEND) 
 0016 80911000          lds R24,_Spi_Send_Buffer+7
 001A 8230              cpi R24,2
 001C 69F4              brne L11
 001E                   .dbline 67
 001E           ;     { 
 001E                   .dbline 68
 001E           ;       if(!EmptyQueue(&Spi_Send_Buffer))//如果发送缓冲区中有待发的数据 
 001E 20900B00          lds R2,_Spi_Send_Buffer+2
 0022 2220              tst R2
 0024 31F0              breq L14
 0026                   .dbline 69
 0026           ;             {
 0026                   .dbline 70
 0026           ;                 SPDR = DeQueue(&Spi_Send_Buffer); //发送一个字节数据,并调整指针
 0026 00E0              ldi R16,<_Spi_Send_Buffer
 0028 10E0              ldi R17,>_Spi_Send_Buffer
 002A 0E940000          xcall _DeQueue
 002E 0FB9              out 0xf,R16
 0030                   .dbline 71
 0030           ;                 }
 0030 03C0              xjmp L15
 0032           L14:
 0032                   .dbline 73
 0032           ;         else 
 0032           ;             {
 0032                   .dbline 74
 0032           ;                 Spi_Send_Buffer.status=SPI_DATA_FREE;
 0032 2224              clr R2
 0034 20921000          sts _Spi_Send_Buffer+7,R2
 0038                   .dbline 75
 0038           ;                 }
 0038           L15:
 0038                   .dbline 76
 0038           L11:
 0038                   .dbline -2
 0038           L7:
 0038 0E940000          xcall pop_lset
 003C                   .dbline 0 ; func end
 003C 1895              reti
 003E                   .dbend
 003E                   .dbfunc e Spi_Get_Char _Spi_Get_Char fc
 003E           ;           data -> R20
                        .even
 003E           _Spi_Get_Char::
 003E 0E940000          xcall push_gset1
 0042                   .dbline -1
 0042                   .dbline 82
 0042           ;     } 
 0042           ; } 
 0042           ; 
 0042           ; 
 0042           ; 
 0042           ; uint8 Spi_Get_Char(void) 
 0042           ; { 
 0042           L19:
 0042                   .dbline 84
 0042           L20:
 0042                   .dbline 84
 0042           ;   uint8 data;
 0042           ;   while (EmptyQueue(&Spi_Receive_Buffer)); //无接收数据,等待 
 0042 20900200          lds R2,_Spi_Receive_Buffer+2
 0046 2220              tst R2
 0048 E1F3              breq L19
 004A                   .dbline 85
 004A           ;   data = DeQueue(&Spi_Receive_Buffer); //从接收缓冲区取出一个SPI收到的数据 
 004A 00E0              ldi R16,<_Spi_Receive_Buffer
 004C 10E0              ldi R17,>_Spi_Receive_Buffer
 004E 0E940000          xcall _DeQueue
 0052 402F              mov R20,R16
 0054                   .dbline 86
 0054           ;   return data; 
 0054                   .dbline -2
 0054           L18:
 0054 0E940000          xcall pop_gset1
 0058                   .dbline 0 ; func end
 0058 0895              ret
 005A                   .dbsym r data 20 c
 005A                   .dbend
 005A                   .dbfunc e Spi_Put_Char _Spi_Put_Char fV
 005A           ;              c -> R20
                        .even
 005A           _Spi_Put_Char::
 005A 0E940000          xcall push_gset1
 005E 402F              mov R20,R16
 0060                   .dbline -1
 0060                   .dbline 90
 0060           ; } 
 0060           ; 
 0060           ; void Spi_Put_Char(uint8 c) 
 0060           ; { 
 0060           L24:
 0060                   .dbline 91
 0060           L25:
 0060                   .dbline 91
 0060           ;   while (FullQueue(&Spi_Send_Buffer));//发送缓冲区满,等待 
 0060 20900E00          lds R2,_Spi_Send_Buffer+5
 0064 30900B00          lds R3,_Spi_Send_Buffer+2
 0068 3214              cp R3,R2
 006A D1F3              breq L24
 006C                   .dbline 92
 006C           ;   if (Spi_Send_Buffer.count)//发送缓冲区已中有待发数据 
 006C 3320              tst R3
 006E 31F0              breq L29
 0070                   .dbline 93
 0070           ;     { //或SPI正在发送数据时 
 0070                   .dbline 94
 0070           ;         EnQueue(&Spi_Send_Buffer,c);//将数据放入发送缓冲区排队 
 0070 242F              mov R18,R20
 0072 00E0              ldi R16,<_Spi_Send_Buffer
 0074 10E0              ldi R17,>_Spi_Send_Buffer
 0076 0E940000          xcall _EnQueue
 007A                   .dbline 95
 007A           ;     } 
 007A 01C0              xjmp L30
 007C           L29:
 007C                   .dbline 97
 007C 4FB9              out 0xf,R20
 007E           L30:
 007E                   .dbline -2
 007E           L23:
 007E 0E940000          xcall pop_gset1
 0082                   .dbline 0 ; func end
 0082 0895              ret
 0084                   .dbsym r c 20 c
 0084                   .dbend
 0084                   .dbfunc e Spi_Receive _Spi_Receive fc
 0084           ;              i -> R20,R21
 0084           ;         length -> R22,R23
 0084           ;         buffer -> R10,R11
                        .even
 0084           _Spi_Receive::
 0084 0E940000          xcall push_gset3
 0088 B901              movw R22,R18
 008A 5801              movw R10,R16
 008C                   .dbline -1

⌨️ 快捷键说明

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