打印
[demo程序]

提高时钟1倍速度的汇编例子

[复制链接]
1476|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
__ASM void outdac2(int16 n)
{
        PUSH  {r4,lr}
        MOVS  r1,#0x80
LSLS  R1,R1,#8
LSLS  r0,r0,#16
MOVS  r4,#0x1F      //;DA_CLK_HIGN
LSLS  r4,r4,#27
LOOP05
MOVS  r3,#0x20
STR   r3,[r4,#0x04] //;DA_CLK_HIGH
LSLS  r0,r0,#1
BCC  LOOP10     //;0=SKIP
MOVS  r3,#0x02
STR   r3,[r4,#0x04] //;DA_DAT_HIGH;
B LOOP20
LOOP10
MOVS  r3,#0x02
STR   r3,[r4,#0x08] //;DA_DAT_LOW;
LOOP20
MOVS r3,#0x20
STR  r3,[r4,#0x08]  //;DA_CLK_LOW;
LSRS R1,R1,#1
BCC LOOP05
STR  r3,[r4,#0x04]  //;DA_CLK_HIGH;
POP  {r4,pc}
}

发完16bit,用了6.23us,时钟速度提高一倍,感谢QQ群里用户:2008不服不行

QQ图片20170525202523.png (23.04 KB )

QQ图片20170525202523.png

相关帖子

沙发
戈卫东| | 2017-5-26 01:17 | 只看该作者
完全没有看懂。
要是NV的程序都要这样写那就要扔了。

使用特权

评论回复
板凳
戈卫东| | 2017-5-26 01:23 | 只看该作者
用C会慢很多么?

使用特权

评论回复
地板
戈卫东| | 2017-5-26 01:25 | 只看该作者
R4=0xf8000000, 这是什么地址?

使用特权

评论回复
5
yjmwxwx| | 2017-5-29 22:40 | 只看该作者
看不懂啊,这个是干什么的,这个不用定时器准么?

看了下手册分析下不知道对不对





函数1:
            PA5高
            R0左移1位
            没进位执行函数2

           PA1高
           跳到函数3
函数2:
            PA1低
函数3:
           PA5低
          R1右移1位
          没进位执行函数1

          PA5高





      PUSH  {r4,lr}                                    R4和LR放到堆栈
        MOVS  r1,#0x80                                 R1 = 0X80
LSLS  R1,R1,#8                                         R1 = 0X8000
LSLS  r0,r0,#16                                         int16 n左移16位
MOVS  r4,#0x1F      //;DA_CLK_HIGN                       R4 = 0X1F
LSLS  r4,r4,#27                                           R4 = 0XF8000000 FGPIOA_PDOR

LOOP05                                                     LOOP05 GPIOA5输出高
MOVS  r3,#0x20                                            R3 = 0X20 GPIOA5
STR   r3,[r4,#0x04] //;DA_CLK_HIGH                        GPIO5输出高
LSLS  r0,r0,#1                                            R0左移1位
BCC  LOOP10     //;0=SKIP                                 未进位跳转LOOP10

MOVS  r3,#0x02                                                  R3 = 0X02 GPIOA1
STR   r3,[r4,#0x04] //;DA_DAT_HIGH;                       GPIOA1输出高
B LOOP20                                                   跳转到LOOP20

                                                               
LOOP10                                                         GPIOA1低
MOVS  r3,#0x02
STR   r3,[r4,#0x08] //;DA_DAT_LOW;                        GPIOA1输出低


LOOP20                                                     LOOP20  GPIOA5低
MOVS r3,#0x20                                               GPIOA5
STR  r3,[r4,#0x08]  //;DA_CLK_LOW;                           GPIOA5输出低
LSRS R1,R1,#1                                                  R1右移1位
BCC LOOP05                                                     未进位跳转LOOP05

STR  r3,[r4,#0x04]  //;DA_CLK_HIGH;                              GPIOA5高
POP  {r4,pc}  


使用特权

评论回复
6
poijhgvfcd| | 2017-5-30 19:35 | 只看该作者
ARM用汇编还是有点麻烦啊

使用特权

评论回复
7
shifeng88| | 2017-9-4 21:44 | 只看该作者
ARM用汇编,是用在航天事业吧!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

125

帖子

3

粉丝