No.99338 作者:liming316 邮件:forzhouyang@163.com ID:61985 登陆:5次 文章数:5篇 最后登陆IP:222.244.37.91 最后登陆:2007/3/12 11:07:30 注册:2006/10/26 16:23:33 财富:120 发帖时间:2006/11/6 11:24:54 发贴者IP:220.168.126.18 标题:liming316:硬件驱动程序,用汇编写的 摘要:No.99338硬件驱动程序,用汇编写的 最近做一个硬件驱动程序,用汇编写的。 是驱动音频输出的,原理是将存好的音频输入信号,通过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 ......
>>返回讨论的主题
|