在C6455上移植NDK

来源:互联网 发布:淘宝网鱼缸 编辑:程序博客网 时间:2024/06/14 21:06

NDK(Network Developer’s Kit)是TI提供的用来在嵌入式处理器上开发基于网络程序的开发平台,当前支持TMS320C6000 DSP系列和ARM处理器。支持的平台有C64P, C66, C674, ARM9, Cortex-A8, 和 Cortex-M3 设备 (对于 C6000 处理器, 支持大小端两种模式),还支持ELF和COFF两种库格式。
目前的NDK与硬件剥离,需要一个适配层(NSP,NDK Support Package)才能移植到对应平台上。TI为C6455发布的NSP,最高支持NDK2.0,对于之后的NDK版本,需要自行对代码修改后才能使用。本文介绍将C6455 NSP移植到NDK2.23的方法,开发环境为NDK2.23,XDCTools3.25.0.48,SYS/BIOS6.35.1.29,以及CCS5.4。

1.首先需要从TI官方网站下载NDK2.0.0,这是一个压缩包。将其解压后拷贝出ndk_2_0_0\packages\ti\ndk\src\hal\dsk6455\eth_c6455文件夹,该文件夹即为C6455的NSP,包含源代码和头文件,后续将对这些文件进行修改。
2.打开ethdriver.c,前6个头文件是用来适配DSP/BIOS的,将其替换为SYS/BIOS的对应头文件:

#include <ti/sysbios/family/c64p/Cache.h>#include <ti/sysbios/family/c64p/Hwi.h>#include <ti/ndk/inc/stkmain.h>

3.34、35行的宏定义是临界区保护的开关中断,在SYS/BIOS下替换为:

#define     Disable_DSP_Interrupts(IntFlag)    Hwi_disableIER( IntFlag )#define     Enable_DSP_Interrupts(IntFlag)     Hwi_enableIER ( IntFlag )

4.HwPktInit()函数中,调用了C6455EMAC_getConfig()回调函数来配置中断号和MAC地址,我们要实现该函数,为C6455配置MAC地址和中断号。
5.C6455的EMAC模块可以使用MII、RMII、GMII、RGMII四种接口之一,默认使用GMII。在某板上C6455B使用PHY与外界相连,而在XX板上直接与交换芯片相连,没有经过PHY芯片。在HwPktOpen()函数中修改ecfg.UseMdio的值,1代表使用PHY,0表示没有PHY。
6.在HwPktOpen()最后,将pi->TxFree = 0;替换为

    if(ecfg.UseMdio)        pi->TxFree = 0;    else        pi->TxFree = 1;

7.HwPktOpen()中调用EMAC_open()前要将EMAC使能,添加一段代码

CSL_FINST (((CSL_DevRegs* )CSL_DEV_REGS)->PERLOCK, DEV_PERLOCK_LOCKVAL, UNLOCK);CSL_FINST (((CSL_DevRegs* )CSL_DEV_REGS)->PERCFG0, DEV_PERCFG0_EMACCTL, ENABLE);

在头文件中添加#include <soc.h>
8. 将HwInt()函数定义修改为void HwInt(void* pCallbackArg)
9.在Interrupt_init()中,删除BCACHE_invL1pAll();
10.在csl_emac.c的1242行,添加

if (!(localDev.Config.UseMdio)) {    CSL_FINST( EMAC_REGS->MACCONTROL, EMAC_MACCONTROL_FULLDUPLEX, ENABLE );    CSL_FINST( EMAC_REGS->MACCONTROL, EMAC_MACCONTROL_GIG, ENABLE ); }

11.删除inc文件夹的csl_error.h、cslr_ectl.h和cslr_emac.h以及cslr_mdio.h四个文件,因为这几个文件会和CSL冲突。
12.修改几处bug,在之前的博文中介绍过。
修改完成后,在C6455的工程中使用NDK时,将eth_c6455文件夹添加进工程中一起编译即可。

0 0