Giter VIP home page Giter VIP logo

hhd705001_51_support's Introduction

API 接口说明

变更记录

变更时间 变更内容 版本号 提交变更者
2019.3.11 初版 0.0.1 Ender.Wigg
2019.3.15 支持多FPGA固化,增加lib配置宏 0.1.0 Ender.Wigg
2019.3.20 将CAN中断函数放置到hhd32f10x_it.c 0.2.0 Ender.Wigg
2019.3.25 增加切换网口说明 0.3.0 Ender.Wigg
2019.4.11 增加通过上位机选择FPGA功能 0.4.0 Ender.Wigg

基本信息描述

基本参数

系统主频 60MHz
网络连接速度 100M/10M
系统调度定时器中断周期 10ms
CAN波特率 1Mbps/500Kbps

可用外设

  • GPIO
  • MAC
  • CAN
  • SPI

##系统初始化

系统基本功能初始化

void base_init(void)

描述:完成系统运行环境的构建,具体包括,相关外设的初始化,根据GPIO 引脚分配表初始化相关引脚,设置系统调度定时器中断等功能。在 main 函数中必须首先调用该函数。

初始化的外设如下:

​ GPIO(根据pins_table进行初始化)

​ MAC

​ SPI

​ SystemTick

构建运行环境:

​ LWIP 协议栈初始化

​ 创建 FPGA 远程调试 网络服务器

​ 创建 FPGA 配置文件固化 网络服务器

**参数:**void

返回值: void

GPIO

GPIO 初始化

GPIO初始化采用 pin描述结构,即期望使用的GPIO引脚需要在 pins_table pin描述结构中进行描述,库会自动的对该引脚进行初始化, pin描述接口需要借助宏__HHD_PIN来完成填充。例如:

	__HHD_PIN(C,    7,    0,    INPUT,  		GPIO_Mode_DEF)	//ARM_FPGA1_IO1

原型:

#define __HHD_PIN(gpio, gpio_index, af, dir,mode)\
			{RCC_APB2Periph_GPIO##gpio,\
			GPIO##gpio,\
			PIN##gpio_index,\
			&IOCON->P##gpio##gpio_index,\
			af,\
			dir,\
			mode\
			}	

参数:

​ gpio:引脚所在的PORT,[A,B,C,D,E,F]

​ gpio_index:引脚在组内的序号[0,15]

​ af:引脚服用功能,一般作为GPIO af 填0

​ dir:引脚方向,输入INPUT,输出 OUTPUT

​ mode:此处填默认值 GPIO_Mode_DEF

例如:将PD10 配置为输出

__HHD_PIN(D,    10,    0,    OUTPUT,  		GPIO_Mode_DEF)

GPIO引脚控制

void GPIO_WriteBit(HHD32F_GPIO_TypeDef* port, uint16_t GPIO_Pin, BitAction BitVal)

**描述:**对指定的引脚控制输出高低电频

参数:

​ port, 该GPIO所在的组,[GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF]

​ GPIO_Pin, 引脚组内编号,[0,15]

​ BitVal,输出电平,输出低电平Bit_RESET,输出高电平 Bit_SET 其中 枚举 BitAction定义如下:

typedef enum
{ Bit_RESET = 0,
  Bit_SET
}BitAction;

**返回值:**void

SPI

使用引脚

针对采集板

ARM 引脚名称 SPI 功能 FPGA 引脚名称
PC8 CS ARM_FPGA1_IO1
PC10 CLK ARM_FPGA1_IO2
PC11 MISO ARM_FPGA1_IO3
PC12 MOSI ARM_FPGA1_IO4

针对4个FPGA板

ARM 引脚名称 SPI 功能 FPGA 引脚名称
PC7 CS ARM_FPGA1_IO1
PC8 CLK ARM_FPGA1_IO2
PC10 MISO ARM_FPGA1_IO3
PD11 MOSI ARM_FPGA1_IO4

SPI 接口初始化

