【发布时间】:2018-07-10 13:01:20
【问题描述】:
我想通过其 I2S 外设在 24 位模式下使用 DMA 从 STM32 (Cortex M4) 设备发送数据,MSB 在前。 然而,I2S 数据寄存器只有 16 位,根据数据表,您必须先发送高半字,然后再发送低半字。 这在使用 DMA 时是有问题的,它总是先发送低半字。
在 c 或 ARM 汇编程序中切换两个半字的有效方法是什么?
【问题讨论】:
-
你目前的低效方式是什么?
-
w = (w<<8)|(w>>8),相信你的编译器。 -
你能用 REV / REV16 指令预处理你的数据吗?您确定您的 DMA 不支持字节顺序交换吗?
-
你可能是想说:w = (w>16) ?
-
@iBug 使用英特尔术语时您是对的。但是,OP 使用的是 RISC 术语,其中一个字是 32 位,一个半字是 16 位。