/** ****************************************************************************** * 文件名 : PAN312x_HAL.c * 作者 : PAN312x RF Team * 版本 : V1.0.0 * 时间 : * 文件描述: * 该文件为PAN312x模块的硬件层,包含MCU与PAN312x模块的SPI配置,GPIO口初始化,以 *及用于PAN312x寄存器、FIFO读写操作; * 客户在使用模块时候需要移植该文件,保证各个函数名、函数形参不变的情况下 *根据自己的MCU平台修改函数内容,使各个功能块正常运行。硬件层占用资源如下: * *SPI:本例程使用STM32L1的SPI3进行与PAN312x模块通信。 *GPIO口:本例程使用的GPIO口详情如下: * PB15 ---> M0SI * PB13 ---> SCK * PB14 ---> MISO * PB10 ---> GPIO8(IRQ) * PB11 ---> GPIO0 * PB12 ---> CSN * PB5 ---> GPIO1 * PB6 ---> GPIO3(nRST) * PB7 ---> GPIO2 * PB8 ---> GPIO9 * PB10 ---> GPIO10 *******************************************************************************/ #include #include "myRadio_gpio.h" #include "PAN312x_Hal.h" //-----------------------------GPIO-----------------------------// //该部分函数为系统用到的GPIO的初始化函数,用户根据自己的平台相应修改 //--------------------------------------------------------------// /** * @简介:Reset引脚初始化; * @参数:void; * @返回值:无 */ void PAN312x_Reset_Init(void) { RF_PAN312x_RST_H(); } /** * @简介:该函数用于MCU对SPI对应IO口初始化; * @参数:无 * @返回值:无 */ void PAN312x_SPIGPIO_Init() { } /** * @简介:该函数用于MCU对SPI配置初始化; * @参数:无 * @返回值:无 */ void PAN312x_SPI_Init() { } /** * @简介:该函数为GPIO8输入初始化及中断、优先级配置; * @参数:无 * @返回值:无 */ void PAN312x_DIO8_INPUT() { } /** * @简介:该函数为GPIO8输入中断开启使能; * @参数:无 * @返回值:无 */ void PAN312x_DIO8_INTENABLE() { /* EXTI interrupt init*/ // HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // HAL_NVIC_EnableIRQ(EXTI0_IRQn); // EnableNvic(PORTA_IRQn, IrqLevel3, TRUE); } /** * @简介:该函数为DIO8输入中断关闭使能; * @参数:无 * @返回值:无 */ void PAN312x_DIO8_INTDISABLE() { // EnableNvic(PORTA_IRQn, IrqLevel3, FALSE); } /** * @简介:该函数为DIO8输入状态获取; * @参数:无 * @返回值:DIO8状态"1"or"0" */ bool PAN312x_DIO8_GetState() { return READ_RF_PAN312x_IRQ()?true:false; } /** * @简介:该函数为SX1208复位引脚NRST输出控制; * @参数:PinState为"1"表示输出高电平,"0"输出低电平; * @返回值:无 */ void PAN312x_Reset_OUTPUT(bool PinState) { if (PinState) { RF_PAN312x_RST_H(); } else { RF_PAN312x_RST_L(); } } /** * @简介:将Reset引脚拉高; * @参数:void; * @返回值:无 */ void PAN312x_Reset_High(void) { RF_PAN312x_RST_H(); } /** * @简介:将Reset引脚拉低; * @参数:void; * @返回值:无 */ void PAN312x_Reset_Low(void) { RF_PAN312x_RST_L(); } //-----------------------------SPI-----------------------------// //该部分函数为MCU对PAN312x模块SPI通信部分,包含SPI口及配置初始化 //--------------------------------------------------------------// /** * @简介:加锁,让SDK可重入 * @参数:无 * @返回值:无 */ void PAN312x_Lock(void) { __disable_irq(); } /** * @简介:解锁,让SDK可重入 * @参数:无 * @返回值:无 */ void PAN312x_Unlock(void) { __enable_irq(); } #if PAN312x_INTERFACE == PAN312x_IF_SPI /** * @简介:开始PAN312x的数据收发,即SPI接口拉低CS * @参数:无 * @返回值:无 */ void PAN312x_DataBegin(void) { BOARD_SPI_NSS_L(); } /** * @简介:结束PAN312x的数据收发,如果接口为SPI则表示拉高CS,如果接口为I2C则表示发送结束信号 * @参数:无 * @返回值:无 */ void PAN312x_DataEnd(void) { BOARD_SPI_NSS_H(); } /** * @简介:向PAN312x写入一段数据,如果接口为SPI则不包括CS操作部分 * @参数:buf - 数据缓冲区 * len - 数据长度 * @返回值:写入的数据长度,或者错误值(负数) */ int PAN312x_DataWrite(const void* buf, int len) { for(int i=0;i