可能我说的还不够清楚,是这样的:
用STM32驱动AD904E(一款14位并行式DAC,即送数到IO口即可得到模拟量),
时序方法是
时钟线低电平->内存取数->送数到IO口->时钟线高电平
我用库函数编写驱动,数据更新率做到1.3MBaud左右
昨晚用汇编编写,可能不是一条指令一个时钟周期,才能做到3.2MBaud左右
附上代码,求大神优化建议(如能否使用DMA、半字能否提高速度、Thumb指令能否提高速度等),非常感谢!GPIOA_ODR EQU 0X4001080C
;GPIOA输出,偏移地址0Ch
GPIOB_ODR EQU 0X40010C0C
;GPIOB输出,偏移地址0Ch
HIGH EQU 0XFFFFFFFF
;时钟线高电平
LOW EQU 0X00000000
;时钟线低电平
AREA TEST,CODE,READONLY
EXPORT run
run LDR R6,=GPIOA_ODR
LDR R7,=GPIOB_ODR
LDR R8,=HIGH
LDR R9,=LOW
LDR R10,=datatable
ADD R11,R10,#8;4*2=8
MOV R5,R10
loop STR R9,[R7]
LDR R12,[R10],#4
STR R12,[R6]
STR R8,[R7]
CMP R10,R11
MOVEQ R10,R5
B loop
NOP
datatable DCD 0x00000000,0xFFFFFFFF
NOP
NOP
END
|