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

📄 fr_driver.asm

📁 PTR8000的一个调试程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.PUBLIC _FR_W
_FR_W:
//	PUSH BP TO [SP]                     //提取参数到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]                  //保护现场
	
	r2 = [Port_Data]					//注意,所有输入操作全是Buffer寄存器
	r2 = r2|SCK                         //设置SCK为高电平            
	r3 = r2&(~SCK)                      //r2为SCK的高电平为,r3为SCK的低电平
	r4 = 8								//R4置8,循环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					  //写入一个位
	//call delay
	r4 = r4-1
	jnz ?loopw

	pop r2,r5 from [sp]                   //恢复现场
    retf
//========================================================
//	汇编格式:	_CLR
//	C格式:		void CLR(unsigned int)
//	实现功能:	位置清零
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:r1
//========================================================
.PUBLIC _CLR
_CLR:
    PUSH BP TO [SP]                     //提取参数到R1
	BP = SP + 1
	R1 = [BP+3]
	POP BP FROM [SP]
	
	push r2 to [sp]                     //保护现场
	
	r2 = [Port_Data]					//读取DATA值(仅是一位)
	r1^=0xffff                          //置反
	r1&=r2
                                        //位置清零    
	[Port_Data] = r1                    //把数据返回端口
	
	pop r2 from [sp]                    //恢复现场
	retf
    
//========================================================
//	汇编格式:	_SET
//	C格式:		void SET(unsigned int)
//	实现功能:	位置置一
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:r1
//========================================================
.PUBLIC _SET
_SET:
    PUSH BP TO [SP]                     //提取参数到R1
	BP = SP + 1
	R1 = [BP+3]
	POP BP FROM [SP]
	
	push r2 to [sp]                     //保护现场
	
	r2 = [Port_Data]					//读取DATA值(仅是一位)
	r1|=r2                              //位置置一
	[Port_Data] = r1                    //把数据返回端口
	
	pop r2 from [sp]                    //恢复现场
	retf

//========================================================
//	汇编格式:	_FR_DataReady
//	C格式:		unsigned int FR_DataReady(void)
//	实现功能:	数据准备好了或者数据发送完成了,循环等待数据完成
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器: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    
 
//待机模式   
.public _FR_StandBy
_FR_StandBy:
    r1 = [Port_Data]
    r1|=(PWR+TXEN)
    r1&=~TRX_EN
    [Port_Data]=r1
    
    retf
    
//发射模式    
.public _FR_TxOn
_FR_TxOn:
    r1=[Port_Data]
    r1|=(PWR+TXEN+TRX_EN)
    [Port_Data]=r1

    retf

//开始启动发送   
.public _FR_TxSend
_FR_TxSend:
    r1=[Port_Data]
    r1|=TRX_EN         //TRX_EN置一
    [Port_Data]=r1
    //call _FR_DataReady //检测数据是否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        //发射+10dBm,发射频率433MHz,中心频率第9位=0
    call _FR_W    
    r1=TX_AFW_4BYTE | RX_AFW_4BYTE            //接收地址宽度4字节,发送地址宽度4字节
    call _FR_W 
    r1=RX_PW_32BYTE                           //接收数据宽度32字节
    call _FR_W
    r1=TX_PW_32BYTE                           //发送数据宽度32字节
    call _FR_W
    r1=RX_ADDRESS_0                           //接收有效地址第1字节
    call _FR_W
    r1=RX_ADDRESS_1                           //接收有效地址第2字节
    call _FR_W
    r1=RX_ADDRESS_2                           //接收有效地址第3字节
    call _FR_W
    r1=RX_ADDRESS_3                           //接收有效地址第4字节
    call _FR_W
    r1=CRC16_EN | XOF_16MHz                   //CRC16模式使能,晶体振荡器频率16MHz
    call _FR_W
    
    r1=[Port_Data]
    r1|=CSN                                   // Spi 片选关
    [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字节
    call _FR_W
    r1=TX_ADDRESS_1                           //接收有效地址第2字节
    call _FR_W
    r1=TX_ADDRESS_2                           //接收有效地址第3字节
    call _FR_W
    r1=TX_ADDRESS_3                           //接收有效地址第4字节
    call _FR_W
    
    r1=[Port_Data]
    r1|=CSN                                   // Spi 片选关
    [Port_Data]=r1
    
    retf
    
//写入发送的内容
   
.PUBLIC _FR_SetData
_FR_SetData:
    PUSH BP TO [SP]                           //提取参数到R1
 	BP = SP + 1
 	R1 = [BP+3]
 	POP BP FROM [SP]
 	
 	PUSH R2 TO [SP]                           //保护R2内容
 	R2=R1                                     //参数转移到R2
 	
    r1=[Port_Data]
    r1&=~CSN                                  // Spi 片选开
    [Port_Data]=r1
    
    r1=WTP                                    //写TxPayload  
    call _FR_W
    r1=r2                                     //这里的R2是要传送的参数
    call _FR_W
    
    r1=[Port_Data]
    r1|=CSN                                   // Spi 片选关
    [Port_Data]=r1
    
    retf
    
//读出接收到的数据    
.public _FR_ReadData
_FR_ReadData:
    push r2 to [sp]                           //保护现场
    
    r1=[Port_Data]
    r1&=~CSN                                  // Spi 片选开
    [Port_Data]=r1
    
    call _FR_DataReady                        //等待数据准备完毕
    
    r1=RRP                                    //读RxPayload 
    call _FR_W
    call _FR_R                                //开始真正读数据,数据读到R1里面
    r2=r1                                     //数据传到R2里面
    
    r1=[Port_Data]
    r1|=CSN                                   // Spi 片选关
    [Port_Data]=r1
    
    r1=r2                                     //数据恢复到r1
    
    pop r2 from [sp]                          //恢复现场
    retf    

⌨️ 快捷键说明

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