在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文件夹添加进工程中一起编译即可。
- 在C6455上移植NDK
- C6455上移植SYS/BIOS
- 在blackfin上移植minigui
- 在OMAP3530上移植QT
- uboot在2440上移植
- Oracle10g在Windows上移植
- 在mini2440上移植minicom
- 在S3C2440上移植Mplayer_Micro2440
- FreeModbus在STM32上移植。
- uboot在2440上移植
- 在mini2440上移植Bluetooth
- 在ARM上移植openssl
- 在mini2440上移植Bluetooth
- 在zedboard上移植opencv
- 在mini2440上移植Bluetooth
- 在ARM上移植NTP
- live555在openwrt上移植
- perl在ARM上移植
- 什么是阻抗?什么是阻抗匹配?为什么要阻抗匹配?
- URL类方法源码解读
- 98 Consider the following scenario for your database: - Backup optimization is enabled in RMAN. - Th
- 第十二周--数据结构--图 算法库
- Android内存和进程的关系
- 在C6455上移植NDK
- 内部排序-插入排序-二叉树排序法
- 南阳理工ACM1076--方案数量
- 再谈深度学习文本的表示
- Currying-柯里化[Swift笔记]
- 【C语言】求带环单链表的环长
- C#中的Event的使用
- 黑马程序员——异常的学习笔记和总结
- 基于纹理的特征提取