Assembly ARM组件中声音延迟的实现
我只是在学习ARM组装,我不确定我的代码是否正确。该代码应该实现声音延迟 我已经按照下面的说明操作,但我不知道我的代码是否有任何错误Assembly ARM组件中声音延迟的实现,assembly,arm,Assembly,Arm,我只是在学习ARM组装,我不确定我的代码是否正确。该代码应该实现声音延迟 我已经按照下面的说明操作,但我不知道我的代码是否有任何错误 初始化缓冲区'buf'(初始化时,寄存器将指向缓冲区的第一个元素) 将缓冲区大小存储在一个寄存器中 您必须确保将输入值存储在正确的位置,因此比较索引r0和缓冲寄存器(比如r1) 如果索引r0小于r1,则将其设为r1(即数组中的第一个元素) 使用r1添加缓冲区大小(现在r1是数组的最后一个元素) 再次比较r0和r1,如果r0大于r1,则将其初始化为“buf” 之后,
。设置AD0GDR,0xE0034004
.设置DACR,0xE006C000
.布弗伦集,10000
.bss
巴利格先生2
buf:.跳过(2*BUFLEN);/'buf'初始化
.数据
巴利格先生2
.跳过2
.文本
/**
*无效延迟_音频();
*/
.文本
巴利格先生4
.global delay_audio
延迟音频:
LDR r2,=0xE0034004
LDR r3,=0xE006C000
LDR r1,=buf//在一个寄存器中存储buf的大小
CMP r0、r1//Comapre索引ro和buf寄存器
LDRLT r0,[r1,#0]//如果是(r0r1),那么r1将被初始化为buf
LDRH r0,[r2]//从ADC加载到r0(r0是索引)
STRH r0,[r3]//在DAC中存储相同的半个字
STRH r0,[r1],#2//增加索引2
bx-lr//返回
.完
注意任何更改您发布的问题的编辑,以格式化形式显示代码。这有助于提高代码的可读性。“我不确定我的代码是否正确”。你试过运行它吗?发生什么事了?代码已经编译好了,但我不确定是否有错误。也许延迟太快了,我听不见
.set AD0GDR, 0xE0034004
.set DACR, 0xE006C000
.set BUFLEN,10000
.bss
.balign 2
buf:.skip( 2 * BUFLEN); //'buf' intialized
.data
.balign 2
.skip 2
.text
/**
* void delay_audio();
*/
.text
.balign 4
.global delay_audio
delay_audio:
LDR r2, =0xE0034004
LDR r3, =0xE006C000
LDR r1,=buf //Store size of buf in one register
CMP r0,r1 //Comapre Index ro and buf register
LDRLT r0,[r1 , #0] //if(r0<r1) then r1 is the first element in the array
LDRLT r0,[r1] //add size of buf with r1, so r1 will become the last element
CMP r0,r1 //Compare again
LDRGT r0,=buf //if(r0>r1) then r1 will be initialized to buf
LDRH r0,[r2] //load from ADC to r0( r0 is index)
STRH r0,[r3] //Store the same half word in DAC
STRH r0,[r1],#2 //increment index by 2
bx lr // return
.end