void SPI_To_FPGA_Init(void)

**描述:**函数用于初始化用于与FPGA通信的SPI接口

**参数:**void

**返回值:**void

SPI 连续写据到FPGA

int SPI_To_FPGA_Wirte(uint8_t fpga, uint8_t addr, uint8_t *data, int len)

**描述:**将data指向的数据的前len个字节写到指定的FPGA,addr 为写入到FPGA的起始地址,地址会自动向后递增

参数:

​ fpga,选中的FPGA,[0,3]

​ addr ,起始地址,[0, 0x3F]

​ data, 待写入的数据指针

​ len,数据长度,[0, 0x40]

**返回值:**写入到FPGA的数据长度

SPI 从 FPGA读数据

int SPI_To_FPGA_Read(uint8_t fpga, uint8_t addr, uint8_t *data, int len)

**描述:**从选中的FPGA的addr地址开始,读出len个字节存在data所指向的位置

参数:

​ fpga,选中FPGA,[0,3]

​ addr ,起始地址,[0, 0x3F]

​ data, 数据缓存

​ len,期望读出的数据长度,[0, 0x40]

**返回值:**从FPGA读出数据的长度,该长度可能小于 len

关于不同板卡使用不同引脚的说明

当前已知 时序板和FPGA板(板上有4个FPGA) 使用的SPI引脚不一致,因此需要特别注意,不同板子的差异,代码库通过文件 HHD1705_lib.h 中两个宏来控制,这两个宏必须是互斥的。

#define xCFG_SELECT_SPI_IO_0	/* 使用 PC9,PC10,PC11, PC12*/
#define CFG_SELECT_SPI_IO_1	    /* 使用 PC7,PC8,PC10, PC11,  该模式支持访问4片FPGA*/

时序板时,定义CFG_SELECT_SPI_IO_0 ,FPGA板时,定义FG_SELECT_SPI_IO_1。

CAN

CAN接口初始化

void can_init(HHD32F1_CAN_TypeDef *can, EN_BAUD baud, uint32_t filterID, uint32_t mask);

**描述:**初始化指定的CAN接口

参数:

can ,can接口,即期望使用的can接口,可指定为如下两个宏中的任意一个:

CAN1,CAN2

baud,接口波特率,当前支持1Mbps和500Kbps,通过如下两个枚举选择:

CAN_BAUD_500K,CAN_BAUD_1M

filterID,设置过滤ID,取值范围[0, 0x3FFFFFFF]

mask,设置过滤ID的掩码,如果bit置为0,则ID中的该bit会严格比较;为1则该为不经进行比较

**返回值:**void

CAN发送一帧数据

int CAN_Transmit(HHD32F1_CAN_TypeDef *can, CanTxMsg *TxMessage)		

**描述:**从指定的can接口发送一帧数据

**参数:**can ,can接口,即使用的can接口,可指定为如下两个宏中的任意一个:

CAN1,CAN2

​ TxMessage,待发送的数据和帧描述信息,CanTxMsg定义如下:

typedef struct
{
  uint32_t StdId;  /*!< 标准帧ID,取值范围[0,7FF].*/                    
  uint32_t ExtId;  /*!< 扩展帧ID,取值范围[0,0x1FFFFFFF].*/
  uint8_t IDE;     /*!< 帧类型,标准帧 CAN_Id_Standard
  							   扩展帧 CAN_Id_Extended */                       
  uint8_t RTR;     /*!< 传输消息类型  数据 CAN_RTR_Data
  									远程帧 CAN_RTR_Remote*/                       
  uint8_t DLC;     /*!< 该帧所携带的数据的长度,取值范围[0,8] */                 
  uint8_t Data[8]; /*!< 数据负载 */
} CanTxMsg;

**返回值:**发送状态 CAN_TxStatus_Failed发送失败

CAN_TxStatus_Ok 发送成功

CAN接收一帧数据

int CAN_Receive(HHD32F1_CAN_TypeDef *can, uint8_t FIFONumber, CanRxMsg* RxMessage)		

**描述:**从指定的can接口接收一帧数据

**参数:**can ,can接口,即使用的can接口,可指定为如下两个宏中的任意一个:

CAN1,CAN2

​ FIFONumber,为了兼容ST API,该参数未使用

​ RxMessage,接收的数据和帧描述信息,CanRxMsg定义如下:

typedef struct
{
  uint32_t StdId;  /*!< 标准帧ID,取值范围[0,7FF].*/                    
  uint32_t ExtId;  /*!< 扩展帧ID,取值范围[0,0x1FFFFFFF].*/
  uint8_t IDE;     /*!< 帧类型,标准帧 CAN_Id_Standard
  							   扩展帧 CAN_Id_Extended */                       
  uint8_t RTR;     /*!< 传输消息类型  数据 CAN_RTR_Data
  									远程帧 CAN_RTR_Remote*/                       
  uint8_t DLC;     /*!< 该帧所携带的数据的长度,取值范围[0,8] */                 
  uint8_t Data[8]; /*!< 数据负载 */
  uint8_t FMI;     /*!< 该参数未使用*/
} CanRxMsg;

**返回值:**发送状态 CAN_TxStatus_Ok 发送成功

CAN接收中断

void CAN1_IRQHandler(void)

**描述:**CAN 接收中断处理函数,该函数定义在hhd32f10x_it.c

库的配置参数

​ 库的运行相关参数在HHD1705_lib.h中定义,包括可选的系统主频,是否启用外设,和功能,以及导出一部分用户可能使用到的API接口。通过修改在文件中的宏,可以轻松编译功能不同库。其中,关于宏的启用和关闭有如下约定:

首字母为x的宏,表示未定义该宏

例如:#define xCOMPILE_TO_LIB 等价于 #undef xCOMPILE_TO_LIB

/*******************************************************************************************************
  * Company: Hiwafer Technology Co., Ltd.
  ******************************************************************************************************
  * 文件名称:HHD1705_lib.h
  * 功能说明:
  * 版    本:V1.0
  * 作    者:EnderWigg	
  * 日    期:2019.3.12
  *
  * 该文件用于配置库文件相关功能
  * 约定:“x” 标记表示取消该宏的定义,例如 不启用CAN1,xCFG_USING_CAN1
*******************************************************************************************************/
#ifndef __HHD1705_LIB_H__
#define __HHD1705_LIB_H__
#include "hhd32f10x_conf.h"


#define xCOMPILE_TO_LIB		/* 如果需要将该工程编译成库,必须使能该宏
								如果编译为直接烧写,则不需要定义该宏*/
							

#define MII_MODE           	/* MII mode  (走调试网口) */
#define xMII_TO_SGMII	   	/* MII to SGMII 功能 (走交换机)*/ 
#define xBUG_GMII_TO_SGMII 	/* 是否监视交换机状态,不是必须要启用*/
#define xETH_100M 		   	/* 确定网口速度,如果定义该宏,网口速度将被配置为100M,否则为10M*/
#define CFG_SYS_60MHZ 		/* 指定系统主频 60MHz*/
#define xCFG_SYS_50MHZ		/* 指定系统主频 50MHz*/

#define CFG_USING_CAN1      /* 使用CAN1接口*/
#define CFG_USING_NET		/* 使用网络*/
#define CFG_USING_SPI		/* 使用SPI接口*/
// SPI 引脚选择
#define xCFG_SELECT_SPI_IO_0	/* 使用 PC9,PC10,PC11, PC12*/
#define CFG_SELECT_SPI_IO_1	    /* 使用 PC7,PC8,PC10, PC11,  该模式支持访问4片FPGA*/

// 设备默认IP
#define IP_0			192
#define IP_1			168
#define IP_2			2
#define IP_3			198
// FPGA 固化功能 默认选择的FPGA

