?? spi.lis
字號(hào):
.module spi.c
.area text(rom, con, rel)
0000 .dbfile E:\無線傳感器網(wǎng)絡(luò)資料\cc2420驅(qū)動(dòng)\測(cè)試1\code\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,浙江工業(yè)大學(xué)信息與控制研究所
0000 ; *All rights reserved
0000 ; *
0000 ; *文件名稱:SPI.c
0000 ; *摘 要:SPI的子程序?qū)崿F(xiàn)
0000 ; *
0000 ; *當(dāng)前版本:1.1
0000 ; *作 者:王微
0000 ; *完成日期:2008.4.22
0000 ; ****************************************/
0000 ;
0000 ; #include"spi.h"
0000 ;
0000 ; /*************************************************
0000 ; 函數(shù)功能:初始化SPI口
0000 ; 輸入?yún)?shù):無
0000 ; **************************************************/
0000 ; void init_spi(void)
0000 ; {
0000 .dbline 23
0000 ; unsigned char temp;
0000 ; DDRB|=(1<<MOSI)|(1<<SCK)|(1<<CSn);//設(shè)置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,主機(jī)模式,設(shè)置時(shí)鐘速率為fck/4
000C 80E5 ldi R24,80
000E 8DB9 out 0xd,R24
0010 .dbline 27
0010 ; SPSR = BIT(SPI2X); //SPI時(shí)鐘加倍
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,和中斷標(biāo)志,使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 0E940000 xcall push_gset2
001E .dbline -1
001E .dbline 40
001E ; }
001E ;
001E ; /**************************************************
001E ; 函數(shù)功能:寫SPI一個(gè)字節(jié)
001E ; 輸入?yún)?shù):SPI指令
001E ; 返回值:對(duì)應(yīng)指令的結(jié)果
001E ; **************************************************/
001E ; unsigned char SpiWrite(unsigned char data_spi)
001E ; {
001E .dbline 42
001E ; unsigned char temp,temp1;
001E ; SPDR=data_spi;
001E 0FB9 out 0xf,R16
0020 L3:
0020 .dbline 43
0020 .dbline 43
0020 .dbline 43
0020 L4:
0020 .dbline 43
0020 ; while(!(SPSR & (1<<SPIF))){;}//等待傳輸結(jié)束
0020 779B sbis 0xe,7
0022 FECF rjmp L3
0024 .dbline 44
0024 ; temp1=SPDR;
0024 6FB1 in R22,0xf
0026 .dbline 45
0026 ; temp = SPSR;
0026 4EB1 in R20,0xe
0028 .dbline 47
0028 ;
0028 ; return temp1;
0028 062F mov R16,R22
002A .dbline -2
002A L2:
002A 0E940000 xcall pop_gset2
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r temp 20 c
0030 .dbsym r temp1 22 c
0030 .dbsym r data_spi 16 c
0030 .dbend
0030 .dbfunc e enable_spi _enable_spi fV
.even
0030 _enable_spi::
0030 .dbline -1
0030 .dbline 57
0030 ; }
0030 ;
0030 ; /*******************************************
0030 ; *函數(shù)功能:使能SPI口
0030 ; *輸入?yún)?shù):無
0030 ; *輸出參數(shù):無
0030 ; *返 回 值:無
0030 ; ********************************************/
0030 ; void enable_spi(void)
0030 ; {
0030 .dbline 58
0030 ; PORTB &=~(1<<CSn); //使能SPI口
0030 C098 cbi 0x18,0
0032 .dbline -2
0032 L6:
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbend
0034 .dbfunc e disable_spi _disable_spi fV
.even
0034 _disable_spi::
0034 .dbline -1
0034 .dbline 68
0034 ; }
0034 ;
0034 ; /*******************************************
0034 ; *函數(shù)功能:禁止SPI口
0034 ; *輸入?yún)?shù):無
0034 ; *輸出參數(shù):無
0034 ; *返 回 值:無
0034 ; ********************************************/
0034 ; void disable_spi(void)
0034 ; {
0034 .dbline 69
0034 ; PORTB |=(1<<CSn); //禁止SPI口
0034 C09A sbi 0x18,0
0036 .dbline -2
0036 L7:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbend
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -