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