?? fr_driver.asm
字號(hào):
.PUBLIC _FR_W
_FR_W:
// PUSH BP TO [SP] //提取參數(shù)到R1
// BP = SP + 1
// R1 = [BP+3]
// POP BP FROM [SP]
r1 = r1 lsl 4
r1 = r1 lsl 4 //把低八位左移到高八位
r1 = r1&0xff00 //屏蔽掉低八位
push r2,r5 to [sp] //保護(hù)現(xiàn)場(chǎng)
r2 = [Port_Data] //注意,所有輸入操作全是Buffer寄存器
r2 = r2|SCK //設(shè)置SCK為高電平
r3 = r2&(~SCK) //r2為SCK的高電平為,r3為SCK的低電平
r4 = 8 //R4置8,循環(huán)8次
?loopw:
r5 = r1&0x8000 //取最高位給R5
r1 = r1 lsl 1 //R1左移一位
test r5,0x8000
jz ?FR_DL
r5 = [Port_Data]
r5 = r5|MOSI //MOSI置1
jmp ?write
?FR_DL:
r5 = [Port_Data] //獲取端口信息
r5 = r5&(~MOSI) //把MOSI位置0
?write:
[Port_Data] = r2 //CLK置高
nop
[Port_Data] = r3 //CLK置低
[Port_Data] = r5 //寫入一個(gè)位
//call delay
r4 = r4-1
jnz ?loopw
pop r2,r5 from [sp] //恢復(fù)現(xiàn)場(chǎng)
retf
//========================================================
// 匯編格式: _CLR
// C格式: void CLR(unsigned int)
// 實(shí)現(xiàn)功能: 位置清零
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器:r1
//========================================================
.PUBLIC _CLR
_CLR:
PUSH BP TO [SP] //提取參數(shù)到R1
BP = SP + 1
R1 = [BP+3]
POP BP FROM [SP]
push r2 to [sp] //保護(hù)現(xiàn)場(chǎng)
r2 = [Port_Data] //讀取DATA值(僅是一位)
r1^=0xffff //置反
r1&=r2
//位置清零
[Port_Data] = r1 //把數(shù)據(jù)返回端口
pop r2 from [sp] //恢復(fù)現(xiàn)場(chǎng)
retf
//========================================================
// 匯編格式: _SET
// C格式: void SET(unsigned int)
// 實(shí)現(xiàn)功能: 位置置一
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器:r1
//========================================================
.PUBLIC _SET
_SET:
PUSH BP TO [SP] //提取參數(shù)到R1
BP = SP + 1
R1 = [BP+3]
POP BP FROM [SP]
push r2 to [sp] //保護(hù)現(xiàn)場(chǎng)
r2 = [Port_Data] //讀取DATA值(僅是一位)
r1|=r2 //位置置一
[Port_Data] = r1 //把數(shù)據(jù)返回端口
pop r2 from [sp] //恢復(fù)現(xiàn)場(chǎng)
retf
//========================================================
// 匯編格式: _FR_DataReady
// C格式: unsigned int FR_DataReady(void)
// 實(shí)現(xiàn)功能: 數(shù)據(jù)準(zhǔn)備好了或者數(shù)據(jù)發(fā)送完成了,循環(huán)等待數(shù)據(jù)完成
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器:r1
//========================================================
.PUBLIC _FR_DataReady
_FR_DataReady:
loopr:
push r2 to [sp]
r2=1
[P_WatchDog_Clear]=r2
r1 = [Port_Data]
r1 = r1&DR
cmp r1,DR
jnz loopr
pop r2 from [sp]
retf
//待機(jī)模式
.public _FR_StandBy
_FR_StandBy:
r1 = [Port_Data]
r1|=(PWR+TXEN)
r1&=~TRX_EN
[Port_Data]=r1
retf
//發(fā)射模式
.public _FR_TxOn
_FR_TxOn:
r1=[Port_Data]
r1|=(PWR+TXEN+TRX_EN)
[Port_Data]=r1
retf
//開始啟動(dòng)發(fā)送
.public _FR_TxSend
_FR_TxSend:
r1=[Port_Data]
r1|=TRX_EN //TRX_EN置一
[Port_Data]=r1
//call _FR_DataReady //檢測(cè)數(shù)據(jù)是否OK
r1=[Port_Data]
r1&=~TRX_EN
[Port_Data]=r1 //TRX_EN置零
retf
//接收模式開啟
.public _FR_RxOn
_FR_RxOn:
r1=[Port_Data]
r1|=(PWR+TRX_EN)
r1&=~TXEN
[Port_Data]=r1
retf
//配置FR
.public _FR_Config
_FR_Config:
r1=[Port_Data]
r1&=~CSN // Spi 片選開
[Port_Data]=r1
r1=WC // 寫配置命令
call _FR_W
r1=CH_NO_BYTE //中心頻率低8位
call _FR_W
r1=PA_PWR_10dBm | HFREQ_PLL_433MHz //發(fā)射+10dBm,發(fā)射頻率433MHz,中心頻率第9位=0
call _FR_W
r1=TX_AFW_4BYTE | RX_AFW_4BYTE //接收地址寬度4字節(jié),發(fā)送地址寬度4字節(jié)
call _FR_W
r1=RX_PW_32BYTE //接收數(shù)據(jù)寬度32字節(jié)
call _FR_W
r1=TX_PW_32BYTE //發(fā)送數(shù)據(jù)寬度32字節(jié)
call _FR_W
r1=RX_ADDRESS_0 //接收有效地址第1字節(jié)
call _FR_W
r1=RX_ADDRESS_1 //接收有效地址第2字節(jié)
call _FR_W
r1=RX_ADDRESS_2 //接收有效地址第3字節(jié)
call _FR_W
r1=RX_ADDRESS_3 //接收有效地址第4字節(jié)
call _FR_W
r1=CRC16_EN | XOF_16MHz //CRC16模式使能,晶體振蕩器頻率16MHz
call _FR_W
r1=[Port_Data]
r1|=CSN // Spi 片選關(guān)
[Port_Data]=r1
retf
//掉電模式 PwrDown
.public _FR_Off
_FR_Off:
r1=[Port_Data]
r1&=~PWR
[Port_Data]=r1
retf
//寫Tx地址
.public _FR_SetTxAddr
_FR_SetTxAddr:
r1=[Port_Data]
r1&=~CSN // Spi 片選開
[Port_Data]=r1
r1=WTA //寫Tx地址的命令
call _FR_W
r1=TX_ADDRESS_0 //接收有效地址第1字節(jié)
call _FR_W
r1=TX_ADDRESS_1 //接收有效地址第2字節(jié)
call _FR_W
r1=TX_ADDRESS_2 //接收有效地址第3字節(jié)
call _FR_W
r1=TX_ADDRESS_3 //接收有效地址第4字節(jié)
call _FR_W
r1=[Port_Data]
r1|=CSN // Spi 片選關(guān)
[Port_Data]=r1
retf
//寫入發(fā)送的內(nèi)容
.PUBLIC _FR_SetData
_FR_SetData:
PUSH BP TO [SP] //提取參數(shù)到R1
BP = SP + 1
R1 = [BP+3]
POP BP FROM [SP]
PUSH R2 TO [SP] //保護(hù)R2內(nèi)容
R2=R1 //參數(shù)轉(zhuǎn)移到R2
r1=[Port_Data]
r1&=~CSN // Spi 片選開
[Port_Data]=r1
r1=WTP //寫TxPayload
call _FR_W
r1=r2 //這里的R2是要傳送的參數(shù)
call _FR_W
r1=[Port_Data]
r1|=CSN // Spi 片選關(guān)
[Port_Data]=r1
retf
//讀出接收到的數(shù)據(jù)
.public _FR_ReadData
_FR_ReadData:
push r2 to [sp] //保護(hù)現(xiàn)場(chǎng)
r1=[Port_Data]
r1&=~CSN // Spi 片選開
[Port_Data]=r1
call _FR_DataReady //等待數(shù)據(jù)準(zhǔn)備完畢
r1=RRP //讀RxPayload
call _FR_W
call _FR_R //開始真正讀數(shù)據(jù),數(shù)據(jù)讀到R1里面
r2=r1 //數(shù)據(jù)傳到R2里面
r1=[Port_Data]
r1|=CSN // Spi 片選關(guān)
[Port_Data]=r1
r1=r2 //數(shù)據(jù)恢復(fù)到r1
pop r2 from [sp] //恢復(fù)現(xiàn)場(chǎng)
retf
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -