嵌入式开发者社区

标题: 【分享】USB_DEV_MSC移植到BIOS详细步骤 [打印本页]

作者: lushidegreen    时间: 2015-6-2 15:09
标题: 【分享】USB_DEV_MSC移植到BIOS详细步骤
1.新建BIOS工程,命名为USB_DEV_MSC_sysbios
2.把原USB_DEV_MSC工程中的main.c文件外的c文件和h文件复制到
USB_DEV_MSC_sysbios工程中。

作者: lushidegreen    时间: 2015-6-2 15:12
本帖最后由 lushidegreen 于 2015-6-2 15:15 编辑

C:\Documents and Settings\Administrator\桌面\2.jpg3.复制原USB_DEV_MSC工程的main.c文件中除main函数外的所有代码,粘贴到新工程的main.c文件中#include <ti/sysbios/knl/Task.h>语句后面


作者: lushidegreen    时间: 2015-6-2 15:16
4.将原USB_DEV_MSC工程的main函数中USBDMSCInit()函数之前的代码复制,粘贴到新工程main函数System_printf("enter main()\n");语句后面

作者: lushidegreen    时间: 2015-6-2 15:17
本帖最后由 lushidegreen 于 2015-6-2 15:57 编辑

5.将原USB_DEV_MSC工程的main函数中USBDMSCInit()函数及之后的代码复制,粘贴到新工程main函数taskFxn()任务函数中,替代其原来的内容。
6. 添加平台配置,如下图


作者: lushidegreen    时间: 2015-6-2 15:19
7.参考原USB_DEV_MSC工程添加包含路径

作者: lushidegreen    时间: 2015-6-2 15:21
8. 参考原USB_DEV_MSC工程添加库文件

作者: lushidegreen    时间: 2015-6-2 15:24
本帖最后由 lushidegreen 于 2015-6-2 15:27 编辑

9.编译工程,发现一个错误,27个警告。
错误是,epInfo没有定义。该变量是在usb_msc_structs.c中定义的,
在usb_msc_structs.c中搜索找到其位置,发现需要定义一个宏DMA_MODE才能使用该变量。
到工程选择中设置即可
重新编译,只剩下警告,这27个警告是一样的。
在上述界面中添加一个宏定义ewarm即可。重新编译,没有错误和警告了。


作者: lushidegreen    时间: 2015-6-2 15:28
10.删除DSP中断初始化函数InterruptInit(),因为BIOS启动后会对DSP中断进行初始化。
11.注册USB中断函数
USBInterruptInit()的功能是将USB中断映射到硬件中断INT4上,中断ID为SYS_INT_USB0(19),中断函数USB0DeviceIntHandler()。
在BIOS中,到cfg文件中进行配置,如下图,配置完成后,将USBInterruptInit()函数删除。

作者: 希望缄默    时间: 2015-6-2 15:29
谢谢分享~
不过我觉得单单这些步骤应该还不够吧
作者: lushidegreen    时间: 2015-6-2 15:31
希望缄默 发表于 2015-6-2 15:29
谢谢分享~
不过我觉得单单这些步骤应该还不够吧

不知道怎么在帖子中间插入图片,所以只能分步上传
作者: lushidegreen    时间: 2015-6-2 15:32
希望缄默 发表于 2015-6-2 15:29
谢谢分享~
不过我觉得单单这些步骤应该还不够吧

不知道怎么在帖子中间插入图片,所以只能分步上传。
作者: lushidegreen    时间: 2015-6-2 15:33
本帖最后由 lushidegreen 于 2015-6-2 15:36 编辑

12.接下来要处理的是DelayTimerSetup()函数。
该函数是StarterWare中的函数,所在头文件为delay.h。到StarterWare目录
C:\ti\C6748_StarterWare_1_20_04_01下找到delay.c文件 (需事先安装StarterWare),将该文件复制到新建的工程中。
查看delay.c文件,可以发现其中的函数,都是直接调用了另外一个名字很像的函数。
delay.h文件所列函数如下图,上面的5个函数分别直接调用了下面的5个函数,即本质上只有5个函数。


作者: lushidegreen    时间: 2015-6-2 15:36
在StarterWare目录搜索发现,下面的5个函数的实现是在sysdelay.c中。将sysdelay.c文件复制到新建工程中。
重新编,出现一个错误,将sysdelay.c中的#include "evmC6748.h"语句删除即可。

事实上,DelayTimerSetup()函数的功能是初始化定时器TMR0_TMR12,即TMR0的低32位,
然后利用定时器实现比较准确的delay()延时函数,单位是ms。
在BIOS下实现时,可直接使用Task_sleep()实现。因此,将Sysdelay()函数改为如下:
void Sysdelay(unsigned int milliSec)
{
        Task_sleep(milliSec);
        flagIsrCnt = 1;
}
然后main函数中的DelayTimerSetup()函数删除。
重新编译,出现一个警告。
在sysdelay.c中添加#include <ti/sysbios/knl/Task.h>即可解决。

作者: lushidegreen    时间: 2015-6-2 15:36
本帖最后由 lushidegreen 于 2015-6-2 15:39 编辑

13.接下来的3个语句
    SystickConfigure(SysTickHandler);
    SystickPeriodSet(10);
SystickEnable();
作用是用定时器驱动SysTickHandler()函数,每10毫秒执行一次。
这3个函数的实现在systick.c中,
跟上一步骤的一样,下图中前面4个函数,直接调用了后面4个函数,即本质上只有4个函数。


作者: lushidegreen    时间: 2015-6-2 15:39
本帖最后由 lushidegreen 于 2015-6-2 15:45 编辑

后面4个函数的实现是在timertick.c中。
到StarterWare目录搜索,找到systick.c和timertick.c,复制到新建的工程下。
重新编译,出现一个错误。
将systick.c中的#include "evmC6748.h"语句删除。
至此还未完成上述3个函数的功能实现。

查看它们的代码,可发现要实现的功能是将TMR0_TMR34,即TMR0高32位定时器初始化为10ms定时功能。由于BIOS系统占用了TMR0,因此可改用TMR1来实现。
到cfg文件配置,如下图:


作者: lushidegreen    时间: 2015-6-2 15:45
配置完成后,屏蔽前面说的3个语句。
重新编译程序,没有错误和警告。
其实,systick.c和timertick.c两个文件并没有使用到,可以从工程中删除。前面把它们添加进来只是为了查看其中的代码,了解SystickConfigure(),   SystickPeriodSet(),SystickEnable()这3个函数的作用。

将程序下载到TL6748开发板,其运行结果和裸奔的USB_DEV_MSC是一样的。

至此,USB_DEV_MSC例程成功移植到SYS/BIOS下。

作者: 希望缄默    时间: 2015-6-2 16:58
lushidegreen 发表于 2015-6-2 15:45
配置完成后,屏蔽前面说的3个语句。
重新编译程序,没有错误和警告。
其实,systick.c和timertick.c两个文 ...

很好~ 不过你在用的时候中断部分有没有遇到什么问题呢?
在 USB 库中调用了 StarterWare 的中断配置函数
作者: 希望缄默    时间: 2015-6-2 16:59
lushidegreen 发表于 2015-6-2 15:45
配置完成后,屏蔽前面说的3个语句。
重新编译程序,没有错误和警告。
其实,systick.c和timertick.c两个文 ...

应该给你点奖励 O(∩_∩)O哈哈~
作者: lushidegreen    时间: 2015-6-3 09:14
希望缄默 发表于 2015-6-2 16:58
很好~ 不过你在用的时候中断部分有没有遇到什么问题呢?
在 USB 库中调用了 StarterWare 的中断配置函数 ...

步骤10~13就是把中断管理相关函数改为BIOS的配置,中断管理应该没问题了。
移植后正确实现了裸奔的USB_DEV_MSC的虚拟U盘功能。
我没有进行严格测试,不知道有没有其他问题存在,如有发现,欢迎跟帖指正!

作者: lushidegreen    时间: 2015-6-3 09:20
希望缄默 发表于 2015-6-2 16:59
应该给你点奖励 O(∩_∩)O哈哈~

哈哈,这个可以有
有奖励可以鼓励大家多分享经验,有助于大家一起进步。很多高手都在潜水。
作者: 希望缄默    时间: 2015-6-3 12:42
lushidegreen 发表于 2015-6-3 09:20
哈哈,这个可以有
有奖励可以鼓励大家多分享经验,有助于大家一起进步。很多高手都在潜水。 ...

有道理 应该在论坛搞些活动 送点代金券啦 板子什么的~
作者: lushidegreen    时间: 2015-6-4 14:17
希望缄默 发表于 2015-6-3 12:42
有道理 应该在论坛搞些活动 送点代金券啦 板子什么的~

我在做音频处理的产品,想弄个C6748的核心板,然后自己设计底板。有点贵,一直舍不得。公司的板子又不能带回去。晚上回去只能看文档,不能调程序
能送一个给我吗?
后续我可以分享更多东西,敬请关注!

作者: lushidegreen    时间: 2015-6-4 14:27
经过仔细分析,步骤12中对sysdelay.c中的函数移植不够严谨,只完成了Sysdelay()的移植,而把其他未使用的函数忽略了。因为在USB_DEV_MSC例程中没有用到,所以没有造成任何问题。但在移植USB_HOST_MSC例程时,就必须对sysdelay.c中的其他函数进行相应的修改。

USB_HOST_MSC的移植,请看另一帖,“【分享】USB_HOST_MSC移植到BIOS详细步骤”。
该帖的移植步骤比本帖要严谨。

作者: 希望缄默    时间: 2015-6-5 09:21
lushidegreen 发表于 2015-6-4 14:17
我在做音频处理的产品,想弄个C6748的核心板,然后自己设计底板。有点贵,一直舍不得。公司的板子又不能 ...

这个...... 我其实是想送你的
你可以问问朱工哦~
作者: lushidegreen    时间: 2015-6-5 10:02
希望缄默 发表于 2015-6-5 09:21
这个...... 我其实是想送你的
你可以问问朱工哦~

这个你说了不算啊?
我直接问朱工要,不大好吧
我觉得公司应该给你们版主大点的权力送个板什么的应该可以做主,再说这是有助于公司产品推广的事。

话说回来,不送也没关系,后续我还是会分享的,不过周期会长一点而已。
作者: 希望缄默    时间: 2015-6-5 13:09
lushidegreen 发表于 2015-6-5 10:02
这个你说了不算啊?
我直接问朱工要,不大好吧
我觉得公司应该给你们版主大点的权力送个板什么的应 ...

是呀 我很认同你的观点
这样的话可以活跃论坛氛围 不然的话成了百度知道了 就体现不出论坛的特点了
作者: 希望缄默    时间: 2015-6-5 13:09
lushidegreen 发表于 2015-6-5 10:02
这个你说了不算啊?
我直接问朱工要,不大好吧
我觉得公司应该给你们版主大点的权力送个板什么的应 ...

对了 你分享的经验可以不可以一遍附上你移植好的工程 可以设置回复可见或者其它什么阅读权限
作者: 希望缄默    时间: 2015-6-5 13:21
lushidegreen 发表于 2015-6-5 10:02
这个你说了不算啊?
我直接问朱工要,不大好吧
我觉得公司应该给你们版主大点的权力送个板什么的应 ...

我也很期待你后续分享的开发经验~
作者: li19900308    时间: 2017-5-10 17:40
感谢大神哈哈哈,本周我的工作任务基本上就是把这个程序移植到SYS/bios下
周三就干完了哈哈哈
作者: lusentao    时间: 2018-4-11 12:21
好人,我顶你




欢迎光临 嵌入式开发者社区 (https://51ele.net/) Powered by Discuz! X3.4