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

📄 spi.lis

📁 该程序通过调试
💻 LIS
字号:
                        .module spi.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\无线传感器网络资料\cc2420驱动\测试1\RX\spi.c
 0000                   .dbfunc e init_spi _init_spi fV
 0000           ;           temp -> R16
                        .even
 0000           _init_spi::
 0000                   .dbline -1
 0000                   .dbline 21
 0000           ; /***************************************
 0000           ; *2008,浙江工业大学信息与控制研究所
 0000           ; *All rights reserved
 0000           ; *
 0000           ; *文件名称:SPI.c
 0000           ; *摘    要:SPI的子程序实现
 0000           ; *
 0000           ; *当前版本:1.1
 0000           ; *作    者:王微
 0000           ; *完成日期:2008.4.22
 0000           ; ****************************************/
 0000           ; 
 0000           ; #include"spi.h"
 0000           ; 
 0000           ; /*************************************************
 0000           ; 函数功能:初始化SPI口
 0000           ; 输入参数:无
 0000           ; 返回值:无
 0000           ; **************************************************/
 0000           ; void init_spi(void)
 0000           ; { 
 0000                   .dbline 23
 0000           ;     unsigned char temp;
 0000           ;       DDRB|=(1<<MOSI)|(1<<SCK)|(1<<CSn);//设置MOSI、SCK和SS 为输出,其他为输入 
 0000 87B3              in R24,0x17
 0002 8760              ori R24,7
 0004 87BB              out 0x17,R24
 0006                   .dbline 24
 0006           ;       DDRE|=(1<<VREGEN)|(1<<RST);
 0006 82B1              in R24,0x2
 0008 8C60              ori R24,12
 000A 82B9              out 0x2,R24
 000C                   .dbline 26
 000C           ; 
 000C           ;     SPCR = (1<<SPE)|(1<<MSTR);//|(1<<SPR0);// 使能SPI,主机模式,设置时钟速率为fck/4
 000C 80E5              ldi R24,80
 000E 8DB9              out 0xd,R24
 0010                   .dbline 27
 0010           ;       SPSR = BIT(SPI2X);     //SPI时钟加倍
 0010 81E0              ldi R24,1
 0012 8EB9              out 0xe,R24
 0014                   .dbline 29
 0014           ; 
 0014           ;     temp = SPSR; //!!! 读一次SPSR为了清除SPIF位和WCOL位
 0014 0EB1              in R16,0xe
 0016                   .dbline 31
 0016           ; 
 0016           ;     temp = SPDR; //清空SPI,和中断标志,使SPI空闲
 0016 0FB1              in R16,0xf
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbsym r temp 16 c
 001A                   .dbend
 001A                   .dbfunc e SpiWrite _SpiWrite fc
 001A           ;           temp -> R20
 001A           ;          temp1 -> R22
 001A           ;       data_spi -> R16
                        .even
 001A           _SpiWrite::
 001A 00D0              rcall push_gset2
 001C                   .dbline -1
 001C                   .dbline 40
 001C           ; }
 001C           ; 
 001C           ; /**************************************************
 001C           ; 函数功能:写SPI一个字节
 001C           ; 输入参数:SPI指令
 001C           ; 返回值:对应指令的结果
 001C           ; **************************************************/
 001C           ; unsigned char SpiWrite(unsigned char data_spi)
 001C           ; { 
 001C                   .dbline 42
 001C           ;   unsigned char temp,temp1;
 001C           ;   SPDR=data_spi;
 001C 0FB9              out 0xf,R16
 001E           L3:
 001E                   .dbline 43
 001E                   .dbline 43
 001E                   .dbline 43
 001E           L4:
 001E                   .dbline 43
 001E           ;   while(!(SPSR & (1<<SPIF))){;}//等待传输结束
 001E 779B              sbis 0xe,7
 0020 FECF              rjmp L3
 0022                   .dbline 44
 0022           ;   temp1=SPDR;
 0022 6FB1              in R22,0xf
 0024                   .dbline 45
 0024           ;   temp = SPSR;
 0024 4EB1              in R20,0xe
 0026                   .dbline 47
 0026           ;   
 0026           ;   return temp1;
 0026 062F              mov R16,R22
 0028                   .dbline -2
 0028           L2:
 0028 00D0              rcall pop_gset2
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbsym r temp 20 c
 002C                   .dbsym r temp1 22 c
 002C                   .dbsym r data_spi 16 c
 002C                   .dbend
 002C                   .dbfunc e enable_spi _enable_spi fV
                        .even
 002C           _enable_spi::
 002C                   .dbline -1
 002C                   .dbline 57
 002C           ; }
 002C           ; 
 002C           ; /*******************************************
 002C           ; *函数功能:使能SPI口
 002C           ; *输入参数:无
 002C           ; *输出参数:无
 002C           ; *返 回 值:无
 002C           ; ********************************************/
 002C           ; void enable_spi(void) 
 002C           ; {
 002C                   .dbline 58
 002C           ;   PORTB &=~(1<<CSn);     //使能SPI口
 002C C098              cbi 0x18,0
 002E                   .dbline -2
 002E           L6:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbend
 0030                   .dbfunc e disable_spi _disable_spi fV
                        .even
 0030           _disable_spi::
 0030                   .dbline -1
 0030                   .dbline 68
 0030           ; }
 0030           ; 
 0030           ; /*******************************************
 0030           ; *函数功能:禁止SPI口
 0030           ; *输入参数:无
 0030           ; *输出参数:无
 0030           ; *返 回 值:无
 0030           ; ********************************************/
 0030           ; void disable_spi(void)
 0030           ; {
 0030                   .dbline 69
 0030           ;   PORTB |=(1<<CSn);      //禁止SPI口  
 0030 C09A              sbi 0x18,0
 0032                   .dbline -2
 0032           L7:
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbend

⌨️ 快捷键说明

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