我正在尽力让Modulo Adressing在dsPIC33CH512MP508上工作。 我如何让它只在 X 数据内存而不是 Y 数据内存上工作,我不明白为什么它不能在 Y 数据内存上工作。具体的问题是
YMODEND
无法让它工作。
我正在遵循此处给出的示例(仅 1 页)Modulo_Adressing
这是我的asm代码:
.global _modulo_adress_2
_modulo_adress_2:
MOV #0x01, w0 // writing 1 into start of X-data and Y-data ram
MOV w0, 0x2000 // X-data-ram
MOV w0, 0x7200 // Y-data-ram
MOV #0x02, w0 // writing 2 into start of X-data and Y-data ram
MOV w0, 0x2002
MOV w0, 0x7202
MOV #0x03, w0 // writing 3 into start of X-data and Y-data ram
MOV w0, 0x2004
MOV w0, 0x7204
MOV #0x04, w0 // writing 4 into start of X-data and Y-data ram
MOV w0, 0x2006
MOV w0, 0x7206
MOV #0x05, w0 // writing 5 into start of X-data and Y-data ram
MOV w0, 0x7208 // if this shows Y does not stop at YMODEND
// as its ment to
MOV #0x7200,w11 //set modulo start address for Y
MOV w11, YMODSRT
NOP
MOV #0x2000,w0 //set modulo start address for X
MOV w0, XMODSRT
NOP
MOV #0x7207,w11 //set modulo end address for Y
MOV w11, YMODEND
NOP
MOV #0x2007,w0 //set modulo end address for X
MOV w0, XMODEND
NOP
MOV #0xCFD1,w0 // enable X, Y (C) Bit-reversed addressing disabled(F)
// Y selected for modulo addressing = w11 (D)
// X selected for modulo addressing = w1 (1)
MOV w0, MODCON
NOP
MOV #0x2000,w1 // start of w1
MOV #0x2014,w3 // form where we expect to see the containt repeat of X
MOV #0x7200,w11 // start of w11
MOV #0x2048,w5 // form where we expect to see the containt repeat of Y
REPEAT #20
MOV [w11++],[w5++]
REPEAT #20
MOV [w1++],[w3++]
RETURN
输出是:
Value at 0X2000 is: 0X1. Address 0
Value at 0X2002 is: 0X2. Address 1
Value at 0X2004 is: 0X3. Address 2
Value at 0X2006 is: 0X4. Address 3
Value at 0X2008 is: 00. Address 4
Value at 0X200A is: 00. Address 5
Value at 0X200C is: 00. Address 6
Value at 0X200E is: 00. Address 7
Value at 0X2010 is: 00. Address 8
Value at 0X2012 is: 00. Address 9
Value at 0X2014 is: 0X1. Address 10
Value at 0X2016 is: 0X2. Address 11
Value at 0X2018 is: 0X3. Address 12
Value at 0X201A is: 0X4. Address 13
Value at 0X201C is: 0X1. Address 14
Value at 0X201E is: 0X2. Address 15
Value at 0X2020 is: 0X3. Address 16
Value at 0X2022 is: 0X4. Address 17
Value at 0X2024 is: 0X1. Address 18
Value at 0X2026 is: 0X2. Address 19
Value at 0X2028 is: 0X3. Address 20
Value at 0X202A is: 0X4. Address 21
Value at 0X202C is: 0X1. Address 22
Value at 0X202E is: 0X2. Address 23
Value at 0X2030 is: 0X3. Address 24
Value at 0X2032 is: 0X4. Address 25
Value at 0X2034 is: 0X1. Address 26
Value at 0X2036 is: 0X2. Address 27
Value at 0X2038 is: 0X3. Address 28
Value at 0X203A is: 0X4. Address 29
Value at 0X203C is: 0X1. Address 30
Value at 0X203E is: 00. Address 31
Value at 0X2040 is: 00. Address 32
Value at 0X2042 is: 00. Address 33
Value at 0X2044 is: 00. Address 34
Value at 0X2046 is: 00. Address 35
Value at 0X2048 is: 0X1. Address 36
Value at 0X204A is: 0X2. Address 37
Value at 0X204C is: 0X3. Address 38
Value at 0X204E is: 0X4. Address 39
Value at 0X2050 is: 0X5. Address 40
Value at 0X2052 is: 00. Address 41
Value at 0X2054 is: 00. Address 42
Value at 0X2056 is: 00. Address 43
Value at 0X2058 is: 00. Address 44
Value at 0X205A is: 00. Address 45
Value at 0X205C is: 00. Address 46
Value at 0X205E is: 00. Address 47
Value at 0X2060 is: 00. Address 48
Value at 0X2062 is: 00. Address 49
Value at 0X2064 is: 00. Address 50
Value at 0X2066 is: 00. Address 51
Value at 0X2068 is: 00. Address 52
Value at 0X206A is: 00. Address 53
Value at 0X206C is: 00. Address 54
Value at 0X206E is: 00. Address 55
Value at 0X2070 is: 00. Address 56
Value at 0X2072 is: 00. Address 57
Value at 0X2074 is: 00. Address 58
Value at 0X2076 is: 00. Address 59
Value at 0X2078 is: 00. Address 60
Value at 0X207A is: 00. Address 61
Value at 0X207C is: 00. Address 62
Value at 0X207E is: 00. Address 63
Value at 0X2080 is: 00. Address 64
Value at 0X2082 is: 00. Address 65
Value at 0X2084 is: 00. Address 66
Value at 0X2086 is: 00. Address 67
Value at 0X2088 is: 00. Address 68
Value at 0X208A is: 00. Address 69
如您所见,
Value at 0X2050 is: 0X5. Address 40
意味着YMODEND
不起作用,我不知道为什么
我已经尝试了许多
MODCON
的同伴,但对于 YMODEND
的不同 wx 寄存器也不起作用。我已经没有办法尝试了,数据表在这里:data_sheet
BR
有需要的学生项目
我在 michrochip 上获得了帮助,事实证明你只能在 Y 数据内存中使用“dsp”“mac-class”指令,所以这里有一些有效的代码
.global _modulo_addressing_3
_modulo_addressing_3:
mov #0x7002,w0
mov w0,YMODSRT
mov #0x7006,w0
mov w0,YMODEND
mov #0x4fbf,w0
mov w0,MODCON
mov #0x7004,w11
mov #0x2000,w4
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
mov w5,[w4++]
clr A,[w11]+=2,W5
RETURN
代码是 dsoic33ch512mp508 的 asm
结果如下:
Value at 0X2000 is: 0XA60A. Address 0
Value at 0X2002 is: 0X98D5. Address 1
Value at 0X2004 is: 0X30CB. Address 2
Value at 0X2006 is: 0XA60A. Address 3
Value at 0X2008 is: 0X98D5. Address 4
Value at 0X200A is: 0X30CB. Address 5
Value at 0X200C is: 0XA60A. Address 6
Value at 0X200E is: 0X98D5. Address 7
Value at 0X2010 is: 0X30CB. Address 8
Value at 0X2012 is: 0XA60A. Address 9
Value at 0X2014 is: 0X98D5. Address 10
Value at 0X2016 is: 0X30CB. Address 11