#ifdef CFG_SELECT_SPI_IO_1 
	#define FPGA0			0
	#define FPGA1			1
	#define FPGA2			2
	#define FPGA3			3
#else
#define FPGA0			0
#define FPGA1			0
#define FPGA2			0
#define FPGA3			0
#endif

#define DEF_ACCESS_FPGA	FPGA0 

/******************************************依赖条件检查***************************************************/

#ifdef MII_TO_SGMII		  //使用MII to SGMII 必须启用MII
	#ifndef MII_MODE
		#define MII_MODE
	#endif
#endif

#ifdef CFG_USING_NET
	#ifdef CFG_USING_SPI
		#define CFG_USING_LOAD			 // 使用FPGA远程固化网络服务器, (该功能需要依赖 网络和SPI)
	#endif
	#define CFG_USING_XVC				 // 使用FPGA远程调试网络服务器
#endif

#ifdef CFG_USING_CAN1
	#define CFG_USING_CAN1_WRITE_BACK	//MCU将通过CAN1回显收到的数据		
#endif

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//												API															 //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////


/**************************************************************************************************************
*
*系统基础功能初始化
*
***************************************************************************************************************/
void base_init(void);

/**************************************************************************************************************
*
*	基于SysTick的延时
*
**************************************************************************************************************/
void Delay(uint32_t nCount);

/**************************************************************************************************************
*
*	获取SysTick的当前值
*
**************************************************************************************************************/

  uint32_t Get_Tick(void);

///////////////////////////////////////////////CAN/////////////////////////////////////////////////////////////

/**************************************************************************************************************
*
*CAN 接口初始化
*
***************************************************************************************************************/
void can_init(HHD32F1_CAN_TypeDef *can, EN_BAUD baud, uint32_t filterID, uint32_t mask);

/**************************************************************************************************************
*
* 通过can 接口发送一帧数据
*
***************************************************************************************************************/
int CAN_Transmit(HHD32F1_CAN_TypeDef *can, CanTxMsg *TxMessage);

/**************************************************************************************************************
*
* 通过can 接口接收一帧数据
*
* 其中 FIFONumber 参数未使用
***************************************************************************************************************/
int CAN_Receive(HHD32F1_CAN_TypeDef *can, uint8_t FIFONumber, CanRxMsg* RxMessage);

/////////////////////////////////////////////////SPI////////////////////////////////////////////////////////////

/**************************************************************************************************************
*
*	初始化 SPI接口
*
***************************************************************************************************************/
void spi_Init(void);


/**************************************************************************************************************
*
*	写数据到FPGA
*
***************************************************************************************************************/
int SPI_To_FPGA_Wirte(uint8_t fpga, uint8_t addr, uint8_t *data, int len);

/**************************************************************************************************************
*
*	连续从FPGA读回数据
*
***************************************************************************************************************/
int SPI_To_FPGA_Read(uint8_t fpga, uint8_t addr, uint8_t *data, int len);

#endif

编译

编译成库

1、在HHD1705_lib.h中,确保 COMPILE_TO_LIB 被定义

2、如下图操作,选择编译成库

3、使整个工程全部编译

4、生成的文件在\Project\Objects,文件名为:HHD32F107.lib

编译成直接烧写文件

1、在HHD1705_lib.h中,确保 COMPILE_TO_LIB 没有被定义

2、如下图操作,选择编译成直接烧写文件:

调试网口与背板交换机的切换

HHD1705_Full_Lib工程支持两种网络路径:

  • 调试网口
  • 背板交换机

两种历经通过一个函数参数来控制,函数定义在如下位置:

文件路径: HHD1705_Full_Lib\User\main.c

在函数 void peripheral_init(void)

1553479500444

函数

Ethernet_Configuration(EN_TO_SWITCH);

当参数为 EN_TO_MDI 时 使用调试网口

当参数为 EN_TO_SWITCH 时 使用背板交换机

hhd705001_51_support's People

Contributors

yuanxiaobai avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.