📄 fr_driver.asm
字号:
//============================================================
// 文件名称: 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 + -