很久以前搞过,忘得差不多了,幸好当时记了笔记:<br />=========<br />发现必须从MCU清HINT <br />DSP上电时HPIC是0088,HINT是低电平<br />从DSP写0到HPIC无效<br />主板写08到HPIC,从CCS查HPIC是0080。HINT变为高电平。<br />=========<br /><br />MCU的代码供参考:<br />;从串口接收地址(16bit)和长度(8bit),读相应内存的内容发送到串口 <br />;p0.0-p0.7 ===== HD0-HD7<br />;P2.0 ===== HCNTL0<br />;P2.1 ===== HCNTL1<br />;P2.2 ===== HBIL<br />;P2.4 ===== HPIR/W<br />;P2.7 ===== HCS<br />;write ===== HDS2<br />;read ===== HDS1<br />;ALE ===== HAS<br />;HINT ===== INT0<br /> ORG 0000H<br /> AJMP MAIN<br /> ORG 0003H ;INT0中断子程序<br /> RETI<br /> ORG 0030H<br />MAIN:<br />;设置串口<br /> MOV SCON,#50H ;SCON: mode 1, 8-bit UART, enable rcvr<br /> MOV TMOD,#20H ;TMOD: timer 1, mode 2, 8-bit reload<br /> MOV TH1,#0FDH ;TH1: reload value for 9600 baud @ 11.0592MHz<br /> MOV TL1,#0FDH <br /> SETB TR1 ;timer 1 run<br /><br />;初始化BOB、清HINT<br /> MOV A,#08h<br /> MOV DPTR,#0000h<br /> MOVX @DPTR,A<br /> MOV DPTR,#0400h<br /> MOVX @DPTR,A<br /><br />SetAddress:<br />;从串口读高地址位<br /> CLR TI<br /> JNB RI,$<br /> MOV A,SBUF <br /> CLR RI<br />;写HPIA高地址<br /> MOV DPTR,#0200h<br /> MOVX @DPTR,A<br />;从串口读低地址位<br /> JNB RI,$<br /> MOV A,SBUF <br /> CLR RI<br />;写HPIA低地址<br /> MOV DPTR,#0600h<br /> MOVX @DPTR,A<br />;从串口读数据长度<br /> JNB RI,$<br /> MOV A,SBUF <br /> CLR RI<br /> MOV R1,A<br /><br />;读DSP内部存贮区并发送到串口<br />ReadHPI:<br />;读高字节并发送<br /> MOV DPTR,#1100h<br /> MOVX A,@DPTR<br /> MOV SBUF,A<br /> JNB TI,$<br /> CLR TI<br />;读低字节并发送<br /> MOV DPTR,#1500h <br /> MOVX A,@DPTR<br /> MOV SBUF,A<br /> JNB TI,$<br /> CLR TI<br /> DJNZ R1,ReadHPI <br />;再次取地址<br /> AJMP SetAddress<br /><br /> End
|