这是个人驱动开发过程中做的一些记录,仅代表个人意见和理解,不喜勿喷
动手写驱动之前的思考
- MAC驱动需要兼容不同的MPU平台
- MAC驱动需要支持不同的PHY芯片
- MAC驱动需要支持多个以太网接口
- MAC驱动需要是否借鉴某个平台代码
在动手写驱动之前,脑海里就会在不停地思考这几个问题,等脑子里有个大概的可行框架就开始动手码代码。
MAC驱动兼容不同的MPU平台
Microchip 也有着丰富的MPU产品线(通过收购Atmel而获取),覆盖传统的ARM9、Cortex-A5和Cortex-A7内核。有的MPU它的以太网叫做GMAC,而有的又叫做EMAC,那编写驱动的时候就要留意对GMAC和EMAC的同时
解决不同MPU平台头文件包含的问题
选择在libraries/Kconfig文件下添加以下内容:
config SOC_SAM9X60_EK
bool
select RT_USING_COMPONENTS_INIT
select RT_USING_CACHE
config SOC_SAM9X75_EK
bool
select RT_USING_COMPONENTS_INIT
select RT_USING_CACHE
config SOC_SAMA5D2_XULT
bool
select ARCH_ARM_CORTEX_A
select ARCH_ARM_CORTEX_FPU
config SOC_SAMA5D2_SOM1_EK
bool
select ARCH_ARM_CORTEX_A
select ARCH_ARM_CORTEX_FPU
config SOC_SAMA7G54_EK
bool
select ARCH_ARM_CORTEX_A
select ARCH_ARM_CORTEX_FPU
那在sam9x75-ek/board/Kconfig文件下这么做:
menu "Microchip Harmony Plib Configuration"
config SOC_SAM9X75
bool
select ARCH_ARM_ARM9
select SOC_SAM9X75_EK
select RT_USING_USER_MAIN
default y
通过这样的方式,在选择sam9x75-ek平台做开发的时候,就会自动选择上SOC_SAM9X75_EK这个宏定义,后面会用到这个定义。
接下来在gmac/hpl_mac_async.h头文件中添加以下代码实现了对不同平台头文件的包含:
#ifdef SOC_SAMA5D2
#include <sama5d27.h>
#endif
#ifdef SOC_SAM9X75
#include <sam9x75.h>
#endif
#ifdef SOC_SAMA7G54
#include <sama7g54.h>
#endif
有的MPU平台只有一个GMAC,那它给的MAC相关ID定义是ID_GMAC,如果包含2个GMAC的MPU平台,则会给出ID_GMAC0和ID_GMAC1,那我选择在hpl_mac_async.h头文件添加这样的定义(后面会讲解到这样定义的作用):
#define ID_GMAC_NONE 0xFF
#ifdef ID_GMAC
# define MAC0_ID ID_GMAC
# define MAC1_ID ID_GMAC_NONE
# define MAC0_IRQn GMAC_IRQn
# define MAC1_IRQn ID_GMAC_NONE
# define MAC0_REGS GMAC_REGS
# define MAC1_REGS (void *)0
#else
# define MAC0_ID ID_GMAC0

最低0.47元/天 解锁文章
2821

被折叠的 条评论
为什么被折叠?



