说来也真是,MICROCHIP 官方论坛不知道咋的,都没人回复了,来这里问问各位大神
C30 V3.31版本,芯片是DSPIC33EP512MU810 芯片,发现,DMA的定义的变量在调试窗口看到的对的,但是取出来放到别的地方就不对,DMA数据是用__EDS__定义的,我查看反汇编,发现没有对DSRPAG进行操作,请问该怎么解决啊?这C30以前也是买的啊,XC16可以,试了一下是正常的,但是XC16没买啊,怎么办啊?//---------------------------------------------------------下面是C30
460:
ide=ecan2msgBuf[message->buffer][0] & 0x0001;
00CDB0 78001E MOV [W14], W0
00CDB2 904030 MOV.B [W0+3], W0
00CDB4 FB8000 ZE W0, W0
00CDB6 DD00C4 SL W0, #4, W1
00CDB8 2DA800 MOV #0xDA80, W0
00CDBA 408000 ADD W1, W0, W0
00CDBC 780010 MOV [W0], W0
00CDBE 600061 AND W0, #0x1, W0
00CDC0 88D470 MOV W0, ide
//---------------------------------------------------------------------------------------------------------下面是XC16
460:
ide=ecan2msgBuf[message->buffer][0] & 0x0001;
00D3AE 78001E MOV [W14], W0
00D3B0 904030 MOV.B [W0+3], W0
00D3B2 FB8000 ZE W0, W0
00D3B4 DD0044 SL W0, #4, W0
00D3B6 B90061 MUL.SU W0, #1, W0
00D3B8 2DA802 MOV #0xDA80, W2
00D3BA 200013 MOV #0x1, W3
00D3BC D00200 SL W0, W4
00D3BE D00282 SL W2, W5
00D3C0 420005 ADD W4, W5, W0
00D3C2 A82042 BSET SR, #1
00D3C4 488083 ADDC W1, W3, W1
00D3C6 A90042 BCLR SR, #0
00D3C8 AE2042 BTSS SR, #1
00D3CA A80042 BSET SR, #0
00D3CC D38000 RRC W0, W0
00D3CE 800193 MOV DSRPAG, W3
00D3D0 780101 MOV W1, W2
00D3D2 880192 MOV W2, DSRPAG
00D3D4 000000 NOP
00D3D6 780000 MOV W0, W0
00D3D8 780010 MOV [W0], W0
00D3DA 880193 MOV W3, DSRPAG
00D3DC 000000 NOP
00D3DE 600061 AND W0, #0x1, W0
00D3E0 88F460 MOV W0, ide
C30 明显不对,因为DSRPAG 那段是对大于32k ram范围的操作,dma为大于32k那部分范围,不知道是不是C30编译那里设置的不对导致的?我想一个编译器,居然有这个芯片,不应该连最基本的存取数据都出错,肯定是哪里没设置好,谁能告诉我怎么解决? |
|