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

📄 fr_driver.asm

📁 PTR8000的一个调试程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
//============================================================
//	文件名称:	FR_Driver.asm
//	功能描述:	FR底层驱动程序
//	维护记录:	2006-8-15	v1.0		Edit by 两蚊鸡 
//============================================================

//=========================================================================
//标准定义
//=========================================================================
	.DEFINE		P_IOA_Data				0x7000
	.DEFINE		P_IOA_Buffer			0x7001
	.DEFINE		P_IOA_Dir				0x7002
	.DEFINE		P_IOA_Attrib			0x7003
	.DEFINE		P_IOA_Latch				0x7004

	.DEFINE		P_IOB_Data				0x7005
	.DEFINE		P_IOB_Buffer			0x7006
	.DEFINE		P_IOB_Dir				0x7007
	.DEFINE		P_IOB_Attrib			0x7008
	.DEFINE     P_WatchDog_Clear        0x7012
//**************************************************************************	
// 定义用于与FR接口的端口是哪一组,便于修改端口
    .DEFINE	Port_Data	P_IOB_Data
    .DEFINE Port_Buffer	P_IOB_Buffer
    .DEFINE Port_Dir	P_IOB_Dir
    .DEFINE	Port_Attrib	P_IOB_Attrib    
//=================================================================
//端口定义:
//  IOB0  TXEN   输出口   
//  IOB1  TRX_EN 输出口    
//  IOB2  PWR    输出口    
//
//  IOB3  CSN    输出口    低电位有效
//  IOB4  SCK    输出口    
//  IOB5  MOSI   输出口   
//  IOB6  MISO   输入口
//
//  IOB7  CD     输入口
//  IOB8  AM     输入口
//  IOB9  DR     输入口
//
//========================================================================
    .DEFINE TXEN     0x0100//0x0001
    .DEFINE TRX_EN   0x0001//0x0002
    .DEFINE PWR      0x0200// 0x0004

    .DEFINE CSN      0x2000//0x0008
    .DEFINE SCK      0x0010//0x0010
    .DEFINE MOSI     0x1000//0x0020
    .DEFINE MISO     0x0008//0x0040

    .DEFINE CD       0x0400//0x0080
    .DEFINE AM       0x0004//0x0100
    .DEFINE DR       0x0800//0x0200

//============================================================
//PTR8000 命令配置
//============================================================
    .DEFINE WC        0x00            // 写配置寄存器 Write configuration register command
    .DEFINE RC        0x10            // 读配置寄存器 Read  configuration register command
    .DEFINE WTP       0x20            // 写TX有效数据 Write TX Payload  command
    .DEFINE RTP       0x21            // 读TX有效数据 Read  TX Payload  command
    .DEFINE WTA       0x22            // 写TX地址     Write TX Address  command
    .DEFINE RTA       0x23            // 读TX地址     Read  TX Address  command
    .DEFINE RRP       0x24            // 读RX有效数据 Read  RX Payload  command
    
