Assembly ARM组件中声音延迟的实现

Assembly ARM组件中声音延迟的实现,assembly,arm,Assembly,Arm,我只是在学习ARM组装,我不确定我的代码是否正确。该代码应该实现声音延迟 我已经按照下面的说明操作,但我不知道我的代码是否有任何错误 初始化缓冲区'buf'(初始化时,寄存器将指向缓冲区的第一个元素) 将缓冲区大小存储在一个寄存器中 您必须确保将输入值存储在正确的位置,因此比较索引r0和缓冲寄存器(比如r1) 如果索引r0小于r1,则将其设为r1(即数组中的第一个元素) 使用r1添加缓冲区大小(现在r1是数组的最后一个元素) 再次比较r0和r1,如果r0大于r1,则将其初始化为“buf” 之后,

我只是在学习ARM组装,我不确定我的代码是否正确。该代码应该实现声音延迟

我已经按照下面的说明操作,但我不知道我的代码是否有任何错误

  • 初始化缓冲区'buf'(初始化时,寄存器将指向缓冲区的第一个元素)
  • 将缓冲区大小存储在一个寄存器中
  • 您必须确保将输入值存储在正确的位置,因此比较索引r0和缓冲寄存器(比如r1)
  • 如果索引r0小于r1,则将其设为r1(即数组中的第一个元素)
  • 使用r1添加缓冲区大小(现在r1是数组的最后一个元素)
  • 再次比较r0和r1,如果r0大于r1,则将其初始化为“buf”
  • 之后,将ADC值加载到r0,然后将其存储在DAC中
  • 由于每个样本取2个存储单元,请确保将索引增加2(STRH r0,[r1],#2)
  • 。设置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