AXD调试PD12程序总是卡在一个地方

[复制链接]
3208|0
 楼主| leo198336 发表于 2007-6-4 20:25 | 显示全部楼层 |阅读模式
三星4510B处理器,ADS版本1.2。在调试一段PDIUSBD12程序时总是卡在一个地方,过不去。出错程序如下(带中括号的行都是翻译程序后对应的汇编语句):<br />#include&nbsp;&quot;4510.h&quot;<br /><br />#define&nbsp;alloff&nbsp;0x3ffff<br />#define&nbsp;allon&nbsp;0x0<br /><br /><br />void&nbsp;delay(unsigned&nbsp;int&nbsp;x)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;unsigned&nbsp;int&nbsp;j;<br />&nbsp;for(i=0;i&ltx;i++)<br />[0xe3a02000]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,#0<br />[0xea000004]&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x4001d0&nbsp;&nbsp;;&nbsp;(delay&nbsp;+&nbsp;0x1c)<br />......<br />[0xe2822001]&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,r2,#1<br />[0xe1520000]&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,r0<br />[0x3afffff8]&nbsp;&nbsp;&nbsp;bcc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x4001bc&nbsp;&nbsp;;&nbsp;(delay&nbsp;+&nbsp;0x8)<br />&nbsp;for(j=0;j&lt230;j++);<br />[0xe3a01000]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,#0<br />[0xe2811001]&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r1,#1<br />[0xe35100e6]&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,#0xe6<br />[0x3afffffc]&nbsp;&nbsp;&nbsp;bcc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x4001c0&nbsp;&nbsp;;&nbsp;(delay&nbsp;+&nbsp;0xc)<br />}<br />[0xe1a0f00e]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,r14<br /><br />void&nbsp;write_usb_command(unsigned&nbsp;char&nbsp;usb_command)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />command_usb=usb_command;//写入命令<br />[0xe59f1084]&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,0x00400268&nbsp;;&nbsp;=&nbsp;#0x03fd4000<br />[0xe5c10001]&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1,#1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每次程序都是卡在这一条语句了,但是看不出来有什么错误啊。<br />}<br />[0xe1a0f00e]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,r14<br /><br />void&nbsp;write_a_usb_data(unsigned&nbsp;char&nbsp;usb_data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写一字节USB数据<br />{<br />data_usb=usb_data;<br />[0xe59f1078]&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,0x00400268&nbsp;;&nbsp;=&nbsp;#0x03fd4000<br />[0xe5c10000]&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1,#0]<br />}<br />[0xe1a0f00e]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,r14<br /><br />int&nbsp;main(void)<br />{<br />[0xe52de004]&nbsp;*&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r14,[r13,#-4]!<br />&nbsp;&nbsp;&nbsp;IOPCON=0x0000;&nbsp;<br />[0xe59f206c]&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,0x0040026c&nbsp;;&nbsp;=&nbsp;#0x03ff5000<br />[0xe3a03000]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,#0<br />[0xe5823004]&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,[r2,#4]<br />&nbsp;&nbsp;&nbsp;IOPMOD=0x3ffff;<br />[0xe59f0064]&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,0x00400270&nbsp;;&nbsp;=&nbsp;#0x0003ffff<br />[0xe5820000]&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r2,#0]<br />&nbsp;&nbsp;&nbsp;write_usb_command(0xD0);<br />[0xe3a000d0]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0xd0<br />[0xebfffff1]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_usb_command<br />&nbsp;write_a_usb_data(0xf0);<br />[0xe3a000f0]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0xf0<br />[0xebfffff2]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_a_usb_data<br />&nbsp;IOPDATA=allon;<br />[0xe5823008]&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,[r2,#8]<br />&nbsp;delay(100);<br />[0xe3a00064]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0x64<br />[0xebffffe2]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay<br />&nbsp;write_usb_command(0xd8);<br />[0xe3a000d8]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0xd8<br />[0xebffffea]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_usb_command<br />&nbsp;write_a_usb_data(0x01);<br />[0xe3a00001]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#1<br />[0xebffffeb]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_a_usb_data<br />&nbsp;delay(100);<br />[0xe3a00064]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0x64<br />[0xebffffdc]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay<br />&nbsp;write_usb_command(0xf3);<br />[0xe3a000f3]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0xf3<br />[0xebffffe4]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_usb_command<br />&nbsp;write_a_usb_data(0xDA);<br />[0xe3a000da]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0xda<br />[0xebffffe5]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_a_usb_data<br />&nbsp;write_a_usb_data(0xCB);<br />[0xe3a000cb]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0xcb<br />[0xebffffe3]&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_a_usb_data<br />}<br /><br />中括号所对应的行都是通过AXD的反汇编功能查看的。程序总是卡在我写注释的地方,在点击“停止”后AXD提示“error:read,mode=255,id=ff0010”或者id为其他一些值。在4510.h中关于PD12我是这样定义:<br />#define&nbsp;VPchar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(volatile&nbsp;unsigned&nbsp;char&nbsp;*)<br />#define&nbsp;command_usb&nbsp;&nbsp;(VPchar(0x3FD4001))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PD12命令<br />#define&nbsp;data_usb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(VPchar(0x3FD4000))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PD12数据<br />请高手指点!!!谢谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

18

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部