//=================================================================
//PTR8000配置寄存器宏定义
//PTR8000配置寄存器
//工作频率f=(422.4+CH_NO/10)*(1+HFREQ_PLL)MHz
//=================================================================
    .DEFINE RX_ADDRESS           0x00000001               //接收有效地址(本方)
    .DEFINE TX_ADDRESS           0x12345678               //发送有效地址(对方)

    .DEFINE CH_NO_FREQ_422_4MHz  0x000                     //工作频率422.4MHz(433MHz频段最低频率)
    .DEFINE CH_NO_FREQ_422_5MHz  0x001                     //工作频率422.5MHz
    .DEFINE CH_NO_FREQ_425_0MHz  0x01a                     //工作频率425.0MHz
    .DEFINE CH_NO_FREQ_427_5MHz  0x033                     //工作频率427.5MHz

    .DEFINE CH_NO_FREQ_430_0MHz  0x04c                     //工作频率430.0MHz
    .DEFINE CH_NO_FREQ_433_0MHz  0x06a                     //工作频率433.0MHz(433MHz频段基准频率)
    .DEFINE CH_NO_FREQ_433_1MHz  0x06b                     //工作频率433.1MHz
    .DEFINE CH_NO_FREQ_433_2MHz  0x06c                     //工作频率433.2MHz
    .DEFINE CH_NO_FREQ_434_7MHz  0x07b                     //工作频率434.7MHz
    .DEFINE CH_NO_FREQ_473_5MHz  0x1ff                     //工作频率473.5MHz(433MHz频段最高频率)

    .DEFINE CH_NO_FREQ_844_8MHz  0x000                     //工作频率844.8MHz(868MHz频段最低频率)

    .DEFINE CH_NO_FREQ_862_0MHz  0x056                     //工作频率862.0MHz
    .DEFINE CH_NO_FREQ_868_0MHz  0x074                     //工作频率868.0MHz(868MHz频段基准频率)
    .DEFINE CH_NO_FREQ_868_2MHz  0x075                     //工作频率868.2MHz
    .DEFINE CH_NO_FREQ_868_4MHz  0x076                     //工作频率868.4MHz
    .DEFINE CH_NO_FREQ_869_8MHz  0x07d                     //工作频率869.8MHz
    .DEFINE CH_NO_FREQ_895_8MHz  0x0ff                     //工作频率895.8MHz
    .DEFINE CH_NO_FREQ_896_0MHz  0x100                     //工作频率896.0MHz
    .DEFINE CH_NO_FREQ_900_0MHz  0x114                     //工作频率900.0MHz
    .DEFINE CH_NO_FREQ_902_2MHz  0x11f                     //工作频率902.2MHz
    .DEFINE CH_NO_FREQ_902_4MHz  0x120                     //工作频率902.4MHz
    .DEFINE CH_NO_FREQ_915_0MHz  0x15f                     //工作频率915.0MHz(915MHz频段基准频率)
    .DEFINE CH_NO_FREQ_927_8MHz  0x19f                     //工作频率927.8MHz

    .DEFINE CH_NO_FREQ_947_0MHz  0x1ff                     //工作频率947.0MHz(915MHz频段最高频率)

    .DEFINE CH_NO_FREQ           CH_NO_FREQ_430_0MHz       //工作频率433.0MHz


    .DEFINE CH_NO_BYTE           CH_NO_FREQ & 0xff         //工作频率低8位       Byte0       01101100

    .DEFINE AUTO_RETRAN          0x20                      //重发数据包          Byte1.5     0
    .DEFINE RX_RED_PWR           0x10                      //接收低功耗模式      Byte1.4     0
    .DEFINE PA_PWR__10dBm        0x00                      //输出功率-10dBm      Byte1.3~2   00
    .DEFINE PA_PWR_2dBm          0x04                      //输出功率+2dBm       Byte1.3~2
    .DEFINE PA_PWR_6dBm          0x08                      //输出功率+6dBm       Byte1.3~2
    .DEFINE PA_PWR_10dBm         0x0c                      //输出功率+10dBm      Byte1.3~2   
    .DEFINE HFREQ_PLL_433MHz     0x00                      //工作在433MHz频段    Byte1.1     0
    .DEFINE HFREQ_PLL_868MHz     0x02                      //工作在868MHz频段    Byte1.1
    .DEFINE HFREQ_PLL_915MHz     0x02                      //工作在915MHz频段    Byte1.1
    .DEFINE CH_NO_BIT8           CH_NO_FREQ >> 8           //工作频率第9位       Byte1.0     0

    .DEFINE TX_AFW_1BYTE         1 * 16                    //发送地址宽度1字节   Byte2.7~4
    .DEFINE TX_AFW_2BYTE         2 * 16                    //发送地址宽度2字节   Byte2.7~4
    .DEFINE TX_AFW_3BYTE         3 * 16                    //发送地址宽度3字节   Byte2.7~4
    .DEFINE TX_AFW_4BYTE         4 * 16                    //发送地址宽度4字节   Byte2.7~4   100
    .DEFINE RX_AFW_1BYTE         1                         //接收地址宽度1字节   Byte2.3~0
    .DEFINE RX_AFW_2BYTE         2                         //接收地址宽度2字节   Byte2.3~0
    .DEFINE RX_AFW_3BYTE         3                         //接收地址宽度3字节   Byte2.3~0
    .DEFINE RX_AFW_4BYTE         4                         //接收地址宽度4字节   Byte2.3~0   100

    .DEFINE RX_PW_1BYTE          1                         //接收数据宽度1字节   Byte3.5~0
    .DEFINE RX_PW_32BYTE         32                        //接收数据宽度32字节  Byte3.5~0   00100000
    .DEFINE TX_PW_1BYTE          1                         //发送数据宽度1字节   Byte4.5~0 
    .DEFINE TX_PW_32BYTE         32                        //发送数据宽度32字节  Byte4.5~0   00100000

    .DEFINE RX_ADDRESS_0         RX_ADDRESS >> 24          //接收有效地址第1字节 Byte5       11100111
    .DEFINE RX_ADDRESS_1         (RX_ADDRESS >> 16) & 0xff //接收有效地址第2字节 Byte6       11100111 
    .DEFINE RX_ADDRESS_2         (RX_ADDRESS >> 8) & 0xff  //接收有效地址第3字节 Byte7       11100111
    .DEFINE RX_ADDRESS_3         RX_ADDRESS & 0xff         //接收有效地址第4字节 Byte8       11100111
       
    .DEFINE CRC_MODE_16BIT       0x80                      //CRC16模式           Byte9.7     1
    .DEFINE CRC_MODE_8BIT        0x00                      //CRC8模式            Byte9.7     
    .DEFINE CRC_EN               0x40                      //CRC使能             Byte9.6     1
    .DEFINE CRC16_EN             0xc0                      //CRC16模式使能       Byte9.7~6   11
    .DEFINE CRC8_EN              0x40                      //CRC8模式使能        Byte9.7~6
    .DEFINE XOF_20MHz            0x20                      //晶体振荡器频率20MHz Byte9.5~3
    .DEFINE XOF_16MHz            0x18                      //晶体振荡器频率16MHz Byte9.5~3   100
    .DEFINE XOF_12MHz            0x10                      //晶体振荡器频率12MHz Byte9.5~3
    .DEFINE XOF_8MHz             0x08                      //晶体振荡器频率8MHz  Byte9.5~3
    .DEFINE XOF_4MHz             0x00                      //晶体振荡器频率4MHz  Byte9.5~3
    .DEFINE UP_CLK_EN            0x40                      //输出时钟使能        Byte9.2     1
    .DEFINE UP_CLK_FREQ_500kHz   0x03                      //输出时钟频率500kHz  Byte9.1~0   11
    .DEFINE UP_CLK_FREQ_1MHz     0x02                      //输出时钟频率1MHz    Byte9.1~0
    .DEFINE UP_CLK_FREQ_2MHz     0x01                      //输出时钟频率2MHz    Byte9.1~0
    .DEFINE UP_CLK_FREQ_4MHz     0x00                      //输出时钟频率4MHz    Byte9.1~0

    .DEFINE UP_CLK_EN_500kHz     0x43                      //输出时钟频率500kHz  Byte9.2~0   111
    .DEFINE UP_CLK_EN_1MHz       0x42                      //输出时钟频率1MHz    Byte9.2~0
    .DEFINE UP_CLK_EN_2MHz       0x41                      //输出时钟频率2MHz    Byte9.2~0
    .DEFINE UP_CLK_EN_4MHz       0x40                      //输出时钟频率4MHz    Byte9.2~0

    .DEFINE TX_ADDRESS_0         TX_ADDRESS >> 24          //发送有效地址第1字节
    .DEFINE TX_ADDRESS_1         (TX_ADDRESS >> 16) & 0xff //发送有效地址第2字节
    .DEFINE TX_ADDRESS_2         (TX_ADDRESS >> 8) & 0xff  //发送有效地址第3字节
    .DEFINE TX_ADDRESS_3         TX_ADDRESS & 0xff         //发送有效地址第4字节

.CODE
//========================================================
//	汇编格式:	_FR_Portini
//	C格式:		void FR_Portini(void)
//	实现功能:	初始化端口
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:r1
//            
//    TXEN    110
//    TRX_EN  110
//    PWR     110
//
//    CSN     111
//    SCK     110
//    MOSI    110
//    MISO    000
//
//    CD      000
//    AM      000
//    DR      000
//========================================================
.public delay1
delay1:
    push r2,r3 to [sp]
    r2=10
    nop
    nop
    nop
    nop
    r2=r2-1
    r3=1
    [P_WatchDog_Clear]=r3
    jnz delay1
    
    pop r2,r3 from [sp]
    retf
    
.public _delay
_delay:
    push r2,r3 to [sp]
    r2=10
    call delay1
    r2=r2-1
    r3=1
    [P_WatchDog_Clear]=r3    
    jnz _delay
    
    pop r2,r3 from [sp]
    retf
    
    
.PUBLIC _FR_Portini
_FR_Portini:
	r1 = [Port_Dir]
	//r1=0x002f
	r1 = r1|(TXEN+TRX_EN+PWR+CSN+SCK+MOSI)			             //TXEN,TRX_EN,PWR,CSN,SCK,MOSI           1
	r1 = r1&(~(MISO+CD+AM+DR))	                                 //MISO,CD,AM,DR                          0
	[Port_Dir] = r1
	
	r1 = [Port_Attrib]
	//r1=0x002f
	r1 = r1|(TXEN+TRX_EN+PWR+CSN+SCK+MOSI)			             //TXEN,TRX_EN,PWR,CSN,SCK,MOSI           1
	r1 = r1&(~(MISO+CD+AM+DR))	                                 //MISO,CD,AM,DR                          0
	[Port_Attrib] = r1
	
	r1 = [Port_Data]
	//r1=0x0008
	r1 = r1|(CSN)			                                     //CSN                                    1
    r1 = r1&(~(TXEN+TRX_EN+PWR+SCK+MOSI+MISO+CD+AM+DR))	         //TXEN,TRX_EN,PWR,SCK,MOSI,MISO,CD,AM,DR 0	
    [Port_Data] = r1
    
    retf
