代码里有_cmpyr1(c, 0x80000000), 从实际结果看, c实部/虚部都乘上了-1.
0x8000为什么是-1呢, Q15的话, -1应该是0xffff吧?
和cmpyr有什么区别呢? cmpyr小1/2 ?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
见CPU and instruction set reference guide的描述
cmpyr1
sat((lsb16(src1) × msb16(src2)) + (msb16(src1) × lsb16(src2))) → tmp_e
msb16(sat((tmp_e + 00004000h) << 1)) → lsb16(dst)
sat((msb16(src1) × msb16(src2)) - (lsb16(src1) × lsb16(src2))) → tmp_o
msb16(sat((tmp_e + 00004000h) << 1)) → msb16(dst)
cmpyr
sat((lsb16(src1) × msb16(src2)) + (msb16(src1) × lsb16(src2))) → tmp_e
msb16(sat(tmp_e + 00008000h)) → lsb16(dst)
sat((msb16(src1) × msb16(src2)) - (lsb16(src1) × lsb16(src2))) → tmp_o
msb16(sat(tmp_o + 00008000h)) → msb16(dst)
以c=0x00010002, IQ实部虚部是(1,2).
_cmpyr1(0x00010002, 0x80000000)为例,
cmpyr1
sat((lsb16(src1) × msb16(src2)) + (msb16(src1) × lsb16(src2))) → tmp_e : 0x10000
msb16(sat((tmp_e + 00004000h) << 1)) → lsb16(dst) : 0x0002
sat((msb16(src1) × msb16(src2)) - (lsb16(src1) × lsb16(src2))) → tmp_o : 0x8000
msb16(sat((tmp_e + 00004000h) << 1)) → msb16(dst) : 0x0001
这样结果没变啊?但我从内部打印上看,结果应该变成(-1,-2)