Tob*_*obi 2 c assembly arm spi stm32
我想通过其I2S外设从STM32(Cortex M4)设备发送数据,使用24位模式的DMA,MSB优先.然而,I2S数据寄存器只有16位,根据数据表,您必须首先发送上半字,然后是下半字.这在使用DMA时会出现问题,它将始终首先发送下半字.
在c或ARM-assembler中切换两个半字的有效方法是什么?
fuz*_*fuz 8
写出常用的习语
unsigned w; w = w << 16 | w >> 16;
优化编译器通常将其转换为单个ror或rev16指令.期望编译器进行此优化是合理的.确保它w是无符号的,因此右移是无符号的.
ror
rev16
w
如果编译器没有优化它,它仍然只是两个指令(一个移位和一个或一个移位的操作数),因此不会丢失太多性能.
归档时间:
8 年 前
查看次数:
446 次
最近记录: