S3C2440写一个通过USB下载文件到nand flash的裸奔程序

「已注销」 2011-01-08 01:55:53
求思路,如何配合DNW来编写程序?
...全文
439 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mhl920 2011-04-08
  • 打赏
  • 举报
回复
这是我找到的一个USB中断服务程序 希望对楼主有帮助 我写的连中断都进步去 郁闷死了

祝楼主好运
mhl920 2011-04-08
  • 打赏
  • 举报
回复
数据传输:
一般采用中断传输模式,故进入中断后先判断中断类型,再具体执行中断类型的服务程序。如下程序:
void __irq USB_INT()
{
U8 usb_Int, Ep_Int;
U8 Index=rINDEX_REG; //保存索引寄存器值(现场保护)
usb_Int=rUSB_INT_REG; //保存中断标志寄存器
Ep_Int=rEP_INT_REG;
if(usb_Int&1) //总线上超过3ms没有活动信号引起中断
{
rUSB_INT_REG=1; //清除中断标志位
}
if(usb_Int&2) rUSB_INT_REG=2; //恢复引起的中断
if(usb_Int&4) //接收到复位信号引起的中断
{
USB_reset(); //重新配置USB设备
rUSB_INT_REG=4; //复位USB后清除复位中断
PrepareEp1Fifo(); //准备发送数据
}
if(Ep_Int&1) //端点0中断
{
rEP_INT_REG=1;
Ep0Handler(); //进入控制传输中断处理程序
}
if(Ep_Int&2)
{
rEP_INT_REG=2;
Ep1Handler(); //进入Ep1中断处理程序(BULK IN)
}
if(Ep_Int&4) rEP_INT_REG=4;
if(Ep_Int&8)
{
rEP_INT_REG=8;
Ep3Handler(); //进入Ep3中断处理程序(BULK OUT)
}
if(Ep_Int&0x10) rEP_INT_REG=0x10;
ClearPending(BIT_USBD); //USB设备中断处理完毕,清除中断标志位
rINDEX_REG=Index; //恢复索引寄存器原来的值(恢复现场)
}
其中控制传输中断服务程序(Ep0Handler())处理主机向USB设备发出命令的中断。在此程序中,要分别对接收命令过程中出现的有效命令(即令牌包)写入(包括对命令内容的处理)、命令写入出错引起的停止、命令传输结束进行处理。
mhl920 2011-04-08
  • 打赏
  • 举报
回复
楼主加油啊 楼主比我强多了 我连中断都进不去 郁闷死了
ffeige1984 2011-01-20
  • 打赏
  • 举报
回复
参考下DNW驱动,和FL2440的程序部分。
「已注销」 2011-01-16
  • 打赏
  • 举报
回复
又有最新进展了,不论我怎么清除中断标志寄存器,总是无法退出USBD中断,我就索性加上了几个函数,主要是USB寄存器初始化的和判断HOST所发送的请求的语句,结果,在中断有限次数后就不再中断。看来,USB初始化是一定要提前运行,才能保证,USB的正常工作,我怀疑这里的频率设置有问题。还待进一步研究。
loongembedded 2011-01-15
  • 打赏
  • 举报
回复
期待楼主早日解决分享一下,加油!
loongembedded 2011-01-15
  • 打赏
  • 举报
回复
rINTMSK = 0xedffffe0
这条指令是在中断部分还是USB Device驱动部分的啊?
「已注销」 2011-01-15
  • 打赏
  • 举报
回复
我找到了一些猫腻了,首先我把USBD的中断打开,通过JTAGE口下载到板子上,一定会在rINTMSK = 0xedffffe0 这里卡住,但是如果我把开发板的电源关掉,再开启,在reset一下,就可以工作正常,能成功进入USBD中断,不过USBD中断会一直发生,
rSRCPND = (0x1<<25);
rINTPND = rINTPND;
按键的中断这样就可以清除,USBD的貌似就不行。

请有经验的人给点思路,谢谢。
「已注销」 2011-01-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 loongembedded 的回复:]
rINTMSK = 0xedffffe0
这条指令是在中断部分还是USB Device驱动部分的啊?
[/Quote]

是在端口初始化部分,是USB Device驱动部分。

很奇怪,我就纳闷了怎么就是开不了中断呢,而且就光USBD的中断开不了,USBH都可以开,难道是那个 Pin 没设置好? GPG12 的好像是USB 的soft link 不知道有没有影响。我现在把GPG12设置成output , 寄存器全写1, 上拉电阻关。 高人给点思路吧,谢谢。
「已注销」 2011-01-15
  • 打赏
  • 举报
回复
看来一切都得从中断开始做起

但是我遇到了一个问题,为什么我只要开USBD的中断 rINTMSK = 0xedffffe0; 开发板就卡住。这条指令怎么也执行不了。
UN_ChairMan 2011-01-09
  • 打赏
  • 举报
回复
飞凌嵌入式的TE2440开发板的bootloader程序可做参考。跟裸奔差不多
loongembedded 2011-01-08
  • 打赏
  • 举报
回复
楼主从这个链接下载http://download.csdn.net/source/559176代码看看。

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