导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→硬件驱动程序,用汇编写的[liming316]

 *第44230篇: 硬件驱动程序,用汇编写的

  
楼 主:liming316 2006年11月6日11:24
 硬件驱动程序,用汇编写的
最近做一个硬件驱动程序,用汇编写的。
是驱动音频输出的,原理是将存好的音频输入信号,通过da和放大器由喇叭放出去
单片机芯片用的是lssp,此芯片才出现在市场上,因为可以同时执行32道程序进行多道控制,
特别适合我们目前的应用,所以选用了此芯片,它的指令集也比较完备好用。

音频线路da以后的部分都是硬件实现,软件上只需要通过lssp控制
da芯片的输入即可,da芯片我们选用的是tlc5618,是spi接口,
spi协议是cs为高时,每个clk下沿出一位数据,这款5618的数据位数是12位。

lssp具有16个gpio口,每个口都可以进行配置成输入或输出。
现在我将0号io口接到cs,1号接到clk,2号接到data。
地址3FEF是io使能寄存器地址,3FF0是gpio输出寄存器地址。

因为可能会有其他程序控制其他gpio端口,所以要先读取所有值,与当前值或后在写入。
现在实现的只是一个12位数据的输出,可以加入循环进行连续输出。
此程序实现的是双声道的控制。

汇编程序如下:


 MOV R0,#0X0
     MOV      R1,#0X3FEF             ;GPIO[7:0]赋能位
     MOVO     @R1,#0X7            ;设置GPIO[2:0]输出enable

     MOV      R2,#0X3FF0           ;设置GPIO[7:0]访问地址
     MOVO     @R2,#0X1           ;GPIO[2:0]输出high电平

     
PLAY:    
 
WRITE_BUFFER:
     ;write to double buffer
      NOP     3   
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X0
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X0
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X0
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X6
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X4
     MOVO    @R2,R8            


 MOV R14,#12

 MOV R9,#0X200
DATA_B:
     AND R10,R13,R9
 JCEQ R10,R0,LOW_B
     NOP     3
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X6
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X4
     MOVO    @R2,R8            

 JMPI OVER_B
LOW_B:
     NOP     3
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X0
     MOVO    @R2,R8            

OVER_B:
 RS R9
 SUB R14,R14,#1
 JCNE R14,R0,DATA_B
 
     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP 3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X3
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X1
     MOVO    @R2,R8            

 

WRITE_A:

     ;write to a and update b
      NOP     3   
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X6
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X4
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X0
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X0
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X0
     MOVO    @R2,R8            


 MOV R14,#12

 MOV R9,#0X200
DATA_A:
     AND R10,R13,R9
 JCEQ R10,R0,LOW_A
     NOP     3
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X6
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X4
     MOVO    @R2,R8            

 JMPI OVER_A
LOW_A:
     NOP     3
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X0
     MOVO    @R2,R8            

OVER_A:
 RS R9
 SUB R14,R14,#1
 JCNE R14,R0,DATA_A
 

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X2
     MOVO    @R2,R8            

     NOP 3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X3
     MOVO    @R2,R8            

     NOP     3  
     MOVI R8,@R2
     AND R8,R8,#0XFFF8
 OR R8,R8,0X1
     MOVO    @R2,R8            

 
     NOP     3 
     


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:CY62256和其他62256管脚不兼容,怎么办?

[下一篇主题]:寻一起学习做项目的朋友!!!