各位专家、您好!
您能告诉我如何使用 MSP430F5x 上的 DMA 将数据传输到20位地址吗?
我能够向 DMAxSA 和 DMAxDA 写入0x14000和0x14020、但数据传输不正确。
[查看详细信息]
我在以下环境中进行了一些与原始线程相关的实验。
- MSP430F5529-LP
- MSP430F55xx_DMA_01.c
- CCS:v10.4.0
- 编译器:20.2.5.LTS
| 图形 | 1 | 2. | 3. |
| .c | __data20_write_long ((uintptr_t)&DMA0SA、(uintptr_t) 0x14000); __data20_write_long ((uintptr_t)&DMA0DA、(uintptr_t) 0x14020); |
__data20_write_long ((unsigned long)&DMA0SA、(unsigned long) 0x14000); __data20_write_long ((unsigned long)&DMA0DA、(unsigned long) 0x14020); |
__data16_write_addr ((uintptr_t)&DMA0SA、(uintptr_t) 0x14000); __data16_write_addr ((uintptr_t)&DMA0DA、(uintptr_t) 0x14020); |
| .asm | MOVX.A #DMA0SA+0、R15 MOV.W #7168、0 (R15) MOV.W #0、2 (R15) MOVX.A #DMA0DA+0、R15 MOV.W #7200、0 (R15) MOV.W #0、2 (R15) |
MOVX.A #DMA0SA+0、R15 MOV.W #16384、0 (R15) MOV.W #1、2 (R15) MOVX.A #DMA0DA+0、R15 MOV.W #16416、0 (R15) MOV.W #1、2 (R15) |
MOV.W #DMA0SA+0、R15 MOVX.A #0x140000 (R15) MOV.W #DMA0DA+0、R15 MOVX.A #0x14020、0 (R15) |
| 结果 |
DMA0SA=0x04000 |
DMA0SA=0x04000 DMA0DA=0x04020 |
DMA0SA=0x14000 DMA0DA=0x14020 |
唯一正确的寄存器设置是 pattern3。 但是、0x14000处的数据不会传输到0x14020。 另外、令人困惑的是、pattern1和2输出"MOVX.A"在.asm 文件中检查时、但在 Disassembly 中检查时、输出变为"MOVA"。
如果您能指出设置或描述中的任何错误、我将不胜感激。
此致、
还不错