//========================================================
//	汇编格式:	_FR_R
//	C格式:		unsigned int FR_R(void)
//	实现功能:	读一个字节(8位)
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:r1
//========================================================
.PUBLIC _FR_R
_FR_R:
	push r2,r5 to [sp]                  //保护现场
	
	r2 = [Port_Buffer]					//注意,所有输入操作全是Buffer寄存器
	r2 = r2|SCK                         //设置SCK为高电平            
	r3 = r2&(~(SCK))                      //r2为SCK的高电平为,r3为SCK的低电平
	r4 = 8								//R4置8,循环8次
	
red:
	[Port_Buffer] = r2					//SCK置高
	r1 = r1 lsl 1						//抽个空先把r1左移一位
	[Port_Buffer] = r3					//SCK置低
	r5 = [Port_Data]					//读取端口信号
	r5 = r5&MOSI                        //屏蔽MOSI以外的其他值
	test r5,MOSI						//判断MOSI的当前位是否为0
	jz FR_DataLow					    //为零则跳转
	r1 = r1|0x0001						//否则就将r1最低位置1
FR_DataLow:
	r4 = r4-1							
	jnz red
	r1 = r1&0x00ff                      //屏蔽返回值的高八位
	pop r2,r5 from [sp]                 //恢复现场
    retf

//========================================================
//	汇编格式:	_FR_W
//	C格式:		void FR_W(unsigned int)
//	实现功能:	写一个字节
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器:r1
//========================================================

⌨️ 快捷键说明

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