📄 spi.lis
字号:
.module SPI.c
.area text(rom, con, rel)
0000 .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\SPI.c
0000 .dbfunc e init_spi _init_spi fV
0000 ; temp -> R16
.even
0000 _init_spi::
0000 .dbline -1
0000 .dbline 23
0000 ; /***************************************
0000 ; *2008,浙江工业大学信息与控制研究所
0000 ; *All rights reserved
0000 ; *
0000 ; *文件名称:SPI.c
0000 ; *摘 要:SPI的子程序实现
0000 ; *
0000 ; *当前版本:1.1
0000 ; *作 者:王微
0000 ; *完成日期:2008.4.22
0000 ; ****************************************/
0000 ; #include<iom128v.h>
0000 ; #include<macros.h>
0000 ; #include"nrf.h"
0000 ; #include"spi.h"
0000 ;
0000 ; /*************************************************
0000 ; 函数功能:初始化SPI口
0000 ; 输入参数:无
0000 ; 返回值:无
0000 ; **************************************************/
0000 ; void init_spi()
0000 ; {
0000 .dbline 25
0000 ; unsigned char temp;
0000 ; DDRB|=(1<<MOSI)|(1<<SCK)|(1<<TRX_CE);//设置MOSI、SCK和SS 为输出,其他为输入
0000 87B3 in R24,0x17
0002 8760 ori R24,7
0004 87BB out 0x17,R24
0006 .dbline 26
0006 ; DDRE|=(1<<CSN)|(1<<PWR_UP)|(1<<TX_EN);//设置端口E的1,2,3引脚为输出引脚
0006 82B1 in R24,0x2
0008 8E60 ori R24,14
000A 82B9 out 0x2,R24
000C .dbline 28
000C ;
000C ; SPCR = (1<<SPE)|(1<<MSTR);//|(1<<SPR0);// 使能SPI,主机模式,设置时钟速率为fck/4
000C 80E5 ldi R24,80
000E 8DB9 out 0xd,R24
0010 .dbline 29
0010 ; SPSR = BIT(SPI2X); //SPI时钟加倍
0010 81E0 ldi R24,1
0012 8EB9 out 0xe,R24
0014 .dbline 31
0014 ;
0014 ; temp = SPSR; //!!! 读一次SPSR为了清除SPIF位和WCOL位
0014 0EB1 in R16,0xe
0016 .dbline 33
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,R21
001A ; data_spi -> R16
.even
001A _SpiWrite::
001A 0E940000 xcall push_gset1
001E .dbline -1
001E .dbline 42
001E ; }
001E ;
001E ; /**************************************************
001E ; 函数功能:写SPI一个字节
001E ; 输入参数:SPI指令
001E ; 返回值:对应指令的结果
001E ; **************************************************/
001E ; unsigned char SpiWrite(unsigned char data_spi)
001E ; {
001E .dbline 44
001E ; unsigned temp;
001E ; SPDR=data_spi;
001E 0FB9 out 0xf,R16
0020 L3:
0020 .dbline 45
0020 .dbline 45
0020 .dbline 45
0020 L4:
0020 .dbline 45
0020 ; while(!(SPSR & (1<<SPIF))){;}//等待传输结束
0020 779B sbis 0xe,7
0022 FECF rjmp L3
0024 .dbline 46
0024 ; temp=SPDR;
0024 4FB1 in R20,0xf
0026 5527 clr R21
0028 .dbline 47
0028 ; return temp;
0028 042F mov R16,R20
002A .dbline -2
002A L2:
002A 0E940000 xcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r temp 20 i
0030 .dbsym r data_spi 16 c
0030 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -