?? 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 + -