Stair56E UART project
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
|
||||
;/*****************************************************************************
|
||||
; * @file: startup_xinc.s
|
||||
; * @purpose: CMSIS Cortex-M0 Core Device Startup File for the
|
||||
; * Device xinc.
|
||||
; *****************************************************************************/
|
||||
|
||||
Stack_Size EQU 0x00000600
|
||||
|
||||
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||
Stack_Mem SPACE Stack_Size
|
||||
__initial_sp
|
||||
|
||||
Heap_Size EQU 0x00000000
|
||||
|
||||
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||
__heap_base
|
||||
Heap_Mem SPACE Heap_Size
|
||||
__heap_limit
|
||||
|
||||
|
||||
PRESERVE8
|
||||
THUMB
|
||||
|
||||
; Vector Table Mapped to Address 0 at Reset
|
||||
|
||||
AREA RESET, DATA, READONLY
|
||||
EXPORT __Vectors
|
||||
EXPORT __Vectors_End
|
||||
EXPORT __Vectors_Size
|
||||
|
||||
__Vectors DCD __initial_sp ; Top of Stack
|
||||
DCD Reset_Handler ; Reset Handler
|
||||
DCD NMI_Handler ; NMI Handler
|
||||
DCD HardFault_Handler ; Hard Fault Handler
|
||||
DCD MemManage_Handler ; MPU Fault Handler
|
||||
DCD BusFault_Handler ; Bus Fault Handler
|
||||
DCD UsageFault_Handler ; Usage Fault Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD SVC_Handler ; SVCall Handler
|
||||
DCD DebugMon_Handler ; Debug Monitor Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD PendSV_Handler ; PendSV Handler
|
||||
DCD SysTick_Handler ; SysTick Handler
|
||||
|
||||
; External Interrupts
|
||||
; ToDo: Add here the vectors for the device specific external interrupts handler
|
||||
DCD 0 ; 0 BLE Handler
|
||||
DCD DMAS_Handler ; 1
|
||||
DCD CPR_Handler ; 2
|
||||
DCD GPIO_Handler ; 3
|
||||
DCD RTC_Handler ; 4
|
||||
DCD TIMER0_Handler ; 5
|
||||
DCD TIMER1_Handler
|
||||
DCD TIMER2_Handler
|
||||
DCD TIMER3_Handler
|
||||
DCD WDT_Handler
|
||||
DCD I2C_Handler
|
||||
DCD UART0_Handler
|
||||
DCD UART1_Handler
|
||||
DCD SPI0_Handler
|
||||
DCD SPI1_Handler
|
||||
DCD 0
|
||||
DCD 0
|
||||
DCD GADC_Handler ; 17
|
||||
DCD 0 ; 18
|
||||
DCD 0 ; 19
|
||||
DCD 0 ; 20
|
||||
DCD 0 ; 21
|
||||
DCD RF24G_Handler ; 22
|
||||
DCD PWM_Handler ; 23
|
||||
DCD BOR_Handler ; 24
|
||||
DCD 0 ; 25
|
||||
DCD 0 ; 26
|
||||
DCD AOTIMER0_Handler ; 27
|
||||
DCD AOTIMER1_Handler ; 28
|
||||
DCD CMP_Handler ; 29
|
||||
DCD FMC_Handler ; 30
|
||||
DCD CAN_Handler ; 31
|
||||
|
||||
__Vectors_End
|
||||
|
||||
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||
|
||||
|
||||
|
||||
AREA |.text|, CODE, READONLY
|
||||
; Reset Handler
|
||||
|
||||
Reset_Handler PROC
|
||||
|
||||
EXPORT Reset_Handler [WEAK]
|
||||
|
||||
IMPORT SystemInit
|
||||
IMPORT __main
|
||||
|
||||
LDR r0, =0x4000013C ; remap
|
||||
LDR r1, =0x10000001
|
||||
STR r1, [r0]
|
||||
|
||||
|
||||
|
||||
LDR R0, =SystemInit
|
||||
BLX R0
|
||||
|
||||
LDR R0, =__main
|
||||
BX R0
|
||||
|
||||
ENDP
|
||||
|
||||
; Dummy Exception Handlers (infinite loops which can be modified)
|
||||
NMI_Handler PROC
|
||||
EXPORT NMI_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
|
||||
HardFault_Handler\
|
||||
PROC
|
||||
EXPORT HardFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
MemManage_Handler\
|
||||
PROC
|
||||
EXPORT MemManage_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
BusFault_Handler\
|
||||
PROC
|
||||
EXPORT BusFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
UsageFault_Handler\
|
||||
PROC
|
||||
EXPORT UsageFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SVC_Handler PROC
|
||||
EXPORT SVC_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
DebugMon_Handler\
|
||||
PROC
|
||||
EXPORT DebugMon_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
Default_Handler PROC
|
||||
;EXPORT BLE_Handler [WEAK]
|
||||
EXPORT DMAS_Handler [WEAK]
|
||||
EXPORT CPR_Handler [WEAK]
|
||||
EXPORT GPIO_Handler [WEAK]
|
||||
EXPORT RTC_Handler [WEAK]
|
||||
EXPORT TIMER0_Handler [WEAK]
|
||||
EXPORT TIMER1_Handler [WEAK]
|
||||
EXPORT TIMER2_Handler [WEAK]
|
||||
EXPORT TIMER3_Handler [WEAK]
|
||||
EXPORT WDT_Handler [WEAK]
|
||||
EXPORT I2C_Handler [WEAK]
|
||||
EXPORT UART0_Handler [WEAK]
|
||||
EXPORT UART1_Handler [WEAK]
|
||||
EXPORT SPI0_Handler [WEAK]
|
||||
EXPORT SPI1_Handler [WEAK]
|
||||
;EXPORT KBS_Handler [WEAK]
|
||||
;EXPORT QDEC_Handler [WEAK]
|
||||
EXPORT GADC_Handler [WEAK]
|
||||
EXPORT AOTIMER0_Handler [WEAK]
|
||||
EXPORT AOTIMER1_Handler [WEAK]
|
||||
EXPORT CMP_Handler [WEAK]
|
||||
EXPORT FMC_Handler [WEAK]
|
||||
EXPORT CAN_Handler [WEAK]
|
||||
;EXPORT SIM_Handler [WEAK]
|
||||
;EXPORT AES_Handler [WEAK]
|
||||
EXPORT PendSV_Handler [WEAK]
|
||||
EXPORT SysTick_Handler [WEAK]
|
||||
EXPORT RF24G_Handler [WEAK]
|
||||
EXPORT PWM_Handler [WEAK]
|
||||
EXPORT BOR_Handler [WEAK]
|
||||
|
||||
PendSV_Handler
|
||||
SysTick_Handler
|
||||
;BLE_Handler
|
||||
DMAS_Handler
|
||||
CPR_Handler
|
||||
GPIO_Handler
|
||||
RTC_Handler
|
||||
TIMER0_Handler
|
||||
TIMER1_Handler
|
||||
TIMER2_Handler
|
||||
TIMER3_Handler
|
||||
WDT_Handler
|
||||
I2C_Handler
|
||||
UART0_Handler
|
||||
UART1_Handler
|
||||
SPI0_Handler
|
||||
SPI1_Handler
|
||||
;KBS_Handler
|
||||
;QDEC_Handler
|
||||
GADC_Handler
|
||||
;SIM_Handler
|
||||
;AES_Handler
|
||||
AOTIMER0_Handler
|
||||
AOTIMER1_Handler
|
||||
CMP_Handler
|
||||
FMC_Handler
|
||||
CAN_Handler
|
||||
RF24G_Handler
|
||||
PWM_Handler
|
||||
BOR_Handler
|
||||
B .
|
||||
ENDP
|
||||
|
||||
|
||||
ALIGN
|
||||
|
||||
; User Initial Stack & Heap
|
||||
|
||||
IMPORT __use_two_region_memory
|
||||
EXPORT __user_initial_stackheap
|
||||
__user_initial_stackheap
|
||||
|
||||
LDR R0, = Heap_Mem
|
||||
LDR R1, = (Stack_Mem + Stack_Size)
|
||||
LDR R2, = (Heap_Mem + Heap_Size)
|
||||
LDR R3, = Stack_Mem
|
||||
BX LR
|
||||
|
||||
ALIGN
|
||||
|
||||
END
|
||||
|
||||
@@ -0,0 +1,232 @@
|
||||
/*!
|
||||
* \file system_it_xinc.c
|
||||
*
|
||||
* \brief Target system interruption implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "system_it_xinc.h"
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Func Prototype
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief This function handles NMI exception.
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void NMI_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn */
|
||||
DEBUG("%s\n", __func__);
|
||||
/* USER CODE END NonMaskableInt_IRQn */
|
||||
while (1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief This function handles Hard Fault exception.
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN HardFault_IRQn */
|
||||
DEBUG("%s\n", __func__);
|
||||
/* USER CODE END HardFault_IRQn */
|
||||
while (1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief This function handles Memory Manage exception.
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void MemManage_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN */
|
||||
DEBUG("%s\n", __func__);
|
||||
/* USER CODE END */
|
||||
while (1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief This function handles Bus Fault exception.
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void BusFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN */
|
||||
DEBUG("%s\n", __func__);
|
||||
/* USER CODE END */
|
||||
while (1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief This function handles Usage Fault exception.
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void UsageFault_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN */
|
||||
DEBUG("%s\n", __func__);
|
||||
/* USER CODE END */
|
||||
while (1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief This function handles SVCall exception.
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void SVC_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SVCall_IRQn */
|
||||
DEBUG("%s\n", __func__);
|
||||
/* USER CODE END SVCall_IRQn */
|
||||
while (1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief This function handles Debug Monitor exception.
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void DebugMon_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN */
|
||||
DEBUG("%s\n", __func__);
|
||||
/* USER CODE END */
|
||||
while (1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief This function handles PendSVC exception.
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void PendSV_Handler(void)
|
||||
{
|
||||
/* USER CODE BEGIN PendSV_IRQn */
|
||||
DEBUG("%s\n", __func__);
|
||||
/* USER CODE END PendSV_IRQn */
|
||||
while (1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/****************************** Hard Fault Handler Functions *******************************/
|
||||
/*------------------------------------------------------------------------------------
|
||||
Private Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
void HardFault_Handler_c(unsigned int * HardFault_args)
|
||||
{
|
||||
/*栈帧里面内容:*/
|
||||
unsigned int stack_r0; //压栈的 R0
|
||||
unsigned int stack_r1; //压栈的 R1
|
||||
unsigned int stack_r2; //压栈的 R2
|
||||
unsigned int stack_r3; //压栈的 R3
|
||||
unsigned int stack_r12; //压栈的 R12
|
||||
unsigned int stack_lr; //压栈的 lr
|
||||
unsigned int stack_pc; //压栈的 pc
|
||||
unsigned int stack_psr; //压栈的 psr
|
||||
|
||||
stack_r0 = ((unsigned int)HardFault_args[0]);
|
||||
stack_r1 = ((unsigned int)HardFault_args[1]);
|
||||
stack_r2 = ((unsigned int)HardFault_args[2]);
|
||||
stack_r3 = ((unsigned int)HardFault_args[3]);
|
||||
stack_r12 = ((unsigned int)HardFault_args[4]);
|
||||
stack_lr = ((unsigned int)HardFault_args[5]);
|
||||
stack_pc = ((unsigned int)HardFault_args[6]);
|
||||
stack_psr = ((unsigned int)HardFault_args[7]);
|
||||
|
||||
DEBUG("----%s----\n", __func__);
|
||||
DEBUG("R0=%x\n",stack_r0);
|
||||
DEBUG("R1=%x\n",stack_r1);
|
||||
DEBUG("R2=%x\n",stack_r2);
|
||||
DEBUG("R3=%x\n",stack_r3);
|
||||
DEBUG("R12=%x\n",stack_r12);
|
||||
DEBUG("LR[R14]=%x\n",stack_lr);
|
||||
DEBUG("PC[R15]=%x\n",stack_pc);
|
||||
DEBUG("PSR=%x\n",stack_psr);
|
||||
DEBUG("SCB_SHCSR=%x\n",SCB->SHCSR);
|
||||
DEBUG("---------------------------\n");
|
||||
|
||||
while(1);
|
||||
}
|
||||
|
||||
/*******************************************************************************************/
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/*!
|
||||
* \file system_it_xinc.h
|
||||
*
|
||||
* \brief The header of system_it_xinc.c
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __SYSTEM_IT_XINC_H__
|
||||
#define __SYSTEM_IT_XINC_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "xc6xxx.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Exported Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
void NMI_Handler( void );
|
||||
void HardFault_Handler( void );
|
||||
void MemManage_Handler( void );
|
||||
void BusFault_Handler( void );
|
||||
void UsageFault_Handler( void );
|
||||
void SVC_Handler( void );
|
||||
void DebugMon_Handler( void );
|
||||
void PendSV_Handler( void );
|
||||
|
||||
void HardFault_Handler_c(unsigned int * HardFault_args);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __SYSTEM_IT_XINC_H__ */
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
/**
|
||||
* Initialize the system
|
||||
*
|
||||
* @param none
|
||||
* @return none
|
||||
*
|
||||
* @brief Setup the microcontroller system
|
||||
*
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
|
||||
#include "xc6xxx.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
#define __DEBUG_OUT_PORT 0
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
#define VECTOR_NUM 48
|
||||
|
||||
void set_vector(void)
|
||||
{
|
||||
#if (USE_XIP == 1)
|
||||
__disable_irq();
|
||||
for (uint32_t i = 0, *Pvector = (uint32_t *)(0x11001000 + 0),
|
||||
*_vector_table = (uint32_t *)(0x10000000);
|
||||
i < VECTOR_NUM; i++) // copy vertor table
|
||||
{
|
||||
_vector_table[i] = *Pvector++;
|
||||
}
|
||||
|
||||
*((volatile unsigned int *)(0x4000013C)) =
|
||||
0x10000001; // inter vertor table remap
|
||||
__enable_irq();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void WDT_ResetInit(void)
|
||||
{
|
||||
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(ENABLE);
|
||||
|
||||
cpr_rstctl_ctlapb_sw__wdt_rstn__setf(RSTCTL_ENABLE);
|
||||
cpr_rstctl_ctlapb_sw__wdt_rstn__setf(RSTCTL_DISABLE);
|
||||
|
||||
cpr_rstctl_wdtrst_mask_set(
|
||||
(WDT_SYS_RSTN_MASK_DISABLE | WDT_M0_RSTN_MASK_ENABLE));
|
||||
|
||||
cpr_lp_ctl__wdt_tclk_en__setf(ENABLE);
|
||||
wdt_cr__wdt_en__setf(DISABLE);
|
||||
}
|
||||
|
||||
void SystemInit(void)
|
||||
{
|
||||
|
||||
WDT_ResetInit();
|
||||
|
||||
#if (USE_XIP == 1)
|
||||
|
||||
set_vector();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
__RAM_CODE int sendchar(int c)
|
||||
{
|
||||
unsigned int status;
|
||||
#if (__DEBUG_OUT_PORT == 1)
|
||||
for (;;) {
|
||||
status = (*((volatile unsigned *)(0x40011000 + 0x14)));
|
||||
status &= 0x20;
|
||||
if (status == 0x20)
|
||||
break;
|
||||
}
|
||||
(*((volatile unsigned *)(0x40011000 + 0x00))) = c;
|
||||
return (1);
|
||||
#else
|
||||
for (;;) {
|
||||
status = (*((volatile unsigned *)(0x40010000 + 0x14)));
|
||||
status &= 0x20;
|
||||
if (status == 0x20)
|
||||
break;
|
||||
}
|
||||
(*((volatile unsigned *)(0x40010000 + 0x00))) = c;
|
||||
return (1);
|
||||
#endif
|
||||
}
|
||||
|
||||
struct __FILE
|
||||
{
|
||||
int handle; /* Add whatever you need here */
|
||||
};
|
||||
|
||||
FILE __stdout;
|
||||
__RAM_CODE int fputc(int ch, FILE *f) { return (sendchar(ch)); }
|
||||
|
||||
int ferror(FILE *f)
|
||||
{
|
||||
/* Your implementation of ferror */
|
||||
return EOF;
|
||||
}
|
||||
|
||||
void _ttywrch(int ch) { sendchar(ch); }
|
||||
|
||||
void _sys_exit(int return_code)
|
||||
{
|
||||
label:
|
||||
goto label; /* endless loop */
|
||||
}
|
||||
@@ -0,0 +1,256 @@
|
||||
|
||||
;/*****************************************************************************
|
||||
; * @file: startup_xinc.s
|
||||
; * @purpose: CMSIS Cortex-M0 Core Device Startup File for the
|
||||
; * Device xinc.
|
||||
; *****************************************************************************/
|
||||
|
||||
Stack_Size EQU 0x00000800
|
||||
|
||||
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||
Stack_Mem SPACE Stack_Size
|
||||
__initial_sp
|
||||
|
||||
Heap_Size EQU 0x00000000
|
||||
|
||||
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||
__heap_base
|
||||
Heap_Mem SPACE Heap_Size
|
||||
__heap_limit
|
||||
|
||||
|
||||
PRESERVE8
|
||||
THUMB
|
||||
|
||||
; Vector Table Mapped to Address 0 at Reset
|
||||
|
||||
AREA RESET, DATA, READONLY
|
||||
EXPORT __Vectors
|
||||
EXPORT __Vectors_End
|
||||
EXPORT __Vectors_Size
|
||||
|
||||
__Vectors DCD __initial_sp ; Top of Stack
|
||||
DCD Reset_Handler ; Reset Handler
|
||||
DCD NMI_Handler ; NMI Handler
|
||||
DCD HardFault_Handler ; Hard Fault Handler
|
||||
DCD MemManage_Handler ; MPU Fault Handler
|
||||
DCD BusFault_Handler ; Bus Fault Handler
|
||||
DCD UsageFault_Handler ; Usage Fault Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD SVC_Handler ; SVCall Handler
|
||||
DCD DebugMon_Handler ; Debug Monitor Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD PendSV_Handler ; PendSV Handler
|
||||
DCD SysTick_Handler ; SysTick Handler
|
||||
|
||||
; External Interrupts
|
||||
; ToDo: Add here the vectors for the device specific external interrupts handler
|
||||
DCD BLE_Handler ; 0
|
||||
DCD DMA_Handler ; 1
|
||||
DCD CPR_Handler ; 2
|
||||
DCD GPIO_Handler ; 3
|
||||
DCD RTC_Handler ; 4
|
||||
DCD TIMER0_Handler ; 5
|
||||
DCD TIMER1_Handler ; 6
|
||||
DCD TIMER2_Handler ; 7
|
||||
DCD TIMER3_Handler ; 8
|
||||
DCD WDT_Handler ; 9
|
||||
DCD I2C_Handler ; 10
|
||||
DCD UART0_Handler ; 11
|
||||
DCD UART1_Handler ; 12
|
||||
DCD SPI0_Handler ; 13
|
||||
DCD SPI1_Handler ; 14
|
||||
DCD 0 ; 15
|
||||
DCD 0 ; 16
|
||||
DCD GADC_Handler ; 17
|
||||
DCD PWM_Handler ; 18
|
||||
DCD AES_Handler ; 19
|
||||
DCD USB_Handler ; 20
|
||||
DCD AUDIO_Handler ; 21
|
||||
DCD RF24G_Handler ; 22
|
||||
DCD SPI2_Handler ; 23
|
||||
DCD 0 ; 24
|
||||
DCD UART2_Handler ; 25
|
||||
DCD I2S_Handler ; 26
|
||||
DCD AOTIMER0_Handler ; 27
|
||||
DCD AOTIMER1_Handler ; 28
|
||||
DCD CMP_Handler ; 29
|
||||
DCD FMC_Handler ; 30
|
||||
DCD CAN_Handler ; 31
|
||||
|
||||
__Vectors_End
|
||||
|
||||
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||
|
||||
|
||||
|
||||
AREA |.text|, CODE, READONLY
|
||||
; Reset Handler
|
||||
|
||||
Reset_Handler PROC
|
||||
|
||||
EXPORT Reset_Handler [WEAK]
|
||||
|
||||
IMPORT SystemInit
|
||||
IMPORT __main
|
||||
|
||||
LDR r0, =0x4000013C ; remap
|
||||
LDR r1, =0x10000001
|
||||
STR r1, [r0]
|
||||
|
||||
|
||||
|
||||
LDR R0, =SystemInit
|
||||
BLX R0
|
||||
|
||||
LDR R0, =__main
|
||||
BX R0
|
||||
|
||||
ENDP
|
||||
|
||||
; Dummy Exception Handlers (infinite loops which can be modified)
|
||||
NMI_Handler PROC
|
||||
EXPORT NMI_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
|
||||
HardFault_Handler\
|
||||
PROC
|
||||
IMPORT HardFault_Handler_c ;函数声明
|
||||
movs r0, #4 ;判断主栈指针还是进程栈指针
|
||||
mov r1, lr
|
||||
tst r0, r1
|
||||
beq hf_used_msp ;如果是主栈指针
|
||||
mrs r0, psp ;否则是进程栈指针,把进程栈指针地址付给 R0
|
||||
ldr r1, =HardFault_Handler_c ;跳转到 HardFault 中断程序
|
||||
bx r1
|
||||
hf_used_msp
|
||||
mrs r0, msp ;把主栈指针地址赋给 R0
|
||||
ldr r1, =HardFault_Handler_c
|
||||
bx r1
|
||||
;EXPORT HardFault_Handler [WEAK]
|
||||
;B .
|
||||
ENDP
|
||||
MemManage_Handler\
|
||||
PROC
|
||||
EXPORT MemManage_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
BusFault_Handler\
|
||||
PROC
|
||||
EXPORT BusFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
UsageFault_Handler\
|
||||
PROC
|
||||
EXPORT UsageFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SVC_Handler PROC
|
||||
EXPORT SVC_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
DebugMon_Handler\
|
||||
PROC
|
||||
EXPORT DebugMon_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
Default_Handler PROC
|
||||
EXPORT BLE_Handler [WEAK]
|
||||
EXPORT DMA_Handler [WEAK]
|
||||
EXPORT CPR_Handler [WEAK]
|
||||
EXPORT GPIO_Handler [WEAK]
|
||||
EXPORT RTC_Handler [WEAK]
|
||||
EXPORT TIMER0_Handler [WEAK]
|
||||
EXPORT TIMER1_Handler [WEAK]
|
||||
EXPORT TIMER2_Handler [WEAK]
|
||||
EXPORT TIMER3_Handler [WEAK]
|
||||
EXPORT WDT_Handler [WEAK]
|
||||
EXPORT I2C_Handler [WEAK]
|
||||
EXPORT UART0_Handler [WEAK]
|
||||
EXPORT UART1_Handler [WEAK]
|
||||
EXPORT SPI0_Handler [WEAK]
|
||||
EXPORT SPI1_Handler [WEAK]
|
||||
;EXPORT KBS_Handler [WEAK]
|
||||
;EXPORT QDEC_Handler [WEAK]
|
||||
EXPORT GADC_Handler [WEAK]
|
||||
EXPORT PWM_Handler [WEAK]
|
||||
EXPORT AES_Handler [WEAK]
|
||||
|
||||
EXPORT PendSV_Handler [WEAK]
|
||||
EXPORT SysTick_Handler [WEAK]
|
||||
|
||||
EXPORT USB_Handler [WEAK];20
|
||||
EXPORT AUDIO_Handler [WEAK];21
|
||||
EXPORT RF24G_Handler [WEAK];22
|
||||
EXPORT SPI2_Handler [WEAK];23
|
||||
;EXPORT MPU_Handler [WEAK];24
|
||||
EXPORT UART2_Handler [WEAK];25
|
||||
EXPORT I2S_Handler [WEAK];26
|
||||
EXPORT AOTIMER0_Handler [WEAK];27
|
||||
EXPORT AOTIMER1_Handler [WEAK];28
|
||||
EXPORT CMP_Handler [WEAK];29
|
||||
EXPORT FMC_Handler [WEAK];30
|
||||
EXPORT CAN_Handler [WEAK];31
|
||||
|
||||
PendSV_Handler
|
||||
SysTick_Handler
|
||||
BLE_Handler
|
||||
RF24G_Handler
|
||||
DMA_Handler
|
||||
CPR_Handler
|
||||
GPIO_Handler
|
||||
RTC_Handler
|
||||
TIMER0_Handler
|
||||
TIMER1_Handler
|
||||
TIMER2_Handler
|
||||
TIMER3_Handler
|
||||
WDT_Handler
|
||||
I2C_Handler
|
||||
I2S_Handler
|
||||
UART0_Handler
|
||||
UART1_Handler
|
||||
UART2_Handler
|
||||
SPI0_Handler
|
||||
SPI1_Handler
|
||||
SPI2_Handler
|
||||
;KBS_Handler
|
||||
;QDEC_Handler
|
||||
GADC_Handler
|
||||
PWM_Handler
|
||||
AUDIO_Handler
|
||||
;SIM_Handler
|
||||
AES_Handler
|
||||
AOTIMER0_Handler
|
||||
AOTIMER1_Handler
|
||||
CMP_Handler
|
||||
FMC_Handler
|
||||
CAN_Handler
|
||||
USB_Handler
|
||||
|
||||
B .
|
||||
ENDP
|
||||
|
||||
|
||||
ALIGN
|
||||
|
||||
; User Initial Stack & Heap
|
||||
|
||||
IMPORT __use_two_region_memory
|
||||
EXPORT __user_initial_stackheap
|
||||
__user_initial_stackheap
|
||||
|
||||
LDR R0, = Heap_Mem
|
||||
LDR R1, = (Stack_Mem + Stack_Size)
|
||||
LDR R2, = (Heap_Mem + Heap_Size)
|
||||
LDR R3, = Stack_Mem
|
||||
BX LR
|
||||
|
||||
ALIGN
|
||||
|
||||
END
|
||||
@@ -0,0 +1,256 @@
|
||||
|
||||
;/*****************************************************************************
|
||||
; * @file: startup_xinc_xc62xx.s
|
||||
; * @purpose: CMSIS Cortex-M0 Core Device Startup File for the
|
||||
; * Device xinc.
|
||||
; *****************************************************************************/
|
||||
|
||||
Stack_Size EQU 0x00000400
|
||||
|
||||
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||
Stack_Mem SPACE Stack_Size
|
||||
__initial_sp
|
||||
|
||||
Heap_Size EQU 0x00000000
|
||||
|
||||
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||
__heap_base
|
||||
Heap_Mem SPACE Heap_Size
|
||||
__heap_limit
|
||||
|
||||
|
||||
PRESERVE8
|
||||
THUMB
|
||||
|
||||
; Vector Table Mapped to Address 0 at Reset
|
||||
|
||||
AREA RESET, DATA, READONLY
|
||||
EXPORT __Vectors
|
||||
EXPORT __Vectors_End
|
||||
EXPORT __Vectors_Size
|
||||
|
||||
__Vectors DCD __initial_sp ; Top of Stack
|
||||
DCD Reset_Handler ; Reset Handler
|
||||
DCD NMI_Handler ; NMI Handler
|
||||
DCD HardFault_Handler ; Hard Fault Handler
|
||||
DCD MemManage_Handler ; MPU Fault Handler
|
||||
DCD BusFault_Handler ; Bus Fault Handler
|
||||
DCD UsageFault_Handler ; Usage Fault Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD 0 ; Reserved
|
||||
DCD SVC_Handler ; SVCall Handler
|
||||
DCD DebugMon_Handler ; Debug Monitor Handler
|
||||
DCD 0 ; Reserved
|
||||
DCD PendSV_Handler ; PendSV Handler
|
||||
DCD SysTick_Handler ; SysTick Handler
|
||||
|
||||
; External Interrupts
|
||||
; ToDo: Add here the vectors for the device specific external interrupts handler
|
||||
DCD BLE_Handler ; 0
|
||||
DCD DMA_Handler ; 1
|
||||
DCD CPR_Handler ; 2
|
||||
DCD GPIO_Handler ; 3
|
||||
DCD RTC_Handler ; 4
|
||||
DCD TIMER0_Handler ; 5
|
||||
DCD TIMER1_Handler ; 6
|
||||
DCD TIMER2_Handler ; 7
|
||||
DCD TIMER3_Handler ; 8
|
||||
DCD WDT_Handler ; 9
|
||||
DCD I2C_Handler ; 10
|
||||
DCD UART0_Handler ; 11
|
||||
DCD UART1_Handler ; 12
|
||||
DCD SPI0_Handler ; 13
|
||||
DCD SPI1_Handler ; 14
|
||||
DCD 0 ; 15
|
||||
DCD 0 ; 16
|
||||
DCD GADC_Handler ; 17
|
||||
DCD PWM_Handler ; 18
|
||||
DCD AES_Handler ; 19
|
||||
DCD USB_Handler ; 20
|
||||
DCD AUDIO_Handler ; 21
|
||||
DCD RF24G_Handler ; 22
|
||||
DCD SPI2_Handler ; 23
|
||||
DCD 0 ; 24
|
||||
DCD UART2_Handler ; 25
|
||||
DCD I2S_Handler ; 26
|
||||
DCD AOTIMER0_Handler ; 27
|
||||
DCD AOTIMER1_Handler ; 28
|
||||
DCD CMP_Handler ; 29
|
||||
DCD FMC_Handler ; 30
|
||||
DCD CAN_Handler ; 31
|
||||
|
||||
__Vectors_End
|
||||
|
||||
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||
|
||||
|
||||
|
||||
AREA |.text|, CODE, READONLY
|
||||
; Reset Handler
|
||||
|
||||
Reset_Handler PROC
|
||||
|
||||
EXPORT Reset_Handler [WEAK]
|
||||
|
||||
IMPORT SystemInit
|
||||
IMPORT __main
|
||||
|
||||
LDR r0, =0x4000013C ; remap
|
||||
LDR r1, =0x10000001
|
||||
STR r1, [r0]
|
||||
|
||||
|
||||
|
||||
LDR R0, =SystemInit
|
||||
BLX R0
|
||||
|
||||
LDR R0, =__main
|
||||
BX R0
|
||||
|
||||
ENDP
|
||||
|
||||
; Dummy Exception Handlers (infinite loops which can be modified)
|
||||
NMI_Handler PROC
|
||||
EXPORT NMI_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
|
||||
HardFault_Handler\
|
||||
PROC
|
||||
IMPORT HardFault_Handler_c ;函数声明
|
||||
movs r0, #4 ;判断主栈指针还是进程栈指针
|
||||
mov r1, lr
|
||||
tst r0, r1
|
||||
beq hf_used_msp ;如果是主栈指针
|
||||
mrs r0, psp ;否则是进程栈指针,把进程栈指针地址付给 R0
|
||||
ldr r1, =HardFault_Handler_c ;跳转到 HardFault 中断程序
|
||||
bx r1
|
||||
hf_used_msp
|
||||
mrs r0, msp ;把主栈指针地址赋给 R0
|
||||
ldr r1, =HardFault_Handler_c
|
||||
bx r1
|
||||
;EXPORT HardFault_Handler [WEAK]
|
||||
;B .
|
||||
ENDP
|
||||
MemManage_Handler\
|
||||
PROC
|
||||
EXPORT MemManage_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
BusFault_Handler\
|
||||
PROC
|
||||
EXPORT BusFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
UsageFault_Handler\
|
||||
PROC
|
||||
EXPORT UsageFault_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
SVC_Handler PROC
|
||||
EXPORT SVC_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
DebugMon_Handler\
|
||||
PROC
|
||||
EXPORT DebugMon_Handler [WEAK]
|
||||
B .
|
||||
ENDP
|
||||
|
||||
Default_Handler PROC
|
||||
EXPORT BLE_Handler [WEAK]
|
||||
EXPORT DMA_Handler [WEAK]
|
||||
EXPORT CPR_Handler [WEAK]
|
||||
EXPORT GPIO_Handler [WEAK]
|
||||
EXPORT RTC_Handler [WEAK]
|
||||
EXPORT TIMER0_Handler [WEAK]
|
||||
EXPORT TIMER1_Handler [WEAK]
|
||||
EXPORT TIMER2_Handler [WEAK]
|
||||
EXPORT TIMER3_Handler [WEAK]
|
||||
EXPORT WDT_Handler [WEAK]
|
||||
EXPORT I2C_Handler [WEAK]
|
||||
EXPORT UART0_Handler [WEAK]
|
||||
EXPORT UART1_Handler [WEAK]
|
||||
EXPORT SPI0_Handler [WEAK]
|
||||
EXPORT SPI1_Handler [WEAK]
|
||||
;EXPORT KBS_Handler [WEAK]
|
||||
;EXPORT QDEC_Handler [WEAK]
|
||||
EXPORT GADC_Handler [WEAK]
|
||||
EXPORT PWM_Handler [WEAK]
|
||||
EXPORT AES_Handler [WEAK]
|
||||
|
||||
EXPORT PendSV_Handler [WEAK]
|
||||
EXPORT SysTick_Handler [WEAK]
|
||||
|
||||
EXPORT USB_Handler [WEAK];20
|
||||
EXPORT AUDIO_Handler [WEAK];21
|
||||
EXPORT RF24G_Handler [WEAK];22
|
||||
EXPORT SPI2_Handler [WEAK];23
|
||||
;EXPORT MPU_Handler [WEAK];24
|
||||
EXPORT UART2_Handler [WEAK];25
|
||||
EXPORT I2S_Handler [WEAK];26
|
||||
EXPORT AOTIMER0_Handler [WEAK];27
|
||||
EXPORT AOTIMER1_Handler [WEAK];28
|
||||
EXPORT CMP_Handler [WEAK];29
|
||||
EXPORT FMC_Handler [WEAK];30
|
||||
EXPORT CAN_Handler [WEAK];31
|
||||
|
||||
PendSV_Handler
|
||||
SysTick_Handler
|
||||
BLE_Handler
|
||||
RF24G_Handler
|
||||
DMA_Handler
|
||||
CPR_Handler
|
||||
GPIO_Handler
|
||||
RTC_Handler
|
||||
TIMER0_Handler
|
||||
TIMER1_Handler
|
||||
TIMER2_Handler
|
||||
TIMER3_Handler
|
||||
WDT_Handler
|
||||
I2C_Handler
|
||||
I2S_Handler
|
||||
UART0_Handler
|
||||
UART1_Handler
|
||||
UART2_Handler
|
||||
SPI0_Handler
|
||||
SPI1_Handler
|
||||
SPI2_Handler
|
||||
;KBS_Handler
|
||||
;QDEC_Handler
|
||||
GADC_Handler
|
||||
PWM_Handler
|
||||
AUDIO_Handler
|
||||
;SIM_Handler
|
||||
AES_Handler
|
||||
AOTIMER0_Handler
|
||||
AOTIMER1_Handler
|
||||
CMP_Handler
|
||||
FMC_Handler
|
||||
CAN_Handler
|
||||
USB_Handler
|
||||
|
||||
B .
|
||||
ENDP
|
||||
|
||||
|
||||
ALIGN
|
||||
|
||||
; User Initial Stack & Heap
|
||||
|
||||
IMPORT __use_two_region_memory
|
||||
EXPORT __user_initial_stackheap
|
||||
__user_initial_stackheap
|
||||
|
||||
LDR R0, = Heap_Mem
|
||||
LDR R1, = (Stack_Mem + Stack_Size)
|
||||
LDR R2, = (Heap_Mem + Heap_Size)
|
||||
LDR R3, = Stack_Mem
|
||||
BX LR
|
||||
|
||||
ALIGN
|
||||
|
||||
END
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: sueRimn
|
||||
* @Date: 2023-12-21 10:56:45
|
||||
* @LastEditors: sueRimn
|
||||
* @LastEditTime: 2023-12-29 19:42:40
|
||||
*/
|
||||
#ifndef __APP_RF24G_EVENT_H__
|
||||
#define __APP_RF24G_EVENT_H__
|
||||
#include "xc6xxx_rf_ADV.h"
|
||||
|
||||
|
||||
|
||||
#define ADV_LENGTH XINCX_ADV_PIPE0_LEN
|
||||
|
||||
#define XC_RF_SEND_TIMER TIMER0_IDX
|
||||
|
||||
#define XC_SEND_NUM 1000U
|
||||
#define SEND_TIMERMS_CNT 10U
|
||||
#define RF_CONFIRMED_VALUE 5U
|
||||
|
||||
|
||||
|
||||
#ifdef RF_ADV_INTER
|
||||
extern uint8_t recv_adv_buf[XINCX_ADV_PIPE0_LEN];
|
||||
#endif
|
||||
|
||||
extern uint32_t tx_cnt, rx_cnt;
|
||||
|
||||
#define RF_ADV_BASE 2400U
|
||||
#define RF_ADV_CHANNEL_37 2
|
||||
#define RF_ADV_CHANNEL_38 26
|
||||
#define RF_ADV_CHANNEL_39 80
|
||||
|
||||
void timer_init(uint8_t timer_id, uint32_t timer_cnt);
|
||||
uint8_t rf_data_config(uint8_t *buff, uint8_t len);
|
||||
uint32_t rf_ack_tx_manage(uint8_t *buff);
|
||||
uint32_t rf_ack_rx_manage(uint8_t *buff);
|
||||
uint8_t rf_adv_packet(uint8_t *buff);
|
||||
void rf_adv_tx_evevt(void);
|
||||
void rf_adv_rx_evevt(void);
|
||||
|
||||
|
||||
//extern rf_data_typedef_t rf_data;
|
||||
|
||||
#endif //__APP_RF24G_EVENT_H__
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: sueRimn
|
||||
* @Date: 2023-12-12 14:23:55
|
||||
* @LastEditors: sueRimn
|
||||
* @LastEditTime: 2024-06-07 13:46:09
|
||||
*/
|
||||
/*!
|
||||
* \file main.h
|
||||
*
|
||||
* \brief The head file of main.c
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __MAIN_H__
|
||||
#define __MAIN_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "rf_config.h"
|
||||
#include "xc6xxx.h"
|
||||
#include "xc6xxx_rf_2_4g.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
#define DEBUG_LOG
|
||||
|
||||
#define RECV_TIMERMS_OUT 1000
|
||||
//#define SEND_TIMERMS_CNT 30
|
||||
#define XC_SEND_NUM 1000U
|
||||
|
||||
#define RF_TX_TIMERx TIMER0_IDX
|
||||
#define RF_RX_TIMERx TIMER0_IDX
|
||||
|
||||
//#define RF_CONFIRMED_VALUE 5
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
TypeDef
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Global Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
extern uint16_t recv_len;
|
||||
extern uint8_t recv_buf[256];
|
||||
extern bool rf_send_timer_flag;
|
||||
extern bool rf24g_handler_flag;
|
||||
/*------------------------------------------------------------------------------------
|
||||
Exported Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
uint32_t rf_tx_manage(uint8_t *buff);
|
||||
uint32_t rf_rx_manage(uint8_t *buff);
|
||||
void rf_buff_info(uint8_t *buff, uint8_t len);
|
||||
void rf_2M_reg_info(void);
|
||||
void rf_dump_log(void);
|
||||
uint8_t rf_data_config(uint8_t *buff, uint8_t len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __MAIN_H__ */
|
||||
@@ -0,0 +1,178 @@
|
||||
|
||||
#ifndef SDK_ADV_CONFIG_H
|
||||
#define SDK_ADV_CONFIG_H
|
||||
|
||||
// <<< Use Configuration Wizard in Context Menu >>>\n
|
||||
|
||||
// <h> Xinc_RF
|
||||
|
||||
// <o> XINCX_ADV_MODE - RF Tx or Rx Mode
|
||||
// <0=> TX Mode
|
||||
// <1=> RX Mode
|
||||
#ifndef XINCX_ADV_MODE
|
||||
#define XINCX_ADV_MODE 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_ADV_ADDR_L - rf Address Set
|
||||
#ifndef XINCX_ADV_ADDR_L
|
||||
#define XINCX_ADV_ADDR_L 0x71917d6b
|
||||
#endif
|
||||
|
||||
// <o> XINCX_ADV_ADDR_H - rf Address Set
|
||||
#ifndef XINCX_ADV_ADDR_H
|
||||
#define XINCX_ADV_ADDR_H 0x00
|
||||
#endif
|
||||
|
||||
// <o> XINCX_ADV_CHANNEL - ADV Channel Set
|
||||
// <2402=> ADV_CHANNEL_37
|
||||
// <2426=> ADV_CHANNEL_38
|
||||
// <2480=> ADV_CHANNEL_39
|
||||
|
||||
#ifndef XINCX_ADV_CHANNEL
|
||||
#define XINCX_ADV_CHANNEL 2402
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_POWER - rf Power Set
|
||||
#ifndef XINCX_POWER
|
||||
#define XINCX_POWER 0x08
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_NVIC_MODE - RF NVIC Mode
|
||||
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_RF_ADV_NVIC_MODE
|
||||
#define XINCX_RF_ADV_NVIC_MODE 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_TX_ADDR_WIDTH - RF Tx Addr Width
|
||||
// <4=> 4 Bytes
|
||||
#ifndef XINCX_RF_TX_ADDR_WIDTH
|
||||
#define XINCX_RF_TX_ADDR_WIDTH 4
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_TRANS_RATE - RF Transmission Rate Config
|
||||
|
||||
// <0x02=> 1M
|
||||
#ifndef XINCX_RF_TRANS_RATE
|
||||
#define XINCX_RF_TRANS_RATE 0x02
|
||||
#endif
|
||||
|
||||
// <e> XINCX_RF_CRC_ENABLE - RF CRC Enable
|
||||
//==========================================================
|
||||
#ifndef XINCX_RF_CRC_ENABLE
|
||||
#define XINCX_RF_CRC_ENABLE 0
|
||||
#endif
|
||||
// </e>
|
||||
// <o> XINCX_RF_CRC_BIT - RF CRC Bits Set
|
||||
|
||||
// <1=> 1 Bit
|
||||
// <2=> 2 Bits
|
||||
#ifndef XINCX_RF_CRC_BIT
|
||||
#define XINCX_RF_CRC_BIT 2
|
||||
#endif
|
||||
|
||||
|
||||
// <h> XINCX_ADV_FEATURE_PARAM - ADV Feature Parameters
|
||||
//==========================================================
|
||||
// <q> XINCX_ADV_LONG_PLD - ADV Long Payload Feature
|
||||
#ifndef XINCX_ADV_LONG_PLD
|
||||
#define XINCX_ADV_LONG_PLD 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_ADV_FEC - ADV FEC&Interleave Feature
|
||||
#ifndef XINCX_ADV_FEC
|
||||
#define XINCX_ADV_FEC 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_ADV_WHITEN - ADV Whiten Feature
|
||||
#ifndef XINCX_ADV_WHITEN
|
||||
#define XINCX_ADV_WHITEN 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_ADV_DPL - ADV Dynamic Payload Length Feature
|
||||
#ifndef XINCX_ADV_DPL
|
||||
#define XINCX_ADV_DPL 0
|
||||
#endif
|
||||
// <q> XINCX_ADV_ACK_PAY - 2.4g Payload on ACK
|
||||
#ifndef XINCX_ADV_ACK_PAY
|
||||
#define XINCX_ADV_ACK_PAY 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_ADV_DYN_ACK - 2.4g W_TX_PAYLOAD_NOACK Command
|
||||
#ifndef XINCX_ADV_DYN_ACK
|
||||
#define XINCX_ADV_DYN_ACK 0
|
||||
#endif
|
||||
|
||||
// </h>
|
||||
// <h> XINCX_PIPE_PIPE_RX_PAYLEN - ADV Pipe Rx Payload Len
|
||||
//==========================================================
|
||||
// <o> XINCX_ADV_PIPE0_LEN - ADV Pipe0 Rx Payload Len
|
||||
#ifndef XINCX_ADV_PIPE0_LEN
|
||||
#define XINCX_ADV_PIPE0_LEN 42
|
||||
#endif
|
||||
|
||||
// <o> XINCX_ADV_PIPE1_LEN - ADV Pipe1 Rx Payload Len
|
||||
#ifndef XINCX_ADV_PIPE1_LEN
|
||||
#define XINCX_ADV_PIPE1_LEN 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_ADV_PIPE2_LEN - ADV Pipe2 Rx Payload Len
|
||||
#ifndef XINCX_ADV_PIPE2_LEN
|
||||
#define XINCX_ADV_PIPE2_LEN 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_ADV_PIPE3_LEN - ADV Pipe3 Rx Payload Len
|
||||
#ifndef XINCX_ADV_PIPE3_LEN
|
||||
#define XINCX_ADV_PIPE3_LEN 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_ADV_PIPE4_LEN - ADV Pipe4 Rx Payload Len
|
||||
#ifndef XINCX_ADV_PIPE4_LEN
|
||||
#define XINCX_ADV_PIPE4_LEN 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_ADV_PIPE5_LEN - ADV Pipe5 Rx Payload Len
|
||||
#ifndef XINCX_ADV_PIPE5_LEN
|
||||
#define XINCX_ADV_PIPE5_LEN 0
|
||||
#endif
|
||||
// </h>
|
||||
// <h> XINC_ADV_MAC_ADDR
|
||||
// <o> XINC_ADV_MAC_ADDR_0
|
||||
#ifndef XINC_ADV_MAC_ADDR_0
|
||||
#define XINC_ADV_MAC_ADDR_0 0xa6
|
||||
#endif
|
||||
|
||||
// <o> XINC_ADV_MAC_ADDR_1
|
||||
#ifndef XINC_ADV_MAC_ADDR_1
|
||||
#define XINC_ADV_MAC_ADDR_1 0xa5
|
||||
#endif
|
||||
|
||||
// <o> XINC_ADV_MAC_ADDR_2
|
||||
#ifndef XINC_ADV_MAC_ADDR_2
|
||||
#define XINC_ADV_MAC_ADDR_2 0xa4
|
||||
#endif
|
||||
|
||||
// <o> XINC_ADV_MAC_ADDR_3
|
||||
#ifndef XINC_ADV_MAC_ADDR_3
|
||||
#define XINC_ADV_MAC_ADDR_3 0xa3
|
||||
#endif
|
||||
|
||||
// <o> XINC_ADV_MAC_ADDR_4
|
||||
#ifndef XINC_ADV_MAC_ADDR_4
|
||||
#define XINC_ADV_MAC_ADDR_4 0xa2
|
||||
#endif
|
||||
|
||||
// <o> XINC_ADV_MAC_ADDR_5
|
||||
#ifndef XINC_ADV_MAC_ADDR_5
|
||||
#define XINC_ADV_MAC_ADDR_5 0xc1
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// </h>
|
||||
|
||||
// <<< end of configuration section >>>
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,272 @@
|
||||
|
||||
#ifndef SDK_CONFIG_H
|
||||
#define SDK_CONFIG_H
|
||||
|
||||
// <<< Use Configuration Wizard in Context Menu >>>\n
|
||||
|
||||
// <h> Xinc_RF
|
||||
|
||||
// <o> XINCX_RF_MODE - RF Tx or Rx Mode
|
||||
// <0=> TX Mode
|
||||
// <1=> RX Mode
|
||||
#ifndef XINCX_RF_MODE
|
||||
#define XINCX_RF_MODE 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_ADDR_L - rf Address Set
|
||||
#ifndef XINCX_2_4G_ADDR_L
|
||||
#define XINCX_2_4G_ADDR_L 0xE7E7E7E6
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_ADDR_H - rf Address Set
|
||||
#ifndef XINCX_2_4G_ADDR_H
|
||||
#define XINCX_2_4G_ADDR_H 0xEA
|
||||
#endif
|
||||
// <h> XINCX_2_4G_AUTO_ACK - 2.4g Auto Acknowledgement
|
||||
//==========================================================
|
||||
// <o> XINCX_2_4G_PIPE0_ENAA - 2.4g Pipe0 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE0_ENAA
|
||||
#define XINCX_2_4G_PIPE0_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE1_ENAA - 2.4g Pipe1 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE1_ENAA
|
||||
#define XINCX_2_4G_PIPE1_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE2_ENAA - 2.4g Pipe2 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE2_ENAA
|
||||
#define XINCX_2_4G_PIPE2_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE3_ENAA - 2.4g Pipe3 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE3_ENAA
|
||||
#define XINCX_2_4G_PIPE3_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE4_ENAA - 2.4g Pipe4 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE4_ENAA
|
||||
#define XINCX_2_4G_PIPE4_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE5_ENAA - 2.4g Pipe5 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE5_ENAA
|
||||
#define XINCX_2_4G_PIPE5_ENAA 1
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// <o> XINCX_RF_POWER - rf Power Set
|
||||
#ifndef XINCX_POWER
|
||||
#define XINCX_POWER 0x00008
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_CHANNEL - 2.4g Channel Set
|
||||
#ifndef XINCX_2_4G_CHANNEL
|
||||
#define XINCX_2_4G_CHANNEL 2350
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_NVIC_MODE - RF NVIC Mode
|
||||
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_RF_NVIC_MODE
|
||||
#define XINCX_RF_NVIC_MODE 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_TX_ADDR_WIDTH - RF Tx Addr Width
|
||||
|
||||
// <3=> 3 Bytes
|
||||
// <4=> 4 Bytes
|
||||
// <5=> 5 Bytes
|
||||
#ifndef XINCX_RF_TX_ADDR_WIDTH
|
||||
#define XINCX_RF_TX_ADDR_WIDTH 5
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_TRANS_RATE - RF Transmission Rate Config
|
||||
|
||||
// <0x02=> 1M
|
||||
// <0x0A=> 2M
|
||||
// <0x22=> 250k
|
||||
// <0x2A=> 125k
|
||||
#ifndef XINCX_RF_TRANS_RATE
|
||||
#define XINCX_RF_TRANS_RATE 0x02
|
||||
#endif
|
||||
|
||||
// <e> XINCX_RF_CRC_ENABLE - RF CRC Enable
|
||||
//==========================================================
|
||||
#ifndef XINCX_RF_CRC_ENABLE
|
||||
#define XINCX_RF_CRC_ENABLE 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_CRC_BYTE - 2.4g CRC Bytes Set
|
||||
|
||||
// <1=> 1 Byte
|
||||
// <2=> 2 Bytes
|
||||
#ifndef XINCX_2_4G_CRC_BYTE
|
||||
#define XINCX_2_4G_CRC_BYTE 2
|
||||
#endif
|
||||
|
||||
// </e>
|
||||
|
||||
// <h> XINCX_2_4G_FEATURE_PARAM - 2.4g Feature Parameters
|
||||
//==========================================================
|
||||
|
||||
// <q> XINCX_2_4G_GUARD_CFG - 2.4g Long Payload Feature
|
||||
#ifndef XINCX_2_4G_GUARD_CFG
|
||||
#define XINCX_2_4G_GUARD_CFG 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_LONG_PLD_TYPE - 2.4g Long Pld Type
|
||||
#ifndef XINCX_2_4G_LONG_PLD_TYPE
|
||||
#define XINCX_2_4G_LONG_PLD_TYPE 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_PREAMBLE_NUM - 2.4g Preamble
|
||||
// <o> XINCX_2_4G_PREAMBLE_NUM
|
||||
// <0=> 1 Byte
|
||||
// <1=> 2 Bytes
|
||||
// <2=> 3 Bytes
|
||||
// <3=> 4 Bytes
|
||||
#ifndef XINCX_2_4G_PREAMBLE_NUM
|
||||
#define XINCX_2_4G_PREAMBLE_NUM 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_PREAMBLE_TYPE - 2.4g Preamble Type
|
||||
#ifndef XINCX_2_4G_PREAMBLE_TYPE
|
||||
#define XINCX_2_4G_PREAMBLE_TYPE 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_CRC_SCOPE_GUARD - 2.4g CRC Scope Guard
|
||||
#ifndef XINCX_2_4G_CRC_SCOPE_GUARD
|
||||
#define XINCX_2_4G_CRC_SCOPE_GUARD 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_CRC_SCOPE_HEADER - 2.4g CRC Scope Header
|
||||
#ifndef XINCX_2_4G_CRC_SCOPE_HEADER
|
||||
#define XINCX_2_4G_CRC_SCOPE_HEADER 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_CRC_SCOPE_ADDR - 2.4g CRC Scope Addr
|
||||
#ifndef XINCX_2_4G_CRC_SCOPE_ADDR
|
||||
#define XINCX_2_4G_CRC_SCOPE_ADDR 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_LONG_PLD - 2.4g Long Payload Feature
|
||||
#ifndef XINCX_2_4G_LONG_PLD
|
||||
#define XINCX_2_4G_LONG_PLD 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_FEC - 2.4g FEC&Interleave Feature
|
||||
#ifndef XINCX_2_4G_FEC
|
||||
#define XINCX_2_4G_FEC 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_WHITEN - 2.4g Whiten Feature
|
||||
#ifndef XINCX_2_4G_WHITEN
|
||||
#define XINCX_2_4G_WHITEN 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_DPL - 2.4g Dynamic Payload Length Feature
|
||||
#ifndef XINCX_2_4G_DPL
|
||||
#define XINCX_2_4G_DPL 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_ACK_PAY - 2.4g Payload on ACK
|
||||
#ifndef XINCX_2_4G_ACK_PAY
|
||||
#define XINCX_2_4G_ACK_PAY 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_DYN_ACK - 2.4g W_TX_PAYLOAD_NOACK Command
|
||||
#ifndef XINCX_2_4G_DYN_ACK
|
||||
#define XINCX_2_4G_DYN_ACK 0
|
||||
#endif
|
||||
|
||||
// </h>
|
||||
// </h>
|
||||
|
||||
// <h> XINCX_2_4G_DYNPD - 2.4g dynpd
|
||||
//==========================================================
|
||||
|
||||
// <o> XINCX_2_4G_DYNPD - 2.4g dynpd
|
||||
#ifndef XINCX_2_4G_DYNPD
|
||||
#define XINCX_2_4G_DYNPD 0x3f
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
|
||||
// <h> XINCX_2_4G_CRY_CPT_ARRAY - 2.4g Crystal capacitor array
|
||||
//==========================================================
|
||||
|
||||
// <o> XINCX_2_4G_CRY_CPT_ARRAY - 2.4g Crystal capacitor array
|
||||
#ifndef XINCX_2_4G_CRY_CPT_ARRAY
|
||||
#ifdef XC62XX
|
||||
#define XINCX_2_4G_CRY_CPT_ARRAY 0x38
|
||||
#else
|
||||
#define XINCX_2_4G_CRY_CPT_ARRAY 0x36
|
||||
#endif
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// <h> XINCX_2_4G_TRANS_PARAM - 2.4g Transmission Parameters
|
||||
//==========================================================
|
||||
|
||||
// <o> XINCX_2_4G_RETRANS_CNT - 2.4g Retransmit Count
|
||||
#ifndef XINCX_2_4G_RETRANS_CNT
|
||||
#define XINCX_2_4G_RETRANS_CNT 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_RETRANS_DELAY - 2.4g Retransmission Delay
|
||||
#ifndef XINCX_2_4G_RETRANS_DELAY
|
||||
#define XINCX_2_4G_RETRANS_DELAY 3
|
||||
#endif
|
||||
|
||||
// <h> XINCX_2_4G_PIPE_RX_PAYLEN - 2.4g Pipe Rx Payload Len
|
||||
//==========================================================
|
||||
// <o> - 2.4g Pipe0 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE0_LEN
|
||||
#define XINCX_2_4G_PIPE0_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE1_LEN - 2.4g Pipe1 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE1_LEN
|
||||
#define XINCX_2_4G_PIPE1_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE2_LEN - 2.4g Pipe2 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE2_LEN
|
||||
#define XINCX_2_4G_PIPE2_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE3_LEN - 2.4g Pipe3 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE3_LEN
|
||||
#define XINCX_2_4G_PIPE3_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE4_LEN - 2.4g Pipe4 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE4_LEN
|
||||
#define XINCX_2_4G_PIPE4_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE5_LEN - 2.4g Pipe5 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE5_LEN
|
||||
#define XINCX_2_4G_PIPE5_LEN 32
|
||||
#endif
|
||||
|
||||
// </h>
|
||||
// </h>
|
||||
|
||||
// <<< end of configuration section >>>
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,294 @@
|
||||
|
||||
#ifndef SDK_CONFIG_H
|
||||
#define SDK_CONFIG_H
|
||||
|
||||
// <<< Use Configuration Wizard in Context Menu >>>\n
|
||||
|
||||
// <h> Xinc_RF
|
||||
|
||||
// <o> XINCX_RF_MODE - RF Tx or Rx Mode
|
||||
// <0=> TX Mode
|
||||
// <1=> RX Mode
|
||||
#ifndef XINCX_RF_MODE
|
||||
#define XINCX_RF_MODE 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_ADDR_L - rf Address Set
|
||||
#ifndef XINCX_2_4G_ADDR_L
|
||||
#define XINCX_2_4G_ADDR_L 0xE7E7E7E6
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_ADDR_H - rf Address Set
|
||||
#ifndef XINCX_2_4G_ADDR_H
|
||||
#define XINCX_2_4G_ADDR_H 0xEA
|
||||
#endif
|
||||
// <h> XINCX_2_4G_AUTO_ACK - 2.4g Auto Acknowledgement
|
||||
//==========================================================
|
||||
// <o> XINCX_2_4G_PIPE0_ENAA - 2.4g Pipe0 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE0_ENAA
|
||||
#define XINCX_2_4G_PIPE0_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE1_ENAA - 2.4g Pipe1 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE1_ENAA
|
||||
#define XINCX_2_4G_PIPE1_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE2_ENAA - 2.4g Pipe2 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE2_ENAA
|
||||
#define XINCX_2_4G_PIPE2_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE3_ENAA - 2.4g Pipe3 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE3_ENAA
|
||||
#define XINCX_2_4G_PIPE3_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE4_ENAA - 2.4g Pipe4 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE4_ENAA
|
||||
#define XINCX_2_4G_PIPE4_ENAA 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE5_ENAA - 2.4g Pipe5 Auto Ack
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_2_4G_PIPE5_ENAA
|
||||
#define XINCX_2_4G_PIPE5_ENAA 1
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// <o> XINCX_RF_POWER - rf Power Set
|
||||
#ifndef XINCX_POWER
|
||||
#define XINCX_POWER 0x00008
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_CHANNEL - 2.4g Channel Set
|
||||
#ifndef XINCX_2_4G_CHANNEL
|
||||
#define XINCX_2_4G_CHANNEL 2410
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_NVIC_MODE - RF NVIC Mode
|
||||
|
||||
// <0=> Disable
|
||||
// <1=> Enable
|
||||
#ifndef XINCX_RF_NVIC_MODE
|
||||
#define XINCX_RF_NVIC_MODE 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_TX_ADDR_WIDTH - RF Tx Addr Width
|
||||
|
||||
// <3=> 3 Bytes
|
||||
// <4=> 4 Bytes
|
||||
// <5=> 5 Bytes
|
||||
#ifndef XINCX_RF_TX_ADDR_WIDTH
|
||||
#define XINCX_RF_TX_ADDR_WIDTH 5
|
||||
#endif
|
||||
|
||||
// <o> XINCX_RF_TRANS_RATE - RF Transmission Rate Config
|
||||
|
||||
// <0x02=> 1M
|
||||
// <0x0A=> 2M
|
||||
// <0x22=> 250k
|
||||
// <0x2A=> 125k
|
||||
#ifndef XINCX_RF_TRANS_RATE
|
||||
#define XINCX_RF_TRANS_RATE 0x02
|
||||
#endif
|
||||
|
||||
// <e> XINCX_RF_CRC_ENABLE - RF CRC Enable
|
||||
//==========================================================
|
||||
#ifndef XINCX_RF_CRC_ENABLE
|
||||
#define XINCX_RF_CRC_ENABLE 1
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_CRC_BYTE - 2.4g CRC Bytes Set
|
||||
|
||||
// <1=> 1 Byte
|
||||
// <2=> 2 Bytes
|
||||
#ifndef XINCX_2_4G_CRC_BYTE
|
||||
#define XINCX_2_4G_CRC_BYTE 2
|
||||
#endif
|
||||
|
||||
// </e>
|
||||
|
||||
// <h> XINCX_2_4G_FEATURE_PARAM - 2.4g Feature Parameters
|
||||
//==========================================================
|
||||
|
||||
// <q> XINCX_2_4G_GUARD_CFG - 2.4g Long Payload Feature
|
||||
#ifndef XINCX_2_4G_GUARD_CFG
|
||||
#define XINCX_2_4G_GUARD_CFG 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_LONG_PLD_TYPE - 2.4g Long Pld Type
|
||||
#ifndef XINCX_2_4G_LONG_PLD_TYPE
|
||||
#define XINCX_2_4G_LONG_PLD_TYPE 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_PREAMBLE_NUM - 2.4g Preamble
|
||||
// <o> XINCX_2_4G_PREAMBLE_NUM
|
||||
// <0=> 1 Byte
|
||||
// <1=> 2 Bytes
|
||||
// <2=> 3 Bytes
|
||||
// <3=> 4 Bytes
|
||||
#ifndef XINCX_2_4G_PREAMBLE_NUM
|
||||
#define XINCX_2_4G_PREAMBLE_NUM 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_PREAMBLE_TYPE - 2.4g Preamble Type
|
||||
#ifndef XINCX_2_4G_PREAMBLE_TYPE
|
||||
#define XINCX_2_4G_PREAMBLE_TYPE 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_CRC_SCOPE_GUARD - 2.4g CRC Scope Guard
|
||||
#ifndef XINCX_2_4G_CRC_SCOPE_GUARD
|
||||
#define XINCX_2_4G_CRC_SCOPE_GUARD 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_CRC_SCOPE_HEADER - 2.4g CRC Scope Header
|
||||
#ifndef XINCX_2_4G_CRC_SCOPE_HEADER
|
||||
#define XINCX_2_4G_CRC_SCOPE_HEADER 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_CRC_SCOPE_ADDR - 2.4g CRC Scope Addr
|
||||
#ifndef XINCX_2_4G_CRC_SCOPE_ADDR
|
||||
#define XINCX_2_4G_CRC_SCOPE_ADDR 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_LONG_PLD - 2.4g Long Payload Feature
|
||||
#ifndef XINCX_2_4G_LONG_PLD
|
||||
#define XINCX_2_4G_LONG_PLD 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_FEC - 2.4g FEC&Interleave Feature
|
||||
#ifndef XINCX_2_4G_FEC
|
||||
#define XINCX_2_4G_FEC 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_WHITEN - 2.4g Whiten Feature
|
||||
#ifndef XINCX_2_4G_WHITEN
|
||||
#define XINCX_2_4G_WHITEN 1
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_DPL - 2.4g Dynamic Payload Length Feature
|
||||
#ifndef XINCX_2_4G_DPL
|
||||
#define XINCX_2_4G_DPL 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_ACK_PAY - 2.4g Payload on ACK
|
||||
#ifndef XINCX_2_4G_ACK_PAY
|
||||
#define XINCX_2_4G_ACK_PAY 0
|
||||
#endif
|
||||
|
||||
// <q> XINCX_2_4G_DYN_ACK - 2.4g W_TX_PAYLOAD_NOACK Command
|
||||
#ifndef XINCX_2_4G_DYN_ACK
|
||||
#define XINCX_2_4G_DYN_ACK 0
|
||||
#endif
|
||||
|
||||
// </h>
|
||||
// </h>
|
||||
|
||||
// <h> XINCX_2_4G_PREAMBLE - 2.4g preamble
|
||||
//==========================================================
|
||||
|
||||
// <o> XINCX_2_4G_PREAMBLE - 2.4g preamble
|
||||
#ifndef XINCX_2_4G_PREAMBLE
|
||||
#define XINCX_2_4G_PREAMBLE 0x710f5555
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// <h> XINCX_2_4G_GUARD - 2.4g guard
|
||||
//==========================================================
|
||||
|
||||
// <o> XINCX_2_4G_GUARD - 2.4g guard
|
||||
#ifndef XINCX_2_4G_GUARD
|
||||
#define XINCX_2_4G_GUARD 0x8fc9
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// <h> XINCX_2_4G_DYNPD - 2.4g dynpd
|
||||
//==========================================================
|
||||
|
||||
// <o> XINCX_2_4G_DYNPD - 2.4g dynpd
|
||||
#ifndef XINCX_2_4G_DYNPD
|
||||
#define XINCX_2_4G_DYNPD 0x3f
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// <h> XINCX_2_4G_CRY_CPT_ARRAY - 2.4g Crystal capacitor array
|
||||
//==========================================================
|
||||
|
||||
// <o> XINCX_2_4G_CRY_CPT_ARRAY - 2.4g Crystal capacitor array
|
||||
#ifndef XINCX_2_4G_CRY_CPT_ARRAY
|
||||
#ifdef XC62XX
|
||||
#define XINCX_2_4G_CRY_CPT_ARRAY 0x38
|
||||
#else
|
||||
#define XINCX_2_4G_CRY_CPT_ARRAY 0x36
|
||||
#endif
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// <h> XINCX_2_4G_TRANS_PARAM - 2.4g Transmission Parameters
|
||||
//==========================================================
|
||||
|
||||
// <o> XINCX_2_4G_RETRANS_CNT - 2.4g Retransmit Count
|
||||
#ifndef XINCX_2_4G_RETRANS_CNT
|
||||
#define XINCX_2_4G_RETRANS_CNT 0
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_RETRANS_DELAY - 2.4g Retransmission Delay
|
||||
#ifndef XINCX_2_4G_RETRANS_DELAY
|
||||
#define XINCX_2_4G_RETRANS_DELAY 3
|
||||
#endif
|
||||
|
||||
// <h> XINCX_2_4G_PIPE_RX_PAYLEN - 2.4g Pipe Rx Payload Len
|
||||
//==========================================================
|
||||
// <o> - 2.4g Pipe0 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE0_LEN
|
||||
#define XINCX_2_4G_PIPE0_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE1_LEN - 2.4g Pipe1 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE1_LEN
|
||||
#define XINCX_2_4G_PIPE1_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE2_LEN - 2.4g Pipe2 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE2_LEN
|
||||
#define XINCX_2_4G_PIPE2_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE3_LEN - 2.4g Pipe3 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE3_LEN
|
||||
#define XINCX_2_4G_PIPE3_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE4_LEN - 2.4g Pipe4 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE4_LEN
|
||||
#define XINCX_2_4G_PIPE4_LEN 32
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_PIPE5_LEN - 2.4g Pipe5 Rx Payload Len
|
||||
#ifndef XINCX_2_4G_PIPE5_LEN
|
||||
#define XINCX_2_4G_PIPE5_LEN 32
|
||||
#endif
|
||||
|
||||
|
||||
// </h>
|
||||
// <o> XINCX_RF_PIPE_ENABLE
|
||||
#ifndef XINCX_RF_PIPE_ENABLE
|
||||
#define XINCX_RF_PIPE_ENABLE 1
|
||||
#endif
|
||||
// </h>
|
||||
|
||||
// <<< end of configuration section >>>
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,79 @@
|
||||
#ifndef SDK_SINGLE_CONFIG_H
|
||||
#define SDK_SINGLE_CONFIG_H
|
||||
|
||||
// <<< Use Configuration Wizard in Context Menu >>>
|
||||
|
||||
// <o> XINCX_2_4G_CHANNEL_SINGLE - 2.4g Channel Set
|
||||
#ifndef XINCX_2_4G_CHANNEL_SINGLE
|
||||
#define XINCX_2_4G_CHANNEL_SINGLE 2440
|
||||
#endif
|
||||
|
||||
// <o> XINCX_POWER_SINGLE - rf Power Set
|
||||
// <1=> -10dbm
|
||||
// <2=> -9dbm
|
||||
// <4=> -4dbm
|
||||
// <6=> 0dbm
|
||||
// <8=> 3dbm
|
||||
// <9=> 5dbm
|
||||
// <12=> 7dbm
|
||||
// <14=> 8dbm
|
||||
// <16=> 9dbm
|
||||
// <19=> 10dbm
|
||||
// <24=> 11dbm
|
||||
// <30=> 12dbm
|
||||
// <36=> 13dbm
|
||||
#ifndef XINCX_POWER_SINGLE
|
||||
#define XINCX_POWER_SINGLE 0x00006
|
||||
#endif
|
||||
|
||||
// <o> XINCX_2_4G_FREQ_DEV - 2.4g freq dev
|
||||
//<0x0=> 0 k
|
||||
//<0x8=> 10 k
|
||||
//<0x10=> 20 k
|
||||
//<0x19=> 30 k
|
||||
//<0x21=> 40 k
|
||||
//<0x29=> 50 k
|
||||
//<0x31=> 60 k
|
||||
//<0x39=> 70 k
|
||||
//<0x42=> 80 k
|
||||
//<0x4a=> 90 k
|
||||
//<0x52=> 100 k
|
||||
//<0x5a=> 110 k
|
||||
//<0x62=> 120 k
|
||||
//<0x6b=> 130 k
|
||||
//<0x73=> 140 k
|
||||
//<0x7b=> 150 k
|
||||
//<0x83=> 160 k
|
||||
//<0x8b=> 170 k
|
||||
//<0x94=> 180 k
|
||||
//<0x9c=> 190 k
|
||||
//<0xa4=> 200 k
|
||||
//<0xac=> 210 k
|
||||
//<0xb4=> 220 k
|
||||
//<0xbd=> 230 k
|
||||
//<0xc5=> 240 k
|
||||
//<0xcd=> 250 k
|
||||
//<0xd5=> 260 k
|
||||
//<0xdd=> 270 k
|
||||
//<0xe6=> 280 k
|
||||
//<0xee=> 290 k
|
||||
//<0xf6=> 300 k
|
||||
//<0xfe=> 310 k
|
||||
//<0x106=> 320 k
|
||||
//<0x10f=> 330 k
|
||||
#ifndef XINCX_2_4G_FREQ_DEV
|
||||
#define XINCX_2_4G_FREQ_DEV 0x00
|
||||
#endif
|
||||
|
||||
// XINCX_2_4G_CRY_CPT_ARRAY_SINGLE - 2.4g Crystal capacitor array
|
||||
#ifndef XINCX_2_4G_CRY_CPT_ARRAY_SINGLE
|
||||
#ifdef XC62XX
|
||||
#define XINCX_2_4G_CRY_CPT_ARRAY_SINGLE 0x38
|
||||
#else
|
||||
#define XINCX_2_4G_CRY_CPT_ARRAY_SINGLE 0x36
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// <<< end of configuration section >>>
|
||||
|
||||
#endif // SDK_SINGLE_CONFIG_H
|
||||
@@ -0,0 +1,78 @@
|
||||
/*!
|
||||
* \file shell.h
|
||||
*
|
||||
* \brief The head file of shell.c
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __SHELL_H__
|
||||
#define __SHELL_H__
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xc6xxx_rf_2_4g.h"
|
||||
//#include "dbg.h"
|
||||
#include "shell_handler.h"
|
||||
#include "shell_rf_handler.h"
|
||||
#include "xc6xxx.h"
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
#define XC_DATA_LEN 64U
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
TypeDef
|
||||
-------------------------------------------------------------------------------------*/
|
||||
typedef enum
|
||||
{
|
||||
XC_SHELL_CMD_RECV = 0,
|
||||
XC_SHELL_CMD_PROC
|
||||
} eXC_Shell_Proc_state;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *cmd;
|
||||
eXC_Cmd_State (*fn)(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
} XC_Cmd_Table_t;
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Global Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Exported Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
void app_uart_init(void);
|
||||
void xc_shell_init(void);
|
||||
void xc_shell_test_case(void);
|
||||
void shell_cmd_process(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __SHELL_H__ */
|
||||
@@ -0,0 +1,115 @@
|
||||
/*!
|
||||
* \file shell.h
|
||||
*
|
||||
* \brief The head file of shell_handler.c
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __SHELL_HANDLER_H__
|
||||
#define __SHELL_HANDLER_H__
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
//#include "co_bt_defines.h"
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xc6xxx.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
#define XC_CMD_SIZE 255U
|
||||
|
||||
#define SEND_DATA_LEN 512
|
||||
|
||||
// XC Command
|
||||
#define XC_OK "OK"
|
||||
#define XC_ERROR "+CME ERROR:"
|
||||
|
||||
#define XC_CMD_TEST "+TEST"
|
||||
#define XC_CMD_REBOOT "+REBOOT"
|
||||
|
||||
#define XC_CMD_RF_ACK_INIT "+RF_ACK_INIT"
|
||||
#define XC_CMD_RF_ADV_INIT "+RF_ADV_INIT"
|
||||
#define XC_CMD_RF_SINGLE_INIT "+RF_SINGLE_INIT"
|
||||
#define XC_CMD_RF_ACK_SEND_EVENT "+RF_ACK_SEND_EVENT"
|
||||
#define XC_CMD_RF_ACK_RECV_EVENT "+RF_ACK_RECV_EVENT"
|
||||
#define XC_CMD_RF_ADV_SEND_EVENT "+RF_ADV_SEND_EVENT"
|
||||
#define XC_CMD_RF_ADV_RECV_EVENT "+RF_ADV_RECV_EVENT"
|
||||
#define XC_CMD_RF_SET_CHANNEL "+RF_SET_CHANNEL"
|
||||
#define XC_CMD_RF_SET_POWER "+RF_SET_POWER"
|
||||
#define XC_CMD_RF_SET_RATE "+RF_SET_RATE"
|
||||
#define XC_CMD_RF_SET_ADDR "+RF_SET_ADDR"
|
||||
#define XC_CMD_RF_GET_REG_VALUE "+RF_GET_REG_VALUE"
|
||||
#define XC_CMD_RF_SET_ANA_REG "+RF_SET_ANA_REG"
|
||||
#define XC_CMD_RF_GET_ANA_REG "+RF_GET_ANA_REG"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
TypeDef
|
||||
-------------------------------------------------------------------------------------*/
|
||||
typedef enum
|
||||
{
|
||||
RF_IDLE = 0,
|
||||
RF_BLE_MODE,
|
||||
RF_24G_MODE
|
||||
} eRF_MODE_Status;
|
||||
typedef enum
|
||||
{
|
||||
XC_CMD_ERROR = -1,
|
||||
XC_CMD_SUCCESS = 0
|
||||
} eXC_Cmd_State;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
QUERY_CMD = 0x00,
|
||||
SET_CMD
|
||||
} eCMD_Type;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t byte0;
|
||||
uint8_t byte1;
|
||||
uint8_t byte2;
|
||||
uint8_t byte3;
|
||||
uint8_t byte4;
|
||||
uint8_t byte5;
|
||||
} BLE_Mac_Addr_t;
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Global Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
extern uint8_t XC_Cmd[XC_CMD_SIZE];
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Exported Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
int ascii_strn2val(const char str[], char base, char n);
|
||||
eXC_Cmd_State xc_reboot_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __SHELL_HANDLER_H__ */
|
||||
@@ -0,0 +1,44 @@
|
||||
#ifndef SHELL_RF_HANDLER_H__
|
||||
#define SHELL_RF_HANDLER_H__
|
||||
|
||||
#include "shell_handler.h"
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RF_STANY,
|
||||
RF_ACK_SEND,
|
||||
RF_ACK_RECV,
|
||||
RF_ADV_SEND,
|
||||
RF_ADV_RECV,
|
||||
RF_SINGLE
|
||||
} erf_status_t;
|
||||
|
||||
|
||||
extern uint16_t temp_ch;
|
||||
erf_status_t rf24g_get_status(void);
|
||||
eXC_Cmd_State xc_rf_ack_init_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_adv_init_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_single_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_ack_send_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_ack_recv_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_ack_payload_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_adv_send_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_adv_recv_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_sleep_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_wakeup_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_set_channel_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_set_power_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_set_trans_rate_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_set_addr_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_get_reg_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_set_ana_reg_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
eXC_Cmd_State xc_rf_get_ana_reg_handler(eCMD_Type opt, int srgc, char *srgv[]);
|
||||
int data_power(int data,uint8_t power);
|
||||
int hexToDec(uint8_t hex);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif //SHELL_RF_HANDLER_H__
|
||||
@@ -0,0 +1,218 @@
|
||||
/*!
|
||||
* \file shell.c
|
||||
*
|
||||
* \brief Target shell implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "shell.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Local Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
static XC_Cmd_Table_t XC_CMD_Table[] = {
|
||||
{XC_CMD_REBOOT, xc_reboot_handler},
|
||||
|
||||
{XC_CMD_RF_ACK_INIT, xc_rf_ack_init_handler},
|
||||
{XC_CMD_RF_ADV_INIT, xc_rf_adv_init_handler},
|
||||
{XC_CMD_RF_SINGLE_INIT, xc_rf_single_handler},
|
||||
{XC_CMD_RF_ACK_SEND_EVENT, xc_rf_ack_send_handler},
|
||||
{XC_CMD_RF_ACK_RECV_EVENT, xc_rf_ack_recv_handler},
|
||||
{XC_CMD_RF_ADV_SEND_EVENT, xc_rf_adv_send_handler},
|
||||
{XC_CMD_RF_ADV_RECV_EVENT, xc_rf_adv_recv_handler},
|
||||
{XC_CMD_RF_SET_CHANNEL, xc_rf_set_channel_handler},
|
||||
{XC_CMD_RF_SET_POWER, xc_rf_set_power_handler},
|
||||
{XC_CMD_RF_SET_RATE, xc_rf_set_trans_rate_handler},
|
||||
{XC_CMD_RF_SET_ADDR, xc_rf_set_addr_handler},
|
||||
{XC_CMD_RF_GET_REG_VALUE, xc_rf_get_reg_handler},
|
||||
{XC_CMD_RF_SET_ANA_REG, xc_rf_set_ana_reg_handler},
|
||||
{XC_CMD_RF_GET_ANA_REG, xc_rf_get_ana_reg_handler},
|
||||
};
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
#define XC_CMD_TABLE_SIZE (sizeof(XC_CMD_Table) / sizeof(XC_Cmd_Table_t))
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Global Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
eXC_Shell_Proc_state sh_sta = XC_SHELL_CMD_RECV;
|
||||
uint8_t recv_buff[XC_CMD_SIZE] = {0};
|
||||
//uint16_t recv_len = 0;
|
||||
/*------------------------------------------------------------------------------------
|
||||
Func Prototype
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
*
|
||||
* @return[out]
|
||||
*
|
||||
****************************************************************************************
|
||||
*/
|
||||
void xc_shell_init(void)
|
||||
{
|
||||
UART_InitCfg_t uart_cfg = {0};
|
||||
|
||||
uart_cfg.Parity = UART_PARITY_DISABLE;
|
||||
uart_cfg.StopBits = UART_STOP_1_BITS;
|
||||
uart_cfg.WordLength = UART_DATA_8_BITS;
|
||||
uart_cfg.BaudRate = UART_BAUDRATE_115200;
|
||||
uart_cfg.HardwareFlowControl = UART_HWFC_DISABLE;
|
||||
|
||||
xc_uart_init(UART0_IDX, &uart_cfg);
|
||||
|
||||
xc_uart_enable_rx_it(UART0_IDX);
|
||||
NVIC_EnableIRQ(UART0_IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
*
|
||||
* @return[out]
|
||||
*
|
||||
****************************************************************************************
|
||||
*/
|
||||
eXC_Cmd_State xc_shell_proc(uint8_t *data, uint16_t data_len)
|
||||
{
|
||||
int srgc = 0;
|
||||
int index = 0;
|
||||
char *ptr = NULL;
|
||||
char *srgv[XC_DATA_LEN];
|
||||
eXC_Cmd_State ret = XC_CMD_ERROR;
|
||||
uint8_t *rx_cmd = data + 2;
|
||||
|
||||
if (data_len <= 2 && data[data_len] == '\0') {
|
||||
LOGI("error 1\r\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
// 注意这里 XC指令 只判定大写
|
||||
if (data[0] != 'X' || data[1] != 'C') {
|
||||
LOGI("error 2 \r\n");
|
||||
goto xc_end;
|
||||
}
|
||||
|
||||
for (index = 0; index < XC_CMD_TABLE_SIZE; index++) {
|
||||
int cmd_len = strlen(XC_CMD_Table[index].cmd);
|
||||
if (!strncmp((const char *)rx_cmd, XC_CMD_Table[index].cmd, cmd_len)) {
|
||||
ptr = (char *)rx_cmd + cmd_len;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (index >= XC_CMD_TABLE_SIZE || !XC_CMD_Table[index].fn) {
|
||||
LOGI("error 3 \r\n");
|
||||
goto xc_end;
|
||||
}
|
||||
|
||||
if (ptr[0] == '?') {
|
||||
ret = XC_CMD_Table[index].fn(QUERY_CMD, srgc, srgv);
|
||||
} else if (ptr[0] == '=') {
|
||||
ptr += 1;
|
||||
char *str = strtok((char *)ptr, " ");
|
||||
|
||||
while (str) {
|
||||
srgv[srgc++] = str;
|
||||
str = strtok((char *)NULL, " ");
|
||||
}
|
||||
|
||||
ret = XC_CMD_Table[index].fn(SET_CMD, srgc, srgv);
|
||||
} else {
|
||||
LOGI("error 4 \r\n");
|
||||
ret = XC_CMD_ERROR;
|
||||
}
|
||||
|
||||
xc_end:
|
||||
if (ret == XC_CMD_ERROR) {
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s %x\r\n", XC_ERROR, 1);
|
||||
xc_uart_send_data(UART0_IDX, XC_Cmd, strlen((const char *)XC_Cmd));
|
||||
} else {
|
||||
xc_uart_send_data(UART0_IDX, XC_Cmd, strlen((const char *)XC_Cmd));
|
||||
}
|
||||
memset(XC_Cmd, 0, XC_CMD_SIZE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
*
|
||||
* @return[out]
|
||||
*
|
||||
****************************************************************************************
|
||||
*/
|
||||
|
||||
void shell_cmd_process(void)
|
||||
{
|
||||
/* main loop */
|
||||
static uint16_t recv_len = 0;
|
||||
switch (sh_sta) {
|
||||
case XC_SHELL_CMD_RECV: {
|
||||
// DEBUG(".");
|
||||
recv_len += xc_uart_receive_data(UART0_IDX, recv_buff + recv_len);
|
||||
if (recv_len) {
|
||||
if ((recv_buff[recv_len - 2] == '\r') &&
|
||||
(recv_buff[recv_len - 1] == '\n')) {
|
||||
sh_sta = XC_SHELL_CMD_PROC;
|
||||
//DEBUG("k");
|
||||
} else {
|
||||
//DEBUG("e");
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
||||
case XC_SHELL_CMD_PROC: {
|
||||
(void)xc_shell_proc(recv_buff, recv_len);
|
||||
recv_len = 0;
|
||||
sh_sta = XC_SHELL_CMD_RECV;
|
||||
} break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void xc_shell_test_case(void)
|
||||
{
|
||||
xc_shell_init();
|
||||
while (1) {
|
||||
shell_cmd_process();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
/*!
|
||||
* \file shell_handler.c
|
||||
*
|
||||
* \brief Target shell handler implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "shell_handler.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Global Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
uint8_t XC_Cmd[XC_CMD_SIZE] = {0};
|
||||
static eRF_MODE_Status rf_mode_status = RF_IDLE;
|
||||
static char ascii_char2val(const char c)
|
||||
{
|
||||
if (c >= '0' && c <= '9')
|
||||
return c - '0';
|
||||
if ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
|
||||
return (c & 0x7) + 9;
|
||||
|
||||
return (char)(-1);
|
||||
}
|
||||
/*-------------------------------------------------------------------------
|
||||
Function : ascii_strn2val ----add by chsheng,
|
||||
chsheng@accelsemi.com Return: -1=error Description: str = "123" bas = 10 return
|
||||
123 str = "123" bas = 16 return 0x123
|
||||
-------------------------------------------------------------------------*/
|
||||
int ascii_strn2val(const char str[], char base, char n)
|
||||
{
|
||||
int val = 0;
|
||||
char v;
|
||||
while (n != 0) {
|
||||
v = ascii_char2val(*str);
|
||||
#if 0
|
||||
if (v == -1 || v >= base)
|
||||
return -1;
|
||||
#else
|
||||
if (v == (char)(-1) || v >= base) {
|
||||
if (val == 0) // to filter abormal beginning and ending
|
||||
{
|
||||
str++;
|
||||
n--;
|
||||
continue;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
val = val * base + v;
|
||||
|
||||
str++;
|
||||
n--;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
*
|
||||
* @return[out]
|
||||
*
|
||||
****************************************************************************************
|
||||
*/
|
||||
eXC_Cmd_State xc_test_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_ERROR;
|
||||
|
||||
switch (opt) {
|
||||
case QUERY_CMD: {
|
||||
ret = XC_CMD_SUCCESS;
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\n", XC_OK);
|
||||
} break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
eRF_MODE_Status get_ble_init_flag(void) { return rf_mode_status; }
|
||||
|
||||
eXC_Cmd_State xc_reboot_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
WDT_InitCfg_t wdt_cfg ;
|
||||
|
||||
wdt_cfg.WorkMode = WDT_WORK_MODE0;
|
||||
wdt_cfg.ReloadValue = WDT_CLK_32M_RESET_MODE0_4096US;
|
||||
|
||||
xc_wdt_init( &wdt_cfg);
|
||||
xc_wdt_start();
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_REBOOT);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -0,0 +1,544 @@
|
||||
#include "shell_rf_handler.h"
|
||||
#include "app_rf24g.h"
|
||||
#include "xc6xxx_rf_single.h"
|
||||
erf_status_t rf_status = RF_STANY;
|
||||
|
||||
static uint8_t rf_ack_addr[5] = {0};
|
||||
uint32_t rf_ack_addr_l = 0;
|
||||
uint32_t rf_ack_addr_h = 0;
|
||||
uint8_t rf_ack_addr_width = 0;
|
||||
uint16_t temp_ch = 0;
|
||||
|
||||
#define setbit(x,y) ((x) |= (1<<(y)))
|
||||
#define clrbit(x,y) ((x) &= ~(1<<(y)))
|
||||
|
||||
void wbit(uint16_t reg_addr,int end,int start,uint32_t bit_str)
|
||||
{
|
||||
uint16_t reg_val = 0;
|
||||
|
||||
reg_val = *((volatile uint32_t *)(0x53021000UL + reg_addr * 4));
|
||||
//LOGI("1-reg_val:0x%04x,bit_str:0x%04x\n",reg_val,bit_str);
|
||||
uint16_t temp = 0;
|
||||
for(int i=start;i<=end;i++)
|
||||
{
|
||||
if((bit_str>>(temp++))&0x1)
|
||||
{
|
||||
setbit(reg_val,i);
|
||||
}
|
||||
else
|
||||
{
|
||||
clrbit(reg_val,i);
|
||||
}
|
||||
}
|
||||
//LOGI("2-reg_val:0x%04x\n",reg_val);
|
||||
*((volatile uint32_t *)(0x53021000UL + reg_addr * 4)) = reg_val;
|
||||
}
|
||||
|
||||
|
||||
uint16_t rbit(uint16_t reg_addr)
|
||||
{
|
||||
return *((volatile uint32_t *)(0x53021000UL + reg_addr * 4));
|
||||
}
|
||||
/**
|
||||
* @brief Rf 2.4g dump log
|
||||
* @param void
|
||||
*
|
||||
* @retval void
|
||||
*/
|
||||
void rf_dump_log(void)
|
||||
{
|
||||
LOGI("***************** 2.4G Param ******************\n");
|
||||
LOGI("CFG_TOP: 0x%08x\r\n", XC_RF_2_4G->CFG_TOP);
|
||||
LOGI("EN_AA: 0x%08x\r\n", XC_RF_2_4G->EN_AA);
|
||||
LOGI("EN_RXADDR: 0x%08x\r\n", XC_RF_2_4G->EN_RXADDR);
|
||||
LOGI("SETUP_AW: 0x%08x\r\n", XC_RF_2_4G->SETUP_AW);
|
||||
LOGI("SETUP_RETR: 0x%08x\r\n", XC_RF_2_4G->SETUP_RETR);
|
||||
LOGI("RF_CH: 0x%08x\r\n", XC_RF_2_4G->RF_CH);
|
||||
LOGI("SETUP_RF: 0x%08x\r\n", XC_RF_2_4G->SETUP_RF);
|
||||
LOGI("STATUS: 0x%08x\r\n", XC_RF_2_4G->STATUS);
|
||||
LOGI("OBSERVE_TX: 0x%08x\r\n", XC_RF_2_4G->OBSERVE_TX);
|
||||
LOGI("RSSI: 0x%08x\r\n", XC_RF_2_4G->RSSI);
|
||||
LOGI("RX_ADDR_P0: 0x%02x%08x\r\n", 0xFF & (XC_RF_2_4G->RX_ADDR_P0_H), XC_RF_2_4G->RX_ADDR_P0_L);
|
||||
LOGI("RX_ADDR_P1: 0x%02x %08x\r\n", 0xFF & (XC_RF_2_4G->RX_ADDR_P1_H), XC_RF_2_4G->RX_ADDR_P1_L);
|
||||
LOGI("RX_ADDR_P2TOP5:0x%08x\r\n", XC_RF_2_4G->RX_ADDR_P2TOP5);
|
||||
LOGI("BER_RESULT: 0x%08x%08x\r\n", XC_RF_2_4G->BER_ERR_CNT, XC_RF_2_4G->BER_RECV_CNT);
|
||||
LOGI("AGC_SETTING: 0x%08x\r\n", XC_RF_2_4G->AGC_SETTING);
|
||||
LOGI("PGA_SETTING: 0x%02x%08x\r\n", ((XC_RF_2_4G->TX_ADDR_H) & 0xFF00) >> 8, XC_RF_2_4G->PGA_SETTING);
|
||||
LOGI("TX_ADDR: 0x%02x%08x\r\n", ((XC_RF_2_4G->TX_ADDR_H) & 0xFF), XC_RF_2_4G->TX_ADDR_L);
|
||||
LOGI("RX_PW_PX: 0x%04x %08x\r\n", 0xFFFF & (XC_RF_2_4G->RX_PW_Px_H), XC_RF_2_4G->RX_PW_Px_L);
|
||||
LOGI("STATUS_FIFO: 0x%08x\r\n", XC_RF_2_4G->STATUS_FIFO);
|
||||
LOGI("RSSIREC: 0x%08x\r\n", XC_RF_2_4G->RSSIREC);
|
||||
LOGI("TXPROC_CFG: 0x%08x\r\n", XC_RF_2_4G->TXPROC_CFG);
|
||||
LOGI("RXPROC_CFG: 0x%02x%08x\r\n", 0xFF & (XC_RF_2_4G->RXPROC_CFG_H), XC_RF_2_4G->RXPROC_CFG_L);
|
||||
LOGI("DYNPD: 0x%08x\r\n", XC_RF_2_4G->DYNPD);
|
||||
LOGI("FEATURE: 0x%08x\r\n", XC_RF_2_4G->FEATURE);
|
||||
LOGI("PGA_SETTING_H: 0x%08x\r\n", XC_RF_2_4G->TX_ADDR_H);
|
||||
LOGI("TX_POWER 0x%08x\r\n", (XC_BT_RF->ana21_reg_l >> 6) & 0x3f);
|
||||
LOGI("ana2_reg_l: 0x%08x\r\n", XC_BT_RF->ana2_reg_l);
|
||||
LOGI("ana3_reg_l: 0x%08x\r\n", XC_BT_RF->ana3_reg_l);
|
||||
LOGI("ana11_reg_l: 0x%08x\r\n", XC_BT_RF->ana11_reg_l);
|
||||
LOGI("***********************************************\n");
|
||||
LOGI("\r\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf 2.4g get status
|
||||
* @param void
|
||||
*
|
||||
* @retval erf_status_t - rf_status
|
||||
*/
|
||||
erf_status_t rf24g_get_status(void) { return rf_status; }
|
||||
|
||||
/**
|
||||
* @brief Rf ack init handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_ack_init_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
uint8_t rf_mode = ascii_strn2val((const char *)srgv[0], 16, 2);
|
||||
uint16_t rf_channel = ascii_strn2val((const char *)srgv[1], 10, 4);
|
||||
|
||||
LOGI("mode:%d---- channel:%04x", rf_mode, rf_channel);
|
||||
rf24g_init();
|
||||
set_rf_mode(rf_mode);
|
||||
rf_set_channel(rf_channel);
|
||||
rf_dump_log();
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_ACK_INIT);
|
||||
rf_status = RF_STANY;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf adv init handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_adv_init_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
|
||||
uint8_t rf_mode = ascii_strn2val((const char *)srgv[0], 16, 2);
|
||||
uint16_t rf_channel = ascii_strn2val((const char *)srgv[1], 10, 4);
|
||||
|
||||
rf24g_adv_init();
|
||||
set_rf_mode(rf_mode);
|
||||
rf_set_channel(rf_channel);
|
||||
|
||||
rf_dump_log();
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_ADV_INIT);
|
||||
rf_status = RF_STANY;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf single init handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_single_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
|
||||
rf_single_init();
|
||||
|
||||
uint16_t rf_channel = ascii_strn2val((const char *)srgv[0], 10, 4);
|
||||
/* */
|
||||
uint16_t tx_proc_cfg = ascii_strn2val((const char *)srgv[1], 16, 2);
|
||||
|
||||
if (tx_proc_cfg == NULL) {
|
||||
tx_proc_cfg = 0;
|
||||
}
|
||||
|
||||
XC_RF_2_4G->TXPROC_CFG = tx_proc_cfg;
|
||||
rf_set_channel(rf_channel);
|
||||
|
||||
rf_dump_log();
|
||||
uint32_t channel = XC_RF_2_4G->RF_CH;
|
||||
temp_ch = 0;
|
||||
if (channel == rf_channel) {
|
||||
temp_ch = rf_channel;
|
||||
LOGI("OK:%d\r\n", channel);
|
||||
} else {
|
||||
LOGI("error:%d\r\n", channel);
|
||||
}
|
||||
|
||||
rf_status = RF_SINGLE;
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_SINGLE_INIT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf ack send handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_ack_send_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
static uint16_t rf_channel = 0;
|
||||
rf_ack_addr_l = XC_RF_2_4G->TX_ADDR_L;
|
||||
rf_ack_addr_h = XC_RF_2_4G->TX_ADDR_H;
|
||||
|
||||
rf_channel = ascii_strn2val((const char *)srgv[0], 10, 4);
|
||||
|
||||
rf_ack_addr_width = ascii_strn2val((const char *)srgv[1], 16, 2);
|
||||
|
||||
if (rf_ack_addr_width != 0) {
|
||||
/* Address buffer */
|
||||
for (uint8_t i = 0; i < rf_ack_addr_width; i++) {
|
||||
rf_ack_addr[i] = ascii_strn2val((const char *)srgv[2 + i], 16, 2);
|
||||
rf_ack_addr_l &= ~(0xff << (8 * i));
|
||||
if (i == 5)
|
||||
rf_ack_addr_h &= ~0xff;
|
||||
}
|
||||
for (uint8_t i = 0; i < rf_ack_addr_width; i++) {
|
||||
rf_ack_addr_l |= rf_ack_addr[rf_ack_addr_width - i - 1] << (i * 8);
|
||||
}
|
||||
if (rf_ack_addr_width == 5)
|
||||
rf_ack_addr_h = rf_ack_addr[0];
|
||||
else
|
||||
rf_ack_addr_h = XC_RF_2_4G->RX_ADDR_P0_H;
|
||||
/* Set PTX address */
|
||||
set_rf_txaddr(rf_ack_addr_l, rf_ack_addr_h);
|
||||
|
||||
/* Set PRX address */
|
||||
set_rf_pipe0_rxaddr(rf_ack_addr_l, rf_ack_addr_h);
|
||||
|
||||
/* Set address width */
|
||||
set_rf_tx_addr_width(rf_ack_addr_width);
|
||||
|
||||
memset(rf_ack_addr, 0, 5);
|
||||
}
|
||||
|
||||
set_rf_mode(TX_MODE);
|
||||
rf_set_channel(rf_channel);
|
||||
uint32_t channel = XC_RF_2_4G->RF_CH;
|
||||
if (channel == rf_channel) {
|
||||
LOGI("OK:%02x\r\n", channel);
|
||||
} else {
|
||||
LOGI("error:%02x\r\n", channel);
|
||||
}
|
||||
tx_cnt = 0;
|
||||
// rf_data.cnt = 0;
|
||||
rf_dump_log();
|
||||
rf_status = RF_ACK_SEND;
|
||||
|
||||
// timer_init(XC_RF_SEND_TIMER, SEND_TIMERMS_CNT);
|
||||
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_ACK_SEND_EVENT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf ack recv handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_ack_recv_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
rf_ack_addr_l = XC_RF_2_4G->TX_ADDR_L;
|
||||
rf_ack_addr_h = XC_RF_2_4G->TX_ADDR_H;
|
||||
|
||||
static uint16_t rf_channel = 0;
|
||||
rf_channel = ascii_strn2val((const char *)srgv[0], 10, 4);
|
||||
|
||||
rf_ack_addr_width = ascii_strn2val((const char *)srgv[1], 16, 2);
|
||||
|
||||
if (rf_ack_addr_width != 0) {
|
||||
for (uint8_t i = 0; i < rf_ack_addr_width; i++) {
|
||||
rf_ack_addr[i] = ascii_strn2val((const char *)srgv[2 + i], 16, 2);
|
||||
rf_ack_addr_l &= ~(0xff << (8 * i));
|
||||
if (i == 5)
|
||||
rf_ack_addr_h &= ~0xff;
|
||||
}
|
||||
for (uint8_t i = 0; i < rf_ack_addr_width; i++) {
|
||||
rf_ack_addr_l |= rf_ack_addr[rf_ack_addr_width - i - 1] << (i * 8);
|
||||
}
|
||||
if (rf_ack_addr_width == 5)
|
||||
rf_ack_addr_h = rf_ack_addr[0];
|
||||
else
|
||||
rf_ack_addr_h = XC_RF_2_4G->RX_ADDR_P0_H;
|
||||
/* Set PTX address */
|
||||
set_rf_txaddr(rf_ack_addr_l, rf_ack_addr_h);
|
||||
|
||||
/* Set PRX address */
|
||||
set_rf_pipe0_rxaddr(rf_ack_addr_l, rf_ack_addr_h);
|
||||
|
||||
/* Set address width */
|
||||
set_rf_tx_addr_width(rf_ack_addr_width);
|
||||
}
|
||||
|
||||
set_rf_mode(RX_MODE);
|
||||
rf_set_channel(rf_channel);
|
||||
|
||||
rf_status = RF_ACK_RECV;
|
||||
rx_cnt = 0;
|
||||
CE_CTL_HIGH;
|
||||
rf_dump_log();
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_ACK_RECV_EVENT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf adv send handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_adv_send_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
|
||||
uint16_t rf_channel = ascii_strn2val((const char *)srgv[0], 10, 4);
|
||||
|
||||
set_rf_mode(TX_MODE);
|
||||
/* Set testing frequency points */
|
||||
rf_set_channel(rf_channel);
|
||||
|
||||
rf_status = RF_ADV_SEND;
|
||||
|
||||
rf_dump_log();
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_ADV_SEND_EVENT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf adv recv handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_adv_recv_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
|
||||
uint16_t rf_channel = ascii_strn2val((const char *)srgv[0], 10, 4);
|
||||
|
||||
/* Set mode */
|
||||
set_rf_mode(RX_MODE);
|
||||
|
||||
LOGI("************ADV Recv Start**************\r\n");
|
||||
|
||||
/* Set testing frequency points */
|
||||
rf_set_channel(rf_channel);
|
||||
rf_dump_log();
|
||||
|
||||
#if (XINCX_RF_ADV_NVIC_MODE == true)
|
||||
/* Enable RF24G interrupt */
|
||||
NVIC_EnableIRQ(RF24G_IRQn);
|
||||
#endif
|
||||
rf_status = RF_ADV_RECV;
|
||||
|
||||
XC_RF_2_4G->CMD_CFG = CMD_DONE | FLUSH_RX;
|
||||
XC_RF_2_4G->CMD_CFG = CMD_DONE | FLUSH_TX;
|
||||
XC_RF_2_4G->STATUS = MASK_ALL_INTER;
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_ADV_RECV_EVENT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf set channel handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_set_channel_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
static uint16_t rf_channel = 0;
|
||||
|
||||
rf_channel = ascii_strn2val((const char *)srgv[0], 10, 4);
|
||||
|
||||
rf_set_channel(rf_channel);
|
||||
|
||||
uint32_t channel = XC_RF_2_4G->RF_CH;
|
||||
if (channel == rf_channel) {
|
||||
LOGI("OK:%02x\r\n", channel);
|
||||
} else {
|
||||
LOGI("error:%02x\r\n", channel);
|
||||
}
|
||||
LOGI("CHANNEL:%d\r\n", XC_RF_2_4G->RF_CH & 0x3ff);
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_SET_CHANNEL);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf set power handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_set_power_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
static uint8_t rf_power = 0;
|
||||
|
||||
rf_power = ascii_strn2val((const char *)srgv[0], 16, 2);
|
||||
set_rf_power(rf_power);
|
||||
|
||||
uint8_t power = (XC_BT_RF->ana21_reg_l >> 6) & 0x3f;
|
||||
|
||||
if (power == rf_power) {
|
||||
LOGI("OK:%02x\r\n", power);
|
||||
ret = XC_CMD_SUCCESS;
|
||||
} else {
|
||||
LOGI("error:%02x\r\n", power);
|
||||
ret = XC_CMD_ERROR;
|
||||
}
|
||||
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_SET_POWER);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf set trans rate handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_set_trans_rate_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
|
||||
static uint8_t rf_trans_rate = 0;
|
||||
rf_trans_rate = ascii_strn2val((const char *)srgv[0], 16, 2);
|
||||
|
||||
set_rf_DR(rf_trans_rate);
|
||||
uint8_t rf_rate = XC_RF_2_4G->SETUP_RF;
|
||||
|
||||
if (rf_rate == rf_trans_rate) {
|
||||
// if(rf_rate == DR_2M){
|
||||
// rf_2M_config();
|
||||
// }
|
||||
LOGI("OK:%02x\r\n", rf_rate);
|
||||
ret = XC_CMD_SUCCESS;
|
||||
} else {
|
||||
LOGI("error:%02x\r\n", rf_rate);
|
||||
ret = XC_CMD_ERROR;
|
||||
}
|
||||
|
||||
LOGI("SETUP:%04x\r\n", XC_RF_2_4G->SETUP_RF);
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_SET_RATE);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf set addr handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_set_addr_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
rf_ack_addr_width = ascii_strn2val((const char *)srgv[0], 16, 2);
|
||||
rf_ack_addr_l = XC_RF_2_4G->TX_ADDR_L;
|
||||
rf_ack_addr_h = XC_RF_2_4G->TX_ADDR_H;
|
||||
|
||||
for (uint8_t i = 0; i < rf_ack_addr_width; i++) {
|
||||
rf_ack_addr[i] = ascii_strn2val((const char *)srgv[1 + i], 16, 2);
|
||||
rf_ack_addr_l &= ~(0xff << (8 * i));
|
||||
if (i == 5)
|
||||
rf_ack_addr_h &= ~0xff;
|
||||
}
|
||||
|
||||
if (rf_ack_addr_width == 0x5) {
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
rf_ack_addr_l |= rf_ack_addr[4 - i] << (i * 8);
|
||||
}
|
||||
rf_ack_addr_h = rf_ack_addr[0];
|
||||
} else {
|
||||
for (uint8_t i = 0; i < rf_ack_addr_width; i++) {
|
||||
for (uint8_t i = 0; i < rf_ack_addr_width; i++) {
|
||||
rf_ack_addr_l |= rf_ack_addr[rf_ack_addr_width - 1 - i] << (i * 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Set PTX address */
|
||||
set_rf_txaddr(rf_ack_addr_l, rf_ack_addr_h);
|
||||
|
||||
/* Set PRX address */
|
||||
set_rf_pipe0_rxaddr(rf_ack_addr_l, rf_ack_addr_h);
|
||||
|
||||
/* Set address width */
|
||||
set_rf_tx_addr_width(rf_ack_addr_width);
|
||||
|
||||
LOGI("TX_ADDR: 0x%02x%08x\r\n", ((XC_RF_2_4G->TX_ADDR_H) & 0xFF), XC_RF_2_4G->TX_ADDR_L);
|
||||
|
||||
rf_ack_addr_l = 0;
|
||||
rf_ack_addr_h = 0;
|
||||
memset(rf_ack_addr, 0, sizeof(rf_ack_addr));
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_SET_ADDR);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf get reg handler
|
||||
* @param eCMD_Type - opt
|
||||
* @param int - srgc
|
||||
* @param char * - srgv[]
|
||||
* @retval erf_status_t - ret
|
||||
*/
|
||||
eXC_Cmd_State xc_rf_get_reg_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
uint8_t rf24g_reg_addr = 0;
|
||||
rf24g_reg_addr = ascii_strn2val((const char *)srgv[0], 16, 2);
|
||||
|
||||
uint32_t reg_temp = XC_RF_2_4G_BASE + rf24g_reg_addr * 4;
|
||||
LOGI("REG(%02x):%08x\r\n", reg_temp, *(uint32_t *)reg_temp);
|
||||
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_GET_REG_VALUE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
eXC_Cmd_State xc_rf_set_ana_reg_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
uint8_t rf_reg_value = ascii_strn2val((const char *)srgv[0], 10, 2);
|
||||
uint8_t start_bit = ascii_strn2val((const char *)srgv[1], 10, 2);
|
||||
uint8_t end_bit = ascii_strn2val((const char *)srgv[2], 10, 2);
|
||||
uint8_t set_value_b = ascii_strn2val((const char *)srgv[3], 16, 2);
|
||||
|
||||
LOGI("W_REG(%02x)[%d:%d]:%d\r\n", ((volatile uint32_t *)(0x53021000UL + rf_reg_value * 4)), start_bit,end_bit, ascii_strn2val((const char *)srgv[3], 16, 2));
|
||||
//printf("addr:%04x\n",*((volatile uint32_t *)(0x53021000UL + rf_reg_value * 4)));
|
||||
wbit(rf_reg_value,start_bit,end_bit,set_value_b);
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_SET_ANA_REG);
|
||||
//printf("addr:%04x\n",*((volatile uint32_t *)(0x53021000UL + rf_reg_value * 4)));
|
||||
return ret;
|
||||
}
|
||||
eXC_Cmd_State xc_rf_get_ana_reg_handler(eCMD_Type opt, int srgc, char *srgv[])
|
||||
{
|
||||
eXC_Cmd_State ret = XC_CMD_SUCCESS;
|
||||
|
||||
uint8_t rf_reg_value = ascii_strn2val((const char *)srgv[0], 10, 2);
|
||||
LOGI("addr:0x53021000UL+%x;value:0x%04x",rf_reg_value*4, rbit(rf_reg_value));
|
||||
snprintf((char *)XC_Cmd, XC_CMD_SIZE, "\r\n%s\r\nOK\r\n", XC_CMD_RF_GET_ANA_REG);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,323 @@
|
||||
#include "app_rf24g.h"
|
||||
extern uint8_t recv_buf[256];
|
||||
uint8_t recv_adv_buf[ADV_LENGTH];
|
||||
bool rf_send_timer_flag = false;
|
||||
extern bool rf24g_handler_flag;
|
||||
uint8_t rf_adv_channel[] = {RF_ADV_CHANNEL_37, RF_ADV_CHANNEL_38, RF_ADV_CHANNEL_39};
|
||||
uint8_t adv_index = 0;
|
||||
|
||||
uint32_t tx_cnt = 0, rx_cnt = 0;
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void timer_init(uint8_t timer_id, uint32_t timer_cnt)
|
||||
{
|
||||
LOGI("timer_init\r\n");
|
||||
|
||||
uint32_t timerx_us = timer_cnt * 1000;
|
||||
Timer_InitCfg_t timer_cfg;
|
||||
|
||||
timer_cfg.timer_src_clk = TIMER_CLK_SRC_32M_DIV;
|
||||
timer_cfg.timer_div_clk = TIMER_DIV_CLK_1MHzOr1K;
|
||||
timer_cfg.timer_mode = TIMER_MODE_CYCLE;
|
||||
|
||||
xc_timer_init(timer_id, &timer_cfg);
|
||||
xc_timer_set_value(timer_id, timerx_us);
|
||||
xc_timer_start(timer_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Timer0_Callback
|
||||
* @param void * - context
|
||||
*
|
||||
* @retval void
|
||||
*/
|
||||
void timer0_callback(void *context)
|
||||
{
|
||||
LOGI("Timer0_Callback\r\n");
|
||||
#if !(XINCX_RF_MODE)
|
||||
rf_send_timer_flag = true;
|
||||
#endif // !(XINCX_RF_MODE)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RF 2.4g data config
|
||||
* @param uint8_t * - buff
|
||||
* uint8 - len
|
||||
* @retval uint8_t - 0
|
||||
*/
|
||||
uint8_t rf_data_config(uint8_t *buff, uint8_t len)
|
||||
{
|
||||
if (len == 0) {
|
||||
return RF_FAIL;
|
||||
}
|
||||
|
||||
for (uint8_t i = 0; i < len; i++) {
|
||||
buff[i] = i;
|
||||
}
|
||||
return RF_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RF 2.4g tx manage
|
||||
* @param rf_data_typedef_t * - rf_data
|
||||
* @retval uint8_t - cnt
|
||||
*/
|
||||
uint32_t rf_ack_tx_manage(uint8_t *buff)
|
||||
{
|
||||
if ((tx_cnt < XC_SEND_NUM)) { //&& (rf_send_timer_flag)) {
|
||||
rf_send_timer_flag = false;
|
||||
|
||||
tx_cnt += 1;
|
||||
|
||||
/* Filling in software frame number */
|
||||
buff[0] = tx_cnt;
|
||||
|
||||
LOGI("send_cnt:%d\r\n", tx_cnt);
|
||||
|
||||
/* data transmission */
|
||||
rf_tx_event(buff, BUFF_LEN);
|
||||
|
||||
/* TX data packaging filling */
|
||||
rf_data_config(buff, BUFF_LEN);
|
||||
}
|
||||
if (tx_cnt == XC_SEND_NUM) {
|
||||
tx_cnt += 1;
|
||||
LOGI("SEND END\r\n");
|
||||
|
||||
/* Turn off the send timer */
|
||||
// xc_timer_stop(XC_RF_SEND_TIMER);
|
||||
}
|
||||
return tx_cnt;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RF 2.4g rx manage
|
||||
* @param rf_data_typedef_t * - rf_data
|
||||
* @retval uint32_t - 0
|
||||
*/
|
||||
|
||||
#if !(XINCX_RF_NVIC_MODE)
|
||||
uint32_t rf_ack_rx_manage(uint8_t *buff)
|
||||
{
|
||||
static uint32_t conut = 0;
|
||||
|
||||
/* Receive event processing */
|
||||
uint8_t len = rf_rx_event(buff);
|
||||
|
||||
/* Receiving end polling data processing */
|
||||
if (len != 0) {
|
||||
/* Entering standby mode */
|
||||
CE_CTL_LOW;
|
||||
|
||||
/* Receiving data processing */
|
||||
if (buff[RF_CONFIRMED_VALUE] == RF_CONFIRMED_VALUE) {
|
||||
LOGI("%d\r\n", rx_cnt);
|
||||
}
|
||||
|
||||
/* Receive Count */
|
||||
rx_cnt += 1;
|
||||
|
||||
/* Receive read data buffer reset */
|
||||
memset(buff, 0, len);
|
||||
len = 0;
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
uint32_t rf_ack_rx_manage(rf_data_typedef_t *rf_data)
|
||||
{
|
||||
uint8_t len = recv_len;
|
||||
if (rf24g_handler_flag) {
|
||||
rf24g_handler_flag = false;
|
||||
/* Entering standby mode */
|
||||
CE_CTL_LOW;
|
||||
|
||||
if ((len != 0) && (recv_buf[RF_CONFIRMED_VALUE] == RF_CONFIRMED_VALUE)) {
|
||||
LOGI("%d\r\n", recv_buf[0]);
|
||||
}
|
||||
|
||||
/* Receive Count */
|
||||
rx_cnt += 1;
|
||||
LOGI("recv:%d\r\n", rx_cnt);
|
||||
|
||||
/* Receive read data buffer reset */
|
||||
memset(recv_buf, 0, len);
|
||||
len = 0;
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief RF ADV data package filling
|
||||
* @param uint8_t * - buff
|
||||
* uint8_t - len
|
||||
* @return uint8_t - data len
|
||||
*/
|
||||
|
||||
uint8_t rf_adv_packet(uint8_t *buff)
|
||||
{
|
||||
if (sizeof(buff) > ADV_LENGTH) {
|
||||
buff = NULL;
|
||||
return RF_FAIL;
|
||||
}
|
||||
|
||||
uint8_t l = 0;
|
||||
|
||||
buff[l++] = 0x42;
|
||||
buff[l++] = ADV_LENGTH - 5;
|
||||
|
||||
/* Simulate Bluetooth MAC address */
|
||||
uint8_t rf_adv_mac_addr[6] = {MAC_ADDR_0, MAC_ADDR_1, MAC_ADDR_2, MAC_ADDR_3, MAC_ADDR_4, MAC_ADDR_5};
|
||||
memcpy(&buff[l], rf_adv_mac_addr, sizeof(rf_adv_mac_addr));
|
||||
l += sizeof(rf_adv_mac_addr);
|
||||
|
||||
buff[l++] = 0x02;
|
||||
buff[l++] = 0x01;
|
||||
buff[l++] = 0x06;
|
||||
|
||||
buff[l++] = ADV_LENGTH - 15;
|
||||
|
||||
// Complete Local Name
|
||||
buff[l++] = 0x09;
|
||||
|
||||
/* Simulate Bluetooth broadcast data */
|
||||
uint8_t rf_adv_data_buff[26] = {"RF-ADV-TEST-123456789BLE52"};
|
||||
memcpy(&buff[l], rf_adv_data_buff, sizeof(rf_adv_data_buff));
|
||||
l += sizeof(rf_adv_data_buff);
|
||||
|
||||
/* CRC */
|
||||
buff[l++] = 0x55;
|
||||
buff[l++] = 0x55;
|
||||
buff[l++] = 0x55;
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Rf adv tx event
|
||||
* @param void
|
||||
*
|
||||
* @retval void
|
||||
*/
|
||||
|
||||
void rf_adv_tx_evevt(void)
|
||||
{
|
||||
uint8_t len = 0;
|
||||
uint8_t buff[ADV_LENGTH];
|
||||
|
||||
/* Set testing frequency points */
|
||||
rf_set_channel(RF_ADV_BASE + rf_adv_channel[adv_index]);
|
||||
|
||||
/* Simulate Bluetooth broadcast data filling */
|
||||
len = rf_adv_packet(buff);
|
||||
|
||||
/* Simulate Bluetooth broadcast package software CRC */
|
||||
ble_crc(buff, len - 3, buff + len - 3);
|
||||
|
||||
/* Simulate Bluetooth broadcast package software whitening */
|
||||
ble_whiten(buff, len, bleWhitenStart(RF_ADV_BASE + rf_adv_channel[adv_index]));
|
||||
|
||||
/* Send data processing */
|
||||
rf_tx_packet(buff, len);
|
||||
|
||||
adv_index += 1;
|
||||
if (adv_index == sizeof(rf_adv_channel)) {
|
||||
adv_index = 0;
|
||||
delay_ms(10);
|
||||
}
|
||||
delay_ms(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RF rx adv event
|
||||
* @param void
|
||||
*
|
||||
* @retval void
|
||||
*/
|
||||
|
||||
#if (XINCX_RF_ADV_NVIC_MODE == true)
|
||||
void rf_adv_rx_evevt(void)
|
||||
{
|
||||
uint8_t data_len = 0;
|
||||
uint32_t blecrc = 0;
|
||||
|
||||
// printf("rf_adv_rx_evevt\r\n");
|
||||
|
||||
if ((recv_len != 0) && (rf24g_handler_flag)) {
|
||||
/* Entering standby mode */
|
||||
CE_CTL_LOW;
|
||||
rf24g_handler_flag = false;
|
||||
|
||||
/* Whitening of packet software */
|
||||
blecrc = rf_adv_packet_whiten(&data_len);
|
||||
|
||||
/* Packet software CRC judgment */
|
||||
if (rf_adv_crc(recv_adv_buf, &data_len, blecrc) == 1) {
|
||||
/* Only after 5 bytes is valid data */
|
||||
for (uint8_t i = 0; i < data_len + 5; i++)
|
||||
LOGI("%02x ", recv_adv_buf[i]);
|
||||
LOGI("\r\n");
|
||||
}
|
||||
|
||||
memset(recv_adv_buf, 0, sizeof(recv_adv_buf));
|
||||
recv_len = 0;
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
}
|
||||
}
|
||||
#else
|
||||
void rf_adv_rx_evevt(void)
|
||||
{
|
||||
uint8_t data_len = 0;
|
||||
uint32_t blecrc = 0;
|
||||
|
||||
if ((XC_RF_2_4G->STATUS) & MASK_RX_DR) {
|
||||
/* Entering standby mode */
|
||||
CE_CTL_LOW;
|
||||
|
||||
recv_len = rf_rx_packet(recv_adv_buf);
|
||||
if (recv_len != 0) {
|
||||
/* Whitening of packet software */
|
||||
blecrc = rf_adv_packet_whiten(&data_len);
|
||||
|
||||
/* Packet software CRC judgment */
|
||||
//if (rf_adv_crc(recv_adv_buf, &data_len, blecrc) == 1)
|
||||
{
|
||||
for (uint8_t i = 0; i < data_len + 5; i++)
|
||||
LOGI("%02x ", recv_adv_buf[i]);
|
||||
LOGI("\r\n");
|
||||
}
|
||||
|
||||
memset(recv_adv_buf, 0, sizeof(recv_adv_buf));
|
||||
recv_len = 0;
|
||||
}
|
||||
|
||||
/* Entering the receiver */
|
||||
CE_CTL_HIGH;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
extern uint16_t temp_ch;
|
||||
void rf_single_event(void)
|
||||
{
|
||||
rf_set_channel(temp_ch);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,289 @@
|
||||
/*!
|
||||
* \file main.c
|
||||
*
|
||||
* \brief Target main implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "shell.h"
|
||||
#include "app_rf24g.h"
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Global Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Func Prototype
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief Clock Initialization
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void clock_init(void)
|
||||
{
|
||||
CLOCK_InitCfg_t clock_cfg;
|
||||
|
||||
clock_cfg.hfclk_src = CLOCK_HFCLK_SRC_XTAL;
|
||||
clock_cfg.hfclk_in = CLOCK_HFCLK_IN_32M;
|
||||
#if (RC_32K)
|
||||
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_RC;
|
||||
#endif //(RC_32K)
|
||||
|
||||
#if (XTAL_32K)
|
||||
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_XTAL;
|
||||
#endif // (XTAL_32K)
|
||||
|
||||
#if (XTAL_32768K)
|
||||
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_XTAL;
|
||||
#endif // (XTAL_32768K)
|
||||
|
||||
if (clock_cfg.lfclk_src == CLOCK_LFCLK_SRC_XTAL) {
|
||||
clock_cfg.lfclk_in = CLOCK_LFCLK_IN_32768;
|
||||
} else if (clock_cfg.lfclk_src == CLOCK_LFCLK_SRC_RC) {
|
||||
clock_cfg.lfclk_in = CLOCK_LFCLK_IN_32K;
|
||||
}
|
||||
|
||||
xc_clock_init_cfg(&clock_cfg);
|
||||
|
||||
SysTick_Config(xc_clock_hfclk_in_get() / 100);
|
||||
SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
|
||||
}
|
||||
|
||||
void rf_2M_reg_info(void)
|
||||
{
|
||||
/* Register information printing */
|
||||
LOGI("CFG_TOP: 0x%08x\r\n", XC_RF_2_4G->CFG_TOP);
|
||||
LOGI("TXPROC_CFG: 0x%08x\r\n", XC_RF_2_4G->TXPROC_CFG);
|
||||
LOGI("RXPROC_CFG_L: 0x%08x\r\n", XC_RF_2_4G->RXPROC_CFG_L);
|
||||
LOGI("RF_CH: 0x%08x\r\n", XC_RF_2_4G->RF_CH);
|
||||
LOGI("rccal_reg_l: 0x%08x\r\n", XC_BT_RF->rccal_reg_l);
|
||||
LOGI("ana2_reg_l: 0x%08x\r\n", XC_BT_RF->ana2_reg_l);
|
||||
LOGI("ana3_reg_l: 0x%08x\r\n", XC_BT_RF->ana3_reg_l);
|
||||
LOGI("ana4_reg_l: 0x%08x\r\n", XC_BT_RF->ana4_reg_l);
|
||||
LOGI("ana5_reg_l: 0x%08x\r\n", XC_BT_RF->ana5_reg_l);
|
||||
LOGI("ana14_reg_l: 0x%08x\r\n", XC_BT_RF->ana14_reg_l);
|
||||
LOGI("ana15_reg_l: 0x%08x\r\n", XC_BT_RF->ana15_reg_l);
|
||||
LOGI("ana16_reg_l: 0x%08x\r\n", XC_BT_RF->ana16_reg_l);
|
||||
LOGI("ana17_reg_l: 0x%08x\r\n", XC_BT_RF->ana17_reg_l);
|
||||
LOGI("ana18_reg_l: 0x%08x\r\n", XC_BT_RF->ana18_reg_l);
|
||||
LOGI("ana21_reg_l: 0x%08x\r\n", XC_BT_RF->ana21_reg_l);
|
||||
LOGI("AON_RF_AONREG: 0x%08x\r\n", cprao_aon_rf_aonreg_get()); // 0x36
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RF 2.4g buff info
|
||||
* @param uint8_t * - buff
|
||||
* uint8_t len
|
||||
* @retval void
|
||||
*/
|
||||
void rf_buff_info(uint8_t *buff, uint8_t len)
|
||||
{
|
||||
for (uint8_t i = 0; i < len; i++)
|
||||
LOGI("%02x ", buff[i]);
|
||||
LOGI("\r\n");
|
||||
}
|
||||
|
||||
#define UART0_BUFFER_LEN 128
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t r_buff[26];
|
||||
uint8_t w_buff[26];
|
||||
uint8_t r_len;
|
||||
bool rx_done;
|
||||
} uart_user_t;
|
||||
|
||||
uint8_t uart0_buff[UART0_BUFFER_LEN];
|
||||
uart_user_t uart_user_ctl;
|
||||
ring_buffer_t uart0_ring_buff;
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
void uart_receive_cb(uint8_t *buff, uint16_t len)
|
||||
{
|
||||
static uint8_t cnt = 0;
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
uart_user_ctl.r_buff[cnt++] = buff[i];
|
||||
uart_user_ctl.r_len++;
|
||||
ring_buffer_queue(&uart0_ring_buff, buff[i]);
|
||||
}
|
||||
|
||||
// if (cnt == sizeof(uart_user_ctl.r_buff))
|
||||
{
|
||||
uart_user_ctl.rx_done = true;
|
||||
cnt = 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
void app_uart_init(void)
|
||||
{
|
||||
GPIO_InitCfg_t gpio_cfg = {0};
|
||||
|
||||
gpio_cfg.Mux = GPIO_Mux0;
|
||||
gpio_cfg.Pull = GPIO_PULLUP;
|
||||
gpio_cfg.Int = NOT_INT;
|
||||
gpio_cfg.FunSel = UART0_TX;
|
||||
|
||||
gpio_cfg.Pin = GPIO_18;
|
||||
gpio_cfg.Dir = GPIO_DIR_OUTPUT;
|
||||
xc_gpio_init(&gpio_cfg);
|
||||
|
||||
gpio_cfg.FunSel = UART0_RX;
|
||||
gpio_cfg.Pin = GPIO_19;
|
||||
gpio_cfg.Dir = GPIO_DIR_INPUT;
|
||||
xc_gpio_init(&gpio_cfg);
|
||||
|
||||
UART_InitCfg_t uart_cfg = {0};
|
||||
|
||||
uart_cfg.Parity = UART_PARITY_DISABLE;
|
||||
uart_cfg.StopBits = UART_STOP_1_BITS;
|
||||
uart_cfg.WordLength = UART_DATA_8_BITS;
|
||||
uart_cfg.BaudRate = UART_BAUDRATE_115200;
|
||||
uart_cfg.HardwareFlowControl = UART_HWFC_DISABLE;
|
||||
|
||||
xc_uart_init(UART0_IDX, &uart_cfg);
|
||||
|
||||
ring_buffer_create(&uart0_ring_buff, uart0_buff, UART0_BUFFER_LEN);
|
||||
xc_uart_register_receive_cb(uart_receive_cb);
|
||||
|
||||
xc_uart_enable_rx_it(UART0_IDX);
|
||||
|
||||
NVIC_EnableIRQ(UART0_IRQn);
|
||||
}
|
||||
|
||||
uint16_t xc_uart_receive_data(uint8_t reg_idx, uint8_t *data)
|
||||
{
|
||||
if(!ring_buffer_is_empty(&uart0_ring_buff)){
|
||||
uint16_t recv_len = ring_buffer_num_items(&uart0_ring_buff);
|
||||
ring_buffer_dequeue_arr(&uart0_ring_buff, data, recv_len);
|
||||
return recv_len;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void wdt_init(void)
|
||||
{
|
||||
WDT_InitCfg_t wdt_cfg ;
|
||||
|
||||
wdt_cfg.WorkMode = WDT_WORK_MODE0;
|
||||
|
||||
wdt_cfg.ReloadValue = WDT_CLK_32K_RESET_MODE0_1048576MS;
|
||||
|
||||
wdt_cfg.PclkSel = WDT_WORK_32K;
|
||||
|
||||
xc_wdt_init(&wdt_cfg);
|
||||
}
|
||||
/**
|
||||
* @brief main
|
||||
* @details
|
||||
* @param[in] void
|
||||
* @param[out] void
|
||||
* @retval int - 0
|
||||
* @retval void
|
||||
* @par identifier
|
||||
* reserve
|
||||
* @par other
|
||||
* void
|
||||
* @par change log
|
||||
* Alex created on 2023-05-31
|
||||
*/
|
||||
//rf_data_typedef_t rf_data;
|
||||
int main(void)
|
||||
{
|
||||
bool rf_send_timer_flag = false;
|
||||
erf_status_t rf24g_stat = RF_STANY;
|
||||
|
||||
uint8_t tx_buff[255] = {0};
|
||||
uint8_t rx_buff[255] = {0};
|
||||
uint32_t tx_cnt = 0,rx_cnt = 0;
|
||||
uint8_t tx_len = 0,rx_len = 0;
|
||||
xc_shell_init();
|
||||
|
||||
/* TX data packaging filling */
|
||||
// rf_data_config(rf_data.buff, sizeof(rf_data.buff));
|
||||
// rf_data.cnt = 0;
|
||||
// rf_data.temp = SEND_TIMERMS_CNT;
|
||||
/* Clock initialization */
|
||||
clock_init();
|
||||
|
||||
wdt_init();
|
||||
/* Serial port initialization */
|
||||
app_uart_init();
|
||||
/* rf 2.4g initialization configuration */
|
||||
rf24g_init();
|
||||
rf_dump_log();
|
||||
xc_wdt_start();
|
||||
rf_data_config(tx_buff,BUFF_LEN);
|
||||
|
||||
|
||||
while (1) {
|
||||
|
||||
xc_wdt_refresh();
|
||||
shell_cmd_process();
|
||||
rf24g_stat = rf24g_get_status();
|
||||
switch (rf24g_stat) {
|
||||
case RF_ACK_SEND:
|
||||
rf_send_timer_flag = true;
|
||||
tx_cnt = rf_ack_tx_manage(tx_buff);
|
||||
break;
|
||||
case RF_ACK_RECV:
|
||||
rf_send_timer_flag = false;
|
||||
rf_ack_rx_manage(rx_buff);
|
||||
break;
|
||||
case RF_ADV_SEND:
|
||||
rf_send_timer_flag = false;
|
||||
rf_adv_tx_evevt();
|
||||
break;
|
||||
case RF_ADV_RECV:
|
||||
rf_send_timer_flag = false;
|
||||
rf_adv_rx_evevt();
|
||||
break;
|
||||
case RF_SINGLE:
|
||||
rf_send_timer_flag = false;
|
||||
rf_single_event();
|
||||
default:
|
||||
rf_send_timer_flag = false;
|
||||
break;
|
||||
};
|
||||
|
||||
if(rf_send_timer_flag == false)
|
||||
{
|
||||
/* Turn off the send timer */
|
||||
//xc_timer_stop(XC_RF_SEND_TIMER);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
FUNC void Initialization(void)
|
||||
{
|
||||
SP = _RDWORD(0x10000000);
|
||||
PC = _RDWORD(0x10000004);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
LOAD %L INCREMENTAL
|
||||
Initialization();
|
||||
@@ -0,0 +1,84 @@
|
||||
|
||||
|
||||
|
||||
FUNC void InitGpio(void)
|
||||
{
|
||||
// Config IOMUX
|
||||
/*
|
||||
gpio_mux_ctl_u(33,1);//d2
|
||||
gpio_mux_ctl_u(34,1);//d3
|
||||
gpio_mux_ctl_u(35,2);//clk
|
||||
gpio_mux_ctl_u(36,2);//cs
|
||||
gpio_mux_ctl_u(37,2);//d0 rx
|
||||
gpio_mux_ctl_u(38,2);//d1 tx
|
||||
*/
|
||||
_WDWORD(0x4000019c, 0x00002A94);
|
||||
}
|
||||
FUNC void InitFlash(void)
|
||||
{
|
||||
|
||||
}
|
||||
FUNC void InitXIP(void)
|
||||
{
|
||||
|
||||
_WDWORD(0x40000104,0x040000);//reset ssi0
|
||||
_WDWORD(0x40000104,0x040004);//reset ssi0
|
||||
_WDWORD(0x40000050,0x110000);//close spi0 mclk
|
||||
_WDWORD(0x40000070,0x1000000);//close spi0 pclk
|
||||
|
||||
|
||||
//config fmc
|
||||
_WDWORD(0x40000270, 0x0503);
|
||||
_Sleep_(1);// delay about 400us
|
||||
_WDWORD(0x40000270, 0x3503);
|
||||
//config cache
|
||||
_Sleep_(1);// delay about 400us
|
||||
_WDWORD(0x52000000, 0x0);
|
||||
_Sleep_(1);// delay about 400us
|
||||
_WDWORD(0x52000000, 0x21);
|
||||
_Sleep_(1);// delay about 400us
|
||||
_Sleep_(1);// delay about 400us
|
||||
_Sleep_(1);// delay about 400us
|
||||
_Sleep_(1);// delay about 400us
|
||||
|
||||
|
||||
//config xip spi
|
||||
_WDWORD(0x51000008, 0); //disable spi
|
||||
|
||||
_WDWORD(0x5100002c,0); //close IE
|
||||
_WDWORD(0x51000000,0x1F); //32bit SPI data
|
||||
_WDWORD(0x51000010,0x01); //enable select slave -- SE
|
||||
_WDWORD(0x51000018,0x0); //TXFTL be set 0
|
||||
_WDWORD(0x5100001c,0x0); //RXFTL be set 0
|
||||
|
||||
_WDWORD(0x5100010c, 0x01);//enable select slave
|
||||
_WDWORD(0x51000114, 0xFF);//XIP time out
|
||||
|
||||
_WDWORD(0x51000014, 0x2);//div 2
|
||||
|
||||
//quad
|
||||
// _WDWORD(0x51000108, (2)|(6<<4)|(2<<9)|(1<<22)|(1<<29)|(1<<23)|(0<<24)|(8<<13));
|
||||
// _WDWORD(0x51000100, 0x6b);//quad read cmd
|
||||
// _WDWORD(0x51000104, 0x6b);//quad read cmd
|
||||
|
||||
|
||||
//dual
|
||||
_WDWORD(0x51000108, (1)|(6<<4)|(2<<9)|(1<<22)|(1<<29)|(1<<23)|(0)|(8<<13));
|
||||
_WDWORD(0x51000100, 0x3b);//dual read cmd
|
||||
_WDWORD(0x51000104, 0x3b);//dual read cmd
|
||||
|
||||
|
||||
_WDWORD(0x51000008, 1); //enable spi
|
||||
}
|
||||
|
||||
FUNC void Initialization(void)
|
||||
{
|
||||
InitGpio();
|
||||
InitFlash();
|
||||
InitXIP();
|
||||
SP = _RDWORD(0x11001000);
|
||||
PC = _RDWORD(0x11001004);
|
||||
_WDWORD(0x4000013C, 0x11001001);
|
||||
}
|
||||
LOAD %L INCREMENTAL
|
||||
Initialization();
|
||||
@@ -0,0 +1,18 @@
|
||||
|
||||
LOAD 0x10000000
|
||||
{
|
||||
EXE 0x10000000
|
||||
{
|
||||
startup_xinc.o (RESET, +FIRST)
|
||||
* (+RO)
|
||||
|
||||
}
|
||||
|
||||
RW +0000
|
||||
{
|
||||
* (+RW,+ZI)
|
||||
}
|
||||
|
||||
;ScatterAssert(ImageLength(RW) < 1024 * 28)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
|
||||
LOAD 0x11001000
|
||||
{
|
||||
EXE 0x11001000
|
||||
{
|
||||
startup_xinc.o (RESET, +FIRST)
|
||||
* (+RO)
|
||||
|
||||
}
|
||||
|
||||
RW 0x10002000
|
||||
{
|
||||
* (+RW,+ZI)
|
||||
*(ram_code)
|
||||
aeabi_sdiv.o(.text)
|
||||
uread4.o(.text)
|
||||
rt_memclr.o(.text)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
|
||||
LOAD 0x11001000
|
||||
{
|
||||
EXE 0x11001000
|
||||
{
|
||||
startup_xinc.o (RESET, +FIRST)
|
||||
* (+RO)
|
||||
|
||||
}
|
||||
|
||||
RW 0x100000C8 0x1F38
|
||||
{
|
||||
* (+RW,+ZI)
|
||||
*(ram_code)
|
||||
aeabi_sdiv.o(.text)
|
||||
}
|
||||
|
||||
ScatterAssert((0x10000100 )+ImageLength(RW) < 0x10000100 + 1024 * 8)
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Xincboot_tool.exe 0_ram.bin 1_ram_download.bin 0 0 0 0 1
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
.\Tools\xinchip_xip_tool.exe .\Output\0_ram.bin .\Output\xip_dual .\Output\rf24_ack_xip.bin
|
||||
@@ -0,0 +1,669 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
|
||||
|
||||
<SchemaVersion>1.0</SchemaVersion>
|
||||
|
||||
<Header>### uVision Project, (C) Keil Software</Header>
|
||||
|
||||
<Extensions>
|
||||
<cExt>*.c</cExt>
|
||||
<aExt>*.s*; *.src; *.a*</aExt>
|
||||
<oExt>*.obj; *.o</oExt>
|
||||
<lExt>*.lib</lExt>
|
||||
<tExt>*.txt; *.h; *.inc; *.md</tExt>
|
||||
<pExt>*.plm</pExt>
|
||||
<CppX>*.cpp</CppX>
|
||||
<nMigrate>0</nMigrate>
|
||||
</Extensions>
|
||||
|
||||
<DaveTm>
|
||||
<dwLowDateTime>0</dwLowDateTime>
|
||||
<dwHighDateTime>0</dwHighDateTime>
|
||||
</DaveTm>
|
||||
|
||||
<Target>
|
||||
<TargetName>rf_2_4g_cmd_demo</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<TargetOption>
|
||||
<CLKADS>12000000</CLKADS>
|
||||
<OPTTT>
|
||||
<gFlags>1</gFlags>
|
||||
<BeepAtEnd>1</BeepAtEnd>
|
||||
<RunSim>0</RunSim>
|
||||
<RunTarget>1</RunTarget>
|
||||
<RunAbUc>0</RunAbUc>
|
||||
</OPTTT>
|
||||
<OPTHX>
|
||||
<HexSelection>1</HexSelection>
|
||||
<FlashByte>65535</FlashByte>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
</OPTHX>
|
||||
<OPTLEX>
|
||||
<PageWidth>79</PageWidth>
|
||||
<PageLength>66</PageLength>
|
||||
<TabStop>8</TabStop>
|
||||
<ListingPath>.\Listings\</ListingPath>
|
||||
</OPTLEX>
|
||||
<ListingPage>
|
||||
<CreateCListing>1</CreateCListing>
|
||||
<CreateAListing>1</CreateAListing>
|
||||
<CreateLListing>1</CreateLListing>
|
||||
<CreateIListing>0</CreateIListing>
|
||||
<AsmCond>1</AsmCond>
|
||||
<AsmSymb>1</AsmSymb>
|
||||
<AsmXref>0</AsmXref>
|
||||
<CCond>1</CCond>
|
||||
<CCode>0</CCode>
|
||||
<CListInc>0</CListInc>
|
||||
<CSymb>0</CSymb>
|
||||
<LinkerCodeListing>0</LinkerCodeListing>
|
||||
</ListingPage>
|
||||
<OPTXL>
|
||||
<LMap>1</LMap>
|
||||
<LComments>1</LComments>
|
||||
<LGenerateSymbols>1</LGenerateSymbols>
|
||||
<LLibSym>1</LLibSym>
|
||||
<LLines>1</LLines>
|
||||
<LLocSym>1</LLocSym>
|
||||
<LPubSym>1</LPubSym>
|
||||
<LXref>0</LXref>
|
||||
<LExpSel>0</LExpSel>
|
||||
</OPTXL>
|
||||
<OPTFL>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<IsCurrentTarget>0</IsCurrentTarget>
|
||||
</OPTFL>
|
||||
<CpuCode>7</CpuCode>
|
||||
<DebugOpt>
|
||||
<uSim>0</uSim>
|
||||
<uTrg>1</uTrg>
|
||||
<sLdApp>1</sLdApp>
|
||||
<sGomain>1</sGomain>
|
||||
<sRbreak>1</sRbreak>
|
||||
<sRwatch>1</sRwatch>
|
||||
<sRmem>1</sRmem>
|
||||
<sRfunc>1</sRfunc>
|
||||
<sRbox>1</sRbox>
|
||||
<tLdApp>1</tLdApp>
|
||||
<tGomain>1</tGomain>
|
||||
<tRbreak>1</tRbreak>
|
||||
<tRwatch>1</tRwatch>
|
||||
<tRmem>1</tRmem>
|
||||
<tRfunc>0</tRfunc>
|
||||
<tRbox>1</tRbox>
|
||||
<tRtrace>1</tRtrace>
|
||||
<sRSysVw>1</sRSysVw>
|
||||
<tRSysVw>1</tRSysVw>
|
||||
<sRunDeb>0</sRunDeb>
|
||||
<sLrtime>0</sLrtime>
|
||||
<bEvRecOn>1</bEvRecOn>
|
||||
<bSchkAxf>0</bSchkAxf>
|
||||
<bTchkAxf>0</bTchkAxf>
|
||||
<nTsel>4</nTsel>
|
||||
<sDll></sDll>
|
||||
<sDllPa></sDllPa>
|
||||
<sDlgDll></sDlgDll>
|
||||
<sDlgPa></sDlgPa>
|
||||
<sIfile></sIfile>
|
||||
<tDll></tDll>
|
||||
<tDllPa></tDllPa>
|
||||
<tDlgDll></tDlgDll>
|
||||
<tDlgPa></tDlgPa>
|
||||
<tIfile>.\JLinkSettings.ini</tIfile>
|
||||
<pMon>Segger\JL2CM3.dll</pMon>
|
||||
</DebugOpt>
|
||||
<TargetDriverDllRegistry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name>??H</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ARMRTXEVENTFLAGS</Key>
|
||||
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGTARM</Key>
|
||||
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ARMDBGFLAGS</Key>
|
||||
<Name></Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>JL2CM3</Key>
|
||||
<Name>-U4294967295 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0xc66xx -FS010000000 -FL020000</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>UL2CM3</Key>
|
||||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>0</periodic>
|
||||
<aLwin>1</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
<aPa>0</aPa>
|
||||
<viewmode>1</viewmode>
|
||||
<vrSel>0</vrSel>
|
||||
<aSym>0</aSym>
|
||||
<aTbox>0</aTbox>
|
||||
<AscS1>0</AscS1>
|
||||
<AscS2>0</AscS2>
|
||||
<AscS3>0</AscS3>
|
||||
<aSer3>0</aSer3>
|
||||
<eProf>0</eProf>
|
||||
<aLa>0</aLa>
|
||||
<aPa1>0</aPa1>
|
||||
<AscS4>0</AscS4>
|
||||
<aSer4>0</aSer4>
|
||||
<StkLoc>0</StkLoc>
|
||||
<TrcWin>0</TrcWin>
|
||||
<newCpu>0</newCpu>
|
||||
<uProt>0</uProt>
|
||||
</DebugFlag>
|
||||
<LintExecutable></LintExecutable>
|
||||
<LintConfigFile></LintConfigFile>
|
||||
<bLintAuto>0</bLintAuto>
|
||||
<bAutoGenD>0</bAutoGenD>
|
||||
<LntExFlags>0</LntExFlags>
|
||||
<pMisraName></pMisraName>
|
||||
<pszMrule></pszMrule>
|
||||
<pSingCmds></pSingCmds>
|
||||
<pMultCmds></pMultCmds>
|
||||
<pMisraNamep></pMisraNamep>
|
||||
<pszMrulep></pszMrulep>
|
||||
<pSingCmdsp></pSingCmdsp>
|
||||
<pMultCmdsp></pMultCmdsp>
|
||||
</TargetOption>
|
||||
</Target>
|
||||
|
||||
<Target>
|
||||
<TargetName>rf_2_4g_cmd_xip_demo</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<TargetOption>
|
||||
<CLKADS>12000000</CLKADS>
|
||||
<OPTTT>
|
||||
<gFlags>1</gFlags>
|
||||
<BeepAtEnd>1</BeepAtEnd>
|
||||
<RunSim>0</RunSim>
|
||||
<RunTarget>1</RunTarget>
|
||||
<RunAbUc>0</RunAbUc>
|
||||
</OPTTT>
|
||||
<OPTHX>
|
||||
<HexSelection>1</HexSelection>
|
||||
<FlashByte>65535</FlashByte>
|
||||
<HexRangeLowAddress>0</HexRangeLowAddress>
|
||||
<HexRangeHighAddress>0</HexRangeHighAddress>
|
||||
<HexOffset>0</HexOffset>
|
||||
</OPTHX>
|
||||
<OPTLEX>
|
||||
<PageWidth>79</PageWidth>
|
||||
<PageLength>66</PageLength>
|
||||
<TabStop>8</TabStop>
|
||||
<ListingPath>.\Listings\</ListingPath>
|
||||
</OPTLEX>
|
||||
<ListingPage>
|
||||
<CreateCListing>1</CreateCListing>
|
||||
<CreateAListing>1</CreateAListing>
|
||||
<CreateLListing>1</CreateLListing>
|
||||
<CreateIListing>0</CreateIListing>
|
||||
<AsmCond>1</AsmCond>
|
||||
<AsmSymb>1</AsmSymb>
|
||||
<AsmXref>0</AsmXref>
|
||||
<CCond>1</CCond>
|
||||
<CCode>0</CCode>
|
||||
<CListInc>0</CListInc>
|
||||
<CSymb>0</CSymb>
|
||||
<LinkerCodeListing>0</LinkerCodeListing>
|
||||
</ListingPage>
|
||||
<OPTXL>
|
||||
<LMap>1</LMap>
|
||||
<LComments>1</LComments>
|
||||
<LGenerateSymbols>1</LGenerateSymbols>
|
||||
<LLibSym>1</LLibSym>
|
||||
<LLines>1</LLines>
|
||||
<LLocSym>1</LLocSym>
|
||||
<LPubSym>1</LPubSym>
|
||||
<LXref>0</LXref>
|
||||
<LExpSel>0</LExpSel>
|
||||
</OPTXL>
|
||||
<OPTFL>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<IsCurrentTarget>1</IsCurrentTarget>
|
||||
</OPTFL>
|
||||
<CpuCode>7</CpuCode>
|
||||
<DebugOpt>
|
||||
<uSim>0</uSim>
|
||||
<uTrg>1</uTrg>
|
||||
<sLdApp>1</sLdApp>
|
||||
<sGomain>1</sGomain>
|
||||
<sRbreak>1</sRbreak>
|
||||
<sRwatch>1</sRwatch>
|
||||
<sRmem>1</sRmem>
|
||||
<sRfunc>1</sRfunc>
|
||||
<sRbox>1</sRbox>
|
||||
<tLdApp>1</tLdApp>
|
||||
<tGomain>1</tGomain>
|
||||
<tRbreak>1</tRbreak>
|
||||
<tRwatch>1</tRwatch>
|
||||
<tRmem>1</tRmem>
|
||||
<tRfunc>0</tRfunc>
|
||||
<tRbox>1</tRbox>
|
||||
<tRtrace>1</tRtrace>
|
||||
<sRSysVw>1</sRSysVw>
|
||||
<tRSysVw>1</tRSysVw>
|
||||
<sRunDeb>0</sRunDeb>
|
||||
<sLrtime>0</sLrtime>
|
||||
<bEvRecOn>1</bEvRecOn>
|
||||
<bSchkAxf>0</bSchkAxf>
|
||||
<bTchkAxf>0</bTchkAxf>
|
||||
<nTsel>0</nTsel>
|
||||
<sDll></sDll>
|
||||
<sDllPa></sDllPa>
|
||||
<sDlgDll></sDlgDll>
|
||||
<sDlgPa></sDlgPa>
|
||||
<sIfile></sIfile>
|
||||
<tDll></tDll>
|
||||
<tDllPa></tDllPa>
|
||||
<tDlgDll></tDlgDll>
|
||||
<tDlgPa></tDlgPa>
|
||||
<tIfile></tIfile>
|
||||
<pMon>BIN\UL2CM3.DLL</pMon>
|
||||
</DebugOpt>
|
||||
<TargetDriverDllRegistry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>UL2CM3</Key>
|
||||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
</Tracepoint>
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>0</periodic>
|
||||
<aLwin>0</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
<aPa>0</aPa>
|
||||
<viewmode>0</viewmode>
|
||||
<vrSel>0</vrSel>
|
||||
<aSym>0</aSym>
|
||||
<aTbox>0</aTbox>
|
||||
<AscS1>0</AscS1>
|
||||
<AscS2>0</AscS2>
|
||||
<AscS3>0</AscS3>
|
||||
<aSer3>0</aSer3>
|
||||
<eProf>0</eProf>
|
||||
<aLa>0</aLa>
|
||||
<aPa1>0</aPa1>
|
||||
<AscS4>0</AscS4>
|
||||
<aSer4>0</aSer4>
|
||||
<StkLoc>0</StkLoc>
|
||||
<TrcWin>0</TrcWin>
|
||||
<newCpu>0</newCpu>
|
||||
<uProt>0</uProt>
|
||||
</DebugFlag>
|
||||
<LintExecutable></LintExecutable>
|
||||
<LintConfigFile></LintConfigFile>
|
||||
<bLintAuto>0</bLintAuto>
|
||||
<bAutoGenD>0</bAutoGenD>
|
||||
<LntExFlags>0</LntExFlags>
|
||||
<pMisraName></pMisraName>
|
||||
<pszMrule></pszMrule>
|
||||
<pSingCmds></pSingCmds>
|
||||
<pMultCmds></pMultCmds>
|
||||
<pMisraNamep></pMisraNamep>
|
||||
<pszMrulep></pszMrulep>
|
||||
<pSingCmdsp></pSingCmdsp>
|
||||
<pMultCmdsp></pMultCmdsp>
|
||||
</TargetOption>
|
||||
</Target>
|
||||
|
||||
<Group>
|
||||
<GroupName>Startup</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>1</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\CMSIS\core_cm0.h</PathWithFileName>
|
||||
<FilenameWithoutPath>core_cm0.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>2</FileNumber>
|
||||
<FileType>2</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\Startup\xc60xx\startup_xinc.s</PathWithFileName>
|
||||
<FilenameWithoutPath>startup_xinc.s</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\Startup\system_xinc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>system_xinc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\Startup\system_it_xinc.c</PathWithFileName>
|
||||
<FilenameWithoutPath>system_it_xinc.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Application</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\src\main.c</PathWithFileName>
|
||||
<FilenameWithoutPath>main.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\src\app_rf24g.c</PathWithFileName>
|
||||
<FilenameWithoutPath>app_rf24g.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>RF_Config</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\rf_config\rf_config.h</PathWithFileName>
|
||||
<FilenameWithoutPath>rf_config.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\rf_adv_config\rf_adv_config.h</PathWithFileName>
|
||||
<FilenameWithoutPath>rf_adv_config.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>RF_Drivers</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\rf24\Drivers\xc6xxx_rf_2_4g\xc6xxx_rf_2_4g.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc6xxx_rf_2_4g.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\rf24\Drivers\xc6xxx_rf_single\xc6xxx_rf_single.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc6xxx_rf_single.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\rf24\Drivers\xc6xxx_rf_ADV\xc6xxx_rf_ADV.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc6xxx_rf_ADV.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Drivers</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\ringbuffer.c</PathWithFileName>
|
||||
<FilenameWithoutPath>ringbuffer.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\xc_drv_clock.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc_drv_clock.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\xc_drv_gpio.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc_drv_gpio.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\xc_drv_pwr.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc_drv_pwr.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\xc_drv_systick.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc_drv_systick.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\xc_drv_timer.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc_drv_timer.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\xc_drv_uart.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc_drv_uart.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\xc_drv_wdt.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc_drv_wdt.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\..\..\..\component\xc6xx_drivers\Drivers\xc_driver\xc_drv_fmc_spi.c</PathWithFileName>
|
||||
<FilenameWithoutPath>xc_drv_fmc_spi.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>shell</GroupName>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\shell\src\shell.c</PathWithFileName>
|
||||
<FilenameWithoutPath>shell.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\shell\src\shell_handler.c</PathWithFileName>
|
||||
<FilenameWithoutPath>shell_handler.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\app\shell\src\shell_rf_handler.c</PathWithFileName>
|
||||
<FilenameWithoutPath>shell_rf_handler.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
</ProjectOpt>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python
|
||||
#-*- coding:UTF-8 -*-
|
||||
import socket
|
||||
from select import select
|
||||
import time
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
import json
|
||||
import struct
|
||||
import binascii
|
||||
import time
|
||||
import re
|
||||
import fileinput
|
||||
|
||||
|
||||
|
||||
def dump_addr(addr):
|
||||
file_asm = "./Xinc_ble_sdk_asm"
|
||||
cur_func = ""
|
||||
with open(file_asm, 'r') as fd:
|
||||
for line in fd:
|
||||
if re.match(r" \w+", line) != None:
|
||||
cur_func = line.strip()
|
||||
#
|
||||
if re.search("^ 0x", line) != None and re.search(addr, line) != None:
|
||||
print(addr, cur_func)
|
||||
break
|
||||
fd.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
file_in = "./dump.txt"
|
||||
|
||||
for line in fileinput.input(file_in):
|
||||
# 处理 PC 指针信息
|
||||
if re.search("PC = ", line) != None:
|
||||
pc_addr = line.split("PC = ")[1].split(",")[0]
|
||||
#print(hex(int(pc_addr, 16)))
|
||||
dump_addr(hex(int(pc_addr, 16)))
|
||||
|
||||
# 处理 栈信息
|
||||
if re.search("^[0-9]",line) != None:
|
||||
#print(line)
|
||||
stack = line.split('=')[1].replace('\n', '').split(' ')
|
||||
for addr in stack:
|
||||
if addr == ' ' or re.search("^1", addr) == None:
|
||||
continue
|
||||
#print(addr, hex(int(addr,16)-1))
|
||||
dump_addr(hex(int(addr,16)-1